unit uCtrlKmenZbozi;

interface
{$I 'GlobalDefs.inc'}

uses
  mvcframework,
  mvcframework.Commons,
  mvcframework.Serializer.Commons,
  MVCFramework.Controllers.Register,
  MVCFramework.Logger,
  uCtrlBase,
  uHeoObj_Base,
  MVCFramework.Swagger.Commons
  ;

const
{$I globalConsts.inc}

type
  [MVCPath('/skupinakaret')]
  TSkupinaZboziController = class(TBaseController)
  public
    [MVCPath('/meta')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Skupina karet', 'Vraci metadata skupiny karet', 'SkupZboGetMeta')]
    procedure GetMeta;

    [MVCPath('/($id)')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Skupina karet', 'Vrací data skupiny karet dle jejího kódu')]
    [MVCSwagParam(plPath, 'id', 'ID skupiny karet', ptString, true)]
    procedure GetByID (id: string='';
                       [MVCFromQueryString('sk', '')] sk: string='';
                       [MVCFromQueryString('nazev', '')] nazev: string=''
                      );

    [MVCPath('')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Skupina karet', 'Vraci všechny skupiny karet', 'SkupZboGetAll')]
    [MVCSwagParam(plQuery, 'sk', 'Skupina karet', ptString, false)]
    [MVCSwagParam(plQuery, 'nazev', 'Název skupiny karet (použit operátor "obsahuje")', ptString, false)]
    procedure GetAll ( [MVCFromQueryString('sk', '')] sk: string='';
                       [MVCFromQueryString('nazev', '')] nazev: string=''
                     );

  end;





  [MVCPath('/kmenzbozi')]
  TKmenZboziController = class(TBaseController)
  public
    [MVCPath('/meta')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Kmen zboží', 'Vraci metadata kmenové karty', 'KmenZboziGetMeta')]
    procedure GetMeta;

    [MVCPath('/($id)/prepocetmj')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Kmen zboží', 'Vrati tabulku prepoctu MJ dane kmenove karty dle ID', 'KmenZboziGetPrepocetMJ')]
    [MVCSwagParam(plPath, 'id', 'ID kmenové karty', ptString, false)]
    [MVCSwagResponses(200, 'Success', TPrepocetMJ, true)]
    procedure GetPrepocetMJ(id: string='0');

    [MVCPath('/($id)/dokumenty')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Kmen zboží', 'Vrátí seznam dokumentů k dané kmenové kartě', 'KmenZboziGetDokumenty')]
    [MVCSwagParam(plPath, 'id', 'ID kmenové karty', ptString, false)]
    [MVCSwagParam(plQuery, 'jenseznam', '1 = jen seznam (bez obsahu dokumentu)', ptString, false, '1')]
    [MVCSwagParam(plQuery, 'pripona', 'Připona souboru dokumentu', ptString, false)]
    [MVCSwagParam(plQuery, 'prednastaveny', 'Pokud má parametr hodnotu 1, zobrazí se jen dokumenty přednastavené pro API (TabDokumenty_EXT._DokladProAPI=1)', ptString, false, '')]
    [MVCSwagParam(plQuery, 'base64', 'Obsah dokumentu vrátit v kódování BASE64', ptString, false, '0')]
    [MVCSwagParam(plQuery, 'iddokstrom', 'ID stromové struktury dokumetu', ptString, false)]
    [MVCSwagParam(plQuery, 'iddoktyp', 'ID typu dokumetu', ptString, false)]
    procedure GetDokumenty (id: string='0';
                            [MVCFromQueryString('jenseznam', '')] jenSeznam: string='1';
                            [MVCFromQueryString('pripona', '')] pripona: string='';
                            [MVCFromQueryString('prednastaveny', '')] prednastaveny: string='';
                            [MVCFromQueryString('base64', '')] base64: string='0';
                            [MVCFromQueryString('iddokstrom', '')] idDokStrom: string='';
                            [MVCFromQueryString('iddoktyp', '')] idDokTyp: string=''
                           );

    [MVCPath('/($id)')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Kmen zboží', 'Vrací data kmenové karty dle jejího ID'), 'KmenZboziGetByID']
    [MVCSwagParam(plPath, 'id', 'ID kmenové karty', ptString, false)]
    [MVCSwagParam(plQuery, 'sk', 'Skupina karet (použit operátor "začíná na")', ptString, false)]
    [MVCSwagParam(plQuery, 'rc', 'Registrační číslo (operátor "začíná na")', ptString, false)]
    [MVCSwagParam(plQuery, 'barcode', 'Čárový kod', ptString, false)]
    [MVCSwagParam(plQuery, 'nazev1', 'Název 1 (operátor "obsahuje")', ptString, false)]
    [MVCSwagParam(plQuery, 'cislozbozi', 'Číslo zboží (tj. skupina + registrační číslo) (operátor "začíná na")', ptString, false)]
    [MVCSwagResponses(200, 'Success', TKmenZbozi, false)]
    procedure GetByID (id: string='0';
                       [MVCFromQueryString('sk', '')] sk: string='';
                       [MVCFromQueryString('rc', '')] rc: string='';
                       [MVCFromQueryString('barcode', '')] barcode: string='';
                       [MVCFromQueryString('cislozbozi', '')] cisZbo: string='';
                       [MVCFromQueryString('nazev1', '')] nazev1: string=''
                      );

    [MVCPath('')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('Kmen zboží', 'Vraci všechny kmenové karty', 'KmenZboziGetAll')]
    [MVCSwagParam(plQuery, 'sk', 'Skupina karet (použit operátor "začíná na")', ptString, false)]
    [MVCSwagParam(plQuery, 'rc', 'Registrační číslo (operátor "začíná na")', ptString, false)]
    [MVCSwagParam(plQuery, 'barcode', 'Čárový kod', ptString, false)]
    [MVCSwagParam(plQuery, 'nazev1', 'Název 1 (operátor "obsahuje")', ptString, false)]
    [MVCSwagResponses(200, 'Success', TKmenZbozi, true)]
    procedure GetAll ( [MVCFromQueryString('sk', '')] sk: string='';
                       [MVCFromQueryString('rc', '')] rc: string='';
                       [MVCFromQueryString('barcode', '')] barcode: string='';
                       [MVCFromQueryString('nazev1', '')] nazev1: string=''
                     );

  end;

implementation

uses
  uSvc_Base,
  uCommons,
  QUick.Logger,
  mvcframework.Serializer.Intf,
  System.Generics.Collections,
  System.RegularExpressions,
  System.StrUtils,
  System.SysUtils;





{ TSkupinaZboziController }

 procedure TSkupinaZboziController.GetMeta;
  begin
    try
      Render(ObjectDict().Add('data', GetSkupinaZboziService.GetMeta));
     except
{$IFDEF NORENDER400}
      RenderStatusMessage (200);
{$ELSE}
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
{$ENDIF}
    end;
  end;



 procedure TSkupinaZboziController.GetAll (sk: string=''; nazev: string='');
  begin
   sk:= sanitizeSQLString(sk);
   nazev:= sanitizeSQLString(nazev);
   GetByID ('', sk, nazev);
  end;



 procedure TSkupinaZboziController.GetByID (id: string = ''; sk: string=''; nazev: string = '');
  var iId: integer;
      params: TDictionary<string, string>;
  begin
   params:= TDictionary<string, string>.Create;

   iId:= 0;
   id:= sanitizeSQLString(id);
   if not(TryStrToInt(id, iId)) then
    iId:= 0;
   if (iId>0) then
    params.Add('id', iId.ToString);

   sk:= sanitizeSQLString(sk);
   if (sk<>'') then
    params.Add('sz', sk);

   nazev:= sanitizeSQLString(nazev);
   if (nazev<>'') then
    params.Add('nazev', nazev);


   if (params.Count>0) then
     try
       Render(ObjectDict().Add('data', GetSkupinaZboziService.GetByParams(params))); // viz uSvc_KmenZbozi.pas
      except
{$IFDEF NORENDER400}
       RenderStatusMessage (200);
{$ELSE}
       on E: EServiceException do
        begin
         raise EMVCException.Create('Chyba hledání SK', E.Message, 0, 200);
        end
       else
         raise;
{$ENDIF}
     end
    else
{$IFDEF NORENDER400}
     RenderStatusMessage (200, 'Chyba hledání SK');
{$ELSE}
     raise EMVCException.Create('Chyba hledání SK', 'Pro hledání skupiny karet nebyl zadán žádný atribut', 0, 200);
{$ENDIF}

   params.Free;
  end;






{ TKmenZboziController }

{
 procedure TKmenZboziController.GetAll;
  begin
   Render(
      ObjectDict().Add('data', GetKmenZboziService.GetAll)  // viz uSvc_KmenZbozi.pas
   );
  end;
}


 procedure TKmenZboziController.GetPrepocetMJ (id: string = '0');
  var iId: integer;
  begin
   id:= sanitizeSQLString(id);
   if not(TryStrToInt(id, iId)) then
    iId:= 0;

   if (iId>0) then
     begin
      try
        Render(ObjectDict().Add('data', GetKmenZboziService.GetPrepocetMJ(iId))); // viz uSvc_KmenZbozi.pas
       except
{$IFDEF NORENDER400}
        RenderStatusMessage (200);
{$ELSE}
        on E: EServiceException do
         begin
          raise EMVCException.Create(E.Message, '', 0, 200);
         end
        else
          raise;
{$ENDIF}
      end;
     end
    else
{$IFDEF NORENDER400}
     RenderStatusMessage (200, 'Nemám ID kmenové karty');
{$ELSE}
     raise EMVCException.Create('Nemám ID kmenové karty', '', 0, 200);
{$ENDIF}
  end;




 procedure TKmenZboziController.GetDokumenty (id: string = '0'; jenSeznam: string='1'; pripona: string=''; prednastaveny: string=''; base64: string='0';
                                              idDokStrom: string=''; idDokTyp: string='');
  var iId: integer;
      i1, i2: integer;
      params: TDictionary<string, string>;
  begin

   params:= TDictionary<string, string>.Create;

   iId:= 0;
   id:= sanitizeSQLString(id);
   if (id<>'') then
    if not(TryStrToInt(id, iId)) then
     iId:= 0;

   params.Add('vazba_ident', '8');
   if (iId>0) then
    params.Add('vazba_idtab', iId.ToString);

   pripona:= sanitizeSQLString(pripona);
   if (pripona<>'') then
    params.Add('pripona', pripona);

   jenSeznam:= sanitizeSQLString(jenSeznam);
   if (jenSeznam='1') or (jenSeznam='0') then
    params.Add('jenHlavicka', jenSeznam);

   prednastaveny:= sanitizeSQLString(prednastaveny);
   if (prednastaveny='0') or (prednastaveny='1') then
    params.Add('prednastaveny', prednastaveny);

   base64:= sanitizeSQLString(base64);
   if (base64='1') then
    params.Add('base64', '1');

   i1:= 0;
   idDokStrom:= sanitizeSQLString(idDokStrom);
   if not(TryStrToInt(idDokStrom, i1)) then
    i1:= 0;
   if (i1>0) then
    params.Add('iddokstrom', i1.ToString);

   i2:= 0;
   idDokTyp:= sanitizeSQLString(idDokTyp);
   if not(TryStrToInt(idDokTyp, i2)) then
    i2:= 0;
   if (i2>0) then
    params.Add('iddoktyp', i2.ToString);


   try
//     Log.Debug('GetDokumenty start', 'uCtrlKmen_GetDokumenty');
     Render(ObjectDict().Add('data', GetDokumentService.GetByParams (params)));
//     Log.Debug('GetDokumenty konec', 'uCtrlKmen_GetDokumenty');
    except
{$IFDEF NORENDER400}
     RenderStatusMessage (200);
{$ELSE}
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 200);
      end
     else
       raise;
{$ENDIF}
   end;

   params.Free;
  end;




 procedure TKmenZboziController.GetByID (id: string='0'; sk: string=''; rc: string=''; barcode: string=''; cisZbo: string=''; nazev1: string='');
  var iId: integer;
      typ: byte;
      params: TDictionary<string, string>;
  begin
   params:= TDictionary<string, string>.Create;

   id:= sanitizeSQLString(id);
   if not(TryStrToInt(id, iId)) then
    iId:= 0;
   if (iId>0) then
    params.Add('id', iId.ToString);

   sk:= sanitizeSQLString(sk);
   if (sk<>'') then
    params.Add('sz', sk);

   rc:= sanitizeSQLString(rc);
   if (rc<>'') then
    params.Add('rc', rc);

   barcode:= sanitizeSQLString(barcode);
   if (barcode<>'') then
    params.Add('barcode', barcode);

   cisZbo:= sanitizeSQLString(cisZbo);
   if (cisZbo<>'') then
    params.Add('cisloZbozi', cisZbo);

   nazev1:= sanitizeSQLString(nazev1);
   if (nazev1<>'') then
    params.Add('nazev1', nazev1);


   try
     Render(ObjectDict().Add('data', GetKmenZboziService.GetByParams (params))); // viz uSvc_KmenZbozi.pas
    except
{$IFDEF NORENDER400}
     RenderStatusMessage (200);
{$ELSE}
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 200);
      end
     else
       raise;
{$ENDIF}
   end;

   params.Free;
  end;



 procedure TKmenZboziController.GetAll (sk: string=''; rc: string=''; barcode: string=''; nazev1: string='');
  begin
   sk:= sanitizeSQLString(sk);
   rc:= sanitizeSQLString(rc);
   barcode:= sanitizeSQLString(barcode);
   nazev1:= sanitizeSQLString(nazev1);
   GetByID ('', sk, rc, barcode, nazev1);
  end;



 procedure TKmenZboziController.GetMeta;
  begin
    try
      Render(ObjectDict().Add('data', GetKmenZboziService.GetMeta));
     except
{$IFDEF NORENDER400}
      RenderStatusMessage (200);
{$ELSE}
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
{$ENDIF}
    end;
  end;



//initialization
// TControllersRegister.Instance.RegisterController(TKmenZboziController, 'HDCApiService');


end.
