Changeset 4 for trunk/UOdorikApi.pas


Ignore:
Timestamp:
Aug 24, 2019, 12:56:52 PM (5 years ago)
Author:
chronos
Message:
  • Modified: Moved call history loading to API class.
Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:ignore
      •  

        old new  
        33__recovery
        44__history
         5OdorikApi.dproj.local
  • trunk/UOdorikApi.pas

    r3 r4  
    44
    55uses
    6   System.SysUtils, System.Types, System.Classes, IdHTTP
     6  System.SysUtils, System.Types, System.Classes, Generics.Collections, IdHTTP
    77  {$IFDEF ANDROID},IdSSLOpenSSLHeaders{$endif}, IdIOHandler, IdIOHandlerSocket,
    8   IdIOHandlerStack, IdSSL, IdSSLOpenSSL;
     8  IdIOHandlerStack, IdSSL, IdSSLOpenSSL, System.DateUtils, System.TimeSpan,
     9  System.JSON;
    910
    1011type
     12  TCall = class
     13    Oid: Integer;
     14    RedirectionParentId: Integer;
     15    Date: TDateTime;
     16    Direction: string;
     17    SourceNumber: string;
     18    DestinatioNumber: string;
     19    DestinationName: string;
     20    Length: Integer;
     21    RingingLength: Integer;
     22    Status: string;
     23    Price: Currency;
     24    PricePerMinute: Currency;
     25    BalanceAfter: Currency;
     26    Line: Integer;
     27    Recording: string;
     28  end;
     29
    1130  TOdorikApi = class(TComponent)
    1231  private
     
    1736    Password: string;
    1837    ServerUrl: string;
    19     function GetCredit: Double;
     38    function GetCredit: Currency;
    2039    function SendGet(Path: string; Parameters: string = ''): string;
     40    function GetCallHistory(TimeFrom, TimeTo: TDateTime): TList<TCall>;
    2141    constructor Create(AOwner: TComponent); override;
    2242    destructor Destroy; override;
     
    5373end;
    5474
    55 function TOdorikApi.GetCredit: Double;
     75function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string;
     76const
     77  Neg: array[Boolean] of string = ('+', '-');
     78var
     79  Bias: Integer;
     80begin
     81  Result := FormatDateTime('yyyy''-''mm''-''dd''T''hh'':''nn'':''ss''.''zzz', Value); { Do not localize }
     82  Bias := Trunc(TTimeZone.Local.GetUtcOffset(Value).TotalMinutes);
     83  if (Bias <> 0) and ApplyLocalBias then
     84  begin
     85    Result := Format('%s%s%.2d:%.2d', [Result, Neg[Bias > 0],                         { Do not localize }
     86                                       Abs(Bias) div MinsPerHour,
     87                                       Abs(Bias) mod MinsPerHour]);
     88  end else
     89    Result := Result + 'Z'; { Do not localize }
     90end;
     91
     92function TOdorikApi.GetCallHistory(TimeFrom, TimeTo: TDateTime): TList<TCall>;
     93var
     94  Response: string;
     95  LJsonResponse: TJSONValue;
     96  jv: TJSONValue;
     97  joName: TJSONObject;
     98  Call: TCall;
     99begin
     100  Result := TList<TCall>.Create;
     101  Response := SendGet('/calls.json', 'from=' + DateTimeToXMLTime(TimeFrom) +
     102    '&to=' + DateTimeToXMLTime(TimeTo));
     103  LJsonResponse := TJSONObject.ParseJSONValue(Response);
     104  for jv in LJsonResponse as TJSONArray do begin
     105    joName := jv as TJSONObject;
     106    Call := TCall.Create;
     107    Call.SourceNumber := joName.Get('source_number').JSONValue.Value;
     108    Call.DestinatioNumber := joName.Get('destination_number').JSONValue.Value;
     109    Result.Add(Call);
     110  end;
     111end;
     112
     113function TOdorikApi.GetCredit: Currency;
    56114var
    57115  Response: string;
Note: See TracChangeset for help on using the changeset viewer.