unit uCtrlQMS;

interface
{$I 'GlobalDefs.inc'}

uses
  mvcframework,
  mvcframework.Commons,
  mvcframework.Serializer.Commons,
  uCtrlBase,
  uHeoObj_Base,
  uHeoObj_QMS
{$IFDEF SWAGGER}
  ,MVCFramework.Swagger.Commons
{$ENDIF}
  ;

const
{$I globalConsts.inc}

type
  [MVCPath('/qms')]
  TQMSObecneController = class(TBaseController)
  public
    [MVCPath('/ciselnik/stavmeridel')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Číselníky', 'Vrací číselník stavů měřidel', 'QMSCiselnikGetStavMeridel')]
    [MVCSwagResponses(200, 'Success', TQMSCiselnik, true)]
    procedure GetCiselnikStavMeridel; // ciselnik-1, IdQMS-0

    [MVCPath('/ciselnik/druhmeridel')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Číselníky', 'Vrací číselník druhů měřidel', 'QMSCiselnikGetDruhMeridel')]
    [MVCSwagResponses(200, 'Success', TQMSCiselnik, true)]
    procedure GetCiselnikDruhMeridel; // ciselnik-2, IdQMS-0

    [MVCPath('/ciselnik/kategoriemeridel')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Číselníky', 'Vrací číselník kategorií měřidel', 'QMSCiselnikGetKategorieMeridel')]
    [MVCSwagResponses(200, 'Success', TQMSCiselnik, true)]
    procedure GetCiselnikKategorieMeridel; // ciselnik-3, IdQMS-0

    [MVCPath('/ciselnik/stavyudrzby')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Číselníky', 'Vrací číselník stavů údržby strojů a zařízení', 'QMSCiselnikGetStavUdrzby')]
    [MVCSwagResponses(200, 'Success', TQMSCiselnik, true)]
    procedure GetCiselnikStavUdrzby; // ciselnik-1, IdQMS-1

    [MVCPath('/ciselnik/druhyudrzby')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Číselníky', 'Vrací číselník druhů údržby strojů a zařízení', 'QMSCiselnikGetDruhUdrzby')]
    [MVCSwagResponses(200, 'Success', TQMSCiselnik, true)]
    procedure GetCiselnikDruhUdrzby; // ciselnik-2, IdQMS-1

  end;


  [MVCPath('/udrzbastroju')]
  TQMSUdrzbaStrojuAZarizeniController = class(TBaseController)
  public
    [MVCPath('/meta')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Vraci metadata údržby strojů a zařízení', 'QMSUdrzbaGetMeta')]
    procedure GetMeta;

    [MVCPath('/hledej'), MVCHTTPMethod([httpPOST])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Hledá záznam údržby stroje či zařízení', 'QMSUdrzbaHledatUdrzbuStrojeAZarizeni')]
    [MVCConsumes(TMVCMediaType.APPLICATION_JSON)]
    [MVCSwagResponses(200, 'Success', TQMSUdrzbaStrojuAZarizeni, true)]
    procedure HledatUdrzbuStrojeAZarizeni;

    [MVCPath]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Vrací seznam všech údržeb strojů a zařízení', 'QMSUdrzbaGetAll')]
    [MVCSwagResponses(200, 'Success', TQMSUdrzbaStrojuAZarizeni, true)]
    procedure GetAll;

    [MVCPath]
    [MVCHTTPMethod([httpPOST])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Zápis hlavičky Údržby stroje či zařízení', 'QMSUdrzbaZapisUdrzbyStrojuAZarizeni')]
    [MVCConsumes(TMVCMediaType.APPLICATION_JSON)]
    procedure NovaUdrzbaStrojuAZarizeni (CTX: TWebContext);

    [MVCPath('/($id)')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Vrací detail údržeb strojů či zařízení', 'QMSUdrzbaGetByID')]
    [MVCSwagParam(plPath, 'id', 'ID zaznamu', ptString, false)]
    [MVCSwagParam(plQuery, 'utvar', 'Útvar/středisko', ptString, false)]
    [MVCSwagParam(plQuery, 'stav', 'Číslo stavu údržby, nikoliv id (viz /qms/ciselnik/stavyudrzby)', ptString, false)]
    [MVCSwagParam(plQuery, 'druh', 'Číslo druhu údržby, nikoliv id (viz /qms/ciselnik/druhyudrzby)', ptString, false)]
    [MVCSwagResponses(200, 'Success', TQMSUdrzbaStrojuAZarizeni, true)]
    procedure GetByID (id: string='0';
                       [MVCFromQueryString('utvar', '')] utvar: string='';
                       [MVCFromQueryString('stav', '')] stav: string='';
                       [MVCFromQueryString('druh', '')] druh: string=''
                      );

    [MVCPath('/($id)')]
    [MVCHTTPMethod([httpPUT])]
    [MVCSwagSummary('QMS - Údržba strojů a zařízení', 'Aktualizuje záznam údržby stroje či zařízení', 'QMSUdrzbaAktualizaceUdrzbyStrojuAZarizeni')]
    [MVCConsumes(TMVCMediaType.APPLICATION_JSON)]
    procedure AktualizaceUdrzbyStrojuAZarizeni (CTX: TWebContext; id: string='');

  end;



  [MVCPath('/qms/kontrolnipostup')]
//  [MVCPath('/kontrolnipostup')]
//  [MVCSwagSummary('KontrolniPostupy', 'Kontrolní postupy', '')]
  TQMSKontrolniPostupyController = class(TBaseController)
   public
    [MVCPath('/meta')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní postupy', 'Vrátí meta informace', 'QMSKontrolniPostupGetMeta')]
    procedure GetMeta;

    [MVCPath('/($id)')]
//    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní postupy', 'Vratí detail kontrolního postupu', 'QMSKontrolniPostupGetByID')]
    [MVCSwagParam(plPath, 'id', 'ID kontrolního postupu', ptString, false)]
    [MVCSwagParam(plQuery, 'idpostup', 'ID výrobního postupu', ptString, false)]
    [MVCSwagParam(plQuery, 'params', 'Zobrazit parametry', ptBoolean, false)]
    [MVCSwagParam(plQuery, 'paramsFull', 'Zobrazit parametry', ptBoolean, false)]
    [MVCSwagResponses(200, 'Success', TQMSKontrolniPostup)]
    procedure GetByID (id: string='0';
                       [MVCFromQueryString('idpostup', '')] sIdPostup: string='';
                       [MVCFromQueryString('params', false)] params: Boolean=false;
                       [MVCFromQueryString('paramsFull', false)] paramsFull: Boolean=false
                      );
    [MVCPath('')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní postupy', 'Vrátí seznam kontrolních postupů', 'QMSKontrolniPostupGetAll')]
    [MVCSwagResponses(200, 'Success', TQMSKontrolniPostup, true)]
    procedure GetAll;
  end;




  [MVCPath('/qms/kontrolniplan')]
//  [MVCPath('/kontrolniplan')]
//  [MVCDoc('QMS - kontrolní plány')]
  TQMSKontrolniPlanController = class(TBaseController)
   public
    [MVCPath('/meta')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní plán', 'Vrati meta informace', 'QMSKontrolniPlanGetMeta')]
    procedure GetMeta;

    [MVCPath('/($id)')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní plán', 'Vrati kontrolni plan', 'QMSKontrolniPlanGetByID')]
    [MVCSwagParam(plPath, 'id', 'ID kontrolního plánu', ptString, true)]
    [MVCSwagResponses(200, 'Success', TQMSKontrolniPlan, false)]
    procedure GetByID (id: string='0');

    [MVCPath('')]
    [MVCHTTPMethod([httpGET])]
    [MVCSwagSummary('QMS - kontrolní plán', 'Vrati seznam kontrolnich planu', 'QMSKontrolniPlanGetAll')]
    [MVCSwagParam(plQuery, 'kategorie', 'Kategorie výrobního plánu', ptString, false)]
    [MVCSwagResponses(200, 'Success', TQMSKontrolniPlan, true)]
    procedure GetAll ([MVCFromQueryString('kategorie', '')] kategorie: string=''
                     );
  end;


implementation

uses
  uSvc_Base,
  uCommons,
  mvcframework.Serializer.Intf,
  System.Generics.Collections,
  System.RegularExpressions,
  System.StrUtils,
  System.SysUtils,
  Winapi.ActiveX,
  IdHTTP,
  System.JSON,
  JsonDataObjects,
  helTabsBIDs;






{ TQMSObecneController }

 procedure TQMSObecneController.GetCiselnikStavMeridel;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSObecneService.GetCislenikQMS (1, 0)));  // viz uSvc_QMS.pas
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;


 procedure TQMSObecneController.GetCiselnikDruhMeridel;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSObecneService.GetCislenikQMS (2, 0)));  // viz uSvc_QMS.pas
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;


 procedure TQMSObecneController.GetCiselnikKategorieMeridel;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSObecneService.GetCislenikQMS (3, 0)));  // viz uSvc_QMS.pas
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;


 procedure TQMSObecneController.GetCiselnikStavUdrzby;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSObecneService.GetCislenikQMS (1, 1)));  // viz uSvc_QMS.pas
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;


 procedure TQMSObecneController.GetCiselnikDruhUdrzby;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSObecneService.GetCislenikQMS (2, 1)));
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;






{ TQMSUdrzbaStrojuAZarizeniController }

 procedure TQMSUdrzbaStrojuAZarizeniController.GetAll;
  begin
   try
     Render(ObjectDict().Add('data', GetQMSUdrzbaStrojuAZarizeniService.GetAll));  // viz uSvc_QMS.pas
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;
  end;



 procedure TQMSUdrzbaStrojuAZarizeniController.GetByID (id: string='0'; utvar: string=''; stav: string=''; druh:string='');
  var iId, iCislo: integer;
      typ: Byte;
      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);

   utvar:= LeftStr(sanitizeSQLString(utvar), 30);
   if (utvar<>'') then
    params.Add('utvar', utvar);

   stav:= LeftStr(sanitizeSQLString(stav), 3);
   if (stav<>'') then
    params.Add('stav', stav);

   druh:= LeftStr(sanitizeSQLString(druh), 3);
   if (druh<>'') then
    params.Add('druh', druh);


   try
     Render(ObjectDict().Add('data', GetQMSUdrzbaStrojuAZarizeniService.GetByParams (params)));
    except
     on E: EServiceException do
      begin
       raise EMVCException.Create(E.Message, '', 0, 404);
      end
     else
       raise;
   end;

   params.Free;
  end;



 procedure TQMSUdrzbaStrojuAZarizeniController.GetMeta;
  begin
    try
      Render(ObjectDict().Add('data', GetQMSUdrzbaStrojuAZarizeniService.GetMeta));
    except
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 404);
      end
      else
        raise;
    end;
  end;



 procedure TQMSUdrzbaStrojuAZarizeniController.HledatUdrzbuStrojeAZarizeni;
  var params: TJsonObject;
      udrzby: TObjectList<TQMSUdrzbaStrojuAZarizeni>;
  begin
   params:= TJsonBaseObject.Parse(Context.Request.Body) as TJsonObject;
//   udrzby:= GetQMSUdrzbaStrojuAZarizeniService.GetByFindParams (Params.S['hledej']);
  end;



 procedure TQMSUdrzbaStrojuAZarizeniController.AktualizaceUdrzbyStrojuAZarizeni (CTX: TWebContext; id: string='');
  var jsonData, respStr: string;
  begin
   try
     jsonData:= CTX.Request.Body;
//     if (jsonData<>'') then
//      GetVyrobniOperaceService.ZapisDZTasku (jsonData, respStr);
     ResponseStatus(HTTP_STATUS.OK, 'OK');
     Render(respStr);
    except
     RenderStatusMessage (200);
   end;
  end;



 procedure TQMSUdrzbaStrojuAZarizeniController.NovaUdrzbaStrojuAZarizeni (CTX: TWebContext);
  var jsonData, respStr: string;
      o: System.JSON.TJSONObject;
  begin
   respStr:= '';
   o:= System.JSON.TJSONObject.Create;
   try
     jsonData:= CTX.Request.Body;
//     if (jsonData<>'') then
     ResponseStatus(HTTP_STATUS.OK, 'OK');
     Render(respStr);
    except
     RenderStatusMessage (200);
   end;
   if (o<>nil) then
    o.Free;
  end;






{  TQMSKontrolniPostupyController }

 procedure TQMSKontrolniPostupyController.GetAll;
  begin
   try
    Render(ObjectDict().Add('data', GetQMSKontrolniPostupyService.GetAll));  // viz uSvc_Vyroba.pas
    except
     RenderStatusMessage (200);
{
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
}
    end;
  end;



 procedure TQMSKontrolniPostupyController.GetByID (id: string='0'; sIdPostup: string=''; params: boolean = false; paramsFull: boolean = false);
  var iId, idPostup: integer;
      typ: byte;
  begin

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

   sIdPostup:= sanitizeSQLString(sIdPostup);
   if not(TryStrToInt(sIdPostup, idPostup)) then
    idPostup:= 0;

   typ:= 255;
   if (iId>0) then
    typ:= 0;
   if (idPostup>0) then
    typ:= 1;
   if (iId>0) and (params) then
    typ:= 2;
   if (iId>0) and (paramsFull) then
    typ:= 3;


    try
      case typ of
       0: Render(ObjectDict().Add('data', GetQMSKontrolniPostupyService.GetByID(iId)));
       1: Render(ObjectDict().Add('data', GetQMSKontrolniPostupyService.GetListByIDPostup(idPostup)));
       2: Render(ObjectDict().Add('data', GetQMSKontrolniPostupyService.GetParamsByIDHlav(iId)));
      end;
    except
     RenderStatusMessage (200);
{
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
}
    end;
  end;



 procedure TQMSKontrolniPostupyController.GetMeta;
  begin
    try
      Render(ObjectDict().Add('data', GetQMSKontrolniPostupyService.GetMeta));
    except
     RenderStatusMessage (200);
{
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
}
    end;
  end;




{ TQMSKontrolniPlanController }

 procedure TQMSKontrolniPlanController.GetMeta;
  begin
    try
      Render(ObjectDict().Add('data', GetQMSKontrolniPlanService.GetMeta));
    except
     RenderStatusMessage (200);
{
      on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
}
    end;
  end;



 procedure TQMSKontrolniPlanController.GetByID (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', GetQMSKontrolniPlanService.GetByID(iId)));
      except
       RenderStatusMessage (200);
{
        on E: EServiceException do
        begin
          raise EMVCException.Create(E.Message, '', 0, 200);
        end
        else
          raise;
}
      end;
     end
    else
     RenderStatusMessage (200);
  end;



 procedure TQMSKontrolniPlanController.GetAll (kategorie: string='');
  var p: TDictionary<string, string>;
  begin
   p:= TDictionary<string, string>.Create;

   kategorie:= sanitizeSQLString (kategorie);
   if (kategorie<>'') then
    p.Add ('kategorie', kategorie);

   try
     Render(ObjectDict().Add('data', GetQMSKontrolniPlanService.GetByParams (p) ));  // viz uSvc_Vyroba.pas
    except
     RenderStatusMessage (200);
{
     on E: EServiceException do
      begin
        raise EMVCException.Create(E.Message, '', 0, 200);
      end
      else
        raise;
}
    end;

   p.Free;
  end;



end.
