commit 03ff9ebc84a1f65896a3db6f3a33dd256db8f684 Author: TomBuz Date: Wed May 21 21:14:32 2025 +0200 Prvni verze diff --git a/_custom/EMPolar/customDefs.inc b/_custom/EMPolar/customDefs.inc new file mode 100644 index 0000000..18d2149 --- /dev/null +++ b/_custom/EMPolar/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in '_custom\EMPolar\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\EMPolar\uCtrlCustom.pas' + ,uSvcCustom in '_custom\EMPolar\uSvcCustom.pas' diff --git a/_custom/EMPolar/uCtrlCustom.pas b/_custom/EMPolar/uCtrlCustom.pas new file mode 100644 index 0000000..705e487 --- /dev/null +++ b/_custom/EMPolar/uCtrlCustom.pas @@ -0,0 +1,246 @@ +unit uCtrlCustom; + +interface +{$I 'GlobalDefs.inc'} + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uSvcCustom, + uSvc_Obecne, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +const +{$I .\..\..\globalConsts.inc} + + +type + + [MVCPath('/emp/nadoba')] + TEMPNadobaController = class(TBaseController) + public + + [MVCPath('')] + [MVCSwagSummary('EMP - vyráběné nádoby', 'Vrátí seznam nádob', 'EMPNadobaGetByCislo')] + [MVCHTTPMethod([httpGET])] + [MVCSwagParam(plQuery, 'cislo', 'Číslo nádoby', ptString, false, '1')] + procedure GetByCislo ([MVCFromQueryString('cislo', '')] cislo: string + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('EMP - vyráběné nádoby', 'Meta informace seznamu nádob', 'EMPNadobaGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('EMP - vyráběné nádoby', 'Vrátí údaje nádoby dle jejího ID', 'EMPNadobaGetByID')] + [MVCSwagParam(plPath, 'id', 'ID nádoby', ptString, true)] + [MVCProduces('application/json')] + procedure GetByID (id: string); + end; + + + + + [MVCPath('/emp/atest')] + TEMPDokumentAtestController = class(TBaseController) + private + FDokumService: TDokumentService; + public + constructor Create; override; + destructor Destroy; override; + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('EMP - dokumenty atestů', 'Meta informace dokumentu atestu', 'EMPDokumAtestGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('EMP - dokumenty atestů', 'Vrátí údaje dokumentu atestu dle jeho ID', 'EMPDokumAtestGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokumentu atestu', ptString, true)] + [MVCProduces('application/json')] + procedure GetByID (id: string); + + end; + + +implementation +uses + System.SysUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + uDataMod; + + +{ TEMPNadobaController } + + procedure TEMPNadobaController.GetByCislo (cislo: string); + begin + cislo:= sanitizeSQLString (cislo); + + try + if (cislo<>'') then + Render(ObjectDict().Add('data', GetEMPNadobaService.GetByCislo (cislo))) + else + Render(ObjectDict().Add('data', GetEMPNadobaService.GetAll)); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + end; + + + + + procedure TEMPNadobaController.GetByID (id: string); + var iId: integer; + begin + id:= sanitizeSQLString (id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + try + Render(ObjectDict().Add('data', GetEMPNadobaService.GetByID (iId))); // viz uSvc_Custom1.pas + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + end; + + + + procedure TEMPNadobaController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetEMPNadobaService.GetMeta)); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + end; + + + + + + + { TEMPDokumentAtestController } + + constructor TEMPDokumentAtestController.Create; + begin + inherited; + FDokumService:= GetDokumentService; + end; + + + + + destructor TEMPDokumentAtestController.Destroy; + begin + if (FDokumService<>nil) then + FreeAndNil (FDokumService); + inherited; + end; + + + + + procedure TEMPDokumentAtestController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetDokumentService.GetMeta)); + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; +{$ENDIF} + end; + end; + + + + procedure TEMPDokumentAtestController.GetByID (id: string); + var iId: integer; + p: TDictionary; + begin + id:= sanitizeSQLString (id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + p:= TDictionary.Create; + + try + Render(ObjectDict().Add('data', GetDokumentService.GetByID (iId, true))) // viz uSvc_Custom1.pas + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; +{$ENDIF} + end; + + p.Free; + end; + + +end. diff --git a/_custom/EMPolar/uHeOObj_Custom.pas b/_custom/EMPolar/uHeOObj_Custom.pas new file mode 100644 index 0000000..fd272a1 --- /dev/null +++ b/_custom/EMPolar/uHeOObj_Custom.pas @@ -0,0 +1,112 @@ +unit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + + + +type + + [MVCNameCase(ncLowerCase)] + TEMPAtestDokument = class(TDokument) + private + FDokument: TDokument; + public + property Dokument: TDokument read FDokument write FDokument; + end; + + + + + [MVCNameCase(ncLowerCase)] + TEMPNadoba = class(THeliosObjekty) + private + FCisloZakazky: string; + FVyrobniCislo: string; + FNazev: string; + FDruhyNazev: string; + FTypZakazky: string; + FVykres: NullableString; + FIDZakazky: integer; + FPotvrzTermDod: NullableTDateTime; + FCisloOrg: NullableInt32; // TabZakazka.Prijemce + FNazevOrg: NullableString; + public + [MVCColumn('CisloZakazky', false)] + [MVCSwagJsonSchemaField(stString, 'CisloZakazky', 'Číslo zakázky', true, false)] // required, nullable, minLength, maxLength, FieldSerializationType + property CisloZakazky: string read FCisloZakazky write FCisloZakazky; + + [MVCColumn('VyrobniCislo', false)] + [MVCSwagJsonSchemaField(stString, 'VyrobniCislo', 'Výrobní číslo', false, false, 0, 100)] // required, nullable, minLength, maxLength, FieldSerializationType + property VyrobniCislo: string read FVyrobniCislo write FVyrobniCislo; + + [MVCColumn('IDZakazky', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazky', 'ID zakázky nádoby', true, false)] + property IDZakazky: integer read FIDZakazky write FIDZakazky; + + [MVCColumn('TypZakazky', false)] + [MVCSwagJsonSchemaField(stString, 'TypZakazky', 'Typ zakázky (100-Objednávka, 101-nádoba, 200-nevýrobní)', false, false)] + property TypZakazky: string read FTypZakazky write FTypZakazky; + + [MVCColumn('Vykres', false)] + [MVCSwagJsonSchemaField(stString, 'Vykres', 'Číslo výkresu', false, true, 0, 35)] + property Vykres: NullableString read FVykres write FVykres; + + [MVCColumn('Nazev', false)] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název zakázky', false, false, 0, 100)] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('DruhyNazev', false)] + [MVCSwagJsonSchemaField(stString, 'DruhyNazev', 'Druhý název zakázky', false, false, 0, 100)] + property DruhyNazev: string read FDruhyNazev write FDruhyNazev; + + [MVCColumn('PotvrzTermDod', false)] + [MVCSwagJsonSchemaField(stDateTime, 'PotvrzTermDod', 'Potvrzený termín dodávky', false, false, 0, 100)] + property PotvrzTermDod: NullableTDateTime read FPotvrzTermDod write FPotvrzTermDod; + + [MVCColumn('CisloOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace příjemce (ze zakázky)', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('NazevOrg', false)] + [MVCSwagJsonSchemaField(stString, 'NazevOrg', 'Název organizace příjemce (ze zakázky)', false, true, 0, 100)] + property NazevOrg: NullableString read FNazevOrg write FNazevOrg; + + { + [MVCColumn('GUIDDokladu', false)] + [MVCSwagJsonSchemaField(stGuid, 'GUIDDokladu', 'GUID dokladu', false, true)] + property GUIDDokladu: NullableTGUID read FGUIDDokladu write FGUIDDokladu; + + [MapperListOf(TGatemaSDScanData)] + property ScanData: TObjectList read FScanData write SetSDScanData; +} + end; + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions, + uSvc_Obecne, + uCtrlBase + ; + + + +end. diff --git a/_custom/EMPolar/uSvcCustom.pas b/_custom/EMPolar/uSvcCustom.pas new file mode 100644 index 0000000..1be755b --- /dev/null +++ b/_custom/EMPolar/uSvcCustom.pas @@ -0,0 +1,242 @@ +unit uSvcCustom; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Classes, + System.JSON, + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uHeoObj_Vyroba, + uSvc_Obecne, + uSvc_ObehZbozi, + uSvc_Vyroba; + + +const +//{$I C:\_zakaznici\pluginy_obecne\HDCApi2\globalConsts.inc} +{$I .\..\..\globalConsts.inc} + + selSloupce = 'SELECT TypZakazky, CisloZakazky, NazevOrg, CisloOrg, VyrobniCislo, NazevPol, idPolozkaObj, PotvrzenyTerminDod, NadrazeneCisloZakazky, Vykres, Stav' + + ', ID AS IDZakazky, Nazev, DruhyNazev, DatPorizeni_Y FROM dbo.hvw_ADE_VIEW_ZAKAZKA ORDER BY CisloZakazky'; + + selEMPAtestDok = 'SELECT d.ID, d.Popis, d.JmenoACesta, ISNULL(de_CisloAtestu, N'''') AS CisloAtestu, ISNULL(de._AtestyPoznamka, N'''') AS AtestPoznamka' + + ', d.DatPorizeni FROM ' + tblDokum + ' d LEFT JOIN ' + tblDokumE + ' de ON (de.ID=d.ID)'; + +type + TEMPNadobaService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByID (const AID: integer): TEMPNadoba; + function GetByCislo (const ACislo: string): TEMPNadoba; + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; + end; + + + +implementation +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + uCtrlBase + ; + + + + +{ TEMPNadobaService } + + function TEMPNadobaService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, ordBy: string; + AID, cnt, rNo: integer; + retObj: TEMPNadoba; + lsRetObj: TObjectList; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + ordBy:= 'VyrobniCislo'; + + if (params<>nil) then + begin + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + lSQL:= 'SELECT ' + selSloupce; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + lsRetObj:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retObj:= self.GetByID (AID); + lsRetObj.Add(retObj); + if not(lQry.Active) then + lQry.Open; + Inc (rNo); + end; + Result:= lsRetObj; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani nadob: ' + E.Message); + end; + end; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TEMPNadobaService.GetAll:TObjectList; + var lSQL: string; + begin + lSQL:= selSloupce + ' ORDER BY VyrobniCislo'; + FDM.sqlQry1.Open(lSQL, []); + result:= FDM.sqlQry1.AsObjectList; + FDM.sqlQry1.Close; + end; + + + + + function TEMPNadobaService.GetByID (const AID: Integer): TEMPNadoba; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= selSloupce + ' WHERE ID=:ID'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + try + if not(lQry.EOF) then + begin + result:= FDM.sqlQry1.AsObject + end + else + raise EServiceException.Create('Nádoba s ID ' + AID.ToString + ' nebyla nalezena.'); + except on E:Exception do + raise EServiceException.Create('Nádoba s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TEMPNadobaService.GetByCislo (const ACislo: string): TEMPNadoba; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= selSloupce + ' WHERE VyrobniCislo=:ACislo'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [ACislo]); + lQry.First; + try + if not(lQry.EOF) then + begin + result:= FDM.sqlQry1.AsObject + end + else + raise EServiceException.Create('Nádoba s číslem ' + ACislo + ' nebyla nalezena.'); + except on E:Exception do + raise EServiceException.Create('Nádoba s číslem ' + ACislo + ' nebyla nalezena - ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TEMPNadobaService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= selSloupce + ' WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + +end. diff --git a/_custom/EMPolar/uWebModCustom.inc b/_custom/EMPolar/uWebModCustom.inc new file mode 100644 index 0000000..e079137 --- /dev/null +++ b/_custom/EMPolar/uWebModCustom.inc @@ -0,0 +1,3 @@ + + FEngine.AddController (TEMPNadobaController); + FEngine.AddController (TEMPDokumentAtestController); \ No newline at end of file diff --git a/_custom/EMPolar/zdroje.RES b/_custom/EMPolar/zdroje.RES new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/_custom/EMPolar/zdroje.RES differ diff --git a/_custom/EMPolar/zdroje.rc b/_custom/EMPolar/zdroje.rc new file mode 100644 index 0000000..33adcb8 --- /dev/null +++ b/_custom/EMPolar/zdroje.rc @@ -0,0 +1 @@ +//ep_HDCDZApi_ZpracujPrijataData RCDATA .\sql\ep_HDCDZApi_ZpracujPrijataData.sql diff --git a/_custom/GatemaSD/info.txt b/_custom/GatemaSD/info.txt new file mode 100644 index 0000000..e8199ce --- /dev/null +++ b/_custom/GatemaSD/info.txt @@ -0,0 +1,15 @@ + + + +Gatema_SDDoklady +*********************** +TypDokladu - 510 - kontrola prijmu / 540 - prijem +IDDokZbo - zdrojovy doklad (napr. pri kontrole prijmu) + + + + +Gatema_SDScanData +*********************** +IDPohZbo - ID zdrojoveho pohybu OZ (napr. pri kontrole prijmu) + diff --git a/_custom/GatemaSD/uCtrlCustomSDG.pas b/_custom/GatemaSD/uCtrlCustomSDG.pas new file mode 100644 index 0000000..6a10be9 --- /dev/null +++ b/_custom/GatemaSD/uCtrlCustomSDG.pas @@ -0,0 +1,313 @@ +ďťżunit uCtrlCustomSDG; + +interface + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + uHeoObj_Base, +// uHeOObj_Custom, + uSvcCustomSDG, + uHeOObj_CustomSDG, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +type + + [MVCPath('/sdserver/doklad')] + TGatemaSDDokladController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDDokladService; + strict protected + function GetGatemaSDDokladService: TGatemaSDDokladService; + public + destructor Destroy; override; + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ hlavičku dokladĹŻ SD Serveru', 'GatemaSDDokladyGetAll')] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + procedure GetAll([MVCFromQueryString('od', '')] odDatum: string='' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ metadata', 'GatemaSDDokladyGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ data dokladu SD Serveru', 'GatemaSDDokladyGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'typdokl', 'Typ dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu zboŞí', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'format', 'FormĂĄt (1=dokladOZ)', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDDoklad, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('typdokl', '')] typDokl: string=''; + [MVCFromQueryString('druhpohybu', '')] druhPohybu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('format', '')] formatX: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + end; + + + + [MVCPath('/sdserver/scandata')] + TGatemaSDScanDataController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDScanDataService; + strict protected + function GetGatemaSDScanDataService: TGatemaSDScanDataService; + public + destructor Destroy; override; + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_ScanData', 'VracĂ­ metadata', 'GatemaSDScanDataGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_ScanData', 'VracĂ­ naskenovanĂĄ data', 'GatemaSDScanDataGetByID')] + [MVCSwagParam(plPath, 'id', 'ID scan data', ptString, false)] + [MVCSwagParam(plQuery, 'iddoklad', 'ID dokladu SD', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDScanData, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('iddoklad', '')] iddoklad: string='' + ); + end; + + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + uDataMod; + +const + selSloupce = ''; + + + +{ TGatemaSDDokladController } + + destructor TGatemaSDDokladController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + function TGatemaSDDokladController.GetGatemaSDDokladService: TGatemaSDDokladService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDDokladService.Create(datMod); + result:= FSelfSvc; + end; + + + + + procedure TGatemaSDDokladController.GetAll(odDatum: string=''); + var params: TDictionary; +// odDatum: string; + begin + params:= TDictionary.Create; + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetByID(id: string=''; typDokl: string=''; druhPohybu: string=''; sklad: string=''; formatX: string=''; odDatum: string=''; doDatum: string=''; + jenSeznam: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + typDokl:= sanitizeSQLString(sklad); + if (typDokl<>'') then + params.Add('typDokladu', typDokl); + + druhPohybu:= sanitizeSQLString(sklad); + if (druhPohybu<>'') then + params.Add('druhPohybu', druhPohybu); + + formatX:= sanitizeSQLString(formatX); // pro zobrazeni jako DokladOZ + if (formatX<>'') then + if (formatX='1') then + params.Add('format', formatX); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + end; + end; + + + + + +{ TGatemaSDScanDataController } + + destructor TGatemaSDScanDataController.Destroy; + begin + FSelfSvc.Free; + end; + + function TGatemaSDScanDataController.GetGatemaSDScanDataService: TGatemaSDScanDataService; + begin + inherited Create; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDScanDataService.Create(datMod); + result:= FSelfSvc; + end; + + + + procedure TGatemaSDScanDataController.GetByID(id: string=''; iddoklad: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + end; + end; + + + + procedure TGatemaSDScanDataController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end; + end; + end; + +end. diff --git a/_custom/GatemaSD/uHeOObj_CustomSDG.pas b/_custom/GatemaSD/uHeOObj_CustomSDG.pas new file mode 100644 index 0000000..3089480 --- /dev/null +++ b/_custom/GatemaSD/uHeOObj_CustomSDG.pas @@ -0,0 +1,267 @@ +ďťżunit uHeOObj_CustomSDG; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + +const + tblGSDDoklady = '[dbo].[Gatema_SDDoklady]'; + tblGSDScanData = '[dbo].[Gatema_SDScanData]'; + + +type + [MVCNameCase(ncLowerCase)] + TGatemaSDScanData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDZdrojSD: NullableInt32; + FIDPolozky: NullableInt32; + FIDPrikaz: NullableInt32; + FDokladPrKV: NullableInt32; + FDokladPrVPV: NullableInt32; + FIDPohZbo: NullableInt32; + FIDVyrCS_Obj: NullableInt32; + FIDInvItem: NullableInt32; + FIDPohZbo_New: NullableInt32; + FIDKmenZbozi: NullableInt32; + FIDStavSkladu: NullableInt32; + FVyrCislo: NullableString; + FPopisSarze: NullableString; + FMnozstvi: Single; + FMnozstviEvidence: Single; + FMJ: NullableString; + FMJEvidence: NullableString; + FBarCode: NullableString; + FDatumExpirace: NullableTDateTime; + FKodBaleni: NullableString; + FDatPorizeni: TDateTime; + FGenerovat: NullableBoolean; + FJedinecneCislo: NullableString; + public +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDZdrojSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDZdrojSD', 'ID zdorj SD', false, true)] + property IDZdrojSD: NullableInt32 read FIDZdrojSD write FIDZdrojSD; + + [MVCColumn('IDPolozky', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPolozky', 'ID poloĹžky', false, true)] + property IDPolozky: NullableInt32 read FIDPolozky write FIDPolozky; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('VyrCislo', false)] + [MVCSwagJsonSchemaField(stString, 'VyrCislo', 'VĂ˝robnĂ­ číslo', true, false, 1, 100)] + property VyrCislo: NullableString read FVyrCislo write FVyrCislo; + + [MVCColumn('PopisSarze', false)] + [MVCSwagJsonSchemaField(stString, 'PopisSarze', 'Popis ĹĄarĹže', true, false, 1, 100)] + property PopisSarze: NullableString read FPopisSarze write FPopisSarze; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField('Mnozstvi', 'MnoĹžstvĂ­', true, false)] + property Mnozstvi: Single read FMnozstvi write FMnozstvi; + + [MVCColumn('MnozstviEvidence')] + [MVCSwagJsonSchemaField('MnozstviEvidence', 'MnoĹžstvĂ­ v evidenčnĂ­ jednotce', true, false)] + property MnozstviEvidence: Single read FMnozstviEvidence write FMnozstviEvidence; + + [MVCColumn('DatumExpirace')] + [MVCSwagJsonSchemaField('DatumExpirace', 'Datum expirace', false, true)] + property DatumExpirace: NullableTDatetime read FDatumExpirace write FDatumExpirace; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + end; + + + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDZdrojData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDDokZbo: NullableInt32; + FIDPrikaz: NullableInt32; + FGUIDDokladu: NullableTGUID; + public + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'FIDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('GUIDDokladu', false)] + [MVCSwagJsonSchemaField(stGuid, 'GUIDDokladu', 'GUID dokladu', false, true)] + property GUIDDokladu: NullableTGUID read FGUIDDokladu write FGUIDDokladu; + end; + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDDoklad = class(THeliosObjekty) + private + FTypDokladu: integer; + FPodtypDokladu: NullableInt32; + FRadaDokladu: NullableString; + FDruhPohybuZbo: NullableInt32; + FSklad: NullableString; + FSkladCil: NullableString; + FIDPrikaz: NullableInt32; + FIDDokZbo: NullableInt32; + FIDDokZbo_New: NullableInt32; + FGUIDDokZbo: NullableTGUID; + FGUIDDokZbo_New: NullableTGUID; + FIDInvHead: NullableInt32; + FIDOrg: NullableInt32; + FCisloOrg: NullableInt32; + FDatumPripadu: NullableTDateTime; + FDatPorizeni: TDateTime; + FDatGenerovani: NullableTDateTime; + FScanData: TObjectList; + procedure SetSDScanData (const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('TypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'TypDokladu', 'Typ dokladu', true, false)] + property TypDokladu: integer read FTypDokladu write FTypDokladu; + + [MVCColumn('PodtypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'PodtypDokladu', 'Podtyp dokladu', false, true)] + property PodtypDokladu: NullableInt32 read FPodtypDokladu write FPodtypDokladu; + + [MVCColumn('RadaDokladu', false)] + [MVCSwagJsonSchemaField(stString, 'RadaDokladu', 'Řada dokladu', false, true)] + property RadaDokladu: NullableString read FRadaDokladu write FRadaDokladu; + + [MVCColumn('DruhPohybuZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'DruhPohybuZbo', 'Druh pohybu zboŞí', false, true)] + property DruhPohybuZbo: NullableInt32 read FDruhPohybuZbo write FDruhPohybuZbo; + + [MVCColumn('Sklad', false)] + [MVCSwagJsonSchemaField(stString, 'Sklad', 'Sklad', false, true)] + property Sklad: NullableString read FSklad write FSklad; + + [MVCColumn('SkladCil', false)] + [MVCSwagJsonSchemaField(stString, 'SkladCil', 'CĂ­lovĂ˝ sklad', false, true)] + property SkladCil: NullableString read FSkladCil write FSkladCil; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDDokZbo_New', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo_New', 'ID novĂŠho dokladu OZ', false, true)] + property IDDokZbo_New: NullableInt32 read FIDDokZbo_New write FIDDokZbo_New; + + [MVCColumn('IDInvHead', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDInvHead', 'ID dokladu inventury', false, true)] + property IDInvHead: NullableInt32 read FIDInvHead write FIDInvHead; + + [MVCColumn('IDOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDOrg', 'ID organizace', false, true)] + property IDOrg: NullableInt32 read FIDOrg write FIDOrg; + + [MVCColumn('CisloOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('DatumPripadu')] + [MVCSwagJsonSchemaField('DatumPripadu', 'Datum případu', false, true)] + property DatumPripadu: NullableTDatetime read FDatumPripadu write FDatumPripadu; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + + [MVCColumn('DatGenerovani')] + [MVCSwagJsonSchemaField('DatGenerovani', 'Datum generovĂĄnĂ­ dokladu OZ', false, true)] + property DatGenerovani: NullableTDatetime read FDatGenerovani write FDatGenerovani; + + [MVCListOfAttribute(TGatemaSDScanData)] + property ScanData: TObjectList read FScanData write SetSDScanData; + end; + + + + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + +{ TGatemaSDDoklad } + + constructor TGatemaSDDoklad.Create; + begin + inherited; + FScanData:= TObjectList.Create; + end; + + + destructor TGatemaSDDoklad.Destroy; + begin +// if (FPohybyOZ<>nil) then +// FPohybyOZ.Free; + inherited; + end; + + + procedure TGatemaSDDoklad.SetSDScanData(const Value: TObjectList); + begin + if (Value<>FScanData) then + begin + FScanData.Free; + FScanData:= Value; + end; + end; + + +end. \ No newline at end of file diff --git a/_custom/GatemaSD/uSvcCustomSDG.pas b/_custom/GatemaSD/uSvcCustomSDG.pas new file mode 100644 index 0000000..a00f199 --- /dev/null +++ b/_custom/GatemaSD/uSvcCustomSDG.pas @@ -0,0 +1,404 @@ +ďťżunit uSvcCustomSDG; + +interface + +uses + System.Generics.Collections, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uSvc_ObehZbozi, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeOObj_Base, + uHeOObj_CustomSDG; + + +const +{$I globalConsts.inc} + selSpecDoklSD = '(SELECT CisloOrg FROM ' + tblCOrg + ' WHERE ID=main.IDOrg) AS CisloOrg'; + + +type + + TGatemaSDDokladService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer; const bezPolozek: boolean=false): TGatemaSDDoklad; + function GetMeta: TJSONObject; + end; + + + TGatemaSDScanDataService = class(TServiceBase) + public + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer): TGatemaSDScanData; + function GetMeta: TJSONObject; + end; + + + + TSDGPolozkaOZService = class(TPolozkaOZService) + function GetByID (const AID: integer): TPohybOZ; + end; + + + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + +{ TGatemaSDDokladService } + + function TGatemaSDDokladService.GetAll:TObjectList; + var lSQL: string; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady) + ' FROM ' + tblGSDDoklady + ' ORDER BY ID'; + FDM.sqlQry1.Open(lSQL, []); + result:= FDM.sqlQry1.AsObjectList; + FDM.sqlQry1.Close; + end; + + + + function TGatemaSDDokladService.GetByParams(params: TDictionary): TObjectList; + var lSQL, where, odDatum, doDatum, sklad, formatX, druhPohybuZbo, strTemp: string; + lQry: TFDQuery; + datOd, datDo: TDateTime; + id, iDZ, cnt, rNo: integer; + jenSeznam: Boolean; + d: TGatemaSDDoklad; + dList: TObjectList; + begin + jenSeznam:= false; + if (params.ContainsKey('seznam')) then + jenSeznam:= true; + + formatX:= ''; + if (params.ContainsKey('format')) then + formatX:= params.Items['format']; + if (formatX<>'') then + begin + end + else + begin + if not(jenSeznam) then + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main' + else + lSQL:= 'SELECT main.ID, main.TypDokladu, main.PodtypDokladu, main.RadaDokladu, main.Sklad, main.RadaDokladuCil, main.SkladCil, main.IDDokZbo, main.IDDokZbo_New' + + ', main.IDOrg' + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ', main.DatPorizeni, main.DatGenerovani, main.DatumPripadu, main.PopisDodavky' + + ' FROM ' + tblGSDDoklady + ' main'; + end; + + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'main.ID=' + id.ToString; + end; + + if (params.ContainsKey('typDokladu')) then + if (params.Items['typDokladu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.TypDokladu=N' + params.Items['typDokladu']; + + if (params.ContainsKey('druhPohybu')) then + if (params.Items['druhPohybu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DruhPohybuZbo=N' + params.Items['druhPohybu']; + + if (params.ContainsKey('sklad')) then + if (params.Items['sklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Sklad=N' + params.Items['sklad'].QuotedString; + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -180) + end + else + datOd:= IncDay(Now, -180); + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + odDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + + strTemp:= ''; + if (odDatum<>'') then + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)' + else + strTemp:= 'DATEADD(day, -1, GETDATE())'; + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; + + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'main.ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY main.ID'; + + lSQL:= lSQL.Replace('Gatema_SDDoklady.', 'main.'); + + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + d:= TGatemaSDDoklad.Create; + dList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + iDZ:= lQry.FieldByName('ID').AsInteger; + d:= self.GetByID(iDZ, jenSeznam); + dList.Add(d); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= dList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ dokladu: ' + E.Message); + end; + end + else + raise EServiceException.Create('VybranĂ˝m podmĂ­nkĂĄm neodpovĂ­dĂĄ ŞådnĂ˝ naskenovanĂ˝ doklad'); + finally + FreeAndNil(lQry); + end; + + end; + + + + function TGatemaSDDokladService.GetByID (const AID: integer; const bezPolozek: boolean=false): TGatemaSDDoklad; + var lSQL: string; + p: TDictionary; + ps: TGatemaSDScanDataService; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + + ps:= TGatemaSDScanDataService.Create(self.FDM); + p:= TDictionary.Create; + p.Add('iddoklad', AID.ToString); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main WHERE main.ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open (lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if not(bezPolozek) then + result.ScanData:= ps.GetByParams(p); + end + else + raise EServiceException.Create('NaskenovanĂ˝ doklad s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + p.Free; + ps.Free; + FreeAndNil(lQry); + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TGatemaSDDokladService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main WHERE 1=0'; + lQry:= TFDQuery.Create(nil); +// lQry.FetchOptions.AutoClose:= false; +// lQry.FetchOptions.Mode:= fmAll; + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + +{ TGatemaSDScanDataService } + + function TGatemaSDScanDataService.GetByID (const AID: integer): TGatemaSDScanData; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData) + ' FROM ' + tblGSDScanData + ' WHERE ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + result:= lQry.AsObject + else + raise EServiceException.Create('NaskenovanĂĄ poloĹžka s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + lQry.Free; + end; + end; + + + + function TGatemaSDScanDataService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData) + ' FROM ' + tblGSDScanData + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + try + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TGatemaSDScanDataService.GetByParams(params: TDictionary): TObjectList; + var lSQL, where: string; + id,idPZ, cnt, rNo: integer; + lQry: TFDQuery; + pList: TObjectList; + p: TGatemaSDScanData; + begin + p:= TGatemaSDScanData.Create; + pList:= TObjectList.Create; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData, '', false) + ' FROM ' + tblGSDScanData; + + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'ID=' + id.ToString; + end; + + if (params.ContainsKey('iddoklad')) then + if (params.Items['iddoklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDDokladSD=' + params.Items['iddoklad']; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY IDDokladSD, ID'; + +// lSQL:= lSQL.Replace('TabPohybyZbozi.', 'main.'); + + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + try + cnt:= lQry.RecordCount; + pList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + idPZ:= lQry.FieldByName('ID').AsInteger; + p:= self.GetByID (idPZ); + pList.Add(p); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= pList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ naskenovanĂŠ poloĹžky/poloĹžek dokladu: ' + E.Message); + end; + finally + FreeAndNil(lQry); + end; + end; + + + + + +{ TSDGPolozkaOZService } + + function TSDGPolozkaOZService.GetByID (const AID: Integer): TPohybOZ; + begin + result:= nil; + end; + + +end. diff --git a/_custom/GatemaSD/uWebModCustomSDG.inc b/_custom/GatemaSD/uWebModCustomSDG.inc new file mode 100644 index 0000000..964c6df --- /dev/null +++ b/_custom/GatemaSD/uWebModCustomSDG.inc @@ -0,0 +1,2 @@ + FEngine.AddController (TGatemaSDDokladController); + FEngine.AddController (TGatemaSDScanDataController); \ No newline at end of file diff --git a/_custom/Gornicky/customDefs.inc b/_custom/Gornicky/customDefs.inc new file mode 100644 index 0000000..dc6ee9f --- /dev/null +++ b/_custom/Gornicky/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in '_custom\Gornicky\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Gornicky\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Gornicky\uSvcCustom.pas' diff --git a/_custom/Gornicky/openssl-1.0.2u-i386-win32.zip b/_custom/Gornicky/openssl-1.0.2u-i386-win32.zip new file mode 100644 index 0000000..8bd6432 Binary files /dev/null and b/_custom/Gornicky/openssl-1.0.2u-i386-win32.zip differ diff --git a/_custom/Gornicky/openssl-1.0.2u-x64_86-win64.zip b/_custom/Gornicky/openssl-1.0.2u-x64_86-win64.zip new file mode 100644 index 0000000..a06366a Binary files /dev/null and b/_custom/Gornicky/openssl-1.0.2u-x64_86-win64.zip differ diff --git a/_custom/Gornicky/sql/ep_HDCDZApi_ZpracujPrijataData.sql b/_custom/Gornicky/sql/ep_HDCDZApi_ZpracujPrijataData.sql new file mode 100644 index 0000000..fe9245d --- /dev/null +++ b/_custom/Gornicky/sql/ep_HDCDZApi_ZpracujPrijataData.sql @@ -0,0 +1,164 @@ +-- dbo.ep_HDCDZApi_ZpracujPrijataData +CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData + @idJson INT=NULL +AS + +SET NOCOUNT ON +-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi ! + + + + +IF OBJECT_ID(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'U') IS NULL + BEGIN + IF OBJECT_ID(N'dbo._hdc_ph_Log', N'U') IS NOT NULL + INSERT dbo._hdc_ph_Log (LogText) SELECT N'Neexistuje tabulka Tabx_HDC_API_DigitalizaceSoubory' + RETURN + END + + + + +DECLARE + @errMsg NVARCHAR(500)=N'', + @errProc NVARCHAR(100), + @tranPred INT, + @iChyba INT, + @bChyba BIT, + @iTemp INT, + @debugXML XML, + @idUziv INT + +DECLARE + @jsonString NVARCHAR(max), + @docsJson NVARCHAR(max), + @soubor NVARCHAR(100), + @dataZoneId INT, + @docNum INT, + @ordNum NVARCHAR(15), -- zakazka, + @docUrl NVARCHAR(255), + @jeNacteno BIT, + @jeKpl BIT, + @pgTotal INT, + @pgRead INT, + @cisZam INT + +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) ) + + + + + + +IF (@idJson IS NOT NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData + FROM dbo._hdc_ph_PrijataJsonData + WHERE Blokovano=0 + AND DatZpracovani IS NULL + AND ISNULL(JSONData,N'')<>N'' + ORDER BY DatPorizeni +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson + END + + + BEGIN TRY + SET @tranPred=@@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam, Blokovano=1 WHERE ID=@idJson + + + SELECT @dataZoneId=JSON_VALUE(d.doc, '$.datazoneId'), + @soubor=JSON_VALUE(d.doc, '$.file'), + @docsJson = d2.documents + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([documents] NVARCHAR(max) AS JSON) AS d2 + + SET @soubor=ISNULL(@soubor, N'') + IF (@soubor<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET UzivIdent=@soubor WHERE ID=@idJson + + IF (@docsJson<>N'') + BEGIN + IF (ISJSON(@docsJson)=1) + BEGIN + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @docsJson + + DECLARE docs CURSOR LOCAL FOR + SELECT detail.idDoklad, detail.cisloZakazky, ISNULL(detail.jeNacteno,0), ISNULL(detail.jeKpl,0), + ISNULL(detail.pgCount,0), ISNULL(detail.pgRead,0), detail.docUrl + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, N'$') + WITH (idDoklad INT '$.documentNumber', + cisloZakazky NVARCHAR(15) '$.orderNumber', + jeNacteno BIT '$.isNotFound', + jeKpl BIT '$.isComplete', + pgCount INT '$.pageCountTotal', + pgRead INT '$.pageCountRead', + docURL NVARCHAR(255) '$.documentUrl') AS detail + OPEN docs + WHILE (1=1) + BEGIN + FETCH NEXT FROM docs INTO @docNum, @ordNum, @jeNacteno, @jeKpl, @pgTotal, @pgRead, @docUrl + IF (@@FETCH_STATUS<>0) BREAK + + IF (CHARINDEX(N'NotFound', @docUrl)=0) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.Tabx_HDC_API_DigitalizaceSoubory WHERE DocNumber=@docNum AND OrderNumber=@ordNum AND DocURL=@docUrl) + INSERT dbo.Tabx_HDC_API_DigitalizaceSoubory (IDJsonData, IDDZDoc, DocNumber, OrderNumber, IsComplete, IsNotFound, PagesTotal, PagesRead, DocURL, IDDokladOZ) + SELECT @idJson, @dataZoneId, @docNum, @ordNum, @jeKpl, @jeNacteno, @pgTotal, @pgRead, @docUrl, @docNum + END + ELSE + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.Tabx_HDC_API_DigitalizaceSoubory WHERE DocURL=@docUrl) + INSERT dbo.Tabx_HDC_API_DigitalizaceSoubory (IDJsonData, IDDZDoc, IsComplete, IsNotFound, PagesTotal, PagesRead, DocURL, IDDokladOZ) + SELECT @idJson, @dataZoneId, @jeKpl, @jeNacteno, @pgTotal, @pgRead, @docUrl, @docNum + END + END + CLOSE docs + DEALLOCATE docs + + END -- ISJSON(@jsonString)=1 + END -- @docsJson<>'' + + + UPDATE dbo._hdc_ph_PrijataJsonData SET Blokovano=0, DatZpracovani=GETDATE() WHERE ID=@idJson + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + SET @errProc = ERROR_PROCEDURE() + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + END CATCH + + END +CLOSE j +DEALLOCATE j + + + +-- cisteni +DROP TABLE IF EXISTS #TabJSONData diff --git a/_custom/Gornicky/sql/tbl_HDC_API_DigitalizaceSoubory.sql b/_custom/Gornicky/sql/tbl_HDC_API_DigitalizaceSoubory.sql new file mode 100644 index 0000000..652c023 --- /dev/null +++ b/_custom/Gornicky/sql/tbl_HDC_API_DigitalizaceSoubory.sql @@ -0,0 +1,45 @@ +IF OBJECT_ID(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'U') IS NULL + CREATE TABLE dbo.Tabx_HDC_API_DigitalizaceSoubory ( + ID INT IDENTITY(1, 1) NOT NULL, + IDJsonData INT, + IDDZDoc INT, -- datazone id davky + DocNumber INT, + OrderNumber NVARCHAR(15), + IsComplete BIT NOT NULL DEFAULT 0, + IsNotFound BIT NOT NULL DEFAULT 0, + PagesTotal INT, + PagesRead INT, + DocURL NVARCHAR(255), + IDDokument INT, + Blokovano BIT NOT NULL DEFAULT 0, + Zpracovat BIT NOT NULL DEFAULT 1, + DatZpracovani DATETIME, + Zpracovano AS CONVERT(bit, CASE WHEN DatZpracovani IS NULL THEN 0 ELSE 1 END), + DatPorizeni DATETIME NOT NULL DEFAULT GETDATE(), + CONSTRAINT PK_Tabx_HDC_API_DigitalizaceSoubory_ID PRIMARY KEY CLUSTERED (ID DESC) + WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +DROP INDEX IF EXISTS EI_Tabx_HDC_API_DigitalizaceSoubory_IDDZDoc ON dbo.Tabx_HDC_API_DigitalizaceSoubory +CREATE NONCLUSTERED INDEX EI_Tabx_HDC_API_DigitalizaceSoubory_IDDZDoc ON dbo.Tabx_HDC_API_DigitalizaceSoubory (IDDZDoc) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI_Tabx_HDC_API_DigitalizaceSoubory_DocNumber ON dbo.Tabx_HDC_API_DigitalizaceSoubory +CREATE NONCLUSTERED INDEX EI_Tabx_HDC_API_DigitalizaceSoubory_DocNumber ON dbo.Tabx_HDC_API_DigitalizaceSoubory (DocNumber) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + +DROP INDEX IF EXISTS EI_Tabx_HDC_API_DigitalizaceSoubory_IDDokument ON dbo.Tabx_HDC_API_DigitalizaceSoubory +CREATE NONCLUSTERED INDEX EI_Tabx_HDC_API_DigitalizaceSoubory_IDDokument ON dbo.Tabx_HDC_API_DigitalizaceSoubory (IDDokument) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + +/* 16.1.2025 */ +IF COL_LENGTH(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'Blokovano') IS NULL ALTER TABLE dbo.Tabx_HDC_API_DigitalizaceSoubory ADD Blokovano BIT NOT NULL DEFAULT 0 +IF COL_LENGTH(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'Zpracovat') IS NULL ALTER TABLE dbo.Tabx_HDC_API_DigitalizaceSoubory ADD Zpracovat BIT NOT NULL DEFAULT 1 + +/* 236.1.2025 */ +IF COL_LENGTH(N'dbo.Tabx_HDC_API_DigitalizaceSoubory', N'IDJsonData') IS NULL ALTER TABLE dbo.Tabx_HDC_API_DigitalizaceSoubory ADD IDJsonData INT diff --git a/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_D.sql b/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_D.sql new file mode 100644 index 0000000..64a1812 --- /dev/null +++ b/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_D.sql @@ -0,0 +1,25 @@ +-- dbo.ET_Tabx_HDC_API_DigitalizaceSoubory_D +CREATE TRIGGER dbo.ET_Tabx_HDC_API_DigitalizaceSoubory_D ON dbo.Tabx_HDC_API_DigitalizaceSoubory +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- ! trigger neupravujte, bude stejne pregenerovan pri startu Win sluzby HDCDZApi + + DECLARE + @id INT + + + +-- cisteni seedu + IF EXISTS(SELECT 1 FROM dbo.Tabx_HDC_API_DigitalizaceSoubory) + BEGIN + SELECT @id=MAX(ID) FROM dbo.Tabx_HDC_API_DigitalizaceSoubory + DBCC CHECKIDENT(Tabx_HDC_API_DigitalizaceSoubory, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo.Tabx_HDC_API_DigitalizaceSoubory + +END diff --git a/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_IU.sql b/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_IU.sql new file mode 100644 index 0000000..ee93fba --- /dev/null +++ b/_custom/Gornicky/sql/trg_Tabx_HDC_API_DigitalizaceSoubory_IU.sql @@ -0,0 +1,49 @@ +-- dbo.ET_Tabx_HDC_API_DigitalizaceSoubory_IU +CREATE TRIGGER dbo.ET_Tabx_HDC_API_DigitalizaceSoubory_IU ON dbo.Tabx_HDC_API_DigitalizaceSoubory +WITH EXECUTE AS CALLER +FOR INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON + +-- ! trigger neupravujte, bude stejne pregenerovan pri startu Win sluzby HDCDZApi + + DECLARE + @id INT, + @idDokl INT, + @idDokum INT, + @idZak INT + + + + DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT i.ID, i.DocNumber, i.IDDokument + FROM inserted i + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @id, @idDokl, @idDokum + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idDokum IS NOT NULL) + BEGIN + IF (@idDokl IS NOT NULL) + IF EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idDokl) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokumVazba WHERE IdentVazby=9 AND IdTab=@idDokl AND IdDok=@idDokum) + INSERT dbo.TabDokumVazba (IdentVazby, IdTab, IdDok) SELECT 9, @idDokl, @idDokum + + SET @idZak = (SELECT z.ID FROM dbo.TabDokladyZbozi d INNER JOIN dbo.TabZakazka z ON (z.CisloZakazky=d.CisloZakazky) WHERE d.ID=@idDokl) + IF (@idZak IS NOT NULL) + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokumVazba WHERE IdentVazby=2 AND IdTab=@idZak AND IdDok=@idDokum) + INSERT dbo.TabDokumVazba (IdentVazby, IdTab, IdDok) SELECT 2, @idZak, @idDokum + END -- doklad existuje + END -- dokument neni null + + + END + CLOSE c + DEALLOCATE c + + +END diff --git a/_custom/Gornicky/sqlDefs.inc b/_custom/Gornicky/sqlDefs.inc new file mode 100644 index 0000000..ca28c92 --- /dev/null +++ b/_custom/Gornicky/sqlDefs.inc @@ -0,0 +1 @@ + arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); diff --git a/_custom/Gornicky/uCtrlCustom.pas b/_custom/Gornicky/uCtrlCustom.pas new file mode 100644 index 0000000..4983448 --- /dev/null +++ b/_custom/Gornicky/uCtrlCustom.pas @@ -0,0 +1,106 @@ +unit uCtrlCustom; + +interface + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + helTabsBIDs, + uHeOObj_Base, + uHeOObj_Custom, + uSvcCustom, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +type + + [MVCPath('/gor')] + TGornickyController = class(TBaseController) +{ + strict private + FSelfSvc: TGornickyService; + strict protected + function GetGornickyService: TGornickyService; +} + public + destructor Destroy; override; + +// [MVCDoc('Pomocí POST zapíše obecná json data do Heliosu')] + [MVCPath('/zapisjson')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Gornicky', 'Zápis JSON dat do db Heliosu', 'GORZapisJSONDoHeliosu')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisJSONDoHeliosu (CTX: TWebContext); + + [MVCPath('/nactiurl')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Gornicky', 'Načte data ze zadané URL adresy', 'GORNacteniDatURL')] + [MVCSwagParam(plQuery, 'url', 'URL adresa', ptString, true)] + procedure NactiDataZURL ([MVCFromQueryString('url', '')] sURL: string='' + ); + + end; + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + System.JSON, + JsonDataObjects, + Winapi.ActiveX, + uDataMod, + Quick.Logger; + +const + selSloupce = ''; + + + + +{ TGornickyController } + destructor TGornickyController.Destroy; + begin +// FSelfSvc.Free; + inherited; + end; + + + + procedure TGornickyController.ZapisJSONDoHeliosu (CTX: TWebContext); + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + GetGornickyService.ZapisJsonDoHeliosu (jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + except + RenderStatusMessage (200); + end; + end; + + + procedure TGornickyController.NactiDataZURL (sURL: string = ''); + begin + + end; + + +end. diff --git a/_custom/Gornicky/uHeOObj_Custom.pas b/_custom/Gornicky/uHeOObj_Custom.pas new file mode 100644 index 0000000..39894cd --- /dev/null +++ b/_custom/Gornicky/uHeOObj_Custom.pas @@ -0,0 +1,7 @@ +ďťżunit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +implementation +end. diff --git a/_custom/Gornicky/uSvcCustom.pas b/_custom/Gornicky/uSvcCustom.pas new file mode 100644 index 0000000..329a493 --- /dev/null +++ b/_custom/Gornicky/uSvcCustom.pas @@ -0,0 +1,140 @@ +ďťżunit uSvcCustom; + +interface + +uses + System.Classes, + System.JSON, + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uHeoObj_Vyroba, + uSvc_ObehZbozi, + uSvc_Vyroba; + + +const + CRLF = #13#10; + + + +type + TGornickyService = class(TServiceBase) + public + procedure ZapisJsonDoHeliosu (jsonData: string; var respString: string); + end; + + + +implementation +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + + +{ TGornickyService } + + procedure TGornickyService.ZapisJsonDoHeliosu (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs, guidIdent: string; + guid: TGuid; + akce: string; + j, t, a, v: JsonDataObjects.TJSONObject; + i, ii, taskDZId, taskId, intTemp, idJSON: integer; + jeOld: boolean; + lQry: TFDQuery; + w: TStreamWriter; + jo: System.JSON.TJsonObject; + begin + idJSON:= 0; + respString:= '['; + + jo:= System.JSON.TJsonObject.Create; + + jsonData:= jsonData.Trim; + if (jsonData<>'') then + begin + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + CoCreateGuid(guid); + if (System.SysUtils.CreateGUID(guid)=S_OK) then + guidIdent:= System.SysUtils.GUIDToString(guid) + else + guidIdent:= self.NewUUID32; + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (IdPHIdent, GUIDIdent, JSONData) SELECT 0, CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + '), N' + jsonData.QuotedString; + FDM.sqlConn.ExecSQL(lSQL); + lSQL:= 'SELECT ID FROM ' + tblPrijataJsonData + ' WHERE GUIDIdent=CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + ')'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + begin + idJSON:= lQry.FieldByName('ID').AsInteger; + respString:= 'OK'; + jo.AddPair('heliosid', idJSON.ToString); + end; + except on E:Exception do + begin + respString:= 'NOT OK'; + raise EServiceException.Create('Chyba zĂĄpisu JSON dat: ' + E.Message); + end; + end; + finally + FreeAndNil(lQry); + end; + + + CoInitialize(nil); + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + if (j.Contains('akce')) then + begin + akce:= j.S['akce'].Trim; + if (idJSON>0) and (akce<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); +{ + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + except on E:Exception do + end; + end; +} + end; + finally + j.Free; + end; + CoUninitialize; + + end + else + respString:= 'NO input data'; + + jo.AddPair('status', respString); + respString:= '[' +respString + ']'; + + respString:= jo.ToString; + + + end; + + + +end. diff --git a/_custom/Gornicky/uWebModCustom.inc b/_custom/Gornicky/uWebModCustom.inc new file mode 100644 index 0000000..23ad50b --- /dev/null +++ b/_custom/Gornicky/uWebModCustom.inc @@ -0,0 +1,2 @@ + FEngine.AddController (TGornickyController); + diff --git a/_custom/Gornicky/winSvc/consts.inc b/_custom/Gornicky/winSvc/consts.inc new file mode 100644 index 0000000..a973eca --- /dev/null +++ b/_custom/Gornicky/winSvc/consts.inc @@ -0,0 +1 @@ + tblAPIDigiSoubory = '[dbo].[Tabx_HDC_API_DigitalizaceSoubory]'; diff --git a/_custom/Gornicky/winSvc/gornicky.xml b/_custom/Gornicky/winSvc/gornicky.xml new file mode 100644 index 0000000..ecbcb69 --- /dev/null +++ b/_custom/Gornicky/winSvc/gornicky.xml @@ -0,0 +1,2 @@ + + diff --git a/_custom/Gornicky/winSvc/impl.inc b/_custom/Gornicky/winSvc/impl.inc new file mode 100644 index 0000000..d7995c1 --- /dev/null +++ b/_custom/Gornicky/winSvc/impl.inc @@ -0,0 +1,462 @@ + constructor THeoGorDownPDFThread.Create (AOnTerminate: TNotifyEvent; AService: TService); + begin + inherited Create (false); // Create thread in NOT suspended mode + FMainService:= AService; + FLock:= TCriticalSection.Create; + FRunning:= false; + FTermEvent:= TEvent.Create (nil, False, False, ''); + + +// OnTerminate:= AOnTerminate; +// FreeOnTerminate:= true; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + + destructor THeoGorDownPDFThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread GOR Download PDF...'); +{$ENDIF} + if (FTimer<>0) then + CloseHandle (FTimer); + FTermEvent.Free; + FRunning:= false; + FMainService:= nil; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + procedure THeoGorDownPDFThread.TerminatedSet; + begin + FTermEvent.SetEvent; + end; + + + + procedure THeoGorDownPDFThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + + procedure THeoGorDownPDFThread.Execute; + const _Second = 10_000_000; + var lSQL, errMsg, url, outData, fName, loopCasTyp: string; + lLoop, idDigiFile, cnt, idx: Integer; + lLoopMax, koefProCas: integer; + logRunCnt: integer; + Msg: TMsg; + firstRun, inProg, inDL: boolean; + lQry: TFDQuery; + sqlConnX, sqlConnX2: TFDConnection; + sqlTrans: IFDPhysTransaction; + f, lOpenSSLLib: string; + + lBusy: LongInt; + liDueTime: LARGE_INTEGER; + + mamSSLLibs: boolean; + sslLibPath: string; + http1: System.Net.HTTPClient.THTTPClient; + iResp: System.Net.HTTPClient.IHTTPResponse; + aResp: TMemoryStream; + http2: TIdHttp; + sslHndlr: TIdSSLIOHandlerSocketOpenSSL; + respHttp2: TStream; + i: integer; + sTemp, outData2: string; + + cfgFile: string; + specCfgXML: XML.XmlIntf.IXMLDocument; + n1: XML.XmlIntf.IXMLNode; + attribs: IXMLNodeList; + attrIdx: integer; + + function StringToHex (const inStr: string): string; + var i: integer; + begin + result:= ''; + for i:=1 to Length(inStr) do + result:= result + IntToHex(Ord(inStr[i]), 2); // 2 means two hex digits per character + end; + + function MemStreamToHex (aStream: TMemoryStream): string; + var i: integer; + b: byte; + begin + result:= ''; + for i:=0 to aStream.Size-1 do + begin + b:= PByte(TMemoryStream(aStream).Memory)[i]; + result:= result + IntToHex(b,2); + end; + end; + + begin + lLoop:= 0; + idDigiFile:= 0; + logRunCnt:= 1; + +{ + koefProCas:= 0; // default vteriny + loopCasTyp:= '???'; + case DZTaksZapisTypCas of + 0: koefProCas:= 1; + 1: koefProCas:= 60; + 2: koefProCas:= 3600; + end; + lLoopMax:= koefProCas * intProcessDZTasksSec; + case DZTaksZapisTypCas of + 0: loopCasTyp:= 'sek'; + 1: loopCasTyp:= 'min'; + 2: loopCasTyp:= 'hod'; + end; +} + + lLoopMax:= 10; // v minutach !!!! + try + try + CoInitialize(nil); + cfgFile:= ExtractFilePath(ParamStr(0)) + 'gornicky.xml'; + if (FileExists(cfgFile)) then + begin + specCfgXML:= Xml.XMLDoc.TXMLDocument.Create(nil); + specCfgXML.LoadFromFile (cfgFile); + specCfgXML.Active:= true; + if not(specCfgXML.IsEmptyDoc) then + begin + if (specCfgXML.DocumentElement<>nil) then + begin + n1:= specCfgXML.DocumentElement; + if (n1.NodeName='config') then + begin + attribs:= n1.AttributeNodes; + + attrIdx:= attribs.IndexOf('downPDFintMins'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + lLoopMax:= attribs.Get(i).NodeValue; + end; // n1 = config + end; // specCfgXML.DocumentElement<>nil + end; // not specCfgXML.IsEmptyDoc + end; // FileExists(cfgFile) + except + end; + finally + begin + if (specCfgXML<>nil) then + specCfgXML:= nil; + CoUninitialize; + end; + end; + + datMod.LogInfo (Quick.Logger.etInfo, 'Download PDF interval: ' + lLoopMax.ToString + ' min.'); + lLoopMax:= lLoopMax * 60; // minuty na vteriny + + + firstRun:= true; + inProg:= false; + + sslLibPath:= ''; + f:= ExtractFilePath (ParamStr(0)); + mamSSLLibs:= false; + for lOpenSSLLib in OPENSSL_LIBS do + begin + if (FileExists(TPath.Combine(f, lOpenSSLLib))) then + begin + mamSSLLibs:= true; + sslLibPath:= ExcludeTrailingPathDelimiter (f); + end; + end; + + + FRunning:= false; + if not(datMod.SQLTableExists(tblAPIDigiSoubory)) then + Exit; + + FRunning:= true; + + + if (1=1) then // pro rychle vypnuti + begin + FTimer:= CreateWaitableTimer (nil, true, 'GorDownloadPDFWaitableTimer'); + liDueTime.QuadPart:= -1*_Second; + + + try + while not(Terminated) or not(FRunning) do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + begin + Terminate; + FRunning:= false; + end; + + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } + + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu + begin + idDigiFile:= 0; + firstRun:= false; + + if (logRunCnt<4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim download ' + logRunCnt.toString + '...'); + if (logRunCnt=4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim download - bezi ale dal neloguju'); + + try + if not(inProg) then // nebezi uz ? + begin + + if (1=1) then // pro rychle vypnuti + begin + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.Params.SetStrings (datMod.sqlConnParams); +// sqlConnX.TxOptions.AutoCommit:= false; + sqlConnX.Open; + + if (sqlConnX.Connected) then + begin +// sqlConnX.ExecSQL('DECLARE @i INT; SET @i=ISNULL( (SELECT MAX(ID) FROM dbo.TabDokumenty), 1); DBCC CHECKIDENT (TabDokumenty, RESEED, @i)'); + + lSQL:= '/* hdcDZApiSvc */ SELECT ID FROM ' + tblAPIDigiSoubory + ' WHERE Blokovano=0 AND Zpracovano=0 AND Zpracovat=1' + + ' AND IDDokument IS NULL ORDER BY ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + lQry.First; + if (sqlConnX.TxOptions.AutoCommit=false) then + sqlConnX.StartTransaction; + inProg:= true; + + while not(lQry.EOF) do + begin + + idDigiFile:= lQry.FieldByName('ID').asInteger; + if (idDigiFile>0) then + begin + try +// musim to zablokovat uz tady aby se to nezpracovavalo znovu + sqlConnX.ExecSQL('UPDATE ' + tblAPIDigiSoubory + ' SET Blokovano=1 WHERE ID=' + idDigiFile.ToString); +// datMod.LogInfo (Quick.Logger.etInfo, 'Zablokovani downloadPDF id ' + idDigiFile.ToString + ' pred zpracovanim'); + + + url:= datMod.SQLGetString ('SELECT DocURL FROM ' + tblAPIDigiSoubory + ' WHERE ID=' + idDigiFile.ToString); + if (url<>'') then + begin + + datMod.LogInfo (Quick.Logger.etInfo, 'Mam URL downloadPDF id ' + idDigiFile.ToString); + outData:= ''; + + if (sslLibPath='') then + begin + try + http1:= System.Net.HTTPClient.THTTPClient.Create; + datMod.LogInfo (Quick.Logger.etInfo, 'HTTP klient NET vytvoren downloadPDF id ' + idDigiFile.ToString); + aResp:= TMemoryStream.Create; + // datMod.LogInfo (Quick.Logger.etInfo, 'Vytvoren memStream downloadPDF id ' + idDigiFile.ToString); + try + if (Assigned(http1)) then + begin + http1.AllowCookies:= false; + http1.UserAgent:= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0'; + http1.Accept:= 'application/pdf'; + + datMod.LogInfo (Quick.Logger.etInfo, 'Nacitam data PDF pro downloadPDF id ' + idDigiFile.ToString); + iResp:= http1.Get (url); + aResp:= (iResp.ContentStream as TMemoryStream); + outData:= MemStreamToHex (aResp); + datMod.LogInfo (Quick.Logger.etInfo, 'Mam data PDF pro downloadPDF id ' + idDigiFile.ToString); + + end; + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba zpracovani downloadPDF id ' + idDigiFile.ToString + ' : ' + E.Message); + {$IFDEF DEBUG} + WriteLn ('Chyba zpracovani downloadPDF id ' + idDigiFile.ToString + ' >> ' + E.Message); + {$ENDIF} + end; + end; + finally + http1.Free; + http1:= nil; + aResp.Free; + aResp:= nil; + // datMod.LogInfo (Quick.Logger.etInfo, 'Uvolnen Net HTTP klient a memStream pro downloadPDF id ' + idDigiFile.ToString); + end; + end + else + begin + IdOpenSSLSetLibPath (sslLibPath); + http2:= TIdHttp.Create (nil); + sslHndlr:= TIdSSLIOHandlerSocketOpenSSL.Create (http2); + try + sslHndlr.SSLOptions.Method:= sslvTLSv1_2; + sslHndlr.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1]; + http2.IOHandler:= sslHndlr; + + http2.Request.Accept:= 'application/pdf'; + http2.Request.BasicAuthentication := False; + http2.HTTPOptions:= http2.HTTPOptions + [hoKeepOrigProtocol] + [hoNoProtocolErrorException]; + http2.Request.ContentType:= 'application/pdf; charset=utf-8'; + respHttp2:= TMemoryStream.Create; + http2.Get (url, respHttp2); + outData:= MemStreamToHex (respHttp2 as TMemoryStream); + finally + FreeAndNil (sslHndlr); // must be freed before IdHttp + FreeAndNil (http2); + FreeAndNil (respHttp2); + // datMod.LogInfo (Quick.Logger.etInfo, 'Uvolnen Indy HTTP klient a memStream pro downloadPDF id ' + idDigiFile.ToString); + end; + + end; + + + if (outData<>'') then + begin + // datMod.LogInfo (Quick.Logger.etInfo, 'Mam data 2 PDF pro downloadPDF id ' + idDigiFile.ToString); + fName:= ''; + i:= LastDelimiter ('/\', url); + if (i>0) then + fName:= Copy (url, i+1, Length(url)-i); + + if (LeftStr(outData,4)='5025') then + begin + outData2:= ''; + for i:=1 to Length(outData) div 2 do + outData2:= outData2 + MidStr(outData, (4*i)-1, 2) + MidStr(outData, (4*i)-3, 2); + if (outData2<>'') then + outData:= outData2; + end; + + lSQL:= 'DECLARE @i INT' + CRLF + 'SET @i=(SELECT ID FROM dbo.TabDokumenty WHERE JmenoACesta=N' + url.QuotedString + + ')' + CRLF + 'IF (@i IS NULL)' + CRLF + + ' BEGIN' + CRLF + ' INSERT dbo.TabDokumenty (Popis, JmenoACesta, Poznamka, Autor, Dokument) SELECT N' + fName.QuotedString + + ', N' + fName.QuotedString + ', N' + url.QuotedString + ', N''apiImport''' + + ', CONVERT(varbinary(max), 0x' + outData +', 1)' + CRLF + ' SET @i=SCOPE_IDENTITY()' + CRLF + ' END' + + CRLF + 'SELECT @i'; + sTemp:= datMod.SQLGetString (lSQL); + if (sTemp<>'') then + begin + // datMod.LogInfo (Quick.Logger.etInfo, 'Update zapisu downloadPDF id ' + idDigiFile.ToString); + lSQL:= 'UPDATE ' + tblAPIDigiSoubory + ' SET IDDokument=' + sTemp + ', DatZpracovani=GETDATE(), Blokovano=0 WHERE ID=' + idDigiFile.ToString; + sqlConnX.ExecSQL(lSQL); + // datMod.LogInfo (Quick.Logger.etInfo, 'Update zapisu/odblokovani downloadPDF id ' + idDigiFile.ToString + ' - OK'); + end; + end; + + end; // url<>'' + + + if (url='') then + begin + lSQL:= 'UPDATE ' + tblAPIDigiSoubory + ' SET DatZpracovani=GETDATE(), Blokovano=0 WHERE ID=' + idDigiFile.ToString; + sqlConnX.ExecSQL (lSQL); + end; + + + except on E:Exception do + begin + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; +{$IFDEF DEBUG} + WriteLn ('Chyba 2 zpracovani downloadPDF id ' + idDigiFile.ToString + ' >> ' + errMsg); +{$ENDIF} + // sqlConnX.ExecSQL('UPDATE ' + tblAPIDigiSoubory + ' SET PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idDigiFile.ToString); + datMod.LogInfo(Quick.Logger.etError, 'Chyba 2 zpracovani downloadPDF ID ' + idDigiFile.ToString + ' : ' + errMsg); + end; + end; + end; + lQry.Next; + end; + end; + finally + lQry.Close; + FreeAndNil (lQry); +// lQry.Free; +// lQry:= nil; + end; +// datMod.LogInfo (Quick.Logger.etInfo, 'Uzavrena SQL query - downloadPDF id ' + idDigiFile.ToString); + + if (sqlConnX.InTransaction) then + sqlConnX.Commit; + inProg:= false; + end; // sql Connected + sqlConnX.Close; + FreeAndNil (sqlConnX); +// sqlConnX.Free; +// sqlConnX:= nil; + +// datMod.LogInfo (Quick.Logger.etInfo, 'Zrusena SQL connection - downloadPDF id ' + idDigiFile.ToString); + end; + end; + + except on E:Exception do + begin + inProg:= false; + if (lQry<>nil) then + begin + lQry.Close; + FreeAndNil (lQry); + end; + if (sqlConnX<>nil) then + begin + if (sqlConnX.InTransaction) then + sqlConnX.Rollback; + sqlConnX.Close; + FreeAndNil (sqlConnX); +// sqlConnX.Free; +// sqlConnX:= nil; + end; + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + if (mamTabPrijataData) then + datMod.LogInfo (Quick.Logger.etError, 'Chyba zpracovani API souboru ID ' + idDigiFile.ToString + ' : ' + errMsg); + end; + end; + + + lLoop:= 0; + if (logRunCnt<5) then + Inc (logRunCnt); + end; + Inc (lLoop); + + if (FTimer<>0) then + SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); + repeat + lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); + until lBusy = WAIT_OBJECT_0; +// Sleep (998); + + end; + finally + end; + + end; + + if (sqlConnX2<>nil) then + begin + if (sqlConnX2.Connected) then + sqlConnX2.Close; + FreeAndNil (sqlConnX2); + end; + + end; + + diff --git a/_custom/Gornicky/winSvc/mainPrivs.inc b/_custom/Gornicky/winSvc/mainPrivs.inc new file mode 100644 index 0000000..467a722 --- /dev/null +++ b/_custom/Gornicky/winSvc/mainPrivs.inc @@ -0,0 +1 @@ + gorDownPDFThr: THeoGorDownPDFThread; diff --git a/_custom/Gornicky/winSvc/mainSvcCont.inc b/_custom/Gornicky/winSvc/mainSvcCont.inc new file mode 100644 index 0000000..7796a7b --- /dev/null +++ b/_custom/Gornicky/winSvc/mainSvcCont.inc @@ -0,0 +1,3 @@ + if (gorDownPDFThr<>nil) then + if (gorDownPDFThr.Suspended) then + gorDownPDFThr.Resume; diff --git a/_custom/Gornicky/winSvc/mainSvcExec.inc b/_custom/Gornicky/winSvc/mainSvcExec.inc new file mode 100644 index 0000000..c3f93ad --- /dev/null +++ b/_custom/Gornicky/winSvc/mainSvcExec.inc @@ -0,0 +1,6 @@ + if (gorDownPDFThr<>nil) then + if not(gorDownPDFThr.Started) then + begin + gorDownPDFThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby GOR downloadPDF - pocet ' + datMod.SQLGetString('SELECT COUNT(ID) FROM ' + tblAPIDigiSoubory + ' WHERE Zpracovat=1 AND DatZpracovani IS NULL')); + end; diff --git a/_custom/Gornicky/winSvc/mainSvcPause.inc b/_custom/Gornicky/winSvc/mainSvcPause.inc new file mode 100644 index 0000000..8d0ac55 --- /dev/null +++ b/_custom/Gornicky/winSvc/mainSvcPause.inc @@ -0,0 +1,3 @@ + if (gorDownPDFThr<>nil) then + if not(gorDownPDFThr.Suspended) then + gorDownPDFThr.Suspend; diff --git a/_custom/Gornicky/winSvc/mainSvcStart.inc b/_custom/Gornicky/winSvc/mainSvcStart.inc new file mode 100644 index 0000000..fb93121 --- /dev/null +++ b/_custom/Gornicky/winSvc/mainSvcStart.inc @@ -0,0 +1,12 @@ + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby GOR downloadPDF - inverval 10 minut...'); +{$IFDEF DEBUG} + WriteLn ('Start sluzby GOR downloadPDF - inverval 10 minut...'); +{$ENDIF} + gorDownPDFThr:= THeoGorDownPDFThread.Create (ThreadTerminated, self); + if (gorDownPDFThr.Started) then + begin + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Gornicky/winSvc/mainSvcStop.inc b/_custom/Gornicky/winSvc/mainSvcStop.inc new file mode 100644 index 0000000..52dc132 --- /dev/null +++ b/_custom/Gornicky/winSvc/mainSvcStop.inc @@ -0,0 +1,18 @@ + if Assigned(gorDownPDFThr) then + begin +{$IFDEF DEBUG} + WriteLn ('Ukoncuji sluzbu GOR downloadPDF...'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu GOR downloadPDF...'); + try + gorDownPDFThr.ThreadTerminate; + FreeAndNil(gorDownPDFThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Gornicky/winSvc/readCfg.inc b/_custom/Gornicky/winSvc/readCfg.inc new file mode 100644 index 0000000..d03783c --- /dev/null +++ b/_custom/Gornicky/winSvc/readCfg.inc @@ -0,0 +1,3 @@ + + +intervalSecDownPDF \ No newline at end of file diff --git a/_custom/Gornicky/winSvc/types.inc b/_custom/Gornicky/winSvc/types.inc new file mode 100644 index 0000000..cba6dc9 --- /dev/null +++ b/_custom/Gornicky/winSvc/types.inc @@ -0,0 +1,15 @@ + THeoGorDownPDFThread = class(TThread) + private + FMainService: TService; + FLock: TCriticalSection; + FTermEvent: TEvent; + FRunning: boolean; + FTimer: THandle; + protected + procedure Execute; override; + procedure TerminatedSet; override; // XE2+ only * + public + constructor Create (AOnTerminate: TNotifyEvent; AService: TService); + destructor Destroy; override; + procedure ThreadTerminate; + end; diff --git a/_custom/Gornicky/winSvc/uses.inc b/_custom/Gornicky/winSvc/uses.inc new file mode 100644 index 0000000..e69de29 diff --git a/_custom/Gornicky/winSvc/usesTop.inc b/_custom/Gornicky/winSvc/usesTop.inc new file mode 100644 index 0000000..df96fd9 --- /dev/null +++ b/_custom/Gornicky/winSvc/usesTop.inc @@ -0,0 +1 @@ + System.Net.HttpClient, System.Threading, \ No newline at end of file diff --git a/_custom/Gornicky/winSvc/vars.inc b/_custom/Gornicky/winSvc/vars.inc new file mode 100644 index 0000000..86ba767 --- /dev/null +++ b/_custom/Gornicky/winSvc/vars.inc @@ -0,0 +1 @@ + intervalSecDownPDF: integer; diff --git a/_custom/Gornicky/zdroje.RES b/_custom/Gornicky/zdroje.RES new file mode 100644 index 0000000..41bc353 Binary files /dev/null and b/_custom/Gornicky/zdroje.RES differ diff --git a/_custom/Gornicky/zdroje.rc b/_custom/Gornicky/zdroje.rc new file mode 100644 index 0000000..b257721 --- /dev/null +++ b/_custom/Gornicky/zdroje.rc @@ -0,0 +1 @@ +ep_HDCDZApi_ZpracujPrijataData RCDATA .\sql\ep_HDCDZApi_ZpracujPrijataData.sql diff --git a/_custom/INCOSystems/customDefs.inc b/_custom/INCOSystems/customDefs.inc new file mode 100644 index 0000000..804d284 --- /dev/null +++ b/_custom/INCOSystems/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in '_custom\INCOSystems\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\INCOSystems\uCtrlCustom.pas' + ,uSvcCustom in 'uSvcCustom.pas' diff --git a/_custom/INCOSystems/sql/col_TabEvidRozpracOper_EXT.sql b/_custom/INCOSystems/sql/col_TabEvidRozpracOper_EXT.sql new file mode 100644 index 0000000..ec2a2c2 --- /dev/null +++ b/_custom/INCOSystems/sql/col_TabEvidRozpracOper_EXT.sql @@ -0,0 +1,6 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabEvidRozpracOper_EXT', N'_PHIdent') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabEvidRozpracOper', @NazevAtrSys=N'_PHIdent', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Datazone ID', + @NazevAtrVerZkr=N'', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'N', @SirkaSloupceAtr=12, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=0, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 diff --git a/_custom/INCOSystems/sql/col_TabKmenZbozi_EXT.sql b/_custom/INCOSystems/sql/col_TabKmenZbozi_EXT.sql new file mode 100644 index 0000000..949701b --- /dev/null +++ b/_custom/INCOSystems/sql/col_TabKmenZbozi_EXT.sql @@ -0,0 +1,8 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabKmenZbozi_EXT', N'_SkladProVydejMat') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabKmenZbozi', @NazevAtrSys=N'_SkladProVydejMat', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Sklad pro výdej podřízeného materiálu', + @NazevAtrVerZkr=N'Sklad mat.', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=4, @ExtEd_Atr=N'Cislo', @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(30)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, + @BublinaAtr=N'Sklad, ze kterého bude vydáván všechen materiál v požadavcích příkazu tohoto dílce' + diff --git a/_custom/INCOSystems/sql/col_TabPrPostup_EXT.sql b/_custom/INCOSystems/sql/col_TabPrPostup_EXT.sql new file mode 100644 index 0000000..98b72eb --- /dev/null +++ b/_custom/INCOSystems/sql/col_TabPrPostup_EXT.sql @@ -0,0 +1,6 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_IDPrednaOper') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_IDPrednaOper', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Vazba na Přednastavení operací', + @NazevAtrVerZkr=N'', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @BublinaAtr=N'' diff --git a/_custom/INCOSystems/sql/col_TabPredna_EXT.sql b/_custom/INCOSystems/sql/col_TabPredna_EXT.sql new file mode 100644 index 0000000..e15dd87 --- /dev/null +++ b/_custom/INCOSystems/sql/col_TabPredna_EXT.sql @@ -0,0 +1,20 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPredna', @NazevAtrSys=N'_CisloOperace', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Číslo operace', + @NazevAtrVerZkr=N'Operace', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(4)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @BublinaAtr=N'Číslo operace jedinečné přes všechny příkazy' + + +IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPredna', @NazevAtrSys=N'_OdvadeciOperace', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Odváděcí operace', + @NazevAtrVerZkr=N'Odv.operace', @TypAtr=N'BIT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'BIT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @BublinaAtr=N'Příznak Odváděcí operace' + + +IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPredna', @NazevAtrSys=N'_IDNasledujiciOperaceAutomat', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Následná operace', + @NazevAtrVerZkr=N'Následná operace', @TypAtr=N'INT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=14, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'INT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @BublinaAtr=N'Následná operace' diff --git a/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql new file mode 100644 index 0000000..6c3530f --- /dev/null +++ b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql @@ -0,0 +1,1076 @@ +-- dbo.ep_HDCDZApi_ZpracujPrijataData +CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData + @idJson INT=NULL +AS + +SET NOCOUNT ON +-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi ! + + + +DECLARE + @errMsg NVARCHAR(500)=N'', + @errProc NVARCHAR(100), + @tranPred INT, + @iChyba INT, + @bChyba BIT, + @iTemp INT, + @debugXML XML, + @idUziv INT + +DECLARE + @operJson NVARCHAR(max), + @idDatazoneOper INT, + @prikJson NVARCHAR(max), + @materialJson NVARCHAR(max), + @objekt NVARCHAR(50), + @akce NVARCHAR(50), + @trida NVARCHAR(50), + @statusOp NVARCHAR(50), + @typOperJson NVARCHAR(50), + @jsonString NVARCHAR(max), + @cisZam INT, + @idZam INT, + @idVPr INT, + @radaVPr NVARCHAR(10), + @radaDZVydej NVARCHAR(3), + @dpzVydej TINYINT, + @idVCPrik INT, + @vc NVARCHAR(100), + @pocetVC INT, + @dokl INT, + @alt NCHAR(1), + @idPrP INT, + @idPrPOdv INT, + @doklOdv INT, + @doklNew INT, + @doklAutomat INT, + @altAutomat NCHAR(1), + @jeOdvadeci BIT=0, + @datStart DATETIME, + @datKonec DATETIME, + @skCasSek INT, + @mnoz NUMERIC(19,6), + @idPrednaOp INT, + @idPrednaOpOdv INT, + @operPrednaOdv NVARCHAR(4), + @cisloOdvOper NVARCHAR(4), + @operPrednaPrac INT, + @typOper TINYINT, + @idPrac INT, + @idPracOld INT, + @idPracAutomat INT, + @idStroj INT, + @nazevOp NVARCHAR(100), + @operPredna NVARCHAR(4), + @odvadeciPredna BIT=0, + @prvniOperace BIT=0, -- priznak prvni operace (neodvadeci) + @prvniOperaceVPrInt INT, + @cisOper INT, + @cisOperMax INT, + @operMax NVARCHAR(4), + @nazevOpMax NVARCHAR(100), + @idKoop INT, + @idEvidROp INT, + @idEvidROpPol INT, + @cntEvidROpPol INT, + @idMzdy INT, + @pocetMezd INT=0, + @idMezdStr NVARCHAR(max), + @idPrednaOpAutomat INT, + @operPrednaOpAutomat NVARCHAR(4), + @casSekOperPrednaAutomat INT, + @casSekVypalovani INT, + @idMzdyAutomat INT, + @datKonecOp DATETIME, + @ksZive NUMERIC(19,6), + @ksEvid NUMERIC(19,6), + @pocetEvidOp INT, + @mamVypaleno BIT=0, + @pocetVypalovani INT=0 + +DECLARE + @idDZ INT, + @idDZ2 INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @szJeMat BIT=0, + @idKZ INT, + @idPrKVazby INT, + @idDilec INT, + @idVCS INT, + @mnozstviPomer_A NUMERIC(19,6), + @mnozstviPomer_B NUMERIC(19,6), + @idGenVydejPrednaPol INT, + @sklProVydej NVARCHAR(30), + @sklProVydejRP NVARCHAR(30), + @sklSurovyDil NVARCHAR(30), + @sklSurovyJeIMaterial BIT=0 -- priznak ze sklad pro vydej suroveho dilu (SK 100) je i pro vydej materialu (ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat) + +DECLARE @prikOperProEvid TABLE (IDPrikaz INT NOT NULL, DokladOp INT, AltOp NCHAR(1) ) +DECLARE @evidOperR TABLE (ID INT NOT NULL, IDEvidRozpracOper INT, IDPrikaz INT, Doklad INT, Alt NCHAR(1), JeOdvadeci BIT NOT NULL DEFAULT 0, Smazat BIT NOT NULL DEFAULT 0) +DECLARE @evidMzdy TABLE (ID INT NOT NULL) +DECLARE @evidMzdyVypalovani TABLE (ID INT NOT NULL) + +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) ) + + +DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna +CREATE TABLE #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz int, Doklad int, IDMzdy int) + + +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna +CREATE TABLE #HDCTabPrKVazbyGenVCPredna ( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna +CREATE TABLE #HDCTabPrKVazbyGenPredna ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NTEXT NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + +-- cisteni seedu +SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPrikazMzdyAZmetky) +DBCC CHECKIDENT (TabPrikazMzdyAZmetky, RESEED, @iTemp) +SET @iTemp = (SELECT MAX(ID) FROM dbo.TabDokladyZbozi) +DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp) +SET @iTemp = (SELECT MAX(ID) FROM dbo.TabPohybyZbozi) +DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp) + + + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + +SET @operPrednaOdv = N'' +SET @idPrednaOpOdv = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _OdvadeciOperace=1) +IF (@idPrednaOpOdv IS NOT NULL) + SET @operPrednaOdv = (SELECT _CIsloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpOdv) + + + + + +IF (@idJson IS NOT NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData, Objekt, Akce FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData, Objekt, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE Blokovano=0 + AND DatZpracovani IS NULL + AND ISNULL(JSONData,N'')<>N'' + ORDER BY DatPorizeni +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @objekt, @akce + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson + END + + SET @objekt = TRIM(ISNULL(@objekt, N'')) + SET @akce = TRIM(ISNULL(@akce, N'')) + + BEGIN TRY + SET @tranPred=@@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) VALUES (@jsonString) + IF (@objekt=N'') + SELECT TOP(1) @objekt = JSON_VALUE(doc, '$.object') FROM #TabJSONData + IF (@akce=N'') + SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action') FROM #TabJSONData + + IF (@objekt=N'operace') + BEGIN + SELECT TOP(1) @cisZam = JSON_VALUE(doc, '$.operace.worker.code') FROM #TabJSONData + SET @idZam = (SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cisZam) + END + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam, Blokovano=1 WHERE ID=@idJson + + + IF (@objekt=N'operace') AND (@idZam IS NOT NULL) + BEGIN + IF (@akce=N'start') + BEGIN + SET @idDatazoneOper = NULL + SET @idEvidROp = NULL + SET @errMsg = N'' + SET @operPredna = N'' + SET @odvadeciPredna = 0 + SET @nazevOp = N'' + SET @operMax = N'' + + SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'), + @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'), + @statusOp = JSON_VALUE(d3.operace, '$.status'), @typOperJson=JSON_VALUE(d3.operace, '$.typ'), + @prikJson = d4.prikazy, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId') + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2 + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([operace] NVARCHAR(max) AS JSON) AS d3 + CROSS APPLY OPENJSON(d3.operace, N'$') + WITH ([prikazy] NVARCHAR(max) AS JSON) AS d4 + + IF (@idDatazoneOper IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson + + DELETE FROM @prikOperProEvid + SET @idPrP = NULL + + IF (@idPrednaOp IS NOT NULL) + BEGIN + SET @operPredna = CONVERT(nvarchar, @idPrednaOp) + SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna) + END + IF (@idPrednaOp IS NOT NULL) + BEGIN + SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace + FROM dbo.TabPredna WHERE ID=@idPrednaOp + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) + SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL) + SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + END + SET @operPredna = ISNULL(@operPredna,N'') + IF (@operPredna=N'') + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: přednastavení ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nemá zadané číslo operace.' WHERE ID=@idJson + CONTINUE + END + + + IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL) + INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr + + IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL) + BEGIN + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @prikJson + SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO) + DECLARE hop CURSOR LOCAL FOR + SELECT d1.id + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH (id INT) AS d1 + OPEN hop + WHILE (1=1) + BEGIN + FETCH NEXT FROM hop INTO @idVPr + IF (@@FETCH_STATUS<>0) BREAK + INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr + END + CLOSE hop + DEALLOCATE hop + END -- hromadny + + +-- sklad pro vydej si zjisti z rady prikazu nebo ext.info na dilci + SET @sklProVydej = NULL + + DECLARE p CURSOR LOCAL FOR + SELECT IDPrikaz FROM @prikOperProEvid + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idVPr + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idDilec=p.IDTabKmen, @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ + FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr + +-- SET @operPredna=dbo.hf_ZarovnejOperaciTechPos(@operPredna) +/* + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND nazev=@nazevOp + AND ISNULL(pracoviste,0)=ISNULL(@idPrac,0) AND ISNULL(IDkooperace,0)=ISNULL(@idKoop,0) AND ISNULL(IDStroje,0)=ISNULL(@idStroj,0)) +*/ + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE Prednastaveno=1 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@operPredna) + +-- existuje odvadeci operace v Prednastaveni pro operace a v prikazu ? pokud neni v prikazu, pridej ji do prikazu + SET @doklOdv = NULL + SET @idPrPOdv = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Operace=@operPrednaOdv AND Odvadeci=1) + +-- pokud prednastavena Odvadeci jeste neni v prikazu, pridej ji tam + IF (@idPrPOdv IS NULL) AND (@idPrednaOpOdv IS NOT NULL) + BEGIN + EXEC @idPrPOdv = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpOdv, @Operace=@operPrednaOdv + IF (@idPrPOdv IS NOT NULL) + BEGIN +-- korekce cisla dokladu odvadeci operace, posun na konec seznamu operaci + SET @doklOdv=9990 + UPDATE dbo.TabPrPostup SET Odvadeci=0 WHERE ID<>@idPrPOdv AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL + UPDATE dbo.TabPrPostup SET Doklad=@doklOdv, Odvadeci=1 WHERE ID=@idPrPOdv + END + END + IF (@doklOdv IS NULL) AND (@idPrPOdv IS NOT NULL) + SELECT @doklOdv=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrPOdv + + +-- prednastavena operace v prikazu jeste neni, pridej ji + IF (@idPrP IS NULL) + BEGIN + EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOp, @Operace=@operPredna, + @VyraditZKontrolyPosloupOper=1 + IF (@idPrP IS NOT NULL) + BEGIN +-- korekce cisla dokladu, pred odvadeci opeaci + SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WITH (TABLOCKX) WHERE IDPrikaz=@idVPr AND Doklad<9990 + UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0 WHERE ID=@idPrP + END + END + + SET @idPrednaOpAutomat = NULL + SET @operPrednaOpAutomat = N'' + + IF (@idPrP IS NOT NULL) + BEGIN + SELECT @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP + UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE ID=@idPrP AND Odvadeci=0 + +-- korekce cisla dokladu aby bylo pred odvadeci operaci + IF (@doklOdv IS NOT NULL) + IF (@dokl>@doklOdv) + BEGIN + SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup + WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0) + IF (@doklNew IS NOT NULL) + BEGIN + UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP + SET @dokl = @doklNew + END + END + + IF (@idEvidROp IS NULL) + EXEC @idEvidROp = dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZam, @IDPracoviste=@idPrac, @IDStroje=@idStroj, @CasZahajeni=@datStart, @errMsg = @errMsg OUT + + IF (@idEvidROp IS NOT NULL) + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOper_EXT WHERE ID=@idEvidROp) + INSERT dbo.TabEvidRozpracOper_EXT (ID) VALUES (@idEvidROp) + IF (@idDatazoneOper IS NOT NULL) + UPDATE dbo.TabEvidRozpracOper_EXT SET _PHIdent=@idDatazoneOper WHERE ID=@idEvidROp + + SET @idVCPrik = NULL + IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0) + SET @idVCPrik = (SELECT TOP(1) ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr) + EXEC @idEvidROpPol = dbo.ep_Vyroba_InsertEvidRozpracOperPol @IDEvidRozpOper=@idEvidROp, @IdPrikaz=@idVPr, @doklPrPost=@dokl, + @altPrPost=@alt, @IdVyrCis=@idVCPrik, @errMsg = @errMsg OUT + END -- idEvidROp IS NOT NULL + END -- idPrP IS NOT NULL + +-- pokud mam naslednou automatickou operaci, zkontrolu a pripadne ji pridej na prikaz + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL) + SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL) + SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat + SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'') + IF (@operPrednaOpAutomat<>N'') + BEGIN + SET @idPrP = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat) + IF (@idPrP IS NULL) + EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpAutomat, @Operace=@operPrednaOpAutomat, + @VyraditZKontrolyPosloupOper=1 + IF (@idPrP IS NOT NULL) + BEGIN +-- korekce cisla dokladu + SELECT @dokl=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrP + IF (@dokl>@doklOdv) + BEGIN + SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup + WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0) + IF (@doklNew IS NOT NULL) + BEGIN + UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP AND Operace=@operPrednaOpAutomat + SET @dokl = @doklNew + END + END -- @dokl>@doklOdv + END -- @idPrP IS NOT NULL + END -- @operPrednaOpAutomat<>N'' + END + CLOSE p + DEALLOCATE p + + IF (@errMsg<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDEvidRozpOp=@idEvidROp WHERE ID=@idJson + END -- akce Start + + + + + + IF (@akce=N'stop') + BEGIN + SET @idDatazoneOper = NULL + SET @idEvidROp = NULL + SET @errMsg = N'' + SET @operPredna = N'' + SET @odvadeciPredna = 0 + SET @operPrednaOpAutomat = N'' + SET @idPrednaOpAutomat = NULL + SET @nazevOp = N'' + SET @operMax = N'' + DELETE FROM @prikOperProEvid + DELETE FROM @evidOperR + DELETE FROM @evidMzdy + + SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'), + @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'), + @datKonec = JSON_VALUE(d3.operace, '$.stopAt'), @statusOp = JSON_VALUE(d3.operace, '$.status'), + @typOperJson=JSON_VALUE(d3.operace, '$.typ'), + @prikJson = d4.prikazy, @materialJson=d4.material, @idDatazoneOper = JSON_VALUE(d.doc, '$.operace.datazoneId') + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2 + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([operace] NVARCHAR(max) AS JSON) AS d3 + CROSS APPLY OPENJSON(d3.operace, N'$') + WITH ([prikazy] NVARCHAR(max) AS JSON, [material] NVARCHAR(max) AS JSON) AS d4 + + SET @materialJson = ISNULL(@materialJson, N'') + IF (CHARINDEX('skupina', @materialJson)>0) + UPDATE dbo._hdc_ph_PrijataJsonData SET MamMaterial=1 WHERE ID=@idJson + + IF (@idDatazoneOper IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson + + SET @idPrP = NULL + SET @idPrac = NULL + + IF (@idPrednaOp IS NOT NULL) + BEGIN + SET @operPredna = CONVERT(nvarchar, @idPrednaOp) + SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna) + END + IF (@idPrednaOp IS NOT NULL) + BEGIN + SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace + FROM dbo.TabPredna WHERE ID=@idPrednaOp + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) + SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL) + SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + END + SET @operPredna = ISNULL(@operPredna,N'') + IF (@operPredna=N'') + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: přednastavení ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nemá zadané číslo operace.' WHERE ID=@idJson + CONTINUE + END + + SET @idPrednaOpAutomat = NULL + SET @operPrednaOpAutomat = N'' + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL) + SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL) + SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat + SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'') + SET @casSekOperPrednaAutomat = ISNULL( (SELECT TAC_J_S FROM dbo.TabPredna WHERE ID=@idPrednaOpAutomat), 0) + + SET @casSekVypalovani = 0 + IF (@operPrednaOpAutomat=N'9260') + SET @casSekVypalovani = @casSekOperPrednaAutomat + + + IF (@idPrac IS NULL) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'Z operace nelze identifikovat pracoviste, neslo by identifikovat EvidRozpracOper' WHERE ID=@idJson + CONTINUE + END + + + IF (@typOperJson IN (N'prikaz', N'prednastavena')) AND (@idVPr IS NOT NULL) + INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr + + IF (@typOperJson=N'hromadny') AND (@idVPr IS NULL) + BEGIN + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @prikJson + SET @debugXML = (SELECT * FROM #TabJSONData FOR XML AUTO) + DECLARE hop CURSOR LOCAL FOR + SELECT d1.id + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH (id INT) AS d1 + OPEN hop + WHILE (1=1) + BEGIN + FETCH NEXT FROM hop INTO @idVPr + IF (@@FETCH_STATUS<>0) BREAK + INSERT @prikOperProEvid (IDPrikaz) SELECT @idVPr + END + CLOSE hop + DEALLOCATE hop + END -- hromadny + + + DECLARE p CURSOR LOCAL FOR + SELECT IDPrikaz FROM @prikOperProEvid + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idVPr + IF (@@FETCH_STATUS<>0) BREAK + + SET @idEvidROpPol = (SELECT TOP(1) r.ID FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper) + LEFT JOIN dbo.TabEvidRozpracOper_EXT he ON (he.ID=h.ID) + INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=r.IDPrikaz AND pp.Doklad=r.DokladPrPostup AND pp.Alt=r.AltPrPostup) + INNER JOIN dbo.TabPrikaz p ON (p.ID=r.IDPrikaz) + WHERE pp.IDOdchylkyDo IS NULL AND h.IDPracoviste=@idPrac AND r.IDPrikaz=@idVPr AND p.StavPrikazu IN (30) + AND pp.Operace=@operPredna AND pp.Prednastaveno=1 AND h.IDZamestnance=@idZam + AND ISNULL(he._PHIdent,0)=ISNULL(@idDatazoneOper,0) + AND h.CasUkonceni IS NULL) + IF (@idEvidROpPol IS NOT NULL) + INSERT @evidOperR (ID, IDEvidRozpracOper, IDPrikaz, Doklad, Alt) + SELECT ID, IDEvidRozpracOper, @idVPr, DokladPrPostup, AltPrPostup FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol + END + CLOSE p + DEALLOCATE p + + IF EXISTS (SELECT 1 FROM @evidOperR) + BEGIN + IF (@datKonec<=@datStart) OR (@datKonec IS NULL) + SET @datKonec = DATEADD(s, 5, @datStart) + SET @skCasSek = DATEDIFF(s, @datStart, @datKonec) + + SET @cntEvidROpPol = ISNULL( (SELECT COUNT(ID) FROM TabEvidRozpracOperR + WHERE IDEvidRozpracOper=(SELECT TOP(1) IDEvidRozpracOper FROM @evidOperR)), 0) + SET @pocetEvidOp = ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0) + +-- pokud mam stejny pocet rozpracovanych operaci vuci prikazum v json, zkontroluj jestli nejaka neni odvadeci + IF (@cntEvidROpPol=@pocetEvidOp) + BEGIN + DECLARE e CURSOR LOCAL FOR + SELECT ID FROM @evidOperR + OPEN e + WHILE (1=1) + BEGIN + FETCH NEXT FROM e INTO @idEvidROpPol + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idVPr=r.IDPrikaz, @dokl=r.DokladPrPostup, @alt=r.AltPrPostup, @idVCPrik=r.IDVyrCis, @idPracOld=h.IDPracoviste + FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper) + WHERE r.ID=@idEvidROpPol + + SELECT @ksZive=kusy_zive FROM dbo.TabPrikaz WHERE ID=@idVPr + SET @ksEvid = ISNULL( (SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM dbo.TabPrikazMzdyAZmetky + WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt + AND ISNULL(IDVyrCis,0)=ISNULL(@idVCPrik,0) + ), 0) + SET @jeOdvadeci=0 + IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL + AND Prednastaveno=1 AND Odvadeci=1) + SET @jeOdvadeci=1 + UPDATE @evidOperR SET JeOdvadeci=@jeOdvadeci WHERE ID=@idEvidROpPol + + IF (@jeOdvadeci=1) AND (@ksEvid>=@ksZive) + BEGIN + DELETE FROM dbo.TabEvidRozpracOperR WHERE ID=@idEvidROpPol + UPDATE @evidOperR SET Smazat=1 WHERE ID=@idEvidROpPol + END + END + CLOSE e + DEALLOCATE e + DELETE FROM @evidOperR WHERE Smazat=1 OR IDEvidRozpracOper IS NULL + END -- mam v json stejny pocet prikazu jako v EvidROp + +-- mam jen jednu EvidRozpracOper hlavicku ? + IF (1=ISNULL( (SELECT COUNT(*) FROM (SELECT DISTINCT(IDEvidRozpracOper) FROM @evidOperR GROUP BY IDEvidRozpracOper) x), 0)) + BEGIN + SELECT TOP(1) @idEvidROp=IDEvidRozpracOper FROM @evidOperR + UPDATE dbo.TabEvidRozpracOperR + SET Mnoz_odv = IIF(@jeOdvadeci=1, 1, 0) +-- ,Sk_Cas = CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END, +-- Sk_Cas_Obsluhy = CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END + WHERE IDEvidRozpracOper=@idEvidROp + UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@datKonec, CelkovyCas_T=0, CelkovyCas=@skCasSek WHERE ID=@idEvidROp + EXEC hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvidROp, @CelkovyCas_S=@skCasSek, @KVO=1 + +-- evidence vsech mezd + DELETE FROM @evidMzdy + DELETE FROM @evidMzdyVypalovani + DECLARE e CURSOR LOCAL FOR + SELECT ID, IDPrikaz, Doklad, Alt, JeOdvadeci FROM @evidOperR + OPEN e + WHILE (1=1) + BEGIN + FETCH NEXT FROM e INTO @idEvidROpPol, @idVPr, @dokl, @alt, @jeOdvadeci + IF (@@FETCH_STATUS<>0) BREAK + +-- vypni kontrolu posloupnosti pro operaci + UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL + + EXEC @idMzdy = dbo.hp_EvidenceOperace @IDEvidRozpracOperR=@idEvidROpPol, @Stav=0 + IF (@idMzdy IS NOT NULL) + BEGIN + INSERT @evidMzdy (ID) VALUES (@idMzdy) + IF (@idPracOld IS NOT NULL) + EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdy, @Stav=1, @ZapisZmenu=0 + + IF (@idVPr IS NULL) + SELECT @idVPr=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy + + UPDATE dbo.TabPrikazMzdyAZmetky SET Datum = dbo.hf_TruncDate(@datKonec) WHERE ID=@idMzdy + SELECT @datKonecOp=DatumUkonceniOp FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy +-- zaeviduj i automatickou operaci + IF (@operPrednaOpAutomat<>N'') + BEGIN + SET @datStart = DATEADD(second, 1, @datKonecOp) + SET @datKonec = DATEADD(second, @casSekOperPrednaAutomat, @datStart) + SELECT @doklAutomat=Doklad, @altAutomat=Alt, @idPracAutomat=pracoviste FROM dbo.TabPrPostup + WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat + IF (@doklAutomat IS NOT NULL) + BEGIN + SET @idMzdyAutomat = NULL + EXEC @idMzdyAutomat = dbo.hp_EvidenceOperace @IDPrikaz=@idVPr, @Doklad=@doklAutomat, @Alt=@altAutomat, @Datum=@datStart, + @Sk_Cas_S=@casSekOperPrednaAutomat, @Sk_Cas_Obsluhy_S=0, @IDZam=@idZam, + @DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec + IF (@idMzdyAutomat IS NOT NULL) AND (@idPracAutomat IS NOT NULL) + EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdyAutomat, @Stav=1, @ZapisZmenu=0 + +-- poznamenej operaci vypalovani, bude se na ni rozpocitavat cas + IF (@idMzdyAutomat IS NOT NULL) AND (@operPrednaOpAutomat=N'9260') + INSERT @evidMzdyVypalovani (ID) VALUES (@idMzdyAutomat) + + END -- @doklAutomat IS NOT NULL + + END -- @operPrednaOpAutomat <> '' + END -- @idMzdy IS NOT NULL + + END + CLOSE e + DEALLOCATE e + + SET @pocetMezd = ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0) + + IF (@pocetMezd=ISNULL( (SELECT COUNT(*) FROM @evidOperR), 0)) + UPDATE dbo.TabEvidRozpracOper SET DatumUzavreni=GETDATE(), AutorUzavreni=SUSER_SNAME() WHERE ID=@idEvidROp + + SET @pocetVypalovani = ISNULL( (SELECT COUNT(*) FROM @evidMzdyVypalovani), 0) + IF (@pocetVypalovani>0) AND (@casSekVypalovani>0) + BEGIN + SET @casSekVypalovani = CEILING(@casSekVypalovani / @pocetVypalovani) + DECLARE v CURSOR LOCAL FOR + SELECT ID FROM @evidMzdyVypalovani + OPEN v + WHILE (1=1) + BEGIN + FETCH NEXT FROM v INTO @idMzdy + IF (@@FETCH_STATUS<>0) BREAK + UPDATE dbo.TabPrikazMzdyAZmetky SET Sk_Cas=dbo.hf_PrepoctiCas(@casSekVypalovani, 0, Sk_Cas_T) WHERE ID=@idMzdy + EXEC dbo.hp_EvidenceOperace_OpravaMzdy @IDMzdy=@idMzdy + END + CLOSE v + DEALLOCATE v + END + + + END -- mam jen jednu EvidRozpOper + END -- mam EvidRozpOperR k evidenci + + +-- pokud mam mzdy, koukni jestli mam delat vydej/odvod + SET @materialJson = ISNULL(@materialJson, N'') + IF EXISTS(SELECT 1 FROM @evidMzdy) + BEGIN + SET @idDZ = NULL -- vydejka materialu + SET @idDZ2 = NULL -- vydejka suroveho dilu (SK 100) + + DECLARE ev CURSOR LOCAL FOR + SELECT ID FROM @evidMzdy + OPEN ev + WHILE (1=1) + BEGIN + FETCH NEXT FROM ev INTO @idMzdy + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idVPr=IDPrikaz, @dokl=DokladPrPostup, @alt=AltPrPostup FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy + SELECT @idDilec=p.IDTabKmen, @radaVPr=p.Rada, @radaDZVydej=rp.RadaDokl_GenerRezVyd_Mat, @dpzVydej=rp.DruhPohybu_GenerRezVyd, + @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ, @sklSurovyDil=rpe._SkladSurovychDilu + FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) LEFT JOIN dbo.TabRadyPrikazu_EXT rpe ON (rpe.ID=rp.ID) + WHERE p.ID=@idVPr + SET @sklSurovyDil = ISNULL(@sklSurovyDil, @sklProVydejRP) + + + SET @prvniOperaceVPrInt = ISNULL( (SELECT MIN(TRY_PARSE(Operace AS int)) FROM dbo.TabPrPostup WHERE ISNULL(Operace,N'')<>N'' AND IDPrikaz=@idVPr + AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND Odvadeci=0 AND ISNULL(TRY_PARSE(Operace AS int),0)>0) + , 0) + SET @prvniOperace=0 + IF (CONVERT(int,@operPredna)=@prvniOperaceVPrInt) + SET @prvniOperace=1 +-- pokud jsem prvni operace na prikazu (ne odvadeci) a jsem prvni evidence, udelej vydej suroveho materialu (SK 100), sklad 001 + IF (@prvniOperace=1) AND NOT EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND ID<>@idMzdy) + BEGIN + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGenPredna + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenVCPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGenVCPredna + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna + + DECLARE m CURSOR LOCAL FOR + SELECT v.ID, v.mnozstvi + FROM dbo.TabPrKVazby v INNER JOIN dbo.TabKmenZbozi kN ON (kN.ID=v.nizsi) + WHERE v.IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Prednastaveno=1 AND kN.SkupZbo IN (N'100') AND v.vyssi=@idDilec + OPEN m + WHILE (1=1) + BEGIN + FETCH NEXT FROM m INTO @idPrKVazby, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), + @mnozstviPomer_B=PrP.kusy_zad + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + WHERE MZ.ID=@idMzdy + + INSERT INTO #HDCTabPrKVazbyGenPredna + (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, + IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, + DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT + PrKV.ID, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B, PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, + PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane, + PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, + PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, + PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0 + SET @iTemp = SCOPE_IDENTITY() + +-- pokud mam na prikazu jen jedno VC, pridej ho pro vydej suroveho dilce + SET @pocetVC = ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0) + IF (@pocetVC=1) AND (@iTemp IS NOT NULL) + BEGIN + SELECT TOP(1) @vc=VyrCislo FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr + IF (@mnoz<=ISNULL( (SELECT Mnozstvi-Odvedeno-Zmetky FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr AND VyrCislo=@vc), 0)) + IF NOT EXISTS (SELECT 1 FROM #HDCTabPrKVazbyGenVCPredna WHERE IDPolozky=@iTemp AND VyrCislo=@vc) + INSERT #HDCTabPrKVazbyGenVCPredna (IDPolozky, VyrCislo, Mnozstvi, Sklad) SELECT @iTemp, @vc, @mnoz, @sklProVydejRP + END + +-- dopln vazbu na mzdu + IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy + +-- sklad pro vydej suroveho dilu je nastaven ext.info na rade prikazu + UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklSurovyDil + UPDATE #HDCTabPrKVazbyGenVCPredna SET Sklad=@sklSurovyDil + + END + CLOSE m + DEALLOCATE m + + IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna) -- mam nejaky material pro vydejku ? + IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL + BEGIN + UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydejRP + SET @idDZ2 = NULL + BEGIN TRY + EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ2 OUT, @errMsg=@errMsg OUT, @realizujVydej=0 + IF (@errMsg<>N'') OR (@iChyba>0) + BEGIN + UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2 + END + END TRY + BEGIN CATCH + IF (CHARINDEX(N'50014', @errMsg)>0) + SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg + IF (@errMsg<>N'') + UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2 + END CATCH + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGenPredna + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna + END -- mam ep_Vyroba_GenVydejZeMzdy + + END -- @prvniOperace=1 + + + +-- mam vydat nejaky material, naskenovany s ukoncenim operace ? + IF (CHARINDEX('skupina', @materialJson)>0) + BEGIN + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGenPredna + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna + + SELECT @sklProVydej=ISNULL(ke._SkladProVydejMat, rp.VydejMatPol_SkladProGenHlavDZ) + FROM dbo.TabPrikaz p + INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=p.IDTabKmen) + LEFT JOIN dbo.TabKmenZbozi_EXT ke ON (ke.ID=k.ID) + WHERE p.ID=@idVPr + + SET @sklSurovyJeIMaterial=0 +-- IF (@sklProVydejRP=@sklProVydej) +-- SET @sklSurovyJeIMaterial=1 + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @materialJson + DECLARE m CURSOR LOCAL FOR + SELECT ma.skupina, ma.regcis, ma.quantity + FROM #TabJSONData d + CROSS APPLY OPENJSON (d.doc, N'$') + WITH (skupina NVARCHAR(3), regcis NVARCHAR(30), quantity NUMERIC(19,6) ) AS ma + OPEN m + WHILE (1=1) + BEGIN + FETCH NEXT FROM m INTO @sz, @rc, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + +-- pokud jsem material/polotovar SK 100 (surovy dilec), vydej me jinym vydejem (viz vyse), mozna i z jineho skladu +-- (Rada prikazu sklad pro vydej x ext.param na dilci TabKmenZbozi_EXT._SkladProVydejMat) + IF (@sz IN (N'100')) + CONTINUE + + + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + IF (@pocetMezd>1) + SET @mnoz = (@mnoz / @pocetMezd) + +-- pokud neni urceno ze naskenovana karta je material, nastav to, pri tom zkontroluj i jestli je to nastavene na rade, at neprepises polotovar + SELECT @szJeMat=Material FROM dbo.TabSkupinyZbozi WHERE SkupZbo=@sz + SELECT @szJeMat=@szJeMat | Material FROM dbo.TabKmenZbozi WHERE ID=@idKZ + UPDATE dbo.TabKmenZbozi SET Material=1 WHERE ID=@idKZ AND Dilec=0 AND Material=0 AND @szJeMat=1 + + SET @idPrKVazby = (SELECT TOP(1) ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL + AND vyssi=@idDilec AND nizsi=@idKZ ORDER BY Prednastaveno DESC) + + IF (@idPrKVazby IS NULL) + EXEC @idPrKVazby = dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz + SET @dokl = NULL + IF (@idPrKVazby IS NOT NULL) + BEGIN + SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), + @mnozstviPomer_B=PrP.kusy_zad + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + WHERE MZ.ID=@idMzdy + INSERT INTO #HDCTabPrKVazbyGenPredna + (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, + IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, + DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT + PrKV.ID, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B, PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, + PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane, + PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, + PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, + PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0 + SET @iTemp = SCOPE_IDENTITY() + +-- pokud neni prednastaveny sklad pro vydej, zkus to z rady prikazu, pripadne z ext.info na dilci TabKmenZbozi_EXT._SkladProVydejMat + UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydej WHERE ID=@iTemp AND @sklProVydej IS NOT NULL + + IF (@dokl IS NOT NULL) AND OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy + END -- idPrKVazby IS NOT NULL + END -- idKZ IS NOT NULL + END + CLOSE m + DEALLOCATE m + +-- mam nejaky material pro vydejku ? + IF EXISTS(SELECT 1 FROM #HDCTabPrKVazbyGenPredna) + IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL + BEGIN + SET @idDZ = NULL + +-- pokud je sklad pro vydej materialu na rade VPr stejny jako na ext.info dilce prikazu, udelej vydej v jednom dokladu + IF (@sklSurovyJeIMaterial=1) AND (@idDZ2 IS NOT NULL) + BEGIN + SET @idDZ = @idDZ2 + SET @idDZ2 = NULL + END +-- pokud je sklad jiny nez na rade VPr, zaloz hlavicku a predej ji do generovaci procedury, jinak se v "hp_generujRezVydNew" bere sklad z rady VPr + IF (@idDZ IS NULL) AND (@sklProVydej<>@sklProVydejRP) + EXEC dbo.hp_InsertHlavickyOZ_Full @Ident=@idDZ OUT, @Sklad=@sklProVydej, @DruhPohybu=@dpzVydej, @RadaDokladu=@radaDZVydej, @CisloOrg=0 + + + BEGIN TRY + EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ OUT, @errMsg=@errMsg OUT, @realizujVydej=1 + IF (@errMsg<>N'') OR (@iChyba>0) + BEGIN + UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END + END TRY + BEGIN CATCH + IF (CHARINDEX(N'50014', @errMsg)>0) + SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg + IF (@errMsg<>N'') + UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky: ' + @errMsg WHERE ID=@idMzdy + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END CATCH + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGenPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGenPredna + IF OBJECT_ID('tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', 'U') IS NOT NULL + DELETE FROM #HDCTabPrKVazbyGen_IDMzdyPredna + END -- mam ep_Vyroba_GenVydejZeMzdy + + END -- (CHARINDEX('skupina', @materialJson)>0) + + +-- pokud je odvadeci, generuj odvod na sklad + SET @jeOdvadeci=0 + SET @cisloOdvOper=NULL + IF EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad=@dokl AND Alt=@alt AND IDOdchylkyDo IS NULL + AND Prednastaveno=1 AND Odvadeci=1) + BEGIN + SET @jeOdvadeci=1 + SET @cisloOdvOper = (SELECT Operace FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Prednastaveno=1 + AND Odvadeci=1 AND IDOdchylkyDo IS NULL) + END + IF (@jeOdvadeci=1) + BEGIN + IF OBJECT_ID(N'dbo.ep_Vyroba_GenOdvodZeMzdy', N'P') IS NOT NULL + BEGIN + SET @idDZ = NULL + BEGIN TRY + EXEC @iChyba = dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzdy, @bezVyrCis=0, @errMsg=@errMsg OUT, @realizujPrijem=1, @IDDoklad=@idDZ OUT + IF (@errMsg<>N'') + UPDATE dbo.TabDokladyZbozi SET BLokovaniEditoru=NULL WHERE ID=@idDZ + END TRY + BEGIN CATCH + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END CATCH + END -- existuje ep_Vyroba_GenOdvodZeMzdy + END -- jeOdvadeci=1 + + END + CLOSE ev + DEALLOCATE ev + + +-- pokud mam vydejku na surovy dil na jinem dokladu/skladu, realizuj ji + IF (@idDZ2 IS NOT NULL) AND NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idDZ2 AND Realizovano=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idDZ2, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + IF (CHARINDEX(N'50014', @errMsg)>0) + SET @errMsg = N'Nesoulad množství výrobních čísel a položky' + NCHAR(13)+NCHAR(10) + @errMsg + IF (@errMsg<>N'') + UPDATE dbo.TabPrikazMzdyAZmetky SET Poznamka=N'Chyba realizace vydejky suroveho dilu: ' + @errMsg WHERE ID=@idMzdy + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ2 + END CATCH + END + + END -- mam evidovane mzdy + + + + + IF (ISNULL( (SELECT COUNT(*) FROM @evidMzdy), 0)>1) + SET @idMezdStr = (SELECT STRING_AGG(ID, N',') FROM @evidMzdy) + SET @idMezdStr = ISNULL(@idMezdStr, N'') + + SET @errMsg = ISNULL(@errMsg,N'') + IF (@errMsg<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDMzda=IIF(@idMezdStr<>N'',NULL,@idMzdy), + IDMezd=IIF(@idMezdStr=N'', NULL, @idMezdStr) + WHERE ID=@idJson + + END -- akce Stop + + + END -- objekt Operace AND idZam IS NOT NULL + + + UPDATE dbo._hdc_ph_PrijataJsonData SET Blokovano=0 WHERE ID=@idJson + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + SET @errProc = ERROR_PROCEDURE() + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + END CATCH + + END +CLOSE j +DEALLOCATE j + + + +-- cisteni +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenVCPredna +DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna +DROP TABLE IF EXISTS #TabJSONData diff --git a/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql.bak b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql.bak new file mode 100644 index 0000000..962a1df --- /dev/null +++ b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql.bak @@ -0,0 +1,611 @@ +-- dbo.ep_HDCDZApi_ZpracujPrijataData +CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData + @idJson INT=NULL +AS + +SET NOCOUNT ON +-- ! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi ! + + +DECLARE + @errMsg NVARCHAR(500)=N'', + @errProc NVARCHAR(100), + @tranPred INT, + @iChyba INT, + @debugXML XML + +DECLARE + @operJson NVARCHAR(max), + @prikJson NVARCHAR(max), + @objekt NVARCHAR(50), + @akce NVARCHAR(50), + @trida NVARCHAR(50), + @statusOp NVARCHAR(50), + @typOperJson NVARCHAR(50), + @jsonString NVARCHAR(max), + @cisZam INT, + @idZam INT, + @idVPr INT, + @idVCPrik INT, + @vc NVARCHAR(100), + @dokl INT, + @alt NCHAR(1), + @idPrP INT, + @idPrPOdv INT, + @doklOdv INT, + @doklNew INT, + @doklAutomat INT, + @altAutomat NCHAR(1), + @jeOdvadeci BIT=0, + @datStart DATETIME, + @datKonec DATETIME, + @skCasSek INT, + @mnoz NUMERIC(19,6), + @idPrednaOp INT, + @idPrednaOpOdv INT, + @operPrednaOdv NVARCHAR(4), + @operPrednaPrac INT, + @typOper TINYINT, + @idPrac INT, + @idPracOld INT, + @idStroj INT, + @nazevOp NVARCHAR(100), + @operPredna NVARCHAR(4), + @odvadeciPredna BIT=0, + @cisOper INT, + @cisOperMax INT, + @operMax NVARCHAR(4), + @nazevOpMax NVARCHAR(100), + @idKoop INT, + @idEvidROp INT, + @idEvidROpPol INT, + @idMzdy INT, + @idPrednaOpAutomat INT, + @operPrednaOpAutomat NVARCHAR(4), + @casSekOperPredaAutomat INT, + @idMzdyAutomat INT, + @datKonecOp DATETIME, + @ksZive NUMERIC(19,6), + @ksEvid NUMERIC(19,6) + +DECLARE + @idDZ INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @idKZ INT, + @idPrKVazby INT, + @idDilec INT, + @mnozstviPomer_A NUMERIC(19,6), + @mnozstviPomer_B NUMERIC(19,6), + @idGenVydejPrednaPol INT, + @sklProVydej NVARCHAR(30) + + + +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max) ) + + +DROP TABLE IF EXISTS #HDCTabPrKVazbyGen_IDMzdyPredna +CREATE TABLE #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz int, Doklad int, IDMzdy int) + + +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna +CREATE TABLE #HDCTabPrKVazbyGenPredna ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NTEXT NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + + +SET @operPrednaOdv = N'' +SET @idPrednaOpOdv = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _OdvadeciOperace=1) +IF (@idPrednaOpOdv IS NOT NULL) + SET @operPrednaOdv = (SELECT _CIsloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpOdv) + + + +IF (@idJson IS NOT NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData, Objekt, Akce FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JsonData, Objekt, Akce + FROM dbo._hdc_ph_PrijataJsonData + WHERE Blokovano=0 + AND DatZpracovani IS NULL + AND ISNULL(JSONData,N'')<>N'' + ORDER BY DatPorizeni +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @objekt, @akce + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Neplatna JSON data' WHERE ID=@idJson + END + + SET @objekt = TRIM(ISNULL(@objekt, N'')) + SET @akce = TRIM(ISNULL(@akce, N'')) + + BEGIN TRY + SET @tranPred=@@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + + + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) VALUES (@jsonString) + IF (@objekt=N'') + SELECT TOP(1) @objekt = JSON_VALUE(doc, '$.object') FROM #TabJSONData + IF (@akce=N'') + SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action') FROM #TabJSONData + + SELECT TOP(1) @cisZam = JSON_VALUE(doc, '$.operace.worker.code') FROM #TabJSONData + SET @idZam = (SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cisZam) + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=NULL, CisloZam=@cisZam WHERE ID=@idJson + + + IF (@objekt=N'operace') AND (@idZam IS NOT NULL) + BEGIN + IF (@akce=N'start') + BEGIN + SET @idEvidROp = NULL + SET @errMsg = N'' + SET @operPredna = N'' + SET @odvadeciPredna = 0 + SET @nazevOp = N'' + SET @operMax = N'' + + SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'), + @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @datStart = JSON_VALUE(d3.operace, '$.startAt'), + @statusOp = JSON_VALUE(d3.operace, '$.status'), @typOperJson=JSON_VALUE(d3.operace, '$.typ') + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2 + CROSS APPLY OPENJSON(d.doc, N'$') + WITH ([operace] NVARCHAR(max) AS JSON) AS d3 + + IF (@idVPr IS NOT NULL) + BEGIN + SELECT @idDilec=p.IDTabKmen, @sklProVydej=rp.VydejMatPol_SkladProGenHlavDZ + FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr + + SET @idPrP = NULL + + IF (@typOperJson=N'prikaz') + BEGIN + SET @operPredna = CONVERT(nvarchar, @idPrednaOp) + SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna) + SET @typOperJson=N'prednastavena' + END + + IF (@typOperJson=N'prednastavena') + BEGIN + IF (@idPrednaOp IS NOT NULL) + BEGIN + SELECT @operPrednaPrac=IDpracoviste FROM dbo.TabPredna WHERE ID=@idPrednaOp + IF EXISTS(SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu IN (20,30,40) AND BlokovaniEditoru IS NULL) + AND EXISTS(SELECT 1 FROM dbo.TabPredna WHERE ID=@idPrednaOp AND BlokovaniEditoru IS NULL) + SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace + FROM dbo.TabPredna WHERE ID=@idPrednaOp + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) + SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_OdvadeciOperace') IS NOT NULL) + SET @odvadeciPredna = (SELECT _OdvadeciOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + END + END + + + SET @operPredna = ISNULL(@operPredna,N'') + IF (@operPredna=N'') + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: přednastavenĂ­ ID ' + CONVERT(nvarchar, @idPrednaOp) + N' nemĂĄ zadanĂŠ číslo operace.' WHERE ID=@idJson + CONTINUE + END +-- SET @operPredna=dbo.hf_ZarovnejOperaciTechPos(@operPredna) + +/* + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND nazev=@nazevOp + AND ISNULL(pracoviste,0)=ISNULL(@idPrac,0) AND ISNULL(IDkooperace,0)=ISNULL(@idKoop,0) AND ISNULL(IDStroje,0)=ISNULL(@idStroj,0)) +*/ + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE priorita=0 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@operPredna) + +-- existuje odvadeci operace v Prednastaveni pro operace a v prikazu ? pokud neni v prikazu, pridej ji do prikazu + SET @doklOdv = NULL + SET @idPrPOdv = (SELECT ID FROM dbo.TabPrPostup WHERE priorita=0 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOdv) + +-- pokud prednastavena Odvadeci jeste neni v prikazu, pridej ji tam + IF (@idPrPOdv IS NULL) AND (@idPrednaOpOdv IS NOT NULL) + BEGIN + EXEC @idPrPOdv = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpOdv, @Operace=@operPrednaOdv + IF (@idPrPOdv IS NOT NULL) + BEGIN +-- korekce cisla dokladu odvadeci operace, posun na konec seznamu operaci + SET @doklOdv=9990 + UPDATE dbo.TabPrPostup SET Odvadeci=0 WHERE ID<>@idPrPOdv AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL + UPDATE dbo.TabPrPostup SET Doklad=@doklOdv, Odvadeci=1 WHERE ID=@idPrPOdv + END + END + IF (@doklOdv IS NULL) AND (@idPrPOdv IS NOT NULL) + SELECT @doklOdv=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrPOdv + + +-- prednastavena operace v prikazu jeste neni, pridej ji + IF (@idPrP IS NULL) + BEGIN + EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOp, @Operace=@operPredna + IF (@idPrP IS NOT NULL) + BEGIN +-- korekce cisla dokladu, pred odvadeci opeaci + SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WITH (TABLOCKX) WHERE IDPrikaz=@idVPr AND Doklad<9990 + UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0, VyraditZKontrolyPosloupOper=1 WHERE ID=@idPrP + END + END + + SET @idPrednaOpAutomat = NULL + SET @operPrednaOpAutomat = N'' + + IF (@idPrP IS NOT NULL) + BEGIN + SELECT @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP + UPDATE dbo.TabPrPostup SET VyraditZKontrolyPosloupOper=1 WHERE ID=@idPrP AND Odvadeci=0 + +-- korekce cisla dokladu aby bylo pred odvadeci operaci + IF (@doklOdv IS NOT NULL) + IF (@dokl>@doklOdv) + BEGIN + SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup + WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0) + IF (@doklNew IS NOT NULL) + BEGIN + UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP + SET @dokl = @doklNew + END + END + + EXEC @idEvidROp = dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=@idZam, @IDPracoviste=@idPrac, @IDStroje=@idStroj, @CasZahajeni=@datStart, @errMsg = @errMsg OUT + IF (@idEvidROp IS NOT NULL) + BEGIN + SET @idVCPrik = NULL + IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0) + SET @idVCPrik = (SELECT TOP(1) ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr) + EXEC @idEvidROpPol = dbo.ep_Vyroba_InsertEvidRozpracOperPol @IDEvidRozpOper=@idEvidROp, @IdPrikaz=@idVPr, @doklPrPost=@dokl, + @altPrPost=@alt, @IdVyrCis=@idVCPrik, @errMsg = @errMsg OUT + END -- idEvidROp IS NOT NULL + END -- idPrP IS NOT NULL + +-- pokud mam naslednou automatickou operaci, zkontrolu a pripadne ji pridej na prikaz + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL) + SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL) + SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat + SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'') + IF (@operPrednaOpAutomat<>N'') + BEGIN + SET @idPrP = (SELECT ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat) + IF (@idPrP IS NULL) + EXEC @idPrP = dbo.hp_NewPozadavek_TabPrPostup @IDPrikaz=@idVPr, @IDPrednastaveni=@idPrednaOpAutomat, @Operace=@operPrednaOpAutomat + + IF (@idPrP IS NOT NULL) + BEGIN +-- korekce cisla dokladu + SELECT @dokl=Doklad FROM dbo.TabPrPostup WHERE ID=@idPrP + IF (@dokl>@doklOdv) + BEGIN + SET @doklNew = 1 + ISNULL( (SELECT MAX(Doklad) FROM dbo.TabPrPostup + WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Doklad<@doklOdv AND ID<>@idPrP), 0) + IF (@doklNew IS NOT NULL) + BEGIN + UPDATE dbo.TabPrPostup SET Doklad=@doklNew WHERE ID=@idPrP AND Operace=@operPrednaOpAutomat + SET @dokl = @doklNew + END + END -- @dokl>@doklOdv + END -- @idPrP IS NOT NULL + END -- @operPrednaOpAutomat<>N'' + + + END -- idVPr IS NOT NULL + + IF (@errMsg<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDEvidRozpOp=@idEvidROp WHERE ID=@idJson + END -- akce Start + + + + + IF (@akce=N'stop') + BEGIN + SET @errMsg = N'' + + SELECT @idVPr = JSON_VALUE(d2.prikaz, '$.id'), @trida = JSON_VALUE(d2.prikaz, '$.class'), + @idPrednaOp = JSON_VALUE(d3.operace, '$.id'), @statusOp = JSON_VALUE(d3.operace, '$.status'), + @datStart = JSON_VALUE(d3.operace, '$.startAt'), @datKonec = JSON_VALUE(d3.operace, '$.stopAt'), + @operJson=d3.operace, @typOperJson=JSON_VALUE(d3.operace, '$.typ') + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, '$') + WITH ([prikaz] NVARCHAR(max) AS JSON) AS d2 + CROSS APPLY OPENJSON(d.doc, '$') + WITH ([operace] NVARCHAR(max) AS JSON) AS d3 + + IF EXISTS (SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu<>30) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Vyrobni prikaz neni ve stavu Zadano' WHERE ID=@idJson + CONTINUE + END + + SELECT @ksZive=p.kusy_zive, @sklProVydej=rp.VydejMatPol_SkladProGenHlavDZ + FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr + + IF (@datKonec<=@datStart) + SET @datKonec = DATEADD(s, 1, @datStart) + + IF (@idVPr IS NOT NULL) AND (@operJson IS NOT NULL) + BEGIN + SELECT @idDilec = IDTabKmen FROM dbo.TabPrikaz WHERE ID=@idVPr + SET @idPrP = NULL + SET @operPredna = N'' + SET @idPrednaOpAutomat = NULL + SET @operPrednaOpAutomat = N'' + + IF (@typOperJson=N'prikaz') + BEGIN + SET @operPredna = CONVERT(nvarchar, @idPrednaOp) + SET @idPrednaOp = (SELECT TOP(1) ID FROM dbo.TabPredna_EXT WHERE _CIsloOperace=@operPredna) + SET @typOperJson=N'prednastavena' + END + + IF (@idPrednaOp IS NOT NULL) + BEGIN + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOp IS NOT NULL) + SET @operPredna = (SELECT _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + SET @operPredna = ISNULL(@operPredna, N'') + IF (@operPredna=N'') + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Nebylo nalezeno cislo operace Prednastaveni' WHERE ID=@idJson + CONTINUE + END + +-- zjisti vyrobni cislo + SET @idVCPrik = NULL + IF 1=ISNULL( (SELECT COUNT(ID) FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr), 0) + SET @idVCPrik = (SELECT TOP(1) ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@idVPr) + +-- zjisti operaci automatu + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_IDNasledujiciOperaceAutomat') IS NOT NULL) + SET @idPrednaOpAutomat = (SELECT _IDNasledujiciOperaceAutomat FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOp) + IF (COL_LENGTH(N'dbo.TabPredna_EXT', N'_CisloOperace') IS NOT NULL) AND (@idPrednaOpAutomat IS NOT NULL) + SELECT @operPrednaOpAutomat = _CisloOperace FROM dbo.TabPredna_EXT WHERE ID=@idPrednaOpAutomat + SET @operPrednaOpAutomat = ISNULL(@operPrednaOpAutomat, N'') + SET @casSekOperPredaAutomat = ISNULL( (SELECT TAC_Obsluhy_J_S FROM dbo.TabPredna WHERE ID=@idPrednaOpAutomat), 0) + + + IF EXISTS(SELECT 1 FROM dbo.TabPrikaz WHERE ID=@idVPr AND StavPrikazu IN (20,30,40) AND BlokovaniEditoru IS NULL) + AND EXISTS(SELECT 1 FROM dbo.TabPredna WHERE ID=@idPrednaOp AND BlokovaniEditoru IS NULL) + SELECT @typOper=Typ, @nazevOp=nazev, @idPrac=IDpracoviste, @idStroj=IDStroje, @idKoop=IDkooperace + FROM dbo.TabPredna WHERE ID=@idPrednaOp + END + + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE priorita=0 AND IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND operace=@operPredna) +/* + SET @idPrP = (SELECT TOP(1) ID FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND typ=@typOper AND nazev=@nazevOp + AND ISNULL(pracoviste,0)=ISNULL(@idPrac,0) AND ISNULL(IDkooperace,0)=ISNULL(@idKoop,0) AND ISNULL(IDStroje,0)=ISNULL(@idStroj,0)) +*/ + SELECT @jeOdvadeci=Odvadeci, @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrP + SET @ksEvid = ISNULL( (SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM dbo.TabPrikazMzdyAZmetky + WHERE IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt), 0) +-- muzu jeste odvest kusy ? + IF (@jeOdvadeci=1) AND (@ksEvid>=@ksZive) + BEGIN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'Nelze evidovat, uz je vse odvedeno' WHERE ID=@idJson + CONTINUE + END + + + SET @idMzdy = NULL + SET @iChyba = -1 + SET @idEvidROp = (SELECT TOP(1) h.ID FROM dbo.TabEvidRozpracOperR r INNER JOIN dbo.TabEvidRozpracOper h ON (h.ID=r.IDEvidRozpracOper) + WHERE h.IDZamestnance=@idZam AND h.CasUkonceni IS NULL AND r.DokladPrPostup=@dokl AND r.AltPrPostup=@alt AND r.IDPrikaz=@idVPr) + IF (@idEvidROp IS NOT NULL) + BEGIN + SELECT @idPracOld=IDPracoviste FROM dbo.TabEvidRozpracOper WHERE ID=@idEvidROp + SET @skCasSek = DATEDIFF(s, @datStart, @datKonec) + UPDATE dbo.TabEvidRozpracOperR SET Mnoz_odv=CASE WHEN (@jeOdvadeci=1) THEN 1 ELSE 0 END, + Sk_cas=CASE Sk_Cas_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END, + Sk_cas_Obsluhy=CASE Sk_Cas_Obsluhy_T WHEN 0 THEN @skCasSek WHEN 1 THEN (@skCasSek/60.0) WHEN 2 THEN (@skCasSek/3600.0) END + WHERE IDEvidRozpracOper=@idEvidROp + UPDATE dbo.TabEvidRozpracOper SET CasUkonceni=@datKonec, CelkovyCas_T=0, CelkovyCas=DATEDIFF(s, @datStart, @datKonec) WHERE ID=@idEvidROp + EXEC dbo.hp_EvidRozpracOper_AktualizaceCasuOper @IDEvidRozpracOper=@idEvidROp, @CelkovyCas_S=@skCasSek, @KVO=1 + + SET @idEvidROpPol = (SELECT TOP(1) ID FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@idEvidROp AND IDPrikaz=@idVPr AND DokladPrPostup=@dokl AND AltPrPostup=@alt) + EXEC @idMzdy = dbo.hp_EvidenceOperace @IDEvidRozpracOperR=@idEvidROpPol, @Stav=0 + UPDATE dbo.TabEvidRozpracOper SET DatumUzavreni=GETDATE(), AutorUzavreni=SUSER_SNAME() WHERE ID=@idEvidROp + + IF (@idMzdy IS NOT NULL) AND (@idPracOld IS NOT NULL) + EXEC dbo.hp_ZmenaStavuMezdAZmetku @ID=@idMzdy, @Stav=1, @ZapisZmenu=0 + END -- @idEvidROp IS NOT NULL + + + IF (@idMzdy IS NOT NULL) + BEGIN + UPDATE dbo.TabPrikazMzdyAZmetky SET Datum=CONVERT(datetime, CONVERT(int, CONVERT(float, @datStart))) WHERE ID=@idMZdy + + SELECT @datKonecOp = DatumUkonceniOp FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@idMzdy + +-- zkus zaevidovat operaci automatu + IF (@operPrednaOpAutomat<>N'') + BEGIN +-- pouzij cas ukonceni predchozi operace + SET @datStart = DATEADD(second, 1, @datKonecOp) + SET @datKonec = DATEADD(second, @casSekOperPredaAutomat, @datStart) + + SELECT @doklAutomat=Doklad, @altAutomat=Alt FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND IDOdchylkyDo IS NULL AND Operace=@operPrednaOpAutomat + IF (@doklAutomat IS NOT NULL) + BEGIN + SET @idMzdyAutomat = NULL + EXEC @idMzdyAutomat = dbo.hp_EvidenceOperace @IDPrikaz=@idVPr, @Doklad=@doklAutomat, @Alt=@altAutomat, @Datum=@datStart, @IDVyrCis=@idVCPrik, + @Sk_Cas_S=@casSekOperPredaAutomat, @Sk_Cas_Obsluhy_S=0, @IDZam=@idZam, + @DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec + END + END + +-- generuj vydejku materialu + SET @sz = NULL + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @operJson + DECLARE m CURSOR LOCAL FOR + SELECT m.skupina, m.regcis, m.quantity + FROM #TabJSONData d + CROSS APPLY OPENJSON(d.doc, N'$.material') + WITH (skupina NVARCHAR(3), regcis NVARCHAR(30), quantity NUMERIC(19,6)) AS m + OPEN m + WHILE (1=1) + BEGIN + FETCH NEXT FROM m INTO @sz, @rc, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + SET @idKZ = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + IF (@idKZ IS NOT NULL) + BEGIN + UPDATE dbo.TabKmenZbozi SET Material=1 WHERE ID=@idKZ AND Dilec=0 AND Material=0 + SET @idPrKVazby=(SELECT TOP(1) ID FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idVPr + AND vyssi=@idDilec AND nizsi=@idKZ ORDER BY Prednastaveno DESC) + IF (@idPrKVazby IS NULL) + EXEC @idPrKVazby = dbo.hp_NewPozadavek_TabPrKVazby @IDPrikaz=@idVPr, @IDKmenZbozi=@idKZ, @Mnozstvi=@mnoz + SET @dokl = NULL + IF (@idPrKVazby IS NOT NULL) + BEGIN + SELECT @dokl=Doklad FROM dbo.TabPrKVazby WHERE ID=@idPrKVazby + SELECT @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + WHERE MZ.ID=@idMzdy + INSERT INTO #HDCTabPrKVazbyGenPredna (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, + IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, + DavkaTPV, pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, @mnoz, @mnozstviPomer_A, @mnozstviPomer_B, PrKV.Doklad, PrKV.IDPrikaz, + PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane, + PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, + PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@idPrKVazby AND PrKV.uzavreno=0 + SET @idGenVydejPrednaPol = SCOPE_IDENTITY() + +-- pokud neni prednastaveny sklad pro vydej, zkus to z rady prikazu + UPDATE #HDCTabPrKVazbyGenPredna SET Sklad=@sklProVydej WHERE ID=@idGenVydejPrednaPol AND Sklad IS NULL AND @sklProVydej IS NOT NULL + + IF (@dokl IS NOT NULL) + INSERT INTO #HDCTabPrKVazbyGen_IDMzdyPredna (IDPrikaz, Doklad, IDMzdy) SELECT @idVPr, @dokl, @idMzdy + END -- idPrKVazby IS NOT NULL + END -- idKZ + END + CLOSE m + DEALLOCATE m + + SET @debugXML = (SELECT * FROM #HDCTabPrKVazbyGenPredna FOR XML AUTO) + + + IF (@idMzdy IS NOT NULL) AND (@sz IS NOT NULL) -- pokud prosel loopem na materialy, sz nemuze byt null + IF OBJECT_ID(N'dbo.ep_Vyroba_GenVydejZeMzdy', N'P') IS NOT NULL + BEGIN + SET @idDZ = NULL + BEGIN TRY + EXEC @iChyba = dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzdy, @IDDoklad=@idDZ OUT, @errMsg=@errMsg OUT, @realizujVydej=1 + IF (@errMsg<>N'') + UPDATE dbo.TabDokladyZbozi SET BLokovaniEditoru=NULL WHERE ID=@idDZ + END TRY + BEGIN CATCH + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END CATCH + END + + +-- pokud je odvadeci, generuj odvod na sklad + IF (@idMzdy IS NOT NULL) AND (@jeOdvadeci=1) + BEGIN + IF OBJECT_ID(N'dbo.ep_Vyroba_GenOdvodZeMzdy', N'P') IS NOT NULL + BEGIN + SET @idDZ = NULL + BEGIN TRY + EXEC @iChyba = dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzdy, @bezVyrCis=0, @errMsg=@errMsg OUT, @realizujPrijem=1, @IDDoklad=@idDZ OUT + IF (@errMsg<>N'') + UPDATE dbo.TabDokladyZbozi SET BLokovaniEditoru=NULL WHERE ID=@idDZ + END TRY + BEGIN CATCH + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZ + END CATCH + END + END + + + END -- idMzdy IS NOT NULL + END -- idVPr IS NOT NULL AND operJson IS NOT NULL + + SET @errMsg = ISNULL(@errMsg,N'') + IF (@errMsg<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), IDMzda=@idMzdy WHERE ID=@idJson + END -- akce Stop + + END -- objekt Operace AND idZam IS NOT NULL + + + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + SET @errProc = ERROR_PROCEDURE() + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE(), PosledniChyba=N'CHYBA: ' + @errMsg WHERE ID=@idJson + END CATCH + + END +CLOSE j +DEALLOCATE j + + + +-- cisteni +DROP TABLE IF EXISTS #HDCTabPrKVazbyGenPredna +DROP TABLE IF EXISTS #TabJSONData diff --git a/_custom/INCOSystems/sql/ep_Vyroba_GenOdvodZeMzdy.sql b/_custom/INCOSystems/sql/ep_Vyroba_GenOdvodZeMzdy.sql new file mode 100644 index 0000000..5b98278 --- /dev/null +++ b/_custom/INCOSystems/sql/ep_Vyroba_GenOdvodZeMzdy.sql @@ -0,0 +1,223 @@ +-- dbo.ep_Vyroba_GenOdvodZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy + @IDMzdy INT, + @bezVyrCis BIT=1, + @errMsg NVARCHAR(500)=N'' OUT, + @realizujPrijem BIT=0, + @IDDoklad INT=NULL OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu sluzby HDCAPI !! +-- konfiguraci lze ovlivnit pres tabulku #HDCTabGenOdvodZeMzdyKonfig +-- pozor, v tom pripade musi byt na rade prikazu sklad pro generovani odvodu roven NULL + + +SET NOCOUNT ON + +DECLARE + @ret integer, + @bChyba BIT, + @idUziv INT, + @idDZ INT, + @IDPrikaz INT, + @IDKmen INT, + @NekontrolMnozOdvedFinal bit=0, + @mnozstvi numeric(19,6)=0, + @radaOdvNaSklad NVARCHAR(3)=NULL, + @sklProOdvod NVARCHAR(30)=NULL, + @radaVPr NVARCHAR(10) + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +-- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT) +IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', N'U') IS NOT NULL + SELECT TOP(1) @radaOdvNaSklad=RadaOdvodNaSklad, @sklProOdvod=SkladProOdvod, @bezVyrCis=ISNULL(BezVyrobnichCisel,@bezVyrCis), + @idUziv=ISNULL(IDUziv, @idUziv) + FROM #HDCTabGenOdvodZeMzdyKonfig + + + + +DROP TABLE IF EXISTS #TabOdved +CREATE TABLE #TabOdved ( + ID INT IDENTITY NOT NULL, + IDPrikaz INT NOT NULL, + IDDilec INT NOT NULL, + IDZakazModif INT NULL, + IDZakazka INT NULL, + maxMnozstvi NUMERIC(19,6) NULL, + mnozstvi NUMERIC(19,6) NOT NULL, + EvidJednotka NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + KodUmisteni NVARCHAR(15) NULL, + IDPohZbo INT NULL, + PomVnoreni INT NULL, + StavPrikazu TINYINT NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabOdved_IDMzdy +CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int) + + + + +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +CREATE TABLE #TabVyrCisProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + MaxMnozstvi NUMERIC(19,6) NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + +DROP TABLE IF EXISTS #TabPolotovProGenOdv +CREATE TABLE #TabPolotovProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + Doklad INT NOT NULL, + IDDilec INT NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + MaxMnozstvi NUMERIC(19,6) NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabGenPrijem +CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID)) + + + + + + +IF EXISTS (SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy) + RETURN 0 + + +SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy +IF (@@ROWCOUNT=0) RETURN 0 +IF @mnozstvi<=0.0 RETURN 0 + + + +SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @radaVPr=Rada, @IDKmen=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + +-- nastav sklad pro odvod podle karty +IF (@sklProOdvod IS NULL) + SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen + +-- pripadne zkus podle rady prikazu +SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvNaSklad ELSE RadaDokl_OdvedeniPrikazu END, + @sklProOdvod=CASE WHEN PrijemVyrDil_SkladProGenHlavDZ IS NULL THEN @sklProOdvod ELSE PrijemVyrDil_SkladProGenHlavDZ END + FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr + + + + +UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz +IF (@@ROWCOUNT=0) + INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu) + SELECT P.ID, + CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END, + ZMD.IDZakazModif, + P.IDZakazka, + CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END, + P.EvidJednotka, + CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END, + P.sklad, + P.StavPrikazu + FROM dbo.TabPrikaz P + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen) + LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID) + LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen) + WHERE P.ID=@IDPrikaz AND + (CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END)>0 +INSERT INTO #TabOdved_IDMzdy (IDPrikaz, IDMzdy) VALUES (@IDPrikaz, @IDMzdy) + + + +UPDATE O SET maxMnozstvi=CASE WHEN RP.NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END + FROM #tabOdved O + INNER JOIN dbo.TabPrikaz P ON (P.ID=O.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + +UPDATE #tabOdved SET mnozstvi=maxMnozstvi WHERE maxMnozstvi IS NOT NULL AND mnozstvi>maxMnozstvi +DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #tabOdved WHERE Mnozstvi<=0.0 + + +EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL +IF (@bezVyrCis=1) + DELETE #TabVyrCisProGenOdv + + +BEGIN TRY + EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1 +END TRY +BEGIN CATCH + SET @errMsg = 'Chyba pri odvadeni: ' + ERROR_MESSAGE() +END CATCH + + + + + +IF (@realizujPrijem=1) + BEGIN + DECLARE + @idPrij INT + + DECLARE prij CURSOR LOCAL FOR + SELECT ID FROM #TabGenPrijem + OPEN prij + WHILE (1=1) + BEGIN + FETCH NEXT FROM prij INTO @idPrij + IF (@@FETCH_STATUS<>0) BREAK + + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + + END + CLOSE prij + DEALLOCATE prij +END + + + +SET @IDDoklad = NULL +IF (1=(SELECT COUNT(*) FROM #TabGenPrijem)) + SET @IDDoklad=(SELECT TOP(1) ID FROM #TabGenPrijem) + + + +-- cisteni +DROP TABLE IF EXISTS #TabGenPrijem +DROP TABLE IF EXISTS #TabPolotovProGenOdv +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +DROP TABLE IF EXISTS #TabOdved_IDMzdy +DROP TABLE IF EXISTS #TabOdved + +DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig diff --git a/_custom/INCOSystems/sql/ep_Vyroba_GenVydejZeMzdy.sql b/_custom/INCOSystems/sql/ep_Vyroba_GenVydejZeMzdy.sql new file mode 100644 index 0000000..b48ae1e --- /dev/null +++ b/_custom/INCOSystems/sql/ep_Vyroba_GenVydejZeMzdy.sql @@ -0,0 +1,309 @@ +-- dbo.ep_Vyroba_GenVydejZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy + @IDMzdy INT, + @IDDoklad INT=NULL OUT, + @errMsg NVARCHAR(500)=N'' OUT, + @extTab NVARCHAR(50)=NULL, + @vydejAll BIT=0, + @realizujVydej BIT=0 +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri Windows sluzby HDCDZApi !! +-- @extTab - tabulka, do ktere budou vraceny pohyby vydejky @extTab (ID INT NOT NULL, IDPohZbo INT NOT NULL) +-- @vydejAll - bude vydano vse, nejen kde jde splnena podminka TabPrKVazby - dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad +-- pokud existuje objekt #HDCTabPrKVazbyGenPredna, jedu vydej podle nej + + +SET NOCOUNT ON + +DECLARE + @bChyba BIT, + @retVal INT=0, + @errID int, + @sql NVARCHAR(1000), + @idUziv INT=0 + +DECLARE @vydejky TABLE (ID INT NOT NULL) + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +DELETE FROM @vydejky + + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky) + BEGIN + SELECT @retVal=MAX(ID) FROM dbo.TabPrikazMzdyAZmetky + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, @retVal) + END + ELSE + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, 1) + + +DROP TABLE IF EXISTS #TabPrKVazbyGen +CREATE TABLE #TabPrKVazbyGen ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NTEXT NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGenVC +CREATE TABLE #TabPrKVazbyGenVC( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + + + + + +DECLARE + @RespektovatExistEvid bit=0, + @IDPrikaz int=NULL, + @dilec INT, + @IDPrPostup INT=NULL, + @mnozstviPomer_A numeric(19,6), + @mnozstviPomer_B numeric(19,6), + @IDPrKV int, + @mnoz_zad numeric(19,6), + @PrKVDoklad int, + @PocetVazeb int, + @PrP_Doklad int, + @skladProVydejKZ NVARCHAR(30) + + +SELECT @errID=NULL, @errMsg='', @PocetVazeb=0 +SELECT @IDPrikaz=MZ.IDPrikaz, @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad, @PrP_Doklad=PrP.Doklad, + @IDPrPostup=PrP.ID + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + WHERE MZ.ID=@IDMzdy +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@IDMzdy +IF (@@ROWCOUNT=0) + RETURN 0 + + +SELECT @dilec=IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz +IF OBJECT_ID('dbo.TabKmenZbozi_EXT', 'U') IS NOT NULL + IF COL_LENGTH('dbo.TabKmenZbozi_EXT', '_SkladProVydejMat') IS NOT NULL + SET @skladProVydejKZ = (SELECT _SkladProVydejMat FROM dbo.TabKmenZbozi_EXT WHERE ID=@dilec) +SET @skladProVydejKZ = ISNULL(@skladProVydejKZ, N'') + + + +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenPredna', N'U') IS NULL + BEGIN + IF (@mnozstviPomer_A<=0.0) + RETURN -1 + + IF (@vydejAll=1) + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + ELSE + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + OPEN crPom1334 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + WHILE @@fetch_status=0 + BEGIN + UPDATE #TabPrKVazbyGen SET MnozstviPoz=@mnoz_zad * (pom_pomer_A+@mnozstviPomer_A)/pom_pomer_B, pom_pomer_A=pom_pomer_A+@mnozstviPomer_A + WHERE IDPrKV=@IDPrKV + IF (@@ROWCOUNT=0) + BEGIN + IF @RespektovatExistEvid=1 + SELECT @mnozstviPomer_A=SUM(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr) + FROM dbo.TabPrikazMzdyAZmetky MZ WHERE MZ.IDPrikaz=@IDPrikaz AND MZ.DokladPrPostup=@PrP_Doklad AND MZ.GenerovanaMatVydejka=1 + INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, + Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi, + mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, + PrKV.mnoz_zad * @mnozstviPomer_A/@mnozstviPomer_B, + @mnozstviPomer_A, @mnozstviPomer_B, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, + PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, + PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@IDPrKV + END + INSERT INTO #TabPrKVazbyGen_IDMzdy (IDPrikaz, Doklad, IDMzdy) VALUES (@IDPrikaz, @PrKVDoklad, @IDMzdy) + SET @PocetVazeb=@PocetVazeb + 1 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + END + CLOSE crPom1334 + DEALLOCATE crPom1334 + + IF (@PocetVazeb<=0) + RETURN -2 + + END + ELSE + BEGIN -- pokud mam seznam na co vygenerovat vydejku, jedu podle nej + DELETE FROM #TabPrKVazbyGen + INSERT INTO #TabPrKVazbyGen + SELECT Generuj, PoKorekciDat, IDPrKV, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, + Cena_real, Mnoz_odv, Cena_odv, MnozstviMax, PuvodniMnozstviPoz, MnozstviPoz, PomMnozPoz, IDPohZbo, PoznamkaNaDoklad, priorita, vyssi, nizsi, DavkaTPV, + pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, pom_pomer_A, pom_pomer_B, Dodavatel + FROM #HDCTabPrKVazbyGenPredna + END + +-- preddefinovana mzda pro provazani +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', N'U') IS NOT NULL + BEGIN + DELETE FROM #TabPrKVazbyGen_IDMzdy + INSERT INTO #TabPrKVazbyGen_IDMzdy + SELECT IDPrikaz, Doklad, IDMzdy FROM #HDCTabPrKVazbyGen_IDMzdyPredna + END + +-- preddefinvana tabulka vyrobnich cisel +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenVCPredna', N'U') IS NOT NULL + BEGIN + DELETE FROM #TabPrKVazbyGenVC + INSERT INTO #TabPrKVazbyGenVC + SELECT IDPolozky, VyrCislo, Mnozstvi, Sklad, IDKmenZbozi, IDVyrCP FROM #HDCTabPrKVazbyGenVCPredna + END + + +-- ext info k dilci, sklad, ze kterho se ma vydavat material +IF (@skladProVydejKZ<>N'') + UPDATE #TabPrKVazbyGen SET Sklad=@skladProVydejKZ + + + + +EXEC dbo.hp_AktualizaceTabPrKVazbyGenVC @Vratka=0 +UPDATE #TabPrKVazbyGen SET Generuj=1 + + +DROP TABLE IF EXISTS #TabGenRezVyd +CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) + + +BEGIN TRY + EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=NULL, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, + @IDExistDoklad=@IDDoklad, @SekejOperace=0 +END TRY +BEGIN CATCH + SET @errMsg = 'Chyba generovani vydeje: ' + ERROR_MESSAGE() +END CATCH + + + +INSERT @vydejky (ID) SELECT ID FROM #TabGenRezVyd + +DECLARE + @idVyd INT, + @idKZ INT, + @idPZ INT + +IF (@realizujVydej=1) + BEGIN + DECLARE vyd CURSOR LOCAL FOR + SELECT ID FROM #TabGenRezVyd + OPEN vyd + WHILE (1=1) + BEGIN + FETCH NEXT FROM vyd INTO @idVyd + IF (@@FETCH_STATUS<>0) BREAK + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END + CLOSE vyd + DEALLOCATE vyd + END + + + +IF (1=(SELECT COUNT(*) FROM @vydejky)) + SET @IDDoklad=(SELECT TOP(1) ID FROM @vydejky) + + + +IF (@extTab IS NOT NULL) AND EXISTS(SELECT 1 FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL) + IF OBJECT_ID(@extTab, N'U') IS NOT NULL + BEGIN + SET @sql = N'DELETE FROM ' + @extTab + EXECUTE sp_executesql @sql + SET @sql = N'INSERT ' + @extTab + N' (ID, IDPohZbo) SELECT ID, IDPohZbo FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL' + EXECUTE sp_executesql @sql + END + + +-- uklid +DROP TABLE IF EXISTS #TabPrKVazbyGen +DROP TABLE IF EXISTS #TabGenRezVyd +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +DROP TABLE IF EXISTS #TabPrKVazbyGenVC + + diff --git a/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOper.sql b/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOper.sql new file mode 100644 index 0000000..b60cbbd --- /dev/null +++ b/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOper.sql @@ -0,0 +1,75 @@ +-- dbo.ep_Vyroba_InsertEvidRozpracOper +CREATE PROCEDURE dbo.ep_Vyroba_InsertEvidRozpracOper + @IDZamestnance INT=NULL, + @IDPracoviste INT=NULL, + @IDStroje INT=NULL, + @CasZahajeni DATETIME=NULL, + @ErrMsg NVARCHAR(500)=N'' OUT +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + +DECLARE + @tranPred INT + +DECLARE + @idEROp INT=NULL + + +IF EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOper) + BEGIN + SELECT @idEROp=MAX(ID) FROM dbo.TabEvidRozpracOper + DBCC CHECKIDENT(TabEvidRozpracOper, RESEED, @idEROp) + END + ELSE + DBCC CHECKIDENT(TabEvidRozpracOper, RESEED, 1) +SET @idEROp=NULL + + + + + +IF (@IDPracoviste IS NULL) AND (@IDStroje IS NOT NULL) + SELECT @IDPracoviste=IDPrac FROM dbo.TabCisStroju WHERE ID=@IDStroje + +IF (@IDZamestnance IS NULL) OR (@IDPracoviste IS NULL) + BEGIN + SET @ErrMsg = N'Neni zadan zamestnanec nebo pracoviste' + RETURN NULL + END + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) NOT NULL DEFAULT N'') + + + +SET @CasZahajeni = ISNULL(@CasZahajeni, GETDATE()) + + +BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) BEGIN TRAN + + INSERT dbo.TabEvidRozpracOper (IDZamestnance, CasZahajeni, IDPracoviste, IDStroje) + SELECT @IDZamestnance, @CasZahajeni, @IDPracoviste, @IDStroje + SET @idEROp = SCOPE_IDENTITY() + +-- slepice + IF OBJECT_ID(N'dbo.ep_Vyroba_InsertEvidRozpracOper_Po', N'P') IS NOT NULL + EXEC dbo.ep_Vyroba_InsertEvidRozpracOper_Po @idEROp + + + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + COMMIT TRAN +END TRY +BEGIN CATCH + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @ErrMsg = ERROR_MESSAGE() + INSERT #TabExtKom (Typ, Poznamka) SELECT 3, @ErrMsg + SET @idEROp = NULL +END CATCH + +RETURN @idEROp diff --git a/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql b/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql new file mode 100644 index 0000000..fedb5d9 --- /dev/null +++ b/_custom/INCOSystems/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql @@ -0,0 +1,67 @@ +-- dbo.ep_Vyroba_InsertEvidRozpracOperPol +CREATE PROCEDURE dbo.ep_Vyroba_InsertEvidRozpracOperPol + @IdEvidRozpOper INT, + @IdPrikaz INT, + @doklPrPost INT, + @altPrPost NCHAR(1), + @IdVyrCis INT=NULL, + @mnozOdv NUMERIC(19,6)=0, + @skCas NUMERIC(19,6)=0, + @skCasT TINYINT=1, + @skCasObsl NUMERIC(19,6)=0, + @skCasObslT TINYINT=1, + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + +DECLARE + @tranPred INT, + @idEROpPol INT=NULL + + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) NOT NULL DEFAULT N'') + + + +-- cisteni identity +IF EXISTS (SELECT 1 FROM dbo.TabEvidRozpracOperR) + BEGIN + SELECT @idEROpPol=MAX(ID) FROM dbo.TabEvidRozpracOperR + DBCC CHECKIDENT (TabEvidRozpracOperR, RESEED, @idEROpPol) + END + ELSE + DBCC CHECKIDENT (TabEvidRozpracOperR, RESEED, 1) +SET @idEROpPol=NULL + + + + +BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) BEGIN TRAN + + INSERT dbo.TabEvidRozpracOperR (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, IDVyrCis, Mnoz_odv, Sk_cas, Sk_cas_T, Sk_cas_Obsluhy, Sk_cas_Obsluhy_T) + SELECT @IdEvidRozpOper, @IdPrikaz, @doklPrPost, @altPrPost, @IdVyrCis, @mnozOdv, @skCas, @skCasT, @skCasObsl, @skCasObslT + SET @idEROpPol = SCOPE_IDENTITY() + + + IF OBJECT_ID(N'dbo.ep_Vyroba_InsertEvidRozpracOperPol_Po', N'P') IS NOT NULL + EXEC dbo.ep_Vyroba_InsertEvidRozpracOperPol_Po @idEROpPol + + + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + COMMIT TRAN +END TRY +BEGIN CATCH + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() + INSERT #TabExtKom (Typ, Poznamka) SELECT 3, LEFT(@errMsg,255) + SET @idEROpPol = NULL +END CATCH + +RETURN @idEROpPol diff --git a/_custom/INCOSystems/uCtrlCustom.pas b/_custom/INCOSystems/uCtrlCustom.pas new file mode 100644 index 0000000..8f1dd69 --- /dev/null +++ b/_custom/INCOSystems/uCtrlCustom.pas @@ -0,0 +1,160 @@ +unit uCtrlCustom; + +interface +{$I 'GlobalDefs.inc'} + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + helTabsBIDs, + uHeOObj_Base, + uHeOObj_Custom, + uSvcCustom, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +type + + [MVCPath('/inco')] + TINCOsysController = class(TBaseController) +{ + strict private + FSelfSvc: TINCOSysService; + strict protected + function GetINCOSysService: TINCOSysService; +} + public + destructor Destroy; override; + + [MVCPath('/zapisjson')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('INCOSystems', 'Zápis JSON dat do db Heliosu', 'INCOZapisJSONDoHeliosu')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisJSONDoHeliosu (CTX: TWebContext); + + [MVCPath('/poslednievidence')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Skupina karet', 'Vrací data skupiny karet dle jejího kódu')] + [MVCSwagParam(plQuery, 'idprikaz', 'ID vyrobniho prikazu', ptString, false, '1')] + procedure PosledniEvidOperacePrikazu ([MVCFromQueryString('idprikaz', '')] sIdPrikaz: string='' + ); + + + + end; + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + System.JSON, + JsonDataObjects, + Winapi.ActiveX, + uDataMod, + Quick.Logger; + +const + selSloupce = ''; +{$I globalConsts.inc} + + + + +{ TINCOSysController } + destructor TINCOSysController.Destroy; + begin +// FSelfSvc.Free; + inherited; + end; + + +{ + function TINCOSysController.GetINCOSysService: TINCOSysService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TINCOSysService.Create (datMod); + result:= FSelfSvc; + end; +} + + + + procedure TINCOSysController.ZapisJSONDoHeliosu (CTX: TWebContext); + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + GetINCOSysService.ZapisJsonDoHeliosu (jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + 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 TINCOSysController.PosledniEvidOperacePrikazu (sIdPrikaz: string=''); + var idPrikaz: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + idPrikaz:= 0; + sIdPrikaz:= sanitizeSQLString(sIdPrikaz); + if not(TryStrToInt(sIdPrikaz, idPrikaz)) then + idPrikaz:= 0; + + if (idPrikaz>0) then + params.Add('idPrikaz', idPrikaz.ToString); + + params.Add('jenPosledni', '1'); + + + try + Render(ObjectDict().Add('data', GetVyrobaEvidenceOperaciService.GetByParams (params))); + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +{$ENDIF} + end; + + end; + + +end. diff --git a/_custom/INCOSystems/uHeOObj_Custom.pas b/_custom/INCOSystems/uHeOObj_Custom.pas new file mode 100644 index 0000000..8c61645 --- /dev/null +++ b/_custom/INCOSystems/uHeOObj_Custom.pas @@ -0,0 +1,264 @@ +ďťżunit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + + + +type + [MVCNameCase(ncLowerCase)] + TGatemaSDScanData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDZdrojSD: NullableInt32; + FIDPolozky: NullableInt32; + FIDPrikaz: NullableInt32; + FDokladPrKV: NullableInt32; + FDokladPrVPV: NullableInt32; + FIDPohZbo: NullableInt32; + FIDVyrCS_Obj: NullableInt32; + FIDInvItem: NullableInt32; + FIDPohZbo_New: NullableInt32; + FIDKmenZbozi: NullableInt32; + FIDStavSkladu: NullableInt32; + FVyrCislo: NullableString; + FPopisSarze: NullableString; + FMnozstvi: Single; + FMnozstviEvidence: Single; + FMJ: NullableString; + FMJEvidence: NullableString; + FBarCode: NullableString; + FDatumExpirace: NullableTDateTime; + FKodBaleni: NullableString; + FDatPorizeni: TDateTime; + FGenerovat: NullableBoolean; + FJedinecneCislo: NullableString; + public +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDZdrojSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDZdrojSD', 'ID zdorj SD', false, true)] + property IDZdrojSD: NullableInt32 read FIDZdrojSD write FIDZdrojSD; + + [MVCColumn('IDPolozky', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPolozky', 'ID poloĹžky', false, true)] + property IDPolozky: NullableInt32 read FIDPolozky write FIDPolozky; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('VyrCislo', false)] + [MVCSwagJsonSchemaField(stString, 'VyrCislo', 'VĂ˝robnĂ­ číslo', true, false, 1, 100)] + property VyrCislo: NullableString read FVyrCislo write FVyrCislo; + + [MVCColumn('PopisSarze', false)] + [MVCSwagJsonSchemaField(stString, 'PopisSarze', 'Popis ĹĄarĹže', true, false, 1, 100)] + property PopisSarze: NullableString read FPopisSarze write FPopisSarze; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField('Mnozstvi', 'MnoĹžstvĂ­', true, false)] + property Mnozstvi: Single read FMnozstvi write FMnozstvi; + + [MVCColumn('MnozstviEvidence')] + [MVCSwagJsonSchemaField('MnozstviEvidence', 'MnoĹžstvĂ­ v evidenčnĂ­ jednotce', true, false)] + property MnozstviEvidence: Single read FMnozstviEvidence write FMnozstviEvidence; + + [MVCColumn('DatumExpirace')] + [MVCSwagJsonSchemaField('DatumExpirace', 'Datum expirace', false, true)] + property DatumExpirace: NullableTDatetime read FDatumExpirace write FDatumExpirace; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + end; + + + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDZdrojData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDDokZbo: NullableInt32; + FIDPrikaz: NullableInt32; + FGUIDDokladu: NullableTGUID; + public + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'FIDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('GUIDDokladu', false)] + [MVCSwagJsonSchemaField(stGuid, 'GUIDDokladu', 'GUID dokladu', false, true)] + property GUIDDokladu: NullableTGUID read FGUIDDokladu write FGUIDDokladu; + end; + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDDoklad = class(THeliosObjekty) + private + FTypDokladu: integer; + FPodtypDokladu: NullableInt32; + FRadaDokladu: NullableString; + FDruhPohybuZbo: NullableInt32; + FSklad: NullableString; + FSkladCil: NullableString; + FIDPrikaz: NullableInt32; + FIDDokZbo: NullableInt32; + FIDDokZbo_New: NullableInt32; + FGUIDDokZbo: NullableTGUID; + FGUIDDokZbo_New: NullableTGUID; + FIDInvHead: NullableInt32; + FIDOrg: NullableInt32; + FCisloOrg: NullableInt32; + FDatumPripadu: NullableTDateTime; + FDatPorizeni: TDateTime; + FDatGenerovani: NullableTDateTime; + FScanData: TObjectList; + procedure SetSDScanData (const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('TypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'TypDokladu', 'Typ dokladu', true, false)] + property TypDokladu: integer read FTypDokladu write FTypDokladu; + + [MVCColumn('PodtypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'PodtypDokladu', 'Podtyp dokladu', false, true)] + property PodtypDokladu: NullableInt32 read FPodtypDokladu write FPodtypDokladu; + + [MVCColumn('RadaDokladu', false)] + [MVCSwagJsonSchemaField(stString, 'RadaDokladu', 'Řada dokladu', false, true)] + property RadaDokladu: NullableString read FRadaDokladu write FRadaDokladu; + + [MVCColumn('DruhPohybuZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'DruhPohybuZbo', 'Druh pohybu zboŞí', false, true)] + property DruhPohybuZbo: NullableInt32 read FDruhPohybuZbo write FDruhPohybuZbo; + + [MVCColumn('Sklad', false)] + [MVCSwagJsonSchemaField(stString, 'Sklad', 'Sklad', false, true)] + property Sklad: NullableString read FSklad write FSklad; + + [MVCColumn('SkladCil', false)] + [MVCSwagJsonSchemaField(stString, 'SkladCil', 'CĂ­lovĂ˝ sklad', false, true)] + property SkladCil: NullableString read FSkladCil write FSkladCil; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDDokZbo_New', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo_New', 'ID novĂŠho dokladu OZ', false, true)] + property IDDokZbo_New: NullableInt32 read FIDDokZbo_New write FIDDokZbo_New; + + [MVCColumn('IDInvHead', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDInvHead', 'ID dokladu inventury', false, true)] + property IDInvHead: NullableInt32 read FIDInvHead write FIDInvHead; + + [MVCColumn('IDOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDOrg', 'ID organizace', false, true)] + property IDOrg: NullableInt32 read FIDOrg write FIDOrg; + + [MVCColumn('CisloOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('DatumPripadu')] + [MVCSwagJsonSchemaField('DatumPripadu', 'Datum případu', false, true)] + property DatumPripadu: NullableTDatetime read FDatumPripadu write FDatumPripadu; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + + [MVCColumn('DatGenerovani')] + [MVCSwagJsonSchemaField('DatGenerovani', 'Datum generovĂĄnĂ­ dokladu OZ', false, true)] + property DatGenerovani: NullableTDatetime read FDatGenerovani write FDatGenerovani; + + [MapperListOf(TGatemaSDScanData)] + property ScanData: TObjectList read FScanData write SetSDScanData; + end; + + + + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + +{ TGatemaSDDoklad } + + constructor TGatemaSDDoklad.Create; + begin + inherited; + FScanData:= TObjectList.Create; + end; + + + destructor TGatemaSDDoklad.Destroy; + begin +// if (FPohybyOZ<>nil) then +// FPohybyOZ.Free; + inherited; + end; + + + procedure TGatemaSDDoklad.SetSDScanData(const Value: TObjectList); + begin + if (Value<>FScanData) then + begin + FScanData.Free; + FScanData:= Value; + end; + end; + + +end. \ No newline at end of file diff --git a/_custom/INCOSystems/uSvcCustom.pas b/_custom/INCOSystems/uSvcCustom.pas new file mode 100644 index 0000000..426db4e --- /dev/null +++ b/_custom/INCOSystems/uSvcCustom.pas @@ -0,0 +1,140 @@ +ďťżunit uSvcCustom; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Classes, + System.JSON, + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uHeoObj_Vyroba, + uSvc_ObehZbozi, + uSvc_Vyroba; + + +const +{$I C:\_zakaznici\pluginy_obecne\HDCApi2\globalConsts.inc} + + +type + TINCOSysService = class(TServiceBase) + public + procedure ZapisJsonDoHeliosu (jsonData: string; var respString: string); + end; + + + +implementation +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + + +{ TINCOSysService } + + procedure TINCOSysService.ZapisJsonDoHeliosu (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs, guidIdent: string; + guid: TGuid; + akce: string; + j, t, a, v: JsonDataObjects.TJSONObject; + i, ii, taskDZId, taskId, intTemp, idJSON: integer; + jeOld: boolean; + lQry: TFDQuery; + w: TStreamWriter; + jo: System.JSON.TJsonObject; + begin + idJSON:= 0; + respString:= '['; + + jo:= System.JSON.TJsonObject.Create; + + jsonData:= jsonData.Trim; + if (jsonData<>'') then + begin + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + CoCreateGuid(guid); + if (System.SysUtils.CreateGUID(guid)=S_OK) then + guidIdent:= System.SysUtils.GUIDToString(guid) + else + guidIdent:= self.NewUUID32; + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (IdPHIdent, GUIDIdent, JSONData) SELECT 0, CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + '), N' + jsonData.QuotedString; + FDM.sqlConn.ExecSQL(lSQL); + lSQL:= 'SELECT ID FROM ' + tblPrijataJsonData + ' WHERE GUIDIdent=CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + ')'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + begin + idJSON:= lQry.FieldByName('ID').AsInteger; + respString:= 'OK'; + jo.AddPair('heliosid', idJSON.ToString); + end; + except on E:Exception do + begin + respString:= 'NOT OK'; + raise EServiceException.Create('Chyba zĂĄpisu JSON dat: ' + E.Message); + end; + end; + finally + FreeAndNil(lQry); + end; + + + CoInitialize(nil); + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + if (j.Contains('akce')) then + begin + akce:= j.S['akce'].Trim; + if (idJSON>0) and (akce<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); +{ + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + except on E:Exception do + end; + end; +} + end; + finally + j.Free; + end; + CoUninitialize; + + end + else + respString:= 'NO input data'; + + jo.AddPair('status', respString); + respString:= '[' +respString + ']'; + + respString:= jo.ToString; + + + end; + + + +end. diff --git a/_custom/INCOSystems/uTabs.inc b/_custom/INCOSystems/uTabs.inc new file mode 100644 index 0000000..2fb7a2e --- /dev/null +++ b/_custom/INCOSystems/uTabs.inc @@ -0,0 +1,5 @@ +const + tblMichPozadavek = '[dbo].[_hdc_DataZone_MicharnaPozadavek]'; + tblMichSpotreba = '[dbo].[_hdc_DataZone_MicharnaSpotreba]'; + tblPrijataJsonData = '[dbo].[_hdc_ph_PrijataJsonData]'; // data z Pro Holdingu + tblVyrobaObjednavky = '[dbo].[_TabVyroba_Objednavky]'; // data objednavek z Pro Holdingu diff --git a/_custom/INCOSystems/uWebModCustom.inc b/_custom/INCOSystems/uWebModCustom.inc new file mode 100644 index 0000000..45527a7 --- /dev/null +++ b/_custom/INCOSystems/uWebModCustom.inc @@ -0,0 +1,2 @@ + FEngine.AddController (TINCOsysController); + diff --git a/_custom/INCOSystems/zdroje.RES b/_custom/INCOSystems/zdroje.RES new file mode 100644 index 0000000..221c6f0 Binary files /dev/null and b/_custom/INCOSystems/zdroje.RES differ diff --git a/_custom/INCOSystems/zdroje.rc b/_custom/INCOSystems/zdroje.rc new file mode 100644 index 0000000..ab67baf --- /dev/null +++ b/_custom/INCOSystems/zdroje.rc @@ -0,0 +1,9 @@ +col_TabPredna_EXT RCDATA .\sql\col_TabPredna_EXT.sql +col_TabKmenZbozi_EXT RCDATA .\sql\col_TabKmenZbozi_EXT.sql +col_TabEvidRozpracOper_EXT RCDATA .\sql\col_TabEvidRozpracOper_EXT.sql +col_TabPrPostup_EXT RCDATA .\sql\col_TabPrPostup_EXT.sql +ep_Vyroba_GenVydejZeMzdy RCDATA .\sql\ep_Vyroba_GenVydejZeMzdy.sql +ep_Vyroba_GenOdvodZeMzdy RCDATA .\sql\ep_Vyroba_GenOdvodZeMzdy.sql +ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql +ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql +ep_HDCDZApi_ZpracujPrijataData RCDATA .\sql\ep_HDCDZApi_ZpracujPrijataData.sql diff --git a/_custom/Kdynium/customDefs.inc b/_custom/Kdynium/customDefs.inc new file mode 100644 index 0000000..76e2a93 --- /dev/null +++ b/_custom/Kdynium/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in 'uHeOObj_Custom.pas' + ,uCtrlCustom in 'uCtrlCustom.pas' + ,uSvcCustom in 'uSvcCustom.pas' diff --git a/_custom/Kdynium/uCtrlCustom.pas b/_custom/Kdynium/uCtrlCustom.pas new file mode 100644 index 0000000..15a0496 --- /dev/null +++ b/_custom/Kdynium/uCtrlCustom.pas @@ -0,0 +1,121 @@ +ďťżunit uCtrlCustom; + +interface + +uses + mvcframework, + mvcframework.Commons, + mvcframework.Serializer.Commons, + mvcframework.Serializer.Intf, + System.Generics.Collections, + System.RegularExpressions, + System.StrUtils, + System.SysUtils, + JsonDataObjects, + uCommons, + uCtrlBase, + uSvc_Base, + uHeoObj_Base, + uHeOObj_Custom, + uSvcCustom; + +type + + [MVCDoc('Zdroj Nadoba')] + [MVCPath('/planlisu')] + TKDYPlanLisuController = class(TBaseController) + private + FSelfSvc: TKDYPlanLisuService; + public + procedure InitController; + + [MVCDoc('Vrati metadata')] + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('KDYPlanNasazeniLisu', 'VracĂ­ data plĂĄnu nasazenĂ­ lisĹŻ', 'GetByID')] + [MVCSwagParam(plPath, 'id', 'ID plĂĄnu', ptString, true)] + [MVCSwagParam(plPath, 'barcode', 'Barcode plĂĄnu', ptString, true)] + [MVCSwagResponses(200, 'Success', TStavSkladu, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('barcode', '')] barcode: string='' + ); + end; + + + + + + +implementation +uses FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + uDataMod; + +const + selSloupce = ''; + +{ TKDYPlanLisuController } + + procedure TKDYPlanLisuController.InitController; + begin + inherited; + if (FSelfSvc=nil) then + FSelfSvc:= TKDYPlanLisuService.Create(datMod); + end; + + + + procedure TKDYPlanLisuController.GetByID(id: string=''; barcode: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + InitController; + + Render(ObjectDict().Add('data', FSelfSvc.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + end; + + + + procedure TKDYPlanLisuController.GetMeta; + begin + try + InitController; + + Render(ObjectDict().Add('data', FSelfSvc.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + end; + + +end. diff --git a/_custom/Kdynium/uHeOObj_Custom.pas b/_custom/Kdynium/uHeOObj_Custom.pas new file mode 100644 index 0000000..04e2f94 --- /dev/null +++ b/_custom/Kdynium/uHeOObj_Custom.pas @@ -0,0 +1,40 @@ +unit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + +const + tblPlanNasazLisu = '[dbo].[_hdc_TabPlanNasazeniLisu]'; + tblPlanNasazLisuR = '[dbo].[_hdc_TabPlanNasazeniLisuR]'; + tblPlanNasazLisuVstr = '[dbo].[_hdc_TabPlanNasazeniLisuVstr]'; + tblPlanNasazLisuZm = '[dbo].[_hdc_TabPlanNasazeniLisuZmetky]'; + + +type + [MVCNameCase(ncLowerCase)] + TKDYPlanLisu = class(THeliosObjekty) + private + FIndexZmeny: NullableInt32; + public + [MVCColumn('Cislo', true)] // is PrimaryKey + property IndexZmeny: NullableInt32 read FIndexZmeny write FIndexZmeny; + end; + + +implementation + + +end. \ No newline at end of file diff --git a/_custom/Kdynium/uSvcCustom.pas b/_custom/Kdynium/uSvcCustom.pas new file mode 100644 index 0000000..097bf4a --- /dev/null +++ b/_custom/Kdynium/uSvcCustom.pas @@ -0,0 +1,87 @@ +ďťżunit uSvcCustom; + +interface + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, + uHeoObj_Base, + uHeOObj_Custom; + +type + + TKDYPlanLisuService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByParams(params: TDictionary): TObjectList; + function GetByID (const AID: integer): TKDYPlanLisu; + function GetMeta: TJSONObject; + end; + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + helTabsBIDs; + + +{ TKDYPlanLisuService } + + function TKDYPlanLisuService.GetAll:TObjectList; + var lSQL: string; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPlanNasazLisu) + ' FROM ' + tblPlanNasazLisu + ' ORDER BY ID'; + FDM.sqlQry1.Open(lSQL, []); + result:= FDM.sqlQry1.AsObjectList; + FDM.sqlQry1.Close; + end; + + + + function TKDYPlanLisuService.GetByParams(params: TDictionary): TObjectList; + begin + + end; + + + + function TKDYPlanLisuService.GetByID (const AID: integer): TKDYPlanLisu; + var lSQL: string; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPlanNasazLisu) + ' FROM ' + tblPlanNasazLisu + ' WHERE ID=:ID'; + FDM.sqlQry1.Open(lSQL, [AID]); + try + if not(FDM.sqlQry1.EOF) then + result:= FDM.sqlQry1.AsObject + else + raise EServiceException.Create('PlĂĄn s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TKDYPlanLisuService.GetMeta: TJSONObject; + var lSQL: string; + begin + try + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPlanNasazLisu) + ' FROM ' + tblPlanNasazLisu + ' WHERE 1=0'; + FDM.sqlQry1.Open(lSQL); + Result := FDM.sqlQry1.MetadataAsJSONObject(); + finally + FDM.sqlQry1.Close; + end; + end; + + +end. diff --git a/_custom/Kdynium/uWebModCustom.inc b/_custom/Kdynium/uWebModCustom.inc new file mode 100644 index 0000000..8c9a106 --- /dev/null +++ b/_custom/Kdynium/uWebModCustom.inc @@ -0,0 +1 @@ + FEngine.AddController(TKDYPlanLisuController); \ No newline at end of file diff --git a/_custom/Koramex/customDefs.inc b/_custom/Koramex/customDefs.inc new file mode 100644 index 0000000..76e2a93 --- /dev/null +++ b/_custom/Koramex/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in 'uHeOObj_Custom.pas' + ,uCtrlCustom in 'uCtrlCustom.pas' + ,uSvcCustom in 'uSvcCustom.pas' diff --git a/_custom/Koramex/uCtrlCustom.pas b/_custom/Koramex/uCtrlCustom.pas new file mode 100644 index 0000000..0fab476 --- /dev/null +++ b/_custom/Koramex/uCtrlCustom.pas @@ -0,0 +1,586 @@ +unit uCtrlCustom; + +interface + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + uHeoObj_Base, + uHeOObj_Custom, + uSvcCustom, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +type + + [MVCPath('/vyroba-pila')] + TKRXVyrobaPilaController = class(TBaseController) + strict private + FSelfSvc: TKoramexService; + strict protected + function GetKoramexService: TKoramexService; + public + destructor Destroy; override; + + [MVCPath('hlavicky')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Hlavičky evidence prĂĄce pily', 'VrĂĄtĂ­ seznam hlaviček evidence pily', 'GetHlavicky')] + [MVCSwagParam(plQuery, 'cislozam', 'OsobnĂ­ číslo zaměstnance', ptString, false)] + [MVCSwagParam(plQuery, 'radky', 'Včetně řádkĹŻ (0/1)', ptString, false)] + procedure GetHlavicky ([MVCFromQueryString('cislozam', '')] cislozam: string=''; + [MVCFromQueryString('radky', '')] radky: string='' + ); + + [MVCPath('operace')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('VĂ˝robnĂ­ operace', 'VrĂĄtĂ­ seznam operacĂ­ vĂ˝robnĂ­ch příkazĹŻ s ĹživĂ˝mi kusy', 'GetOperace')] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviĹĄtě', ptString, true)] + [MVCSwagParam(plQuery, 'zakazka', 'OsobnĂ­ číslo zaměstnance', ptString, false)] + [MVCSwagParam(plQuery, 'idkmenmaterial', 'ID kmenovĂŠ karty materiĂĄlu', ptString, false)] + procedure GetOperace ([MVCFromQueryString('idpracoviste', '')] idPrac: string=''; + [MVCFromQueryString('zakazka', '')] zakazka: string=''; + [MVCFromQueryString('idkmenmaterial', '')] idKmenMat: string='' + ); + + end; + + + + [MVCPath('/kooperace')] + TKRXVyrobaCisKooperaceController = class(TTPVCisKooperaciController) + strict private + FSelfSvc: TKoramexService; + strict protected + function GetKoramexService: TKoramexService; + public + destructor Destroy; override; + +// [MVCDoc('PomocĂ­ POST zapĂ­ĹĄe data DataZone taskĹŻ (kontroluje duplicitu,vracĂ­ NEW, OLD nebo NOT OK s textem chyby)')] + [MVCPath('/zapis')] // zapis pozadavku prevodu na mezisklad + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('PoĹžadavek převodu na mezisklad', 'ZĂĄpis poĹžadavku převodu na mezisklad', 'ZapisPozadavku')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisPozadavku(CTX: TWebContext); + + [MVCPath('/potvrzeni')] // vracti potvrzeni zapisu pozadavku + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('PoĹžadavek převodu na mezisklad', 'PotvrzenĂ­ poĹžadavku převodu na mezisklad', 'PotvrzeniPozadavku')] + [MVCSwagParam(plPath, 'id', 'ID poĹžadavku', ptString, false)] + procedure PotvrzeniPozadavku(id: string='' + ); + end; + + + + + + + [MVCPath('/sdserver/doklad')] + TGatemaSDDokladController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDDokladService; + strict protected + function GetGatemaSDDokladService: TGatemaSDDokladService; + public + destructor Destroy; override; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ hlavičku dokladĹŻ SD Serveru', 'GetAll')] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + procedure GetAll([MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ metadata', 'GetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_Doklad', 'VracĂ­ data dokladu SD Serveru', 'GetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'typdokl', 'Typ dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu zboŞí', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'format', 'FormĂĄt (1=dokladOZ)', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDDoklad, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('typdokl', '')] typDokl: string=''; + [MVCFromQueryString('druhpohybu', '')] druhPohybu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('format', '')] formatX: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + end; + + + + [MVCPath('/sdserver/dokladoz')] + TGatemaSDDokladOZController = class(TBaseController) + strict private + FSelfSvc: TSDGDokladOZService; + strict protected + function GetSDGDokladOZService: TSDGDokladOZService; + public + destructor Destroy; override; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_DokladOZ', 'VracĂ­ hlavičku dokladĹŻ OZ s vazbou na SD Server', 'GetAll')] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + procedure GetAll([MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_DokladOZ', 'VracĂ­ metadata', 'GetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_DokladOZ', 'VracĂ­ data dokladu OZ s vazbou na SD Server', 'GetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'typdokl', 'Typ dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu zboŞí', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'format', 'FormĂĄt (1=dokladOZ)', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDDoklad, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('typdokl', '')] typDokl: string=''; + [MVCFromQueryString('druhpohybu', '')] druhPohybu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('format', '')] formatX: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + end; + + + + [MVCPath('/sdserver/scandata')] + TGatemaSDScanDataController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDScanDataService; + strict protected + function GetGatemaSDScanDataService: TGatemaSDScanDataService; + public + destructor Destroy; override; + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_ScanData', 'VracĂ­ metadata', 'GetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD_ScanData', 'VracĂ­ naskenovanĂĄ data', 'GetByID')] + [MVCSwagParam(plPath, 'id', 'ID scan data', ptString, false)] + [MVCSwagParam(plQuery, 'iddoklad', 'ID dokladu SD', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDScanData, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('iddoklad', '')] iddoklad: string='' + ); + end; + + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + System.JSON, + JsonDataObjects, + Winapi.ActiveX, + uDataMod; + +const + selSloupce = ''; + + + + { TKRXVyrobaPilaController } + destructor TKRXVyrobaPilaController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + + + + { TGatemaSDDokladOZController } + + destructor TGatemaSDDokladOZController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + + function TGatemaSDDokladOZController.GetSDGDokladOZService: TSDGDokladOZService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TSDGDokladOZService.Create(datMod); + result:= FSelfSvc; + end; + + + + procedure TGatemaSDDokladOZController.GetAll(odDatum: string=''; jenSeznam: string='0'); + var params: TDictionary; + begin + params:= TDictionary.Create; + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladOZController.GetByID(id: string=''; typDokl: string=''; druhPohybu: string=''; sklad: string=''; formatX: string=''; odDatum: string=''; doDatum: string=''; + jenSeznam: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + typDokl:= sanitizeSQLString(sklad); + if (typDokl<>'') then + params.Add('typDokladu', typDokl); + + druhPohybu:= sanitizeSQLString(sklad); + if (druhPohybu<>'') then + params.Add('druhPohybu', druhPohybu); + + formatX:= sanitizeSQLString(formatX); // pro zobrazeni jako DokladOZ + if (formatX<>'') then + if (formatX='1') then + params.Add('format', formatX); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladOZController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + end; + + + + + + + { TGatemaSDDokladController } + + destructor TGatemaSDDokladController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + function TGatemaSDDokladController.GetGatemaSDDokladService: TGatemaSDDokladService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDDokladService.Create(datMod); + result:= FSelfSvc; + end; + + + + + procedure TGatemaSDDokladController.GetAll(odDatum: string=''; jenSeznam: string='0'); + var params: TDictionary; + begin + params:= TDictionary.Create; + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetByID(id: string=''; typDokl: string=''; druhPohybu: string=''; sklad: string=''; formatX: string=''; odDatum: string=''; doDatum: string=''; + jenSeznam: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + typDokl:= sanitizeSQLString(sklad); + if (typDokl<>'') then + params.Add('typDokladu', typDokl); + + druhPohybu:= sanitizeSQLString(sklad); + if (druhPohybu<>'') then + params.Add('druhPohybu', druhPohybu); + + formatX:= sanitizeSQLString(formatX); // pro zobrazeni jako DokladOZ + if (formatX<>'') then + if (formatX='1') then + params.Add('format', formatX); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + end; + + + + + +{ TGatemaSDScanDataController } + + destructor TGatemaSDScanDataController.Destroy; + begin + FSelfSvc.Free; + end; + + function TGatemaSDScanDataController.GetGatemaSDScanDataService: TGatemaSDScanDataService; + begin + inherited Create; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDScanDataService.Create(datMod); + result:= FSelfSvc; + end; + + + + procedure TGatemaSDScanDataController.GetByID(id: string=''; iddoklad: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetByParams(params))); // viz uSvcCustom.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + end; + + + + procedure TGatemaSDScanDataController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + end; + end; + + + + + + +end. diff --git a/_custom/Koramex/uHeOObj_Custom.pas b/_custom/Koramex/uHeOObj_Custom.pas new file mode 100644 index 0000000..51ff584 --- /dev/null +++ b/_custom/Koramex/uHeOObj_Custom.pas @@ -0,0 +1,29 @@ +ďťżunit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + +end. \ No newline at end of file diff --git a/_custom/Koramex/uSvcCustom.pas b/_custom/Koramex/uSvcCustom.pas new file mode 100644 index 0000000..d55695e --- /dev/null +++ b/_custom/Koramex/uSvcCustom.pas @@ -0,0 +1,40 @@ + +unit uSvcCustom; + +interface + +uses + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom; + + +type + TKoramexService = class(TServiceBase) + public + end; + + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + + + +end. diff --git a/_custom/Koramex/uWebModCustom.inc b/_custom/Koramex/uWebModCustom.inc new file mode 100644 index 0000000..e183a3e --- /dev/null +++ b/_custom/Koramex/uWebModCustom.inc @@ -0,0 +1 @@ + FEngine.AddController(TKRXVyrobaCisKooperaceController); diff --git a/_custom/Rootvin/customDefs.inc b/_custom/Rootvin/customDefs.inc new file mode 100644 index 0000000..76e2a93 --- /dev/null +++ b/_custom/Rootvin/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in 'uHeOObj_Custom.pas' + ,uCtrlCustom in 'uCtrlCustom.pas' + ,uSvcCustom in 'uSvcCustom.pas' diff --git a/_custom/Rootvin/hdcDZAPIdefs.def b/_custom/Rootvin/hdcDZAPIdefs.def new file mode 100644 index 0000000..e01eef8 --- /dev/null +++ b/_custom/Rootvin/hdcDZAPIdefs.def @@ -0,0 +1,594 @@ + + + + + + + + + + + + + 0.0 OR RP.KontrolovatRozpracPriUzav=0)~ +~ + SELECT * FROM #apiKusovnik~ +END~ +]]> + + + + + + + 0) BREAK~ +~ + IF (@cZam IS NOT NULL) AND (@idZam IS NULL)~ + UPDATE dbo._hdc_DataZone_Tasky SET ZamestnanecID=(SELECT ID FROM dbo.TabCisZam WHERE Cislo=@cZam) WHERE ID=@id~ +~ + END~ + CLOSE c~ + DEALLOCATE c~ +~ +END~ +'~ +IF NOT EXISTS(SELECT 1 FROM sys.triggers WHERE [name]=N'et_hdc_DataZone_Tasky_IU')~ + EXEC sp_executesql @sql~ +~ +~ +~ +~ +--DECLARE @sql NVARCHAR(max)~ +SET @sql=N'~ +CREATE TRIGGER dbo.et_hdc_DataZone_Tasky_D ON dbo._hdc_DataZone_Tasky~ +WITH EXECUTE AS CALLER~ +FOR DELETE~ +AS~ +BEGIN~ + SET NOCOUNT ON~ +~ + DECLARE~ + @iTemp INT,~ + @id INT~ +~ +~ + DECLARE c CURSOR LOCAL FAST_FORWARD FOR~ + SELECT d.ID FROM deleted d~ + OPEN c~ + WHILE (1=1)~ + BEGIN~ + FETCH NEXT FROM c INTO @id~ + IF (@@FETCH_STATUS<>0) BREAK~ +~ + DELETE FROM dbo._hdc_DataZone_Subtasky WHERE IdTask=@id~ + IF NOT EXISTS(SELECT ID FROM dbo._hdc_DataZone_Subtasky)~ + TRUNCATE TABLE dbo._hdc_DataZone_Subtasky~ + ELSE~ + BEGIN~ + SELECT @iTemp=MAX(ID) FROM dbo._hdc_DataZone_Subtasky~ + DBCC CHECKIDENT(_hdc_DataZone_Subtasky, RESEED, @iTemp)~ + END~ +~ + END~ + CLOSE c~ + DEALLOCATE c~ +~ +~ + IF NOT EXISTS(SELECT ID FROM dbo._hdc_DataZone_Tasky)~ + TRUNCATE TABLE dbo._hdc_DataZone_Tasky~ + ELSE~ + BEGIN~ + SELECT @iTemp=MAX(ID) FROM dbo._hdc_DataZone_Tasky~ + DBCC CHECKIDENT(_hdc_DataZone_Tasky, RESEED, @iTemp)~ + END~ +~ +END'~ +IF NOT EXISTS(SELECT 1 FROM sys.triggers WHERE [name]=N'et_hdc_DataZone_Tasky_D')~ + EXEC sp_executesql @sql~ +]]> + + + + + + + 0) BREAK~ +~ + IF (@idPrPost IS NULL) AND (@bc<>N'''')~ + BEGIN~ + SET @idPrPost=(SELECT ID FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND BarCode=@bc)~ + IF (@idPrPost IS NOT NULL)~ + BEGIN~ + SELECT @idVPr=IDPrikaz, @dokl=Doklad, @alt=Alt FROM dbo.TabPrPostup WHERE ID=@idPrPost~ + UPDATE dbo._hdc_DataZone_Subtasky SET IdPrPostup=@idPrPost, IDPrikaz=@idVPr, Doklad=@dokl, Alt=@alt WHERE ID=@id AND IDPrPostup IS NULL~ + END~ + END~ +~ + SET @idTask=(SELECT ID FROM dbo._hdc_DataZone_Tasky WHERE IdDataZoneTaskID=@idDZTask)~ + UPDATE dbo._hdc_DataZone_Subtasky SET IDTask=@idTask WHERE ID=@id AND IDTask<>@idTask~ +~ + END~ + CLOSE c~ + DEALLOCATE c~ +~ +END~ +'~ +IF NOT EXISTS(SELECT 1 FROM sys.triggers WHERE [name]=N'et_hdc_DataZone_Subtasky_IU')~ + EXEC sp_executesql @sql~ +]]> + + + + + + + + + + + 0) BREAK~ +~ + UPDATE dbo._hdc_DataZone_Tasky SET Blokovano=1 WHERE ID=@idTask~ +~ + SET @loginName=(SELECT LoginId FROM dbo.TabCisZam WHERE Cislo=@cZam)~ + IF (ISNULL(@loginName,N'')=N'')~ + SET @loginName=(SELECT PrijmeniJmeno FROM dbo.TabCisZam WHERE ID=@idZam)~ + IF (ISNULL(@loginName,N'')=N'')~ + SET @loginName=ISNULL( (SELECT PrijmeniJmeno FROM dbo.TabCisZam WHERE Cislo=@cZam), SUSER_SNAME())~ +~ +~ +-- mam zapsane subtasky ?~ + IF NOT EXISTS(SELECT 1 FROM dbo._hdc_DataZone_Subtasky WHERE IDTask=@idTask)~ + BEGIN~ + SET @jsonStr=(SELECT Obsah FROM dbo._hdc_DataZone_Tasky WHERE ID=@idTask)~ + IF (@jsonStr IS NOT NULL)~ + IF (CHARINDEX(N'subtask', @jsonStr)>0) AND (ISJSON(@jsonStr)=1)~ + BEGIN~ + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL~ + DROP TABLE #TabJSONData~ + CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max))~ + INSERT #TabJSONData (doc) SELECT @jsonStr~ +~ + INSERT dbo._hdc_DataZone_Subtasky (IDTask, IdDataZoneTaskID, Pozice, DatumStart, DatumKonec, Kusy_odv, BarcodeOperace, StatusText)~ + SELECT @idTask, @idDZTask, ROW_NUMBER() OVER (ORDER BY(SELECT NULL)), CONVERT(datetime2(0), startedAt), CONVERT(datetime2(0), finishedAt),~ + CONVERT(NUMERIC(19,6), v.kusy_odv), code, [status] -- JSON_VALUE(d.doc, '$.worker.code') AS CisloZam~ + FROM #TabJSONData d~ + CROSS APPLY OPENJSON(d.doc, '$.subtask')~ + WITH(code nvarchar(20), [status] NVARCHAR(30), startedAt NVARCHAR(25), finishedAt NVARCHAR(25), [values] nvarchar(max) AS JSON)~ + CROSS APPLY OPENJSON([values])~ + WITH (kusy_odv nvarchar(100)) as v~ +~ + UPDATE st SET st.IDPrikaz=pp.IDPrikaz, st.Doklad=pp.Doklad, st.Alt=pp.Alt, st.IdPrPostup=pp.ID~ + FROM dbo._hdc_DataZone_Subtasky st~ + INNER JOIN dbo.TabPrPostup pp ON (pp.Barcode=st.BarcodeOperace AND pp.IDOdchylkyDo IS NULL)~ + WHERE st.IDTask=@idTask~ +~ + IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL~ + DROP TABLE #TabJSONData~ + END~ + END~ +~ +~ +-- zapis nezpracovane subtasky~ + IF EXISTS(SELECT ID FROM dbo._hdc_DataZone_Subtasky WHERE IDTask=@idTask AND IDPolKoopObj IS NULL)~ + BEGIN~ + IF (@radaKObj IS NULL)~ + SET @radaKObj = (SELECT TOP(1) Rada FROM dbo.TabRadyKoopObj ORDER BY ID)~ + INSERT @idKooperace (ID) SELECT DISTINCT(IDkooperace) FROM dbo.TabPrPostup~ + WHERE BarCode IN (SELECT BarcodeOperace FROM dbo._hdc_DataZone_Subtasky WHERE IDTask=@idTask)~ + AND IDOdchylkyDo IS NULL AND Typ=2 GROUP BY IDkooperace~ + IF (1=(SELECT COUNT(*) FROM (SELECT DISTINCT(ID) FROM @idKooperace GROUP BY ID) x))~ + BEGIN~ + SET @idTypKoop=(SELECT TOP(1) ID FROM @idKooperace)~ + SELECT @radaKObj=cke._RadaKoopObj FROM dbo.TabCKoop ck INNER JOIN dbo.TabRadyCKoop rck ON (rck.Rada=ck.Rada)~ + INNER JOIN dbo.TabRadyCKoop_EXT cke ON (cke.ID=ck.ID) WHERE ck.ID=@idTypKoop~ +~ + IF (@radaKObj IS NOT NULL)~ + BEGIN~ + BEGIN TRY~ + SET @tranPred=@@TRANCOUNT~ + IF (@tranPred=0)~ + BEGIN TRAN~ + SET @aktDate = CONVERT(datetime, CONVERT(int, CONVERT(float, @aktDate)))~ + EXEC dbo.hp_InsertHlavickyKoopObj @IDObjednavky=@idKoopObj OUT, @Rada=@radaKObj, @TerminOdeslani=@aktDate~ + IF (@idKoopObj IS NOT NULL)~ + BEGIN~ + UPDATE dbo.TabKoopObj SET Autor=@loginName WHERE ID=@idKoopObj~ + SELECT @cisKoopObj=Objednavka FROM dbo.TabKoopObj WHERE ID=@idKoopObj~ +~ + DECLARE p CURSOR LOCAL FOR~ + SELECT ID, IDPrikaz, Doklad, Alt, Kusy_odv, BarcodeOperace, IDPrPostup FROM dbo._hdc_DataZone_Subtasky~ + WHERE IDTask=@idTask AND IDPolKoopObj IS NULL~ + OPEN p~ + WHILE (1=1)~ + BEGIN~ + FETCH NEXT FROM p INTO @idSubtask, @idVPr, @dokl, @alt, @mnoz, @bc, @idPrPost~ + IF (@@FETCH_STATUS<>0) BREAK~ +~ + IF (@idPrPost IS NULL)~ + SET @idPrPost=(SELECT ID FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND BarCode=@bc)~ + IF NOT EXISTS(SELECT ID FROM dbo.TabPrPostup WHERE ID=@idPrPost)~ + SET @idPrPost = (SELECT ID FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND BarCode=@bc)~ + SELECT @idVPr=IDPrikaz, @dokl=Doklad, @alt=Alt, @idKoop=IDKooperace FROM dbo.TabPrPostup WHERE ID=@idPrPost~ + IF EXISTS(SELECT pp.ID FROM dbo.TabPrPostup pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz) WHERE pp.ID=@idPrPost AND pp.predzpracovano=1 AND p.StavPrikazu=30)~ + UPDATE dbo.TabPrPostup SET predzpracovano=0 WHERE ID=@idPrPost~ +~ + EXEC dbo.hp_InsertPolozkyKoopObj @IDPolozky=@idPolKoopObj OUT, @IDObjednavky=@idKoopObj, @IDPrikaz=@idVPr, @Doklad=@dokl, @Alt=@alt, @Kusy=@mnoz, @IDKooperace=@idKoop~ + IF (@idPolKoopObj IS NOT NULL)~ + BEGIN~ + UPDATE dbo._hdc_DataZone_Subtasky SET IDPolKoopObj=@idPolKoopObj WHERE ID=@idSubtask~ + UPDATE dbo.TabPolKoopObj SET Autor=@loginName WHERE ID=@idPolKoopObj~ + END~ +~ + END~ + CLOSE p~ + DEALLOCATE p~ +~ + SET @idOrg=(SELECT dodavatel FROM dbo.TabCKoop WHERE ID=@idKoop)~ + SET @dicOrg=(SELECT DIC FROM dbo.TabCisOrg WHERE ID=@idOrg)~ + UPDATE dbo.TabKoopObj SET IDOrganizace=@idOrg, DIC=@dicOrg WHERE ID=@idKoopObj~ +~ + UPDATE dbo._hdc_DataZone_Tasky SET IDKoopObj=@idKoopObj, DatZpracovani=GETDATE(), Nezpracovavat=0, CisloKoopObj=@cisKoopObj, Blokovano=0~ + WHERE ID=@idTask~ +~ + END -- @IDObjednavky IS NOT NULL~ + IF (@@TRANCOUNT>0) AND (@tranPred=0)~ + COMMIT TRAN~ + END TRY~ + BEGIN CATCH~ + IF (@@TRANCOUNT>0) AND (@tranPred=0)~ + ROLLBACK TRAN~ + SET @errMsg = ERROR_MESSAGE()~ +~ + IF (CHARINDEX(N'2001434', @errMsg)>0) -- vyrobni operace jiz neexistuje~ + UPDATE dbo._hdc_DataZone_Tasky SET DatZpracovani=GETDATE(), Nezpracovavat=1, PosledniChyba=N'Výrobní operace již neexistuje' WHERE ID=@idTask~ + ELSE~ + INSERT dbo._hdc_Log (Typ, LogText, intVal) SELECT 11, N'Import kooperace - chyba: ' + @errMsg, @idTask~ +~ + END CATCH~ + END -- @radaKObj IS NOT NULL~ +~ + END -- jen jeden druh kooperace~ + ELSE~ + BEGIN~ + UPDATE dbo._hdc_DataZone_Tasky SET PosledniChyba=N'Naskenováno víc typů kooperace', Blokovano=0 WHERE ID=@idTask~ + END~ +~ + END -- existuji subtasky ? ano, vytvor kooperacni objednavku~ +~ + END~ +CLOSE d~ +DEALLOCATE d +]]> + + + + + + + + + + + + + + + + + diff --git a/_custom/Rootvin/info.txt b/_custom/Rootvin/info.txt new file mode 100644 index 0000000..e8199ce --- /dev/null +++ b/_custom/Rootvin/info.txt @@ -0,0 +1,15 @@ + + + +Gatema_SDDoklady +*********************** +TypDokladu - 510 - kontrola prijmu / 540 - prijem +IDDokZbo - zdrojovy doklad (napr. pri kontrole prijmu) + + + + +Gatema_SDScanData +*********************** +IDPohZbo - ID zdrojoveho pohybu OZ (napr. pri kontrole prijmu) + diff --git a/_custom/Rootvin/sql/col_CisZam_EXT.sql b/_custom/Rootvin/sql/col_CisZam_EXT.sql new file mode 100644 index 0000000..5fc8bf3 --- /dev/null +++ b/_custom/Rootvin/sql/col_CisZam_EXT.sql @@ -0,0 +1,6 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabCisZam_EXT', N'_DataZone_KodCipu') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabCisZam', @NazevAtrSys=N'_DataZone_KodCipu', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Kód zaměstnaneckého čipu', + @NazevAtrVerZkr=N'Kód čipu', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(36)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 diff --git a/_custom/Rootvin/sql/col_TabDokumenty_DokladProAPI.sql b/_custom/Rootvin/sql/col_TabDokumenty_DokladProAPI.sql new file mode 100644 index 0000000..dbab428 --- /dev/null +++ b/_custom/Rootvin/sql/col_TabDokumenty_DokladProAPI.sql @@ -0,0 +1,6 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabDokumenty_EXT', N'_DokladProAPI') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabDokumenty_EXT', @NazevAtrSys=N'_DokladProAPI', @Skupina=NULL, @NazevAtrVer=N'Přednastaveno pro zobrazenĂ­ přes HDC API', + @NazevAtrVerZkr=N'Pro HDCAPI', @TypAtr=N'BIT', @MaskaAtr=NULL, @VerejnyAtr=N'A', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'BIT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=NULL, @Definice=NULL, @Podminka=NULL diff --git a/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql b/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql new file mode 100644 index 0000000..edcbd29 --- /dev/null +++ b/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql @@ -0,0 +1,12 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_PaletListProVydej') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_PaletListProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Paletový list pro výdej', + @NazevAtrVerZkr=N'Pal.list.výdej', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_SarzeProVydej') IS NULL) + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_SarzeProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Šarze pro výdej', + @NazevAtrVerZkr=N'Šarže výdej', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Šarže plánovaná pro výdej (naskenovaná)', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 diff --git a/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik.sql b/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik.sql new file mode 100644 index 0000000..9e3cdc6 --- /dev/null +++ b/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik.sql @@ -0,0 +1,34 @@ +-- dbo.ep_hdcdzapi_GetKusovnik +CREATE PROCEDURE dbo.ep_hdcdzapi_GetKusovnik + @idDilce INT, + @mnf NUMERIC(19,6)=0, + @datum DATETIME=NULL, + @IDZakazModif int=NULL, + @MnozstviSeZtratou bit=1, + @VcetneNulovychKV bit=0, + @RespekDodatecneProcZtratKV bit=0, + @ErrMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + + +DROP TABLE IF EXISTS #apiKusovnik +CREATE TABLE #apiKusovnik (ID int IDENTITY (1, 1) NOT NULL, IDRodic int NULL, vyssi integer NULL, IDKmenZbozi integer NOT NULL, uroven integer NOT NULL, poradi integer NOT NULL, + IDKVazby integer NULL, mnozstvi numeric(20,6) NOT NULL, prirez numeric(20,6) NULL, + Prime bit NOT NULL, RezijniMat bit NOT NULL, VyraditZKalkulace bit NOT NULL, Strom nvarchar(400) COLLATE database_default NULL, + Davka numeric(19,6) NULL) + +BEGIN TRY + EXEC dbo.hp_generujKusovnik @IDFinal=@idDilce, @MNF=@mnf, @datum=@datum, @Can_raise=0, @getStrom=1, @GetRodic=1, @IDZakazModif=@IDZakazModif, @VcetneNulovychKV=@VcetneNulovychKV, + @MnozstviSeZtratou=@MnozstviSeZtratou, @RespekDodatecneProcZtratKV=@RespekDodatecneProcZtratKV +END TRY +BEGIN CATCH + SET @ErrMsg = ERROR_MESSAGE() +END CATCH + +SELECT * FROM #apiKusovnik + diff --git a/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik_2.sql b/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik_2.sql new file mode 100644 index 0000000..890c9c5 --- /dev/null +++ b/_custom/Rootvin/sql/ep_HDCDZApi_GetKusovnik_2.sql @@ -0,0 +1,38 @@ +-- dbo.ep_hdcdzapi_GetKusovnik +CREATE PROCEDURE dbo.ep_hdcdzapi_GetKusovnik +AS + + SET NOCOUNT ON + DECLARE @RespekExistDoklady bit=0 + + IF OBJECT_ID(N'tempdb..#apiKusovnik', N'U') IS NULL + CREATE TABLE #apiKusovnik (ID INT IDENTITY(1,1) NOT NULL, IDPrKV INT, MnozstviPoz NUMERIC(19,6), pom_pomer_A NUMERIC(19,6), pom_pomer_B NUMERIC(19,6), Doklad INT, IDPrikaz INT, + Prednastaveno BIT, Sklad NVARCHAR(30), VyrStredisko NVARCHAR(30), IDPracoviste INT, mnoz_zad NUMERIC(19,6), Mnoz_nepotrebne NUMERIC(19,6), Mnoz_skut_realizovane NUMERIC(19,6), + Cena_real NUMERIC(19,6), Mnoz_odv NUMERIC(19,6), Cena_odv NUMERIC(19,6), priorita INT, vyssi INT, nizsi INT, DavkaTPV NUMERIC(19,6), pozice INT, Operace NVARCHAR(4), + FixniMnozstvi NUMERIC(19,6), mnozstvi NUMERIC(19,6), ProcZtrat NUMERIC(19,6), mnozstviSeZtratou NUMERIC(19,6), Prirez NUMERIC(19,6), Poznamka NVARCHAR(500), SZVyssi NVARCHAR(3), + RCVyssi NVARCHAR(30), Nazev1Vyssi NVARCHAR(100), SZNizsi NVARCHAR(3), RCNizsi NVARCHAR(30), Nazev1Nizsi NVARCHAR(100)) + IF OBJECT_ID(N'tempdb..#apiOdved', N'U') IS NULL + CREATE TABLE #apiOdved (ID INT, IDPrikaz INT, Mnozstvi NUMERIC(19,6) DEFAULT 0.0) + + INSERT #apiKusovnik (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, + pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, SZVyssi, RCVyssi, Nazev1Vyssi, SZNizsi, RCNizsi, Nazev1Nizsi) + SELECT PrKV.ID, PrKV.mnoz_zad*O.mnozstvi/P.kusy_zad - CASE WHEN @RespekExistDoklady=1 THEN PrKV.VydanoRefMnoz + (SELECT ISNULL(SUM(PZ2.prepmnozstvi*(PZ2.mnozstvi-PZ2.MnOdebrane) * PrKV2.RefMnoz / PrKV2.mnoz_zad), 0.0) FROM [dbo].[TabPohybyZbozi] PZ2 + INNER JOIN [dbo].[TabDokladyZbozi] DZ2 ON (DZ2.ID=PZ2.IDDoklad AND DZ2.splneno=0) + INNER JOIN [dbo].[TabStavSkladu] SS2 ON (SS2.ID=PZ2.IDZboSklad) + INNER JOIN [dbo].[TabPrKVazby] PrKV2 ON (PrKV2.IDPrikaz=PZ2.IDPrikaz AND PrKV2.Doklad=PZ2.DokladPrikazu AND PrKV2.nizsi=SS2.IDKmenZbozi AND PrKV2.IDOdchylkyDo IS NULL) + WHERE PZ2.TypVyrobnihoDokladu=1 AND PZ2.IDPrikaz=PrKV.IDPrikaz AND PZ2.DokladPrikazu=PrKV.Doklad AND PZ2.Splneno=0 AND PZ2.druhPohybuZbo IN (2,4,9,10) AND PZ2.SkutecneDatReal IS NULL) ELSE 0.0 END, CASE WHEN @RespekExistDoklady=0 THEN O.mnozstvi END, CASE WHEN @RespekExistDoklady=0 THEN P.kusy_zad END, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane , PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, + PrKV.mnozstvi , PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka, KZV.SkupZbo, KZV.RegCis, KZV.Nazev1, KZ.SkupZbo, KZ.RegCis, KZ.Nazev1 + FROM (SELECT IDPrikaz=O1.IDPrikaz, Mnozstvi=SUM(O1.mnozstvi) + CASE WHEN @RespekExistDoklady=1 THEN MAX(P1.kusy_odved+P1.kusy_ztrac+P1.kusy_zmet) + (SELECT ISNULL(SUM(PZ1.prepmnozstvi*PZ1.mnozstvi), 0.0) + FROM [dbo].[TabPohybyZbozi] PZ1 WHERE PZ1.TypVyrobnihoDokladu=0 AND PZ1.IDPrikaz=O1.IDPrikaz AND PZ1.druhPohybuZbo=0 AND PZ1.SkutecneDatReal IS NULL) ELSE 0.0 END + FROM #apiOdved O1 + INNER JOIN [dbo].[TabPrikaz] P1 ON (P1.ID=O1.IDPrikaz) + GROUP BY O1.IDPrikaz) O + INNER JOIN [dbo].[TabPrikaz] P ON (P.ID=O.IDPrikaz AND P.StavPrikazu IN (20,30,50)) + INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN [dbo].[TabPrKVazby] PrKV ON (PrKV.IDPrikaz=O.IDPrikaz AND /*PrKV.predzpracovano=0 AND*/ PrKV.prednastaveno=1 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND PrKV.IDOdchylkyDo IS NULL) + INNER JOIN [dbo].[TabKmenZbozi] KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + LEFT JOIN [dbo].[TabKmenZbozi] KZV ON (KZV.ID=PrKV.vyssi AND KZV.sluzba=0) + WHERE (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) + + SELECT * FROM #apiKusovnik diff --git a/_custom/Rootvin/sql/ep_HDCDZApi_ZpracujPrijataData.sql b/_custom/Rootvin/sql/ep_HDCDZApi_ZpracujPrijataData.sql new file mode 100644 index 0000000..f09b731 --- /dev/null +++ b/_custom/Rootvin/sql/ep_HDCDZApi_ZpracujPrijataData.sql @@ -0,0 +1,153 @@ +-- dbo.ep_HDCDZApi_ZpracujPrijataData +CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData + @idJson INT=NULL +AS + + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @datPorizeni DATETIME, + @errMsg NVARCHAR(500), + @bChyba BIT, + @iChyba INT, + @debugXml XML, + @aktDatum DATETIME, + @logTyp TINYINT, + @logText NVARCHAR(500), + @logInt INT, + @logStr NVARCHAR(255), + @log4Mail BIT=0 + +DECLARE + @jsonString NVARCHAR(MAX), + @jsonString2 NVARCHAR(MAX), + @typDokum NVARCHAR(50), + @subtypDokum NVARCHAR(50), + @akce NVARCHAR(50), + @akceSource NVARCHAR(50), + @datumText NVARCHAR(25) + +DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT) + + +-- vytvor pomocnou tabulku +/* +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) +*/ +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) + + + + + +IF (@idJson IS NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, DatPorizeni + FROM dbo._hdc_ph_PrijataJsonData + WHERE DatZpracovani IS NULL + AND ISNULL(JSONData, N'')<>N'' + ORDER BY DatPorizeni ASC + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, DatPorizeni + FROM dbo._hdc_ph_PrijataJsonData + WHERE ID=@idJson +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @datPorizeni + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + CONTINUE + + + BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + + + SET @datumText = NULL +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action'), @akceSource = JSON_VALUE(doc, '$.source'), @datumText = JSON_VALUE(doc, '$.actionAt') FROM #TabJSONData + + SET @akce = ISNULL(@akce, N'') + SET @akceSource = ISNULL(@akceSource, N'') + SET @datumText = ISNULL(@datumText, N'') + IF (@datumText<>N'') + SET @datPorizeni = CONVERT(datetime, @datumText, 120) + + IF (@akce<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET Akce=@akce WHERE ID=@idJson AND Akce IS NULL + + + IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 + BEGIN + IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) WHERE ID=@idJson + CONTINUE + END + + + SET @logTyp = 0 + SET @logInt = NULL + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + + + +-- BEGIN: TLACITKO + IF (@akce=N'click' AND @akceSource='button') + BEGIN + SET @akce = N'' + UPDATE dbo._hdc_ph_PrijataJsonData SET DatZpracovani=GETDATE() WHERE ID=@idJson + END -- akce: vyroba_zacatek +-- END: TLACITKO + + + + + + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + + IF (@logTyp>0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) + SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 + END CATCH + SET @logTyp=0 + + END +CLOSE j +DEALLOCATE j + + + + +-- pro jistotu +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData diff --git a/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql b/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql new file mode 100644 index 0000000..536070e --- /dev/null +++ b/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql @@ -0,0 +1,137 @@ +-- dbo.ep_P01_HDCDZApi1 +CREATE PROCEDURE dbo.ep_P01_HDCDZApi1 + @IDDoklad INT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! +-- vola se na konci procesu realizace prijemky (po uskutecneni prijmu ale pred konecnym COMMIT TRAN) +-- nastaveni skladu lze ovlivnit pres #TabDefiniceProP01 (HlavniSkladMat NVARCHAR(30), TechnologickySklad NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30) ) + + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @errMsg NVARCHAR(500), + @bChyba BIT, + @iChyba INT + +DECLARE + @sklHlavni NVARCHAR(30), + @sklTechnolog NVARCHAR(30), + @sklPekarna NVARCHAR(30), + @sklPrijem NVARCHAR(30) + +DECLARE + @sklDokl NVARCHAR(30), + @radaDokl NVARCHAR(3), + @cOrg INT, + @idDZDst INT, + @dpz TINYINT, + @dzMena NVARCHAR(3), + @dzDatum DATETIME, + @datReal DATETIME, + @vyrCis NVARCHAR(100), + @nazevVyrCis NVARCHAR(100), + @poslVyrCis NVARCHAR(100), + @idVCK INT, + @idVCS INT, + @idVCP INT, + @idPZ INT, + @idZboSklad INT, + @idKZ INT + + + + +SELECT @radaDokl=RadaDokladu, @cOrg=CisloOrg, @sklDokl=IDSklad, @dpz=DruhPohybuZbo, @dzMena=Mena, @dzDatum=DatPorizeni + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +-- zapis posledni prevedene sarze +IF (@radaDokl=N'281') AND (@sklDokl=@sklPekarna) // prijemka/prevodka na pekarnu + BEGIN + DECLARE p CURSOR LOCAL FOR + SELECT p.ID, p.IDZboSklad + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@IDDoklad + AND k.Sluzba=0 + ORDER BY p.Poradi + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @idPZ, @idZboSklad + IF (@@FETCH_STATUS<>0) BREAK + + SET @poslVyrCis = N'' + DECLARE v CURSOR LOCAL FOR + SELECT ID, Nazev + FROM dbo.TabVyrCP + WHERE IDPolozkaDokladu=@idPZ + AND TRIM(ISNULL(Nazev,N''))<>N'' + ORDER BY ID + OPEN v + WHILE (1=1) + BEGIN + FETCH NEXT FROM v INTO @idVCP, @vyrCis + IF (@@FETCH_STATUS<>0) BREAK + SET @poslVyrCis = @vyrCis + END + CLOSE v + DEALLOCATE v + + IF (@poslVyrCis<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabStavSkladu_EXT WHERE ID=@idZboSklad) + INSERT dbo.TabStavSkladu_EXT (ID) VALUES (@idZboSklad) + UPDATE dbo.TabStavSkladu_EXT SET _Prevod_PosledniSarze=@poslVyrCis WHERE ID=@idZboSklad + END + + END + CLOSE p + DEALLOCATE p + END -- @radaDokl 281 + + + + +-- kopie prevodkove prijemky ze skladu materialu na sklad Vyroba/Pekarna +-- na "zrcadlovy" technologicky sklad (neni uctovany), ktery slouzi jen pro vydejky z Vyrobnich prikazu +-- z tech se denne generuje sumacni na hlavnim sklade +IF OBJECT_ID(N'tempdb..#TabDefiniceProP01', N'U') IS NOT NULL + SELECT TOP(1) @sklHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #TabDefiniceProP01 +IF (@sklHlavni IS NULL) + SELECT @sklHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technologický sklad%výdej%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + + +-- jen prijemka/prevodka na sklad Pekarna (211) +IF (@dpz=0) AND (@radaDokl IN (N'281')) AND (@sklDokl=@sklPekarna) AND (@sklTechnolog IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnolog, @DruhPohybu=@dpz, @RadaDokladu=@radaDokl, + @Mena=@dzMena, @CisloOrg=@cOrg, @DatumPorizeni=@dzDatum + IF (@idDZDst IS NOT NULL) + BEGIN + SELECT @datReal=DatRealizace FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idDZDst, @IDDokladSrc=@IDDoklad, @CisloOrgCil=@cOrg, @MUCil=NULL, @MenaCil=@dzMena, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=1 + IF EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZDst) + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZDst, @DatumRealizace=@datReal, @Uzivatel=0, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END + + END -- prijmka radaDokl 281, prijemkovy sklad Vyroba pekarna ci podobny, technologicky sklad vyplneny diff --git a/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql b/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql new file mode 100644 index 0000000..8869aab --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql @@ -0,0 +1,178 @@ +-- dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu +CREATE PROCEDURE dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu + @IDDoklad INT, + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi nebo pluginu Pekerna !! + +SET NOCOUNT ON + + +IF EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1) + RETURN + + + +DECLARE + @tranPred INT, + @uziv INT, + @bChyba BIT + +DECLARE + @sklad NVARCHAR(30), + @datPorizeni DATETIME, + @datNasklad DATETIME, + @idDZ INT, + @idPZ INT, + @idKZ INT, + @idSS INT, + @idSSPek INT, + @prepKoef NUMERIC(19,6), + @mnozPZ NUMERIC(19,6), + @mnozSkl NUMERIC(19,6), + @mnozNevyd NUMERIC(19,6), + @mnozChybi NUMERIC(19,6) +DECLARE + @sklMatHlavni NVARCHAR(30), + @sklTechnolog NVARCHAR(30), + @sklPekarna NVARCHAR(30), + @poslSarze NVARCHAR(100), + @poslPalList NVARCHAR(100) + +DECLARE + @idDZNew INT, + @idPZNew INT, + @rDokl NVARCHAR(3)=N'292', -- rada dokladu pro prijem "nedostatecneho materialu" -> "Příjemka - vyrovnĂĄnĂ­ do normy" + @dpz TINYINT, + @mnoz NUMERIC(19,6), + @vstC TINYINT, + @menaDZ NVARCHAR(3), + @kurzDZ NUMERIC(19,6), + @kurzE NUMERIC(19,6), + @jednM INT + + +DECLARE @pol TABLE (IDZboSklad INT NOT NULL, Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0.0, Sarze NVARCHAR(100), PaletList NVARCHAR(100) ) +DELETE FROM @pol + + +SET @uziv = 0 + +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'HlavnĂ­ sklad - MateriĂĄl' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NOVÝ% sklad%vĂ˝dej%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%vĂ˝dej%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'VĂ˝roba - PekĂĄrna' + + + + +DECLARE c CURSOR LOCAL FOR + SELECT p.ID, p.IDDoklad, p.IDZboSklad, p.Mnozstvi, p.PrepMnozstvi, s.IDKmenZbozi, d.IDSklad, d.DatPorizeni + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + WHERE d.ID=@IDDoklad +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idPZ, @idDZ, @idSS, @mnozPZ, @prepKoef, @idKZ, @sklad, @datPorizeni + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozPZ = @mnozPZ * @prepKoef + SET @mnozNevyd = ISNULL( (SELECT SUM(p.Mnozstvi*p.PrepMnozstvi) FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + WHERE p.IDZboSklad=@idSS + AND p.IDDoklad<>@idDZ + AND p.Mnozstvi>0 + AND d.DruhPohybuZbo IN (2,4) + AND d.Realizovano=0 + AND d.DatPorizeni<@datPorizeni) + , 0) + SET @mnozSkl = ISNULL( (SELECT Mnozstvi FROM dbo.TabStavSkladu WHERE ID=@idSS), 0) + SET @mnozChybi = @mnozSkl - @mnozPZ - @mnozNevyd + IF (@mnozChybi>0) + BEGIN + SET @idSSPek = NULL + IF (@sklPekarna IS NOT NULL) + SELECT @idSSPek=ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZ + SELECT @poslSarze=_Prevod_PosledniSarze, @poslPalList=_Prevod_PosledniPaletList + FROM dbo.TabStavSkladu_EXT WHERE ID=@idSSPek + + UPDATE @pol SET Mnozstvi = Mnozstvi + @mnozChybi WHERE IDZboSklad=@idSS + IF (@@ROWCOUNT=0) + INSERT @pol (IDZboSklad, Mnozstvi, Sarze, PaletList) SELECT @idSS, @mnozChybi, @poslSarze, @poslPalList + END + + END +CLOSE c +DEALLOCATE c + + +-- pokud mam polozky na doplneni, udelej doklad a realizuj ho +IF EXISTS(SELECT 1 FROM @pol) + BEGIN + BEGIN TRY + SET @tranPred=@@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + + SET @datNasklad = (SELECT MIN(d.DatPorizeni) FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabDokladyZbozi d ON (d.ID=p.IDDoklad) + WHERE p.Mnozstvi>0 AND d.DruhPohybuZbo IN (2,4) AND d.Realizovano=0 AND p.IDZboSklad IN (SELECT IDZboSklad FROM @pol)) + IF (@datNasklad IS NULL) + SET @datNasklad = DATEADD(second, -5, @datPorizeni) + + SET @dpz=0 + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZNew OUT, @Sklad=@sklad, @DruhPohybu=@dpz, @RadaDokladu=@rDokl, @CisloOrg=0, @DatumPorizeni=@datNasklad + IF (@idDZNew IS NOT NULL) + BEGIN + SELECT @menaDZ=Mena, @vstC=VstupniCena, @kurzDZ=Kurz, @kurzE=KurzEuro, @jednM=JednotkaMeny FROM dbo.TabDokladyZbozi WHERE ID=@idDZNew + + DECLARE c CURSOR LOCAL FOR + SELECT IDZboSklad, Mnozstvi, ISNULL(Sarze,N''), ISNULL(PaletList,N'') FROM @pol + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idSS, @mnoz, @poslSarze, @poslPalList + IF (@@FETCH_STATUS<>0) BREAK + + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZNew OUT, @IDDoklad=@idDZNew, @DruhPohybu=@dpz, @CisloOrg=0, @IDZboSklad=@idSS, @Mena=@menaDZ, + @Kurz=@kurzDZ, @KurzEuro=@kurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, + @VstupniCena=@vstC, @Mnozstvi=@mnoz + IF (@idPZNew IS NOT NULL) + BEGIN + IF (@poslSarze<>N'') OR (@poslPalList<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZNew) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZNew) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@poslSarze, _Vyroba_PaletList=@poslPalList WHERE ID=@idPZNew + END + END + + END + CLOSE c + DEALLOCATE c + + UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZNew + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=@idDZ, @AktualizaceSlev=0 +-- realizace + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZNew, @DatumRealizace=@datNasklad, @Uzivatel=@uziv, @BylaChyba=@bChyba OUT + + END + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + END CATCH + END + + + diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql new file mode 100644 index 0000000..4439d6d --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql @@ -0,0 +1,299 @@ +-- dbo.ep_Vyroba_GenOdvodZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy + @IDMzdy INT=NULL, + @bezVyrCis BIT=1, + @radaOdvod NVARCHAR(3)=NULL, + @skladOdvod NVARCHAR(30)=NULL, + @realizujPrijem BIT=0, + @prevodDoVyssiho BIT=0, + @kopiiNaTechSklad BIT=0, + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! +-- konfiguraci lze ovlivnit pres tabulku #HDCTabGenOdvodZeMzdyKonfig +-- pozor, v tom pripade musi byt na rade prikazu sklad pro generovani odvodu roven NULL + + +SET NOCOUNT ON + +DECLARE + @aktDatum DATETIME=GETDATE(), + @bChyba BIT, + @ret INT, + @jeOdvOper BIT=0, + @idUziv INT, + @IDPrikaz INT, + @IDZakazModif INT, + @IDPrikazVyssi INT, + @doklKV INT, + @IDKmen INT, + @idPZ INT, + @NekontrolMnozOdvedFinal BIT=0, + @mnozstvi NUMERIC(19,6)=0, + @radaOdvNaSklad NVARCHAR(3)=N'273', + @sklProOdvod NVARCHAR(30)=N'261', + @radaVPr NVARCHAR(10), + @idPrij INT, + @idPrijKopie INT, + @sklTechnicky NVARCHAR(30), + @dpz TINYINT, + @dzDatum DATETIME, + @dzMena NVARCHAR(3) +DECLARE + @idDZPomocPrijem INT, + @idPZPomocPrijem INT, + @idSSPomocPrijem INT, + @mnozPrijem NUMERIC(19,6) + + + +SELECT @jeOdvOper=pp.Odvadeci + FROM dbo.TabPrikazMzdyAZmetky pmz + INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup AND pp.IDOdchylkyDo IS NULL) + WHERE pmz.ID=@IDMzdy +IF (@jeOdvOper=0) + RETURN + + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +-- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT) +IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', N'U') IS NOT NULL + SELECT TOP(1) @radaOdvNaSklad=ISNULL(RadaOdvodNaSklad, @radaOdvNaSklad), @sklProOdvod=ISNULL(SkladProOdvod, @sklProOdvod), + @bezVyrCis=ISNULL(BezVyrobnichCisel, @bezVyrCis), @idUziv=ISNULL(IDUziv, @idUziv) + FROM #HDCTabGenOdvodZeMzdyKonfig + + +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' + + + +DROP TABLE IF EXISTS #TabOdved +CREATE TABLE #TabOdved ( + ID INT IDENTITY NOT NULL, + IDPrikaz INT NOT NULL, + IDDilec INT NOT NULL, + IDZakazModif INT NULL, + IDZakazka INT NULL, + maxMnozstvi NUMERIC(19,6) NULL, + mnozstvi NUMERIC(19,6) NOT NULL, + EvidJednotka NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + KodUmisteni NVARCHAR(15) NULL, + IDPohZbo INT NULL, + PomVnoreni INT NULL, + StavPrikazu TINYINT NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabOdved_IDMzdy +CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int) + + + + +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +CREATE TABLE #TabVyrCisProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + MaxMnozstvi NUMERIC(19,6) NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + +DROP TABLE IF EXISTS #TabPolotovProGenOdv +CREATE TABLE #TabPolotovProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + Doklad INT NOT NULL, + IDDilec INT NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + MaxMnozstvi NUMERIC(19,6) NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabGenPrijem +CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID)) + + + + + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy) + RETURN + + +SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy +IF (@@ROWCOUNT=0) RETURN +IF @mnozstvi<=0.0 RETURN + + + + +SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @radaVPr=Rada, @IDKmen=IDTabKmen, @IDZakazModif=IDZakazModif, @IDPrikazVyssi=IDPrikazVyssi + FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + +-- nastav sklad pro odvod podle karty +IF (@sklProOdvod IS NULL) + SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen + +-- pripadne zkus podle rady prikazu +SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvNaSklad ELSE RadaDokl_OdvedeniPrikazu END, + @sklProOdvod=CASE WHEN PrijemVyrDil_SkladProGenHlavDZ IS NULL THEN @sklProOdvod ELSE PrijemVyrDil_SkladProGenHlavDZ END + FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr + + +IF (@radaOdvod IS NOT NULL) + SET @radaOdvNaSklad=@radaOdvod +IF (@skladOdvod IS NOT NULL) + SET @sklProOdvod = @skladOdvod + + +UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz +IF (@@ROWCOUNT=0) + INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu) + SELECT P.ID, + CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END, + ZMD.IDZakazModif, + P.IDZakazka, + CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END, + P.EvidJednotka, + CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END, + P.sklad, + P.StavPrikazu + FROM dbo.TabPrikaz P + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen) + LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID) + LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen) + WHERE P.ID=@IDPrikaz AND + (CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END)>0 +INSERT INTO #TabOdved_IDMzdy (IDPrikaz, IDMzdy) VALUES (@IDPrikaz, @IDMzdy) + + + +UPDATE O SET maxMnozstvi=CASE WHEN RP.NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END + FROM #tabOdved O + INNER JOIN dbo.TabPrikaz P ON (P.ID=O.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + +UPDATE #tabOdved SET mnozstvi=maxMnozstvi WHERE maxMnozstvi IS NOT NULL AND mnozstvi>maxMnozstvi +DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #tabOdved WHERE Mnozstvi<=0.0 + + +IF (@sklProOdvod IS NOT NULL) + UPDATE #tabOdved SET Sklad=@sklProOdvod + + + +EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL +IF (@bezVyrCis=1) + DELETE #TabVyrCisProGenOdv + + +IF (@prevodDoVyssiho=0) + BEGIN + BEGIN TRY + EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1 + END TRY + BEGIN CATCH + SET @errMsg = 'Chyba pri odvadeni: ' + ERROR_MESSAGE() + END CATCH + END + ELSE + BEGIN + IF (@IDPrikazVyssi IS NOT NULL) + BEGIN + IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', N'U') IS NOT NULL + DELETE FROM #TabOdved_IDMzdy + INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idPrikaz, @idMzdy + + SET @doklKV = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@IDPrikazVyssi AND nizsi=@IDKmen AND IDOdchylkyDo IS NULL) + + EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz, @IDPrikazCil=@IDPrikazVyssi, + @Doklad=@doklKV, @IDDilec=@IDKmen, @mnozstvi=@mnozstvi, @IDOdvedeniVC=0, @IDZakazModif=@IDZakazModif + IF OBJECT_ID(N'tempdb..#TabGenPrijem', N'U') IS NOT NULL + DELETE FROM #TabGenPrijem + END -- @IDPrikazVyssi IS NOT NULL + END + + + + + +DECLARE prij CURSOR LOCAL FOR + SELECT ID FROM #TabGenPrijem +OPEN prij +WHILE (1=1) + BEGIN + FETCH NEXT FROM prij INTO @idPrij + IF (@@FETCH_STATUS<>0) BREAK + +-- kopie na technologicky sklad, aby se mohly delat vydejky + SET @idPrijKopie = NULL + IF (@kopiiNaTechSklad=1) AND (@sklTechnicky IS NOT NULL) + BEGIN + SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabPohybyZbozi WHERE ID=@idPrij + EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijKopie OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad, + @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@dzDatum + IF (@idPrijKopie IS NOT NULL) + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijKopie, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=0 + END -- kopii na TechSklad + + IF (@realizujPrijem=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + IF (@idPrijKopie IS NOT NULL) + EXEC dbo.hp_Realizuj_Prijem @ID=@idPrijKopie, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END + + END +CLOSE prij +DEALLOCATE prij + + + + + + +-- cisteni +DROP TABLE IF EXISTS #TabGenPrijem +DROP TABLE IF EXISTS #TabPolotovProGenOdv +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +DROP TABLE IF EXISTS #TabOdved_IDMzdy +DROP TABLE IF EXISTS #TabOdved + +DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql b/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql new file mode 100644 index 0000000..0024285 --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql @@ -0,0 +1,503 @@ +-- dbo.ep_Vyroba_GenVydejZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy + @IDMzdy INT=NULL, + @IDDoklad INT=NULL, + @spotrebaTesto BIT=0, + @spotreba702 BIT=0, + @smazVydejTesto BIT=0, + @errMsg NVARCHAR(500)=N'' OUT, + @extTab NVARCHAR(50)=NULL, + @vydejAll BIT=0, + @realizujVydej BIT=0, + @denSmena NVARCHAR(15)=NULL, + @sklVydej NVARCHAR(30)=N'261', + @radaVydej NVARCHAR(3)=N'223', + @respExistDokl BIT=1 +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +-- @extTab - tabulka, do ktere budou vraceny pohyby vydejky @extTab (ID INT NOT NULL, IDPohZbo INT NOT NULL) +-- @vydejAll - bude vydano vse, nejen kde jde splnena podminka TabPrKVazby - dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad +-- pokud existuje objekt #HDCTabPrKVazbyGenPredna, jedu vydej podle nej + + +SET NOCOUNT ON + +DECLARE + @bChyba BIT, + @opakReal BIT, + @retVal INT=0, + @errID int, + @sql NVARCHAR(1000), + @idUziv INT=0, + @idZam INT, + @sklTechnolog NVARCHAR(30), + @sklMatHlavni NVARCHAR(30), + @sklPekarna NVARCHAR(30), + @szDilec NVARCHAR(3) +DECLARE + @idDZPomocPrij INT, + @radaPrijem NVARCHAR(3)='292', + @menaPrij NVARCHAR(3), + @kurzPrij NUMERIC(19,6), + @kurzPrijE NUMERIC(19,6), + @vstCPrij TINYINT, + @jednMPrij INT, + @idPZPomocPrij INT, + @idSSPomocPrij INT, + @mnozSklad NUMERIC(19,6), + @mnozVydej NUMERIC(19,6), + @mnozPrij NUMERIC(19,6) + + + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +SET @denSmena = ISNULL(@denSmena, N'') +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky) + BEGIN + SELECT @retVal=MAX(ID) FROM dbo.TabPrikazMzdyAZmetky + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, @retVal) + END + ELSE + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, 1) + + +DROP TABLE IF EXISTS #TabPrKVazbyGen +CREATE TABLE #TabPrKVazbyGen ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NVARCHAR(max) NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + MJ NVARCHAR(10) NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGenVC +CREATE TABLE #TabPrKVazbyGenVC ( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + + + + + +DECLARE + @RespektovatExistEvid bit, + @idDilec INT, + @IDPrikaz int=NULL, + @IDPrPostup INT=NULL, + @mnozstviPomer_A numeric(19,6), + @mnozstviPomer_B numeric(19,6), + @IDPrKV int, + @mnoz_zad numeric(19,6), + @PrKVDoklad int, + @PocetVazeb int, + @PrP_Doklad int + + +SET @RespektovatExistEvid = @respExistDokl + + +SELECT @errID=NULL, @errMsg='', @PocetVazeb=0 +SELECT @IDPrikaz=MZ.IDPrikaz, @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad, @PrP_Doklad=PrP.Doklad, + @IDPrPostup=PrP.ID, @szDilec=k.SkupZbo + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + INNER JOIN dbo.TabPrikaz vp ON (vp.ID=MZ.IDPrikaz) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=vp.IDTabKmen) + WHERE MZ.ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@IDMzdy +-- pokud uz byla generovana vydejka, skonci +IF (@@ROWCOUNT=0) + RETURN 0 + + +SELECT @idZam=Zamestnanec FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @idDilec = IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + + + +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenPredna', N'U') IS NULL + BEGIN + IF (@mnozstviPomer_A<=0.0) + RETURN -1 + + IF (@vydejAll=1) + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + ELSE + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + OPEN crPom1334 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + WHILE @@fetch_status=0 + BEGIN + UPDATE #TabPrKVazbyGen SET MnozstviPoz=@mnoz_zad * (pom_pomer_A+@mnozstviPomer_A)/pom_pomer_B, pom_pomer_A=pom_pomer_A+@mnozstviPomer_A + WHERE IDPrKV=@IDPrKV + IF (@@ROWCOUNT=0) + BEGIN + IF @RespektovatExistEvid=1 + SELECT @mnozstviPomer_A=SUM(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr) + FROM dbo.TabPrikazMzdyAZmetky MZ WHERE MZ.IDPrikaz=@IDPrikaz AND MZ.DokladPrPostup=@PrP_Doklad AND MZ.GenerovanaMatVydejka=1 + INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, + Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi, + mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, + PrKV.mnoz_zad * @mnozstviPomer_A/@mnozstviPomer_B, + @mnozstviPomer_A, @mnozstviPomer_B, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, + PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, + PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@IDPrKV AND PrKV.uzavreno=0 + END + INSERT INTO #TabPrKVazbyGen_IDMzdy (IDPrikaz, Doklad, IDMzdy) VALUES (@IDPrikaz, @PrKVDoklad, @IDMzdy) + SET @PocetVazeb=@PocetVazeb + 1 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + END + CLOSE crPom1334 + DEALLOCATE crPom1334 + + IF (@PocetVazeb<=0) + RETURN -2 + + END + ELSE + BEGIN -- pokud mam seznam na co vygenerovat vydejku, jedu podle nej + DELETE FROM #TabPrKVazbyGen + INSERT INTO #TabPrKVazbyGen + SELECT Generuj, PoKorekciDat, IDPrKV, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, + Cena_real, Mnoz_odv, Cena_odv, MnozstviMax, PuvodniMnozstviPoz, MnozstviPoz, PomMnozPoz, IDPohZbo, PoznamkaNaDoklad, priorita, vyssi, nizsi, DavkaTPV, + pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, pom_pomer_A, pom_pomer_B, Dodavatel + FROM #HDCTabPrKVazbyGenPredna + DROP TABLE #HDCTabPrKVazbyGenPredna + END + +-- preddefinovana mzda pro provazani +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', N'U') IS NOT NULL + BEGIN + DELETE FROM #TabPrKVazbyGen_IDMzdy + INSERT INTO #TabPrKVazbyGen_IDMzdy + SELECT IDPrikaz, Doklad, IDMzdy FROM #HDCTabPrKVazbyGen_IDMzdyPredna + DROP TABLE #HDCTabPrKVazbyGen_IDMzdyPredna + END + + + +EXEC dbo.hp_AktualizaceTabPrKVazbyGenVC @Vratka=0 +UPDATE #TabPrKVazbyGen SET Generuj=1, Sklad=@sklVydej + + +IF (@smazVydejTesto=1) + BEGIN +-- vazba je primo na kartu testa + IF (@szDilec<>N'701') AND EXISTS (SELECT 1 FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701')) + DELETE FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701') + +-- vazba je pres montaz SK702 + IF (@szDilec<>N'701') AND EXISTS (SELECT 1 FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'702')) + DELETE FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701') + END + + +DROP TABLE IF EXISTS #TabGenRezVyd +CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) + + +BEGIN TRY + EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=@radaVydej, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, + @IDExistDoklad=@IDDoklad, @SekejOperace=0 +END TRY +BEGIN CATCH + SET @errMsg = 'Chyba generovani vydeje: ' + ERROR_MESSAGE() +END CATCH + + + + + +DECLARE + @idVyd INT, + @idKZ INT, + @idPZ INT, + @idSS INT, + @poslSarze NVARCHAR(100), + @errMsg702 NVARCHAR(500), + @idKZ702 INT, + @idPrikaz702 INT, + @doklKV702 INT, + @doklOp702 INT, + @alt702 NCHAR(1), + @mnoz702 NUMERIC(19,6), + @idMzda702 INT, + @aktDat DATETIME + +SET @aktDat = GETDATE() + + +-- potrebuju si vyrobit tisicikus ? musim pred realizaci vydejky na vyssi prikaz, udelam odvedenim prikazu na vyssi +/* +IF (@spotreba702=1) + BEGIN + DECLARE t CURSOR LOCAL FOR + SELECT k.ID, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE k.SkupZbo=N'702' AND k.Blokovano=0 + OPEN t + WHILE (1=1) + BEGIN + FETCH NEXT FROM t INTO @idKZ702, @mnoz702 + IF (@@FETCH_STATUS<>0) BREAK + + SET @idPrikaz702 = (SELECT ID FROM dbo.TabPrikaz WHERE IDPrikazVyssi=@IDPrikaz AND IDTabKmen=@idKZ702 AND StavPrikazu=30) + IF (@idPrikaz702 IS NOT NULL) + BEGIN +-- evidence operace peceni + SELECT TOP(1) @doklOp702=Doklad, @alt702=Alt FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idPrikaz702 + EXEC @idMzda702=dbo.hp_ZaevidujOperaci @IDPrikaz=@idPrikaz702, @Doklad=@doklOp702, @Alt=@alt702, @Datum=NULL, @Stav=1, @IDZam=@idZam, @Kusy_odv=@mnoz702 + SET @idMzda702 = ISNULL(@idMzda702, 0) + IF (@idMzda702>0) + BEGIN +-- vydejku materialu nedelej, testo bylo uz odepsano svym prevedenim na vyssi +-- EXEC dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzda702, @spotrebaTesto=1, @realizujVydej=1, @errMsg=@errMsg702 OUT + + EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda702, @realizujPrijem=1, @errMsg=@errMsg702 OUT + END +-- odvedeni na vyssi prikaz + SELECT TOP(1) @doklKV702=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDPrikaz AND nizsi=@idKZ702 + EXEC dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDat, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz702, @IDPrikazCil=@IDPrikaz, + @Doklad=@doklKV702, @IDDilec=@idKZ702, @mnozstvi=@mnoz702, @IDOdvedeniVC=0 + END + END + CLOSE t + DEALLOCATE t + END +*/ + + +DECLARE vyd CURSOR LOCAL FOR + SELECT ID FROM #TabGenRezVyd +OPEN vyd +WHILE (1=1) + BEGIN + FETCH NEXT FROM vyd INTO @idVyd + IF (@@FETCH_STATUS<>0) BREAK + + IF (@denSmena<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idVyd) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idVyd) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_DenSmena=@denSmena WHERE ID=@idVyd + END + + DECLARE pV CURSOR LOCAL FOR + SELECT p.ID, k.ID + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idVyd AND k.Sluzba=0 + OPEN pV + WHILE (1=1) + BEGIN + FETCH NEXT FROM pV INTO @idPZ, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklPekarna) + SET @poslSarze = ISNULL( (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS), N'') + IF (@poslSarze<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@poslSarze WHERE ID=@idPZ + END + END + CLOSE pV + DEALLOCATE pV + + + +-- begin: prijemka nedostatecneho materialu + SET @idDZPomocPrij=NULL + DECLARE pomPrij CURSOR LOCAL FOR + SELECT p.IDZboSklad, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idVyd + AND k.Material=1 AND k.Sluzba=0 + OPEN pomPrij + WHILE (1=1) + BEGIN + FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozSklad = ISNULL( (SELECT Mnozstvi+MnozstviKPrijmu-MnozstviKVydeji FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPrij), 0) + IF (@mnozVydej>@mnozSklad) + BEGIN + SET @mnozPrij = @mnozVydej - @mnozSklad + IF (@idDZPomocPrij IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZPomocPrij OUT, @Sklad=@sklTechnolog, @DruhPohybu=0, @RadaDokladu=@radaPrijem, @CisloOrg=0 + SELECT @menaPrij=Mena, @kurzPrij=Kurz, @kurzPrijE=KurzEuro, @jednMPrij=JednotkaMeny, @vstCPrij=VstupniCena + FROM dbo.TabDokladyZbozi WHERE ID=@idDZPomocPrij + END + IF (@idDZPomocPrij IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZPomocPrij OUT, @IDDoklad=@idDZPomocPrij, @DruhPohybu=0, @CisloOrg=0, @IDZboSklad=@idSSPomocPrij, + @Mena=@menaPrij, @Kurz=@kurzPrij, @KurzEuro=@kurzPrijE, @JednotkaMeny=@jednMPrij, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=NULL, @VstupniCena=@vstCPrij, @Mnozstvi=@mnozPrij, @PovolitDuplicitu=1 + END + END + END + CLOSE pomPrij + DEALLOCATE pomPrij + IF (@idDZPomocPrij IS NOT NULL) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZPomocPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END +-- end: prijemka nedostatecneho materialu + + +-- realizace vydejky + IF (@realizujVydej=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @opakReal=0 + SET @errMsg = ERROR_MESSAGE() + IF (CHARINDEX(N'71553', @errMsg)>0) + SET @opakReal=1 + IF (@opakReal=0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba realizace výdejky příkazu: ' + @errMsg, @idVyd + END CATCH + + IF (@opakReal=1) + BEGIN + BEGIN TRY + EXEC dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad=@idVyd, @errMsg=@errMsg OUT + IF (@errMsg=N'') + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba korekce naskladneni pro vydejku: ' + @errMsg, @idVyd + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba opakovane realizace výdejky příkazu: ' + @errMsg, @idVyd + END CATCH + END + + END + + END +CLOSE vyd +DEALLOCATE vyd + + + + +IF (@extTab IS NOT NULL) AND EXISTS(SELECT 1 FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL) + IF OBJECT_ID(@extTab, N'U') IS NOT NULL + BEGIN + SET @sql = N'DELETE FROM ' + @extTab + EXECUTE sp_executesql @sql + SET @sql = N'INSERT ' + @extTab + N' (ID, IDPohZbo) SELECT ID, IDPohZbo FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL' + EXECUTE sp_executesql @sql + END + + +-- uklid +DROP TABLE IF EXISTS #TabPrKVazbyGen +DROP TABLE IF EXISTS #TabGenRezVyd +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +DROP TABLE IF EXISTS #TabPrKVazbyGenVC + + diff --git a/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOper.sql b/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOper.sql new file mode 100644 index 0000000..b60cbbd --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOper.sql @@ -0,0 +1,75 @@ +-- dbo.ep_Vyroba_InsertEvidRozpracOper +CREATE PROCEDURE dbo.ep_Vyroba_InsertEvidRozpracOper + @IDZamestnance INT=NULL, + @IDPracoviste INT=NULL, + @IDStroje INT=NULL, + @CasZahajeni DATETIME=NULL, + @ErrMsg NVARCHAR(500)=N'' OUT +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + +DECLARE + @tranPred INT + +DECLARE + @idEROp INT=NULL + + +IF EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOper) + BEGIN + SELECT @idEROp=MAX(ID) FROM dbo.TabEvidRozpracOper + DBCC CHECKIDENT(TabEvidRozpracOper, RESEED, @idEROp) + END + ELSE + DBCC CHECKIDENT(TabEvidRozpracOper, RESEED, 1) +SET @idEROp=NULL + + + + + +IF (@IDPracoviste IS NULL) AND (@IDStroje IS NOT NULL) + SELECT @IDPracoviste=IDPrac FROM dbo.TabCisStroju WHERE ID=@IDStroje + +IF (@IDZamestnance IS NULL) OR (@IDPracoviste IS NULL) + BEGIN + SET @ErrMsg = N'Neni zadan zamestnanec nebo pracoviste' + RETURN NULL + END + +IF OBJECT_ID(N'tempdb..#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) NOT NULL DEFAULT N'') + + + +SET @CasZahajeni = ISNULL(@CasZahajeni, GETDATE()) + + +BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) BEGIN TRAN + + INSERT dbo.TabEvidRozpracOper (IDZamestnance, CasZahajeni, IDPracoviste, IDStroje) + SELECT @IDZamestnance, @CasZahajeni, @IDPracoviste, @IDStroje + SET @idEROp = SCOPE_IDENTITY() + +-- slepice + IF OBJECT_ID(N'dbo.ep_Vyroba_InsertEvidRozpracOper_Po', N'P') IS NOT NULL + EXEC dbo.ep_Vyroba_InsertEvidRozpracOper_Po @idEROp + + + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + COMMIT TRAN +END TRY +BEGIN CATCH + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @ErrMsg = ERROR_MESSAGE() + INSERT #TabExtKom (Typ, Poznamka) SELECT 3, @ErrMsg + SET @idEROp = NULL +END CATCH + +RETURN @idEROp diff --git a/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql b/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql new file mode 100644 index 0000000..45e3152 --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_InsertEvidRozpracOperPol.sql @@ -0,0 +1,108 @@ +-- dbo.ep_Vyroba_InsertEvidRozpracOperPol +CREATE PROCEDURE dbo.ep_Vyroba_InsertEvidRozpracOperPol + @IdEvidRozpOper INT, + @IdPrikaz INT, + @doklPrPost INT, + @altPrPost NCHAR(1), + @IDPaleta INT=NULL, + @IdVyrCis INT=NULL, + @cisloPL NVARCHAR(50), + @sarze NVARCHAR(30), + @mnozOdv NUMERIC(19,6)=0, + @skCas NUMERIC(19,6)=0, + @skCasT TINYINT=1, + @skCasObsl NUMERIC(19,6)=0, + @skCasObslT TINYINT=1 +AS + +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu pluginu PluginHDCRTN !! + +SET NOCOUNT ON + +DECLARE + @errMsg NVARCHAR(500), + @tranPred INT + +DECLARE + @idEROpPol INT=NULL, + @idTemp INT=NULL, + @mnEROp NUMERIC(19,6), + @sumMnEROp NUMERIC(19,6) + + + +IF OBJECT_ID(N'#TabExtKom', N'U') IS NULL + CREATE TABLE #TabExtKom (Typ TINYINT, Poznamka NVARCHAR(255) NOT NULL DEFAULT N'') + + + + +IF EXISTS(SELECT 1 FROM dbo.TabEvidRozpracOperR) + BEGIN + SELECT @idEROpPol=MAX(ID) FROM dbo.TabEvidRozpracOperR + DBCC CHECKIDENT(TabEvidRozpracOperR, RESEED, @idEROpPol) + END + ELSE + DBCC CHECKIDENT(TabEvidRozpracOperR, RESEED, 1) +SET @idEROpPol=NULL + + + + +SET @sarze = TRIM(ISNULL(@sarze, N'')) +SET @cisloPL = TRIM(ISNULL(@cisloPL, N'')) + +IF (@IDPaleta IS NOT NULL) AND (@IDVyrCis IS NULL) + SELECT @idVyrCis=IDVyrCisPrikaz FROM dbo._TabVyroba_Palety WHERE ID=@IDPaleta +IF (@IDVyrCis IS NULL) AND (@cisloPL<>N'') AND (@IdPrikaz IS NOT NULL) AND (@sarze<>N'') + SET @IDVyrCis = (SELECT ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@IdPrikaz AND VyrCislo=@cisloPL AND Popis=@sarze) +IF (@IDVyrCis IS NULL) AND (@cisloPL<>N'') AND (@IdPrikaz IS NOT NULL) + SET @IDVyrCis = (SELECT ID FROM dbo.TabVyrCisPrikaz WHERE IDPrikaz=@IdPrikaz AND VyrCislo=@cisloPL) + + + +BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) BEGIN TRAN + + INSERT dbo.TabEvidRozpracOperR (IDEvidRozpracOper, IDPrikaz, DokladPrPostup, AltPrPostup, IDVyrCis, Mnoz_odv, Sk_cas, Sk_cas_T, Sk_cas_Obsluhy, Sk_cas_Obsluhy_T) + SELECT @IdEvidRozpOper, @IdPrikaz, @doklPrPost, @altPrPost, @IdVyrCis, @mnozOdv, @skCas, @skCasT, @skCasObsl, @skCasObslT + SET @idEROpPol = SCOPE_IDENTITY() + + IF (@idEROpPol IS NOT NULL) + IF NOT EXISTS (SELECT 1 FROM dbo.TabEvidRozpracOperR_EXT WHERE ID=@idEROpPol) + INSERT dbo.TabEvidRozpracOperR_EXT (ID) VALUES (@idEROpPol) + UPDATE dbo.TabEvidRozpracOperR_EXT SET _Sarze=@sarze WHERE ID=@idEROpPol + + +-- zapis koeficient + SET @sumMnEROp = ISNULL( (SELECT SUM(Mnoz_odv) FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@IdEvidRozpOper), 0) + DECLARE crLoc CURSOR LOCAL FOR + SELECT ID, Mnoz_odv FROM dbo.TabEvidRozpracOperR WHERE IDEvidRozpracOper=@IdEvidRozpOper + OPEN crLoc + WHILE (1=1) + BEGIN + FETCH NEXT FROM crLoc INTO @idTemp, @mnEROp + IF (@@FETCH_STATUS<>0) BREAK + UPDATE dbo.TabEvidRozpracOperR_EXT SET _KoefMnoz=ROUND(@mnEROp/@sumMnEROp, 5) WHERE ID=@idTemp + END + CLOSE crLoc + DEALLOCATE crLoc + + + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + COMMIT TRAN +END TRY +BEGIN CATCH + IF CURSOR_STATUS('local','crLoc')>=-1 + BEGIN + CLOSE crLoc; + DEALLOCATE crLoc + END + IF (@tranPred=0) ANd (@@TRANCOUNT>0) + ROLLBACK TRAN + INSERT #TabExtKom (Typ, Poznamka) SELECT 3, ERROR_MESSAGE() + SET @idEROpPol = NULL +END CATCH + +RETURN @idEROpPol diff --git a/_custom/Rootvin/sql/szDilce b/_custom/Rootvin/sql/szDilce new file mode 100644 index 0000000..ebde862 --- /dev/null +++ b/_custom/Rootvin/sql/szDilce @@ -0,0 +1,407 @@ +-- dbo.ep_Vyroba_GenVydejZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy + @IDMzdy INT=NULL, + @IDDoklad INT=NULL, + @spotrebaTesto BIT=0, + @spotreba702 BIT=0, + @smazVydejTesto BIT=0, + @errMsg NVARCHAR(500)=N'' OUT, + @extTab NVARCHAR(50)=NULL, + @vydejAll BIT=0, + @realizujVydej BIT=0, + @denSmena NVARCHAR(15)=NULL, + @sklVydej NVARCHAR(30)=N'321', + @radaVydej NVARCHAR(3)=N'223' +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +-- @extTab - tabulka, do ktere budou vraceny pohyby vydejky @extTab (ID INT NOT NULL, IDPohZbo INT NOT NULL) +-- @vydejAll - bude vydano vse, nejen kde jde splnena podminka TabPrKVazby - dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad +-- pokud existuje objekt #HDCTabPrKVazbyGenPredna, jedu vydej podle nej + + +SET NOCOUNT ON + +DECLARE + @bChyba BIT, + @retVal INT=0, + @errID int, + @sql NVARCHAR(1000), + @idUziv INT=0, + @idZam INT, + @sklTechnolog NVARCHAR(30), + @sklMatHlavni NVARCHAR(30), + @sklPekarna NVARCHAR(30), + @szDilec NVARCHAR(3) + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +SET @denSmena = ISNULL(@denSmena, N'') +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technologický sklad%výdej%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky) + BEGIN + SELECT @retVal=MAX(ID) FROM dbo.TabPrikazMzdyAZmetky + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, @retVal) + END + ELSE + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, 1) + + +DROP TABLE IF EXISTS #TabPrKVazbyGen +CREATE TABLE #TabPrKVazbyGen ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NVARCHAR(max) NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + MJ NVARCHAR(10) NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGenVC +CREATE TABLE #TabPrKVazbyGenVC ( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + + + + + +DECLARE + @RespektovatExistEvid bit=0, + @idDilec INT, + @IDPrikaz int=NULL, + @IDPrPostup INT=NULL, + @mnozstviPomer_A numeric(19,6), + @mnozstviPomer_B numeric(19,6), + @IDPrKV int, + @mnoz_zad numeric(19,6), + @PrKVDoklad int, + @PocetVazeb int, + @PrP_Doklad int + + + + + +SELECT @errID=NULL, @errMsg='', @PocetVazeb=0 +SELECT @IDPrikaz=MZ.IDPrikaz, @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad, @PrP_Doklad=PrP.Doklad, + @IDPrPostup=PrP.ID, @szDilec=k.SkupZbo + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + INNER JOIN dbo.TabPrikaz vp ON (vp.ID=MZ.IDPrikaz) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=vp.IDTabKmen) + WHERE MZ.ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@IDMzdy +-- pokud uz byla generovana vydejka, skonci +IF (@@ROWCOUNT=0) + RETURN 0 + + +SELECT @idZam=Zamestnanec FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @idDilec = IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + + + +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenPredna', N'U') IS NULL + BEGIN + IF (@mnozstviPomer_A<=0.0) + RETURN -1 + + IF (@vydejAll=1) + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + ELSE + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + OPEN crPom1334 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + WHILE @@fetch_status=0 + BEGIN + UPDATE #TabPrKVazbyGen SET MnozstviPoz=@mnoz_zad * (pom_pomer_A+@mnozstviPomer_A)/pom_pomer_B, pom_pomer_A=pom_pomer_A+@mnozstviPomer_A + WHERE IDPrKV=@IDPrKV + IF (@@ROWCOUNT=0) + BEGIN + IF @RespektovatExistEvid=1 + SELECT @mnozstviPomer_A=SUM(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr) + FROM dbo.TabPrikazMzdyAZmetky MZ WHERE MZ.IDPrikaz=@IDPrikaz AND MZ.DokladPrPostup=@PrP_Doklad AND MZ.GenerovanaMatVydejka=1 + INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, + Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi, + mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, + PrKV.mnoz_zad * @mnozstviPomer_A/@mnozstviPomer_B, + @mnozstviPomer_A, @mnozstviPomer_B, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, + PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, + PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@IDPrKV AND PrKV.uzavreno=0 + END + INSERT INTO #TabPrKVazbyGen_IDMzdy (IDPrikaz, Doklad, IDMzdy) VALUES (@IDPrikaz, @PrKVDoklad, @IDMzdy) + SET @PocetVazeb=@PocetVazeb + 1 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + END + CLOSE crPom1334 + DEALLOCATE crPom1334 + + IF (@PocetVazeb<=0) + RETURN -2 + + END + ELSE + BEGIN -- pokud mam seznam na co vygenerovat vydejku, jedu podle nej + DELETE FROM #TabPrKVazbyGen + INSERT INTO #TabPrKVazbyGen + SELECT Generuj, PoKorekciDat, IDPrKV, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, + Cena_real, Mnoz_odv, Cena_odv, MnozstviMax, PuvodniMnozstviPoz, MnozstviPoz, PomMnozPoz, IDPohZbo, PoznamkaNaDoklad, priorita, vyssi, nizsi, DavkaTPV, + pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, pom_pomer_A, pom_pomer_B, Dodavatel + FROM #HDCTabPrKVazbyGenPredna + DROP TABLE #HDCTabPrKVazbyGenPredna + END + +-- preddefinovana mzda pro provazani +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', N'U') IS NOT NULL + BEGIN + DELETE FROM #TabPrKVazbyGen_IDMzdy + INSERT INTO #TabPrKVazbyGen_IDMzdy + SELECT IDPrikaz, Doklad, IDMzdy FROM #HDCTabPrKVazbyGen_IDMzdyPredna + DROP TABLE #HDCTabPrKVazbyGen_IDMzdyPredna + END + + + +EXEC dbo.hp_AktualizaceTabPrKVazbyGenVC @Vratka=0 +UPDATE #TabPrKVazbyGen SET Generuj=1, Sklad=@sklVydej + + +IF (@smazVydejTesto=1) + IF (@szDilec<>N'701') AND EXISTS (SELECT 1 FROM dbo.TabPrikaz p INNER JOIN dbo.TabKmenZbozi k ON (k.ID=p.IDTabKmen) WHERE p.IDPrikazVyssi=@IDPrikaz AND k.SkupZbo=N'701') + DELETE FROM #TabPrKVazbyGen WHERE vyssi=@idDilec AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701') + + +DROP TABLE IF EXISTS #TabGenRezVyd +CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) + + +BEGIN TRY + EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=@radaVydej, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, + @IDExistDoklad=@IDDoklad, @SekejOperace=0 +END TRY +BEGIN CATCH + SET @errMsg = 'Chyba generovani vydeje: ' + ERROR_MESSAGE() +END CATCH + + + + + +DECLARE + @idVyd INT, + @idKZ INT, + @idPZ INT, + @idSS INT, + @poslSarze NVARCHAR(100), + @errMsg702 NVARCHAR(500), + @idKZ702 INT, + @idPrikaz702 INT, + @doklKV702 INT, + @doklOp702 INT, + @alt702 NCHAR(1), + @mnoz702 NUMERIC(19,6), + @idMzda702 INT, + @aktDat DATETIME + +SET @aktDat = GETDATE() + + +-- potrebuju si vyrobit tisicikus ? musim pred realizaci vydejky na vyssi prikaz, udelam odvedenim prikazu na vyssi +/* +IF (@spotreba702=1) + BEGIN + DECLARE t CURSOR LOCAL FOR + SELECT k.ID, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE k.SkupZbo=N'702' AND k.Blokovano=0 + OPEN t + WHILE (1=1) + BEGIN + FETCH NEXT FROM t INTO @idKZ702, @mnoz702 + IF (@@FETCH_STATUS<>0) BREAK + + SET @idPrikaz702 = (SELECT ID FROM dbo.TabPrikaz WHERE IDPrikazVyssi=@IDPrikaz AND IDTabKmen=@idKZ702 AND StavPrikazu=30) + IF (@idPrikaz702 IS NOT NULL) + BEGIN +-- evidence operace peceni + SELECT TOP(1) @doklOp702=Doklad, @alt702=Alt FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idPrikaz702 + EXEC @idMzda702=dbo.hp_ZaevidujOperaci @IDPrikaz=@idPrikaz702, @Doklad=@doklOp702, @Alt=@alt702, @Datum=NULL, @Stav=1, @IDZam=@idZam, @Kusy_odv=@mnoz702 + SET @idMzda702 = ISNULL(@idMzda702, 0) + IF (@idMzda702>0) + BEGIN +-- vydejku materialu nedelej, testo bylo uz odepsano svym prevedenim na vyssi +-- EXEC dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzda702, @spotrebaTesto=1, @realizujVydej=1, @errMsg=@errMsg702 OUT + + EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda702, @realizujPrijem=1, @errMsg=@errMsg702 OUT + END +-- odvedeni na vyssi prikaz + SELECT TOP(1) @doklKV702=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDPrikaz AND nizsi=@idKZ702 + EXEC dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDat, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz702, @IDPrikazCil=@IDPrikaz, + @Doklad=@doklKV702, @IDDilec=@idKZ702, @mnozstvi=@mnoz702, @IDOdvedeniVC=0 + END + END + CLOSE t + DEALLOCATE t + END +*/ + + +DECLARE vyd CURSOR LOCAL FOR + SELECT ID FROM #TabGenRezVyd +OPEN vyd +WHILE (1=1) + BEGIN + FETCH NEXT FROM vyd INTO @idVyd + IF (@@FETCH_STATUS<>0) BREAK + + IF (@denSmena<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idVyd) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idVyd) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_DenSmena=@denSmena WHERE ID=@idVyd + END + + DECLARE pV CURSOR LOCAL FOR + SELECT p.ID, k.ID + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idVyd AND k.Sluzba=0 + OPEN pV + WHILE (1=1) + BEGIN + FETCH NEXT FROM pV INTO @idPZ, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklPekarna) + SET @poslSarze = ISNULL( (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS), N'') + IF (@poslSarze<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@poslSarze WHERE ID=@idPZ + END + END + CLOSE pV + DEALLOCATE pV + + IF (@realizujVydej=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba realizace výdejky příkazu', @idVyd + END CATCH + END + + END +CLOSE vyd +DEALLOCATE vyd + + + + +IF (@extTab IS NOT NULL) AND EXISTS(SELECT 1 FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL) + IF OBJECT_ID(@extTab, N'U') IS NOT NULL + BEGIN + SET @sql = N'DELETE FROM ' + @extTab + EXECUTE sp_executesql @sql + SET @sql = N'INSERT ' + @extTab + N' (ID, IDPohZbo) SELECT ID, IDPohZbo FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL' + EXECUTE sp_executesql @sql + END + + +-- uklid +DROP TABLE IF EXISTS #TabPrKVazbyGen +DROP TABLE IF EXISTS #TabGenRezVyd +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +DROP TABLE IF EXISTS #TabPrKVazbyGenVC + + diff --git a/_custom/Rootvin/sql/tbl_hdc_DataZone_konfig.sql b/_custom/Rootvin/sql/tbl_hdc_DataZone_konfig.sql new file mode 100644 index 0000000..a6e897d --- /dev/null +++ b/_custom/Rootvin/sql/tbl_hdc_DataZone_konfig.sql @@ -0,0 +1,12 @@ +IF OBJECT_ID(N'dbo._hdc_DataZone_konfig', N'U') IS NULL + CREATE TABLE dbo._hdc_DataZone_konfig ( + ID int IDENTITY(1, 1) NOT NULL, + Typ NCHAR(3) NOT NULL, + Nazev NVARCHAR(100) NOT NULL, + Verze NCHAR(8) NOT NULL, + Obsah nvarchar(max) COLLATE Czech_CI_AS NULL, + DatPorizeni DATETIME NOT NULL DEFAULT GETDATE(), + DatZmeny DATETIME, + CONSTRAINT PK_hdc_DataZone_konfig PRIMARY KEY CLUSTERED (ID) + WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) diff --git a/_custom/Rootvin/uCtrlCustom.pas b/_custom/Rootvin/uCtrlCustom.pas new file mode 100644 index 0000000..119a7af --- /dev/null +++ b/_custom/Rootvin/uCtrlCustom.pas @@ -0,0 +1,1088 @@ +unit uCtrlCustom; + +interface + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uSvcCustom, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +const +{$I .\..\..\globalConsts.inc} + +type + [MVCPath('/rootvin')] + TRTNController = class(TBaseController) + strict private + FSelfSvc: TRTNService; + strict protected + function GetRTNService: TRTNService; + public + destructor Destroy; override; + +// [MVCDoc('Pomoci POST zapise obecna json data do Heliosu')] + [MVCPath('/zapisjson')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Rootvin', 'Zapis JSON dat do db Heliosu', 'RTNZapisJSONDoHeliosu')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisJSONDoHeliosu (CTX: TWebContext); + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/nactijson')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Nacteni data ve formatu JSON z Heliosu (dle předaného požadavku)', 'RTNNactiJsonData')] + function NactiJSONDataZHeliosu (CTX: TWebContext): string; + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/prikazymichani')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrati ID prikazu pro micharnu', 'RTNGetPrikazyProMicharnu')] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje pro které je těsto mícháno', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště, filtr na příkazy, v jejichž operacích je dané pracoviště›', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'spustene', '1=jen spustene, tj. ty, co maji svou operaci v neukoncene evidenci operaci', ptString, false)] + procedure GetPrikazyProMicharnu ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPracoviste: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string='' + ); + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/prikazyewb')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrati ID prikazu pro stroj EWB', 'RTNGetPrikazyProEWB')] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště, filtr na příkazy, v jejichž operacích je dané pracoviště›', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'spustene', '1=jen spustene, tj. ty, co maji svou operaci v neukoncene evidenci operaci', ptString, false)] + [MVCSwagParam(plQuery, 'material', '0=bez materialu (default) / 1=vcetne materialu pro operace maceni', ptString, false)] + procedure GetPrikazyProEWB ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPracoviste: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string='' + ); + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/prikazymaceni')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrátí ID příkazů pro máčírnu', 'RTNGetPrikazyProMacirnu')] +// [MVCSwagParam(plQuery, 'typprikazu', 'Typy příkazu (2=máčírna)', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje pro které je těsto mícháno', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště, filtr na příkazy, v jejichž operacích je dané pracoviště›', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '0=bez operaci (default) / 1=vcetne operaci', ptString, false)] + [MVCSwagParam(plQuery, 'material', '0=bez materialu (default) / 1=vcetne materialu pro operace maceni', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'spustene', '1=jen spustene, tj. ty, co maji svou operaci v neukoncene evidenci operaci', ptString, false)] + procedure GetPrikazyProMacirnu ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPracoviste: string=''; + [MVCFromQueryString('operace', '0')] operace: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string='' + ); + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/prikazybaleni')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrátí ID příkazů pro balení', 'RTNGetPrikazyProBaleni')] + [MVCSwagParam(plQuery, 'typprikazu', 'Typy příkazu (3=balení)', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '0=bez operaci (default) / 1=vcetne operaci', ptString, false)] + [MVCSwagParam(plQuery, 'material', '0=bez materialu (default) / 1=vcetne materialu pro operace baleni', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště filtr na příkazy, v jejichž operacích je dané pracoviště›', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'spustene', '1=jen spustene, tj. ty, co maji svou operaci v neukoncene evidenci operaci', ptString, false)] + procedure GetPrikazyProBaleni ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPracoviste: string=''; + [MVCFromQueryString('operace', '0')] operace: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string='' + ); + + [MVCPath('/prikazybalicka')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrátí ID příkazů pro baličku BAL-xx', 'RTNGetPrikazyProBalicku')] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '0=bez operaci (default) / 1=vcetne operaci', ptString, false)] + [MVCSwagParam(plQuery, 'material', '0=bez materialu (default) / 1=vcetne materialu pro operace baleni', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'spustene', '1=jen spustene, tj. ty, co maji svou operaci v neukoncene evidenci operaci', ptString, false)] + procedure GetPrikazyProBalicku ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('operace', '0')] operace: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string='' + ); + + +// [MVCDoc('Pomoci GET vraci json data z Heliosu')] + [MVCPath('/prikazy')] // vrati JSON data podle pozadovaneho typu (json req) + [MVCHTTPMethod([httpGET])] + [MVCProduces(TMVCMediaType.APPLICATION_JSON)] + [MVCSwagSummary('Rootvin', 'Vrátí ID příkazů podle druhu', 'RTNGetPrikazyProMacirnu')] + [MVCSwagParam(plQuery, 'typprikazu', 'Typy příkazu (0=obecné / 1=míchárna / 2=máčírna)', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště, filtr na příkazy, v jejichž operacích je dané pracoviště›', ptString, false)] + [MVCSwagParam(plQuery, 'datumod', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'datumdo', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + procedure GetPrikazy ([MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPracoviste: string=''; + [MVCFromQueryString('typprikazu', '0')] sTypPrikazu: string=''; + [MVCFromQueryString('datumod', '')] odDatum: string=''; + [MVCFromQueryString('datumdo', '')] doDatum: string='' + ); + end; + + + + + [MVCPath('/sdserver/doklad')] + TGatemaSDDokladController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDDokladService; + strict protected + function GetGatemaSDDokladService: TGatemaSDDokladService; + public + destructor Destroy; override; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad', 'VracĂ­ hlavičku dokladĹŻ SD Serveru', 'GatemaSDDokladyGetAll')] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se zĂĄkladnĂ­mi Ăşdaji', ptString, false)] + procedure GetAll ([MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad', 'Vrací metadata dokladu SD Serveru', 'GatemaSDDokladyGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad', 'Vrací data dokladu SD Serveru', 'GatemaSDDokladyGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'typdokl', 'Typ dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'format', 'FormĂĄt (1=dokladOZ)', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se základními údaji', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDDoklad, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('typdokl', '')] typDokl: string=''; + [MVCFromQueryString('druhpohybu', '')] druhPohybu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('format', '')] formatX: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + end; + + + + [MVCPath('/sdserver/dokladoz')] + TGatemaSDDokladOZController = class(TBaseController) + strict private + FSelfSvc: TSDGDokladOZService; + strict protected + function GetSDGDokladOZService: TSDGDokladOZService; + public + destructor Destroy; override; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad OZ', 'Vrací hlavičku dokladů OZ s vazbou na SD Server', 'GatemaSDDokladyOZGetAll')] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se základními údaji', ptString, false)] + procedure GetAll([MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad OZ', 'Vrací metadata', 'GatemaSDDokladyOZGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD doklad OZ', 'Vrací data dokladu OZ s vazbou na SD Server', 'GatemaSDDokladyOZGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'typdokl', 'Typ dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'format', 'FormĂĄt (1=dokladOZ)', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formĂĄtu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se základními údaji', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDDoklad, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('typdokl', '')] typDokl: string=''; + [MVCFromQueryString('druhpohybu', '')] druhPohybu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('format', '')] formatX: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('seznam', '')] jenSeznam: string='0' + ); + + end; + + + + [MVCPath('/sdserver/scandata')] + TGatemaSDScanDataController = class(TBaseController) + strict private + FSelfSvc: TGatemaSDScanDataService; + strict protected + function GetGatemaSDScanDataService: TGatemaSDScanDataService; + public + destructor Destroy; override; + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD ScanData', 'Vrací metadata', 'GatemaSDScanDataGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('GatemaSD ScanData', 'Vrací naskenovaná data', 'GatemaSDScanDataGetByID')] + [MVCSwagParam(plPath, 'id', 'ID scan data', ptString, false)] + [MVCSwagParam(plQuery, 'iddoklad', 'ID dokladu SD', ptString, false)] + [MVCSwagResponses(200, 'Success', TGatemaSDScanData, true)] + procedure GetByID(id: string=''; + [MVCFromQueryString('iddoklad', '')] iddoklad: string='' + ); + end; + + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + System.JSON, + JsonDataObjects, + Winapi.ActiveX, + uDataMod, + Quick.Logger; + +const + selSloupce = ''; + + + + { TGatemaSDDokladOZController } + + destructor TGatemaSDDokladOZController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + + function TGatemaSDDokladOZController.GetSDGDokladOZService: TSDGDokladOZService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TSDGDokladOZService.Create(datMod); + result:= FSelfSvc; + end; + + + + procedure TGatemaSDDokladOZController.GetAll (odDatum: string=''; jenSeznam: string='0'); + var params: TDictionary; + begin + params:= TDictionary.Create; + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetByParams(params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladOZController.GetByID (id: string=''; typDokl: string=''; druhPohybu: string=''; sklad: string=''; formatX: string=''; odDatum: string=''; doDatum: string=''; + jenSeznam: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + typDokl:= sanitizeSQLString(sklad); + if (typDokl<>'') then + params.Add('typDokladu', typDokl); + + druhPohybu:= sanitizeSQLString(sklad); + if (druhPohybu<>'') then + params.Add('druhPohybu', druhPohybu); + + formatX:= sanitizeSQLString(formatX); // pro zobrazeni jako DokladOZ + if (formatX<>'') then + if (formatX='1') then + params.Add('format', formatX); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetByParams(params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladOZController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetSDGDokladOZService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + + + { TGatemaSDDokladController } + + destructor TGatemaSDDokladController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + function TGatemaSDDokladController.GetGatemaSDDokladService: TGatemaSDDokladService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDDokladService.Create(datMod); + result:= FSelfSvc; + end; + + + + + procedure TGatemaSDDokladController.GetAll (odDatum: string=''; jenSeznam: string='0'); + var params: TDictionary; + begin + params:= TDictionary.Create; + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + } + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetByID (id: string=''; typDokl: string=''; druhPohybu: string=''; sklad: string=''; formatX: string=''; odDatum: string=''; doDatum: string=''; + jenSeznam: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + typDokl:= sanitizeSQLString(sklad); + if (typDokl<>'') then + params.Add('typDokladu', typDokl); + + druhPohybu:= sanitizeSQLString(sklad); + if (druhPohybu<>'') then + params.Add('druhPohybu', druhPohybu); + + formatX:= sanitizeSQLString(formatX); // pro zobrazeni jako DokladOZ + if (formatX<>'') then + if (formatX='1') then + params.Add('format', formatX); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + try + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetByParams(params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + finally + params.Free; + end; + end; + + + + + procedure TGatemaSDDokladController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDDokladService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + +{ TGatemaSDScanDataController } + + destructor TGatemaSDScanDataController.Destroy; + begin + FSelfSvc.Free; + end; + + function TGatemaSDScanDataController.GetGatemaSDScanDataService: TGatemaSDScanDataService; + begin + inherited Create; + if not Assigned(FSelfSvc) then + FSelfSvc:= TGatemaSDScanDataService.Create(datMod); + result:= FSelfSvc; + end; + + + + procedure TGatemaSDScanDataController.GetByID (id: string=''; iddoklad: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetByParams(params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + procedure TGatemaSDScanDataController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetGatemaSDScanDataService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + + + + + +{ TRTNController } + destructor TRTNController.Destroy; + begin + FSelfSvc.Free; + inherited; + end; + + + + function TRTNController.GetRTNService: TRTNService; + begin + inherited; + if not Assigned(FSelfSvc) then + FSelfSvc:= TRTNService.Create (datMod); + result:= FSelfSvc; + end; + + + + + procedure TRTNController.ZapisJSONDoHeliosu (CTX: TWebContext); + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + GetRTNService.ZapisJsonDoHeliosu(jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + except + RenderStatusMessage (200); + end; + end; + + + + + function TRTNController.NactiJSONDataZHeliosu (CTX: TWebContext): string; + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + result:= ''; + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + result:= GetRTNService.NactiDataZHeliosu (jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + except + RenderStatusMessage (200); + end; + end; + + + + + + procedure TRTNController.GetPrikazyProEWB (sIdStroj: string = ''; sIDPracoviste: string=''; material: string=''; odDatum: string = ''; doDatum: string = ''; + spustene: string=''); + var params: TDictionary; + idStroj: integer; + begin + params:= TDictionary.Create; + + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', material); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + + params.Add('typ', '5'); + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + procedure TRTNController.GetPrikazyProMicharnu (sIdStroj: string = ''; sIDPracoviste: string=''; odDatum: string = ''; doDatum: string = ''; spustene: string=''); + var params: TDictionary; + idStroj: integer; + begin + params:= TDictionary.Create; + + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + + params.Add('typ', '1'); + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + procedure TRTNController.GetPrikazyProMacirnu (sIdStroj: string = ''; sIDPracoviste: string=''; operace: string=''; material: string=''; + odDatum: string = ''; doDatum: string = ''; spustene: string=''); + var params: TDictionary; + idStroj: integer; + begin + params:= TDictionary.Create; + + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + operace:= sanitizeSQLString(operace); + if (operace='1') then + params.Add('operace', '1'); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', '1'); + + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + +// params.Add('idpracovist', datMod.SQLIDsToString (tblCPrac, 'Nazev LIKE N''Z - Čoko%'' OR Nazev LIKE N''Z - Přep%''')); +// params.Add('idstroju', datMod.SQLIDsToString (tblCisStroj, 'Nazev LIKE N''Z - Čoko%'' OR Nazev LIKE N''Z - Přep%''')); + params.Add('typ', '2'); + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + procedure TRTNController.GetPrikazyProBalicku (sIdStroj: string = ''; operace: string=''; material: string=''; + odDatum: string = ''; doDatum: string = ''; spustene: string=''); + var params: TDictionary; + idStroj: integer; + begin + params:= TDictionary.Create; + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + operace:= sanitizeSQLString(operace); + if (operace='1') then + params.Add('operace', '1'); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', '1'); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + +// params.Add('idpracovist', datMod.SQLIDsToString (tblCPrac, 'Nazev LIKE N''Z - Čoko%'' OR Nazev LIKE N''Z - Přep%''')) +// params.Add('idstroju', datMod.SQLIDsToString (tblCisStroj, 'Nazev LIKE N''%Balička%''')); + params.Add('typ', '4'); + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + procedure TRTNController.GetPrikazyProBaleni (sIdStroj: string = ''; sIDPracoviste: string=''; operace: string=''; material: string=''; + odDatum: string = ''; doDatum: string = ''; spustene: string=''); + var params: TDictionary; + idStroj: integer; + begin + params:= TDictionary.Create; + + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + operace:= sanitizeSQLString(operace); + if (operace='1') then + params.Add('operace', '1'); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', '1'); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + +// params.Add('idpracovist', datMod.SQLIDsToString (tblCPrac, 'Nazev LIKE N''Z - Čoko%'' OR Nazev LIKE N''Z - Přep%''')) + params.Add('idstroju', datMod.SQLIDsToString (tblCisStroj, 'Nazev LIKE N''%BAL%''')); + params.Add('typ', '3'); + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + + + + procedure TRTNController.GetPrikazy (sIdStroj: string = ''; sIdPracoviste: string = ''; sTypPrikazu: string=''; odDatum: string = ''; doDatum: string = ''); + var params: TDictionary; + idStroj, idPracoviste, typVPr: integer; + begin + params:= TDictionary.Create; + + sIdStroj:= sanitizeSQLString (sIdStroj); + idStroj:= 0; + if (sIdStroj<>'') then + if not(TryStrToInt (sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idstroj', idStroj.ToString); + + + sIdPracoviste:= sanitizeSQLString (sIdPracoviste); + idPracoviste:= 0; + if (sIdPracoviste<>'') then + if not(TryStrToInt (sIdPracoviste, idPracoviste)) then + idPracoviste:= 0; + if (idPracoviste>0) then + params.Add('idpracoviste', idPracoviste.ToString); + + + sTypPrikazu:= sanitizeSQLString (sTypPrikazu); + typVPr:= 0; + if (sTypPrikazu<>'') then + if not(TryStrToInt (sTypPrikazu, typVPr)) then + typVPr:= 0; + params.Add('typ', typVPr.ToString); + + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + + try + Render(ObjectDict().Add('data', GetRTNService.GetPrikazy (params))); // viz uSvcCustom.pas + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; + on E:Exception do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end; +} + end; + end; + + +end. diff --git a/_custom/Rootvin/uHeOObj_Custom.pas b/_custom/Rootvin/uHeOObj_Custom.pas new file mode 100644 index 0000000..a6478cf --- /dev/null +++ b/_custom/Rootvin/uHeOObj_Custom.pas @@ -0,0 +1,319 @@ +ďťżunit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, +{$IFDEF SWAGGER} + MVCFramework.Swagger.Commons, +{$ENDIF} + helTabsBIDs, + uHeoObj_Base; + + +const +{$I C:\_zakaznici\pluginy_obecne\HDCApi2\globalConsts.inc} + + tblGSDDoklady = '[dbo].[Gatema_SDDoklady]'; + tblGSDScanData = '[dbo].[Gatema_SDScanData]'; + + +type + [MVCNameCase(ncLowerCase)] + TRTNMicharnaPozadavekPotvrzeni = class(THeliosObjekty) + private + FIDDataZoneTask: integer; + FDatZpracovani: NullableTDateTime; + FJSONData: string; + public + [MVCColumn('IDDataZoneTask', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDataZoneTask', 'ID DataZone tasku', true, false)] + property IDDataZoneTask: integer read FIDDataZoneTask write FIDDataZoneTask; + + [MVCColumn('DatZpracovani', false)] + [MVCSwagJsonSchemaField(stDateTime, 'DatZpracovani', 'ID poĹžadavku u DataZone', false, true)] + property DatZpracovani: NullableTDateTime read FDatZpracovani write FDatZpracovani; + + [MVCColumn('JSONData', false)] + [MVCSwagJsonSchemaField(stString, 'JSONData', 'JSONData', true, false)] + property JSONData: string read FJSONData write FJSONData; + + end; + + + + [MVCNameCase(ncLowerCase)] + TRTNMicharnaSpotreba = class(THeliosObjekty) + private + FIDDataZoneTask: integer; + FDatZpracovani: NullableTDateTime; + FJSONText: string; + public + [MVCColumn('IDDataZoneTask', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDataZoneTask', 'ID DataZone tasku', true, false)] + property IDDataZoneTask: integer read FIDDataZoneTask write FIDDataZoneTask; + + [MVCColumn('DatZpracovani', false)] + [MVCSwagJsonSchemaField(stDateTime, 'DatZpracovani', 'ID poĹžadavku u DataZone', false, true)] + property DatZpracovani: NullableTDateTime read FDatZpracovani write FDatZpracovani; + + [MVCColumn('JSONText', false)] + [MVCSwagJsonSchemaField(stString, 'JSONText', 'ID poĹžadavku u DataZone', true, false)] + property JSONText: string read FJSONText write FJSONText; + + end; + + + + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDScanData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDZdrojSD: NullableInt32; + FIDPolozky: NullableInt32; + FIDPrikaz: NullableInt32; + FDokladPrKV: NullableInt32; + FDokladPrVPV: NullableInt32; + FIDPohZbo: NullableInt32; + FIDVyrCS_Obj: NullableInt32; + FIDInvItem: NullableInt32; + FIDPohZbo_New: NullableInt32; + FIDKmenZbozi: NullableInt32; + FIDStavSkladu: NullableInt32; + FVyrCislo: NullableString; + FPopisSarze: NullableString; + FMnozstvi: Single; + FMnozstviEvidence: Single; + FMJ: NullableString; + FMJEvidence: NullableString; + FBarCode: NullableString; + FDatumExpirace: NullableTDateTime; + FKodBaleni: NullableString; + FDatPorizeni: TDateTime; + FGenerovat: NullableBoolean; + FJedinecneCislo: NullableString; + public +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDZdrojSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDZdrojSD', 'ID zdorj SD', false, true)] + property IDZdrojSD: NullableInt32 read FIDZdrojSD write FIDZdrojSD; + + [MVCColumn('IDPolozky', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPolozky', 'ID poloĹžky', false, true)] + property IDPolozky: NullableInt32 read FIDPolozky write FIDPolozky; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('VyrCislo', false)] + [MVCSwagJsonSchemaField(stString, 'VyrCislo', 'VĂ˝robnĂ­ číslo', true, false, 1, 100)] + property VyrCislo: NullableString read FVyrCislo write FVyrCislo; + + [MVCColumn('PopisSarze', false)] + [MVCSwagJsonSchemaField(stString, 'PopisSarze', 'Popis ĹĄarĹže', true, false, 1, 100)] + property PopisSarze: NullableString read FPopisSarze write FPopisSarze; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField('Mnozstvi', 'MnoĹžstvĂ­', true, false)] + property Mnozstvi: Single read FMnozstvi write FMnozstvi; + + [MVCColumn('MnozstviEvidence')] + [MVCSwagJsonSchemaField('MnozstviEvidence', 'MnoĹžstvĂ­ v evidenčnĂ­ jednotce', true, false)] + property MnozstviEvidence: Single read FMnozstviEvidence write FMnozstviEvidence; + + [MVCColumn('DatumExpirace')] + [MVCSwagJsonSchemaField('DatumExpirace', 'Datum expirace', false, true)] + property DatumExpirace: NullableTDatetime read FDatumExpirace write FDatumExpirace; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + end; + + + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDZdrojData = class(THeliosObjekty) + private + FIDDokladSD: integer; + FIDDokZbo: NullableInt32; + FIDPrikaz: NullableInt32; + FGUIDDokladu: NullableTGUID; + public + [MVCColumn('IDDokladSD', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladSD', 'ID dokladu SD', true, false)] + property IDDokladSD: integer read FIDDokladSD write FIDDokladSD; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'FIDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('GUIDDokladu', false)] + [MVCSwagJsonSchemaField(stGuid, 'GUIDDokladu', 'GUID dokladu', false, true)] + property GUIDDokladu: NullableTGUID read FGUIDDokladu write FGUIDDokladu; + end; + + + + [MVCNameCase(ncLowerCase)] + TGatemaSDDoklad = class(THeliosObjekty) + private + FTypDokladu: integer; + FPodtypDokladu: NullableInt32; + FRadaDokladu: NullableString; + FDruhPohybuZbo: NullableInt32; + FSklad: NullableString; + FSkladCil: NullableString; + FIDPrikaz: NullableInt32; + FIDDokZbo: NullableInt32; + FIDDokZbo_New: NullableInt32; + FGUIDDokZbo: NullableTGUID; + FGUIDDokZbo_New: NullableTGUID; + FIDInvHead: NullableInt32; + FIDOrg: NullableInt32; + FCisloOrg: NullableInt32; + FDatumPripadu: NullableTDateTime; + FDatPorizeni: TDateTime; + FDatGenerovani: NullableTDateTime; + FScanData: TObjectList; + procedure SetSDScanData (const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID vĂ˝robnĂ­ operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('TypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'TypDokladu', 'Typ dokladu', true, false)] + property TypDokladu: integer read FTypDokladu write FTypDokladu; + + [MVCColumn('PodtypDokladu', false)] + [MVCSwagJsonSchemaField(stInteger, 'PodtypDokladu', 'Podtyp dokladu', false, true)] + property PodtypDokladu: NullableInt32 read FPodtypDokladu write FPodtypDokladu; + + [MVCColumn('RadaDokladu', false)] + [MVCSwagJsonSchemaField(stString, 'RadaDokladu', 'Řada dokladu', false, true)] + property RadaDokladu: NullableString read FRadaDokladu write FRadaDokladu; + + [MVCColumn('DruhPohybuZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'DruhPohybuZbo', 'Druh pohybu zboŞí', false, true)] + property DruhPohybuZbo: NullableInt32 read FDruhPohybuZbo write FDruhPohybuZbo; + + [MVCColumn('Sklad', false)] + [MVCSwagJsonSchemaField(stString, 'Sklad', 'Sklad', false, true)] + property Sklad: NullableString read FSklad write FSklad; + + [MVCColumn('SkladCil', false)] + [MVCSwagJsonSchemaField(stString, 'SkladCil', 'CĂ­lovĂ˝ sklad', false, true)] + property SkladCil: NullableString read FSkladCil write FSkladCil; + + [MVCColumn('IDPrikaz', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vĂ˝robnĂ­ho příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('IDDokZbo', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo', 'ID dokladu OZ', false, true)] + property IDDokZbo: NullableInt32 read FIDDokZbo write FIDDokZbo; + + [MVCColumn('IDDokZbo_New', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDDokZbo_New', 'ID novĂŠho dokladu OZ', false, true)] + property IDDokZbo_New: NullableInt32 read FIDDokZbo_New write FIDDokZbo_New; + + [MVCColumn('IDInvHead', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDInvHead', 'ID dokladu inventury', false, true)] + property IDInvHead: NullableInt32 read FIDInvHead write FIDInvHead; + + [MVCColumn('IDOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'IDOrg', 'ID organizace', false, true)] + property IDOrg: NullableInt32 read FIDOrg write FIDOrg; + + [MVCColumn('CisloOrg', false)] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('DatumPripadu')] + [MVCSwagJsonSchemaField('DatumPripadu', 'Datum případu', false, true)] + property DatumPripadu: NullableTDatetime read FDatumPripadu write FDatumPripadu; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField('DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + + [MVCColumn('DatGenerovani')] + [MVCSwagJsonSchemaField('DatGenerovani', 'Datum generovĂĄnĂ­ dokladu OZ', false, true)] + property DatGenerovani: NullableTDatetime read FDatGenerovani write FDatGenerovani; + + [MapperListOf(TGatemaSDScanData)] + property ScanData: TObjectList read FScanData write SetSDScanData; + end; + + + + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + +{ TGatemaSDDoklad } + + constructor TGatemaSDDoklad.Create; + begin + inherited; + FScanData:= TObjectList.Create; + end; + + + destructor TGatemaSDDoklad.Destroy; + begin +// if (FPohybyOZ<>nil) then +// FPohybyOZ.Free; + inherited; + end; + + + procedure TGatemaSDDoklad.SetSDScanData(const Value: TObjectList); + begin + if (Value<>FScanData) then + begin + FScanData.Free; + FScanData:= Value; + end; + end; + + +end. \ No newline at end of file diff --git a/_custom/Rootvin/uSvcCustom.pas b/_custom/Rootvin/uSvcCustom.pas new file mode 100644 index 0000000..131f194 --- /dev/null +++ b/_custom/Rootvin/uSvcCustom.pas @@ -0,0 +1,1222 @@ +ďťżunit uSvcCustom; + +interface + +uses + System.Classes, + System.JSON, + REST.Json, + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uHeoObj_Vyroba, + uSvc_ObehZbozi, + uSvc_Vyroba; + + +const +{$I C:\_zakaznici\pluginy_obecne\HDCApi2\globalConsts.inc} + + selSpecDoklSD = '(SELECT CisloOrg FROM ' + tblCOrg + ' WHERE ID=main.IDOrg) AS CisloOrg'; + tblMichPozadavek = '[dbo].[_hdc_DataZone_MicharnaPozadavek]'; + tblMichSpotreba = '[dbo].[_hdc_DataZone_MicharnaSpotreba]'; + tblPrijataJsonData = '[dbo].[_hdc_ph_PrijataJsonData]'; // data z Pro Holdingu + + + +type + TSDGDokladOZService = class; + TSDGPolozkaOZService = class; + + + + + TRTNService = class(TServiceBase) + public + function NactiDataZHeliosu (jsonData: string; var respData: string): string; + procedure ZapisJsonDoHeliosu (jsonData: string; var respString: string); + function GetPrikazy (params: TDictionary): TObjectList; + end; + + + + + + + TGatemaSDDokladService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByParams(params: TDictionary): TObjectList; + function GetByID (const AID: integer; const bezPolozek: boolean=false): TGatemaSDDoklad; + function GetMeta: TJSONObject; + end; + +{ + TGatemaSDDokladOZService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByParams(params: TDictionary): TObjectList; + function GetByID (const AID: integer; const bezPolozek: boolean=false): TSDGDokladOZService; + function GetMeta: TJSONObject; + end; +} + + TGatemaSDScanDataService = class(TServiceBase) + public + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer): TGatemaSDScanData; + function GetMeta: TJSONObject; + end; + + + TSDGPolozkaOZService = class(TPolozkaOZService) + function GetByID (const AID: integer): TPohybOZ; + function GetByParams (params: TDictionary): TObjectList; + end; + + + TSDGSerioveCisloPohybOZService = class(TSerioveCisloPohybOZService) + function GetByParams (params: TDictionary): TObjectList; + end; + + + TSDGDokladOZService = class(TDokladOZService) + function GetByID(const AID: integer; const bezPolozek: boolean=false): TDokladOZ; virtual; + function GetByParams(params: TDictionary): TObjectList; virtual; + end; + + + + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + +{ TSDGDokladOZService } + + function TSDGDokladOZService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, odDatum, doDatum, sklad, strTemp, podmSDGDoklad: string; + lQry: TFDQuery; + datOd, datDo: TDateTime; + id, iDZ, cnt, rNo: integer; + jenSeznam: Boolean; + d: TDokladOZ; + dList: TObjectList; + begin + jenSeznam:= false; + if (params.ContainsKey('seznam')) then + jenSeznam:= true; + + + if not(jenSeznam) then + lSQL:= 'SELECT ' + GetTabCols('dbo', tblDZ, 'main', false) + IfThen(selSpecDZ<>'', ',' + selSpecDZ, '') + ' FROM ' + tblDZ + ' main' + else + lSQL:= 'SELECT main.ID, main.DruhPohybuZbo, main.RadaDokladu, main.PoradoveCislo, main.CisloOrg, main.DatPorizeni, main.DatRealizace, main.Realizovano, main.Autor FROM ' + tblDZ + ' main'; + + where:= 'main.Realizovano=1'; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + id.ToString; + end; + + if (params.ContainsKey('organizace')) then + if (params.Items['organizace']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.CisloOrg=' + params.Items['organizace']; + + if (params.ContainsKey('druhpohybu')) then + if (params.Items['druhpohybu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DruhPohybuZbo=' + params.Items['druhpohybu']; + + if (params.ContainsKey('radadokladu')) then + if (params.Items['radadokladu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.RadaDokladu=N' + params.Items['radadokladu'].QuotedString; + + if (params.ContainsKey('sklad')) then + if (params.Items['sklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDSklad=N' + params.Items['sklad'].QuotedString; + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -1) + end + else + datOd:= IncDay(Now, -1); + + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + odDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + strTemp:= ''; + if (odDatum<>'') then + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)' + else + strTemp:= 'DATEADD(day, -3, GETDATE())'; + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; + + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; + end; + + + lSQL:= lSQL + ' INNER JOIN ' + tblGSDDoklady + ' sdd ON (sdd.IdDokZbo=main.ID)'; + + + if (where<>'') then + begin + where:= where +IfThen(where<>'', ' AND ', '') + 'sdd.DatGenerovani IS NOT NULL'; + lSQL:= lSQL + ' WHERE ' + where; + end; + lSQL:= lSQL + ' ORDER BY main.ParovaciZnak'; + + lSQL:= lSQL.Replace('TabDokladyZbozi.', 'main.'); + + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + d:= TDokladOZ.Create; + dList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + iDZ:= lQry.FieldByName('ID').AsInteger; + d:= self.GetByID(iDZ, jenSeznam); + dList.Add(d); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= dList; // FDM.sqlQry1.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ dokladu: ' + E.Message); + end; + finally + FreeAndNil(lQry); + end; + end + else + raise EServiceException.Create('VybranĂ˝m podmĂ­nkĂĄm neodpovĂ­dĂĄ ŞådnĂ˝ doklad'); + end; + + + + + function TSDGDokladOZService.GetByID(const AID: integer; const bezPolozek: boolean=false): TDokladOZ; + var lSQL: string; + p: TDictionary; + ps: TSDGPolozkaOZService; + lQry: TFDQuery; + begin +// lSQL:= 'SELECT ' + GetTabCols('dbo', tblDZ, '', false) + ' FROM ' + tblDZ + ' WHERE ID=:ID'; + + ps:= TSDGPolozkaOZService.Create(self.FDM); + p:= TDictionary.Create; + p.Add('iddoklad', AID.ToString); + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblDZ, '', false) + IfThen(selSpecDZ<>'', ',' + selSpecDZ, '') + ' FROM ' + tblDZ + ' WHERE ID=' + AID.ToString + ' AND Realizovano=1'; + + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if not(bezPolozek) then + result.PohybyOZ:= ps.GetByParams(p); + end + else + raise EServiceException.Create('Doklad oběhu zboŞí s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + p.Free; + ps.Free; + FreeAndNil(lQry); + end; + end; + + + + +{ TSDGSerioveCisloPohybOZService } + + function TSDGSerioveCisloPohybOZService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + id, idPZ: integer; + s: TSerioveCisloPohybOZ; + begin +// lSQL:= 'SELECT ' + GetTabCols('', tblVyrCP, 'main') + IfThen(selSpecVyrCP<>'', ', ' + selSpecVyrCP.Replace('#', ''), '') + ' FROM ' + tblVyrCP + ' main'; + lSQL:= 'SELECT ID, IdPohZbo AS IDPolozkaDokladu, NULL AS IDVyrCis, VyrCislo AS VyrCis, PopisSarze AS Nazev, Mnozstvi, DatumExpirace AS DatExpirace' + + ', 1 AS ZdrojSD, IDDokladSD AS IDDokladGSD, DatPorizeni AS DatVstup FROM ' + tblGSDScanData; + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + id:= params.Items['id'].ToInteger; + + if (params.ContainsKey('idpohzbo')) then + if (params.Items['idpohzbo']<>'') then + if (params.Items['idpohzbo']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IdPohZbo=' + params.Items['idpohzbo']; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY ID'; + + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + end; + + + + + +{ TSDGPolozkaOZService } + + function TSDGPolozkaOZService.GetByID(const AID: Integer): TPohybOZ; + var lSQL: string; + p: TDictionary; + pds: TSDGSerioveCisloPohybOZService; + lQry: TFDQuery; + idDokladOZ: integer; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ + ' WHERE ID=:ID'; + + + pds:= TSDGSerioveCisloPohybOZService.Create(self.FDM); + p:= TDictionary.Create; + p.Add('idPolozkaOZ', AID.ToString); + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + p.Add('idpohzbo', result.ID.ToString); + result.SerialNums:= pds.GetByParams(p); + end + else + raise EServiceException.Create('PoloĹžka dokladu oběhu zboŞí s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + p.Free; + pds.Free; + lQry.Free; + end; + end; + + + + + function TSDGPolozkaOZService.GetByParams(params: TDictionary): TObjectList; + var lSQL, where, podmSDGPolozka: string; + id,idPZ, cnt, rNo: integer; + lQry: TFDQuery; + pList: TObjectList; + p: TPohybOZ; + begin + p:= TPohybOZ.Create; + pList:= TObjectList.Create; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ; + + where:= 'KJSkontrolovano=1 AND ID IN (SELECT p.IDPohZbo FROM ' + tblGSDScanData + ' p INNER JOIN ' + + tblGSDDoklady + ' h ON (h.ID=p.IDDokladSD) WHERE h.DatGenerovani IS NOT NULL)' ; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + IfThen(where<>'', ' AND ', '') + 'ID=' + id.ToString; + end; + + if (params.ContainsKey('iddoklad')) then + if (params.Items['iddoklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDDoklad=' + params.Items['iddoklad'] + ' AND IDDoklad IN (SELECT IDDokZbo FROM ' + + tblGSDDoklady + ' WHERE DatGenerovani IS NOT NULL)'; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY IDDoklad, Poradi'; + +// lSQL:= lSQL.Replace('TabPohybyZbozi.', 'main.'); + + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + try + cnt:= lQry.RecordCount; + pList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + idPZ:= lQry.FieldByName('ID').AsInteger; + + p:= self.GetByID(idPZ); + pList.Add(p); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= pList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ poloĹžky/poloĹžek dokladu: ' + E.Message); + end; + finally + FreeAndNil(lQry); + end; + end; + + + + + + +{ TGatemaSDDokladService } + + function TGatemaSDDokladService.GetAll:TObjectList; + var lSQL: string; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady) + ' FROM ' + tblGSDDoklady + ' ORDER BY ID'; + FDM.sqlQry1.Open(lSQL, []); + result:= FDM.sqlQry1.AsObjectList; + FDM.sqlQry1.Close; + end; + + + + function TGatemaSDDokladService.GetByParams(params: TDictionary): TObjectList; + var lSQL, where, odDatum, doDatum, sklad, formatX, druhPohybuZbo, strTemp: string; + lQry: TFDQuery; + datOd, datDo: TDateTime; + id, iDZ, cnt, rNo: integer; + jenSeznam: Boolean; + d: TGatemaSDDoklad; + dList: TObjectList; + begin + jenSeznam:= false; + if (params.ContainsKey('seznam')) then + jenSeznam:= true; + + formatX:= ''; + if (params.ContainsKey('format')) then + formatX:= params.Items['format']; + if (formatX<>'') then + begin + end + else + begin + if not(jenSeznam) then + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main' + else + lSQL:= 'SELECT main.ID, main.TypDokladu, main.PodtypDokladu, main.RadaDokladu, main.Sklad, main.RadaDokladuCil, main.SkladCil, main.IDDokZbo, main.IDDokZbo_New' + + ', main.IDOrg' + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ', main.DatPorizeni, main.DatGenerovani, main.DatumPripadu, main.PopisDodavky' + + ' FROM ' + tblGSDDoklady + ' main'; + end; + + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'main.ID=' + id.ToString; + end; + + if (params.ContainsKey('typDokladu')) then + if (params.Items['typDokladu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.TypDokladu=N' + params.Items['typDokladu']; + + if (params.ContainsKey('druhPohybu')) then + if (params.Items['druhPohybu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DruhPohybuZbo=N' + params.Items['druhPohybu']; + + if (params.ContainsKey('sklad')) then + if (params.Items['sklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Sklad=N' + params.Items['sklad'].QuotedString; + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -180) + end + else + datOd:= IncDay(Now, -180); + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + odDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + + strTemp:= ''; + if (odDatum<>'') then + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)' + else + strTemp:= 'DATEADD(day, -3, GETDATE())'; + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; + + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'main.ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY main.ID'; + + lSQL:= lSQL.Replace('Gatema_SDDoklady.', 'main.'); + + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + d:= TGatemaSDDoklad.Create; + dList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + iDZ:= lQry.FieldByName('ID').AsInteger; + d:= self.GetByID(iDZ, jenSeznam); + dList.Add(d); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= dList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ dokladu: ' + E.Message); + end; + end + else + raise EServiceException.Create('VybranĂ˝m podmĂ­nkĂĄm neodpovĂ­dĂĄ ŞådnĂ˝ naskenovanĂ˝ doklad'); + finally + FreeAndNil(lQry); + end; + + end; + + + + function TGatemaSDDokladService.GetByID (const AID: integer; const bezPolozek: boolean=false): TGatemaSDDoklad; + var lSQL: string; + p: TDictionary; + ps: TGatemaSDScanDataService; + lQry: TFDQuery; + begin + + ps:= TGatemaSDScanDataService.Create(self.FDM); + p:= TDictionary.Create; + p.Add('iddoklad', AID.ToString); + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main WHERE main.ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if not(bezPolozek) then + result.ScanData:= ps.GetByParams(p); + end + else + raise EServiceException.Create('NaskenovanĂ˝ doklad s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + p.Free; + ps.Free; + FreeAndNil(lQry); + end; + end; + + + + function TGatemaSDDokladService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDDoklady, 'main', false) + IfThen(selSpecDoklSD<>'', ',' + selSpecDoklSD, '') + ' FROM ' + tblGSDDoklady + ' main WHERE 1=0'; + lQry:= TFDQuery.Create(nil); +// lQry.FetchOptions.AutoClose:= false; +// lQry.FetchOptions.Mode:= fmAll; + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + +{ TGatemaSDScanDataService } + + function TGatemaSDScanDataService.GetByID (const AID: integer): TGatemaSDScanData; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData) + ' FROM ' + tblGSDScanData + ' WHERE ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + result:= lQry.AsObject + else + raise EServiceException.Create('NaskenovanĂĄ poloĹžka s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + lQry.Free; + end; + end; + + + + function TGatemaSDScanDataService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData) + ' FROM ' + tblGSDScanData + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.AutoClose:= false; + lQry.FetchOptions.Mode:= fmAll; + try + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TGatemaSDScanDataService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + id, idPZ, idPZold, cnt, rNo: integer; + lQry: TFDQuery; + pList: TObjectList; + p: TGatemaSDScanData; + begin + p:= TGatemaSDScanData.Create; + pList:= TObjectList.Create; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblGSDScanData, '', false) + ' FROM ' + tblGSDScanData; + + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'ID=' + id.ToString; + end; + + idPZold:= 0; + if (params.ContainsKey('idpohzbo')) then + if (params.Items['idpohzbo']<>'') then + if (params.Items['idpohzbo']<>'0') then + begin + idPZold:= params.Items['idpohzbo'].ToInteger; + where:= where + 'IdPohZbo=' + idPZold.ToString; + end; + + if (params.ContainsKey('iddoklad')) then + if (params.Items['iddoklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDDokladSD=' + params.Items['iddoklad']; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY IDDokladSD, ID'; + +// lSQL:= lSQL.Replace('TabPohybyZbozi.', 'main.'); + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + pList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + idPZ:= lQry.FieldByName('ID').AsInteger; + p:= self.GetByID(idPZ); + pList.Add(p); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= pList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ naskenovanĂŠ poloĹžky/poloĹžek dokladu: ' + E.Message); + end; + finally + FreeAndNil(lQry); + end; + end; + + + + + + + + +{ TRTNService } + + function TRTNService.GetPrikazy (params: TDictionary): TObjectList; + var lQry: TFDQuery; + sqlConnX: TFDConnection; + lSQL, where, errMsg: string; + cnt, rNo, idVPr: integer; + typPrikazu: integer; + operace, material, spustene: boolean; + odDatum, doDatum, cisOper: string; + strTemp: string; + datOd, datDo: TDateTime; + vpList: TObjectList; + p: TVyrobniPrikaz; + vpSvr: TVyrobniPrikazService; + locParams: TDictionary; + begin + cisOper:= ''; + + locParams:= TDictionary.Create; + + + operace:= false; + if (params.ContainsKey('operace')) then + if (params.Items['operace']='1') then + begin + operace:= true; + locParams.Add('operace', params.Items['operace']); + end; + + material:= false; + if (params.ContainsKey('material')) then + if (params.Items['material']='1') then + begin + material:= true; + locParams.Add('material', params.Items['material']); + end; + + spustene:= false; + if (params.ContainsKey('spustene')) then + if (params.Items['spustene']='1') then + begin + spustene:= true; + locParams.Add('spustene', params.Items['spustene']); + end; + + + + where:= ''; + lSQL:= 'SELECT DISTINCT(main.ID) AS ID FROM ' + tblVPr + ' main'; + + + if (spustene) then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblRozpracOperR + + ' r ON (r.DokladPrPostup=pp.Doklad AND r.AltPrPostup=pp.Alt AND r.IDPrikaz=pp.IDPrikaz)' + + ' INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper)' + + ' WHERE pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=main.ID AND h.DatumUzavreni IS NULL)'; + + + typPrikazu:= 0; + if (params.ContainsKey('typ')) then + if not(TryStrToInt(params.Items['typ'], typPrikazu)) then + typPrikazu:= 0; + + locParams.Add('rtn', '1'); + locParams.Add('typPrikazu', typPrikazu.ToString); + + if (typPrikazu=0) then // obecny + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0)'; + + + + if (typPrikazu=1) then // pro micharnu se nacitaji vyssi prikazy, tj. kde testo skonci + begin + locParams.Add('nazevOp', 'michani'); + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''003'' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')'; + + + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' + + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz + + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' + + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' + + ' WHERE ppx.IDOdchylkyDo IS NULL' + + ' AND px.StavPrikazu IN (30,40)' + + ' AND ppx.IDStroje=' + params.Items['idstroj'] + '))' + + ')'; +{ + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje=' + params.Items['idstroj'] + ')' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N''701'')' +} + end; +{ + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')'; +} + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + ' AND (main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN ' + params.Items['idstroju'] + ')' + + ' OR main.IDPrikazVyssi IN (SELECT ID FROM ' + tblPrikaz + + ' WHERE IDPrikazVyssi IN (SELECT px.ID FROM ' + tblPrPost + ' ppx' + + ' INNER JOIN dbo.TabPrikaz px ON (px.ID=ppx.IDPrikaz)' + + ' WHERE ppx.IDOdchylkyDo IS NULL' + + ' AND px.StavPrikazu IN (30,40)' + + ' AND ppx.IDStroje IN ' + params.Items['idstroju'] + '))' + + ')'; + +{ + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikazVyssi IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo=N''701'')' +} + end; + end; + + + if (typPrikazu=2) then // pro macirnu + begin + locParams.Add('nazevOp', 'máčenĂ­'); + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada IN (N''004'', N''002'') AND EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCisStroj + ' cs' + + ' ON (cs.ID=pp.IDStroje) INNER JOIN ' + tblCisStrojE + ' cse ON (cse.ID=cs.ID) WHERE pp.IDPrikaz=main.ID' + + ' AND pp.IDOdchylkyDo IS NULL AND pp.priorita=0 AND cse._MaceciStroj=1)'; +{ + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N''004'' AND main.IDZakazModif IN (SELECT ID FROM ' + + tblZakazModif + ' WHERE Schvaleno=1 AND Kod LIKE N''COKO%'')'; +} +{ + if (params.ContainsKey('idpracovist')) then + if (params.Items['idpracovist']<>'') then + begin + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.IDOdchylkyDo IS NULL' + + ' AND p.StavPrikazu IN (30,40)' + + ' AND pp.pracoviste IN (' + params.Items['idpracovist'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; +} + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; + + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')' + end; +{ + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; +} + end; + + + if (typPrikazu=3) then // pro baleni (interni) + begin + locParams.Add('nazevOp', 'balenĂ­'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND LOWER(Nazev) LIKE N''%balenĂ­%'' AND IDStroje NOT IN (SELECT ID FROM ' + tblCisStroj + + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%'') AND priorita=0)'; // main.Rada=N''004'' +{ + if (params.ContainsKey('idstroj')) then + begin + if (params.Items['idstroj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroj'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo<>N''701'')' + end; + + if (params.ContainsKey('idstroju')) then + begin + if (params.Items['idstroju']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT p.ID FROM ' + tblPrPost + ' pp INNER JOIN dbo.TabPrikaz p ON (p.ID=pp.IDPrikaz)' + + ' WHERE pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND p.StavPrikazu IN (30,40)' + + ' AND pp.IDStroje IN (' + params.Items['idstroju'] + '))' + + ' AND main.IDTabKmen IN (SELECT ID FROM ' + tblKZ + ' WHERE Dilec=1 AND Blokovano=0 AND SkupZbo<>N''701'')'; + end; +} + end; + + + if (typPrikazu=4) then // pro balicku finalu + begin + locParams.Add('nazevOp', 'balenĂ­'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''BAL-%''))'; + end; + + + if (typPrikazu=5) then // pro EWB + begin + locParams.Add('nazevOp', 'balenĂ­'); + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM dbo.TabPrPostup WHERE IDPrikaz=main.ID AND IdOdchylkyDo IS NULL' + + ' AND IDStroje IN (SELECT ID FROM ' + tblCisStroj + ' WHERE Blokovano=0 AND Kod LIKE N''EWB%''))'; + end; + + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -180) + end + else + datOd:= IncDay(Now, -180); + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + odDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + if (odDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni>=' + strTemp; + end; + + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatPorizeni<=' + strTemp; + end; + + +// pro micharnu nejsou prikazy pozastavovany + where:= where + IfThen(where<>'', ' AND ', '') + 'main.StavPrikazu IN (30' + IfThen(typPrikazu<>1, ',40', '') + ')'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' GROUP BY main.ID ORDER BY main.ID'; + + + vpSvr:= TVyrobniPrikazService.Create (self.FDM); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + vpList:= TObjectList.Create; + try + if not(lQry.Active) then + lQry.Open(lSQL); + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + idVPr:= lQry.FieldByName('ID').AsInteger; + p:= vpSvr.GetByID (idVPr, locParams); + vpList.Add(p); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= vpList; + except on E:Exception do + begin + errMsg:= e.Message; + raise EServiceException.Create('Chyba načítĂĄnĂ­ naskenovanĂŠ poloĹžky/poloĹžek dokladu: ' + E.Message); + end; + end; + finally + begin + vpSvr.Free; + FreeAndNil(lQry); + end; + end; + + locParams.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + function TRTNService.NactiDataZHeliosu (jsonData: string; var respData: string): string; + var lSQL: string; + lQry: TFDQuery; + w: TStreamWriter; + jo: TJsonObject; + begin + result:= ''; + respData:= ''; + try + finally + end; + + respData:= '[NotImplementedYet]' + + end; + + + + + procedure TRTNService.ZapisJsonDoHeliosu (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs: string; + akce: string; + j, t, a, v: JsonDataObjects.TJSONObject; + i, ii, taskDZId, taskId, intTemp, idJSON: integer; + jeOld: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + w: TStreamWriter; + jo: System.JSON.TJsonObject; + begin + idJSON:= 0; + respString:= '['; + + jo:= System.JSON.TJsonObject.Create; + + jsonData:= jsonData.Trim; + if (jsonData<>'') then + begin + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (JSONData) SELECT N' + jsonData.QuotedString + CRLF + 'SELECT SCOPE_IDENTITY() AS newID'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + begin + idJSON:= lQry.FieldByName('newID').AsInteger; + respString:= 'OK'; + jo.AddPair('heliosid', idJSON.ToString); + end; + except on E:Exception do + begin + respString:= 'NOT OK'; + raise EServiceException.Create('Chyba zĂĄpisu JSON dat: ' + E.Message); + end; + end; + finally + FreeAndNil(lQry); + end; + + + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + if (j.Contains('akce')) then + begin + akce:= j.S['akce'].Trim; + if (idJSON>0) and (akce<>'') then + sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); +{ + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + except on E:Exception do + end; + end; +} + end; + finally + j.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end + else + respString:= 'NO input data'; + + jo.AddPair('status', respString); + respString:= '[' +respString + ']'; + + respString:= jo.ToString; + + + end; + + + +end. diff --git a/_custom/Rootvin/uTabs.inc b/_custom/Rootvin/uTabs.inc new file mode 100644 index 0000000..90e7a3b --- /dev/null +++ b/_custom/Rootvin/uTabs.inc @@ -0,0 +1,6 @@ +const + tblMichPozadavek = '[dbo].[_hdc_DataZone_MicharnaPozadavek]'; + tblMichSpotreba = '[dbo].[_hdc_DataZone_MicharnaSpotreba]'; + tblPrijataJsonData = '[dbo].[_hdc_ph_PrijataJsonData]'; // data z Pro Holdingu + tblVyrobaObjednavky = '[dbo].[_TabVyroba_Objednavky]'; // data objednavek z Pro Holdingu + tblPuvodniVC = '[dbo].[_hdc_PZ_PuvodniVC]'; diff --git a/_custom/Rootvin/uWebModCustom.inc b/_custom/Rootvin/uWebModCustom.inc new file mode 100644 index 0000000..a0275e9 --- /dev/null +++ b/_custom/Rootvin/uWebModCustom.inc @@ -0,0 +1,8 @@ +{$IFDEF CUSTOM_CTRL_RootvinX} + FEngine.AddController (TGatemaSDDokladController); + FEngine.AddController (TGatemaSDDokladOZController); + FEngine.AddController (TGatemaSDScanDataController); +{$ENDIF} + + FEngine.AddController (TRTNController); + diff --git a/_custom/Rootvin/zdroje.RES b/_custom/Rootvin/zdroje.RES new file mode 100644 index 0000000..e11d333 Binary files /dev/null and b/_custom/Rootvin/zdroje.RES differ diff --git a/_custom/Rootvin/zdroje.rc b/_custom/Rootvin/zdroje.rc new file mode 100644 index 0000000..bab51a4 --- /dev/null +++ b/_custom/Rootvin/zdroje.rc @@ -0,0 +1,44 @@ +col_TabDokumenty_DokladProAPI RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabDokumenty_DokladProAPI.sql +col_TabCisZam_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_CisZam_EXT.sql +col_TabPrPostup_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabPrPostup_EXT.sql +col_TabStavSkladu_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_TabStavSkladu_EXT.sql +col_TabDokladyZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_DokladyZbozi_EXT.sql +col_TabPohybyZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_PohybyZbozi_EXT.sql +col_TabEvidRozpracOperR_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_EvidRozpracOperR_EXT.sql +col_TabKmenZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_KmenZbozi_EXT.sql +col_TabVazbyPrikazu_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_VazbyPrikazu_EXT.sql + +ep_hdcdzapi_ZpracujPrijataData RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_HDCDZApi_ZpracujPrijataData.sql +ep_hdcdzapi_GetKusovnik RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_HDCDZApi_GetKusovnik.sql +ep_Vyroba_GenVydejZeMzdy RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_GenVydejZeMzdy.sql +ep_Vyroba_GenOdvodZeMzdy RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_GenOdvodZeMzdy.sql +ep_Vyroba_DoplnSkladProVydejDleDokladu RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_DoplnSkladProVydejDleDokladu.sql +ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql +ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql + +ep_P01_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01_HDC1.sql +ep_P01 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01.sql +ep_P03_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P03_HDC1.sql +ep_P03 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P03.sql +ep_V03_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V03_HDC1.sql +ep_V03 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V03.sql +ep_V01_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V01_HDC1.sql +ep_V01 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V01.sql + +trg__TabPohybyZbozi_HDC_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPohybyZbozi_HDC_IU.sql +trg__TabPohybyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPohybyZbozi_HDC_D.sql +tbl_hdc_PZ_PuvodniVC RCDATA C:\_zakaznici\Rootvin\_sql\tbl__hdc_PZ_PuvodniVC.sql +ep_Vyroba_Doklady_Micharna RCDATA C:\_zakaznici\Rootvin\_sql\ep_Vyroba_Doklady_Micharna.sql +ef_GetDatumASmenu RCDATA C:\_zakaznici\Rootvin\_sql\ef_GetDatumASmenu.sql +ef_DilecGetStroj RCDATA C:\_zakaznici\Rootvin\_sql\ef_DilecGetStroj.sql +ef_Kmen_VratPocetKsVKartonu RCDATA C:\_zakaznici\Rootvin\_sql\ef_Kmen_VratPocetKsVKartonu.sql +tbl_TabVyrobaObjednavky RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaObjednavky.sql +trg__TabVyrobaObjednavky_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_IU.sql +trg__TabVyrobaObjednavky_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_D.sql +tbl_TabVyrobaOperaceStartStop RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStop.sql +tbl_TabVyrobaOperaceStartStopVydej RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStopVydej.sql +tbl_TabVyrobaTestoVyroba RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyroba_TestoVyroba.sql +trg__TabDokladyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabDokladyZbozi_HDC_D.sql +trg__hdc_PZ_PuvodniVC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__hdc_PZ_PuvodniVC_D.sql +trg__TabVyrCisPrikaz_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrCisPrikaz_HDC_D.sql +trg__TabVyrobaOperaceStartStop_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaOperaceStartStop_D.sql diff --git a/api.ico b/api.ico new file mode 100644 index 0000000..0be535c Binary files /dev/null and b/api.ico differ diff --git a/api.png b/api.png new file mode 100644 index 0000000..9f0c93c Binary files /dev/null and b/api.png differ diff --git a/api2-5.ico b/api2-5.ico new file mode 100644 index 0000000..cb61fbb Binary files /dev/null and b/api2-5.ico differ diff --git a/api2.ico b/api2.ico new file mode 100644 index 0000000..0be535c Binary files /dev/null and b/api2.ico differ diff --git a/cfgGUI/hdcDZAPIcfg.dproj b/cfgGUI/hdcDZAPIcfg.dproj new file mode 100644 index 0000000..e891e83 --- /dev/null +++ b/cfgGUI/hdcDZAPIcfg.dproj @@ -0,0 +1,1149 @@ +ďťż + + {81EAC3E9-4836-4A10-948A-CE3E89925794} + 20.2 + VCL + True + Release + Win64 + 3 + Application + hdcDZApiCfg.dpr + hdcDZAPIcfg + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + hdcDZApiCfg + + + DataSnapServer;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;appanalytics;IndyProtocols;vclx;dbxcds;vcledge;RtmRxDB280;DBXFirebirdDriver;FireDACSqliteDriver;DbxClientDriver;soapmidas;dbexpress;inet;FireDACDBXDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;IndySystem;ibxbindings;vclFireDAC;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;bindcompdbx;rtl;FireDACMySQLDriver;DBXSqliteDriver;DBXSybaseASEDriver;vclimg;DataSnapFireDAC;inetdbxpress;FireDAC;xmlrtl;ibxpress;dsnap;FireDACDb2Driver;DBXOracleDriver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;emshosting;FireDACCommonDriver;IndyIPClient;EntityDac;bindcompvclwinx;emsedge;bindcompfmx;inetdb;ibmonitor;FireDACASADriver;vclactnband;fmxFireDAC;FireDACInfxDriver;DBXMySQLDriver;VclSmp;DataSnapCommon;fmxase;DBXOdbcDriver;dbrtl;FireDACOracleDriver;FireDACMSAccDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;FireDACTDataDriver;vcldb;bindcomp;RtmRxCtl280;IndyCore;RESTBackendComponents;dmvcframeworkDT;XLSRWII6_DDX11;FireDACADSDriver;RESTComponents;IndyIPServer;vcl;dsnapxml;adortl;dsnapcon;DataSnapClient;DataSnapProviderClient;DBXDb2Driver;emsclientfiredac;FireDACPgDriver;FireDACDSDriver;dmvcframeworkRT;tethering;bindcompvcl;CloudService;DBXSybaseASADriver;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1029 + $(BDS)\bin\default_app.manifest + true + + + DataSnapServer;fmx;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;appanalytics;IndyProtocols;vclx;dbxcds;vcledge;DBXFirebirdDriver;FireDACSqliteDriver;DbxClientDriver;soapmidas;dbexpress;inet;FireDACDBXDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;IndySystem;ibxbindings;vclFireDAC;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;bindcompdbx;rtl;FireDACMySQLDriver;DBXSqliteDriver;DBXSybaseASEDriver;vclimg;DataSnapFireDAC;inetdbxpress;FireDAC;xmlrtl;ibxpress;dsnap;FireDACDb2Driver;DBXOracleDriver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;emshosting;FireDACCommonDriver;IndyIPClient;bindcompvclwinx;emsedge;bindcompfmx;inetdb;ibmonitor;FireDACASADriver;vclactnband;fmxFireDAC;FireDACInfxDriver;DBXMySQLDriver;VclSmp;DataSnapCommon;fmxase;DBXOdbcDriver;dbrtl;FireDACOracleDriver;FireDACMSAccDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;FireDACTDataDriver;vcldb;bindcomp;IndyCore;RESTBackendComponents;FireDACADSDriver;RESTComponents;IndyIPServer;vcl;dsnapxml;adortl;dsnapcon;DataSnapClient;DataSnapProviderClient;DBXDb2Driver;emsclientfiredac;FireDACPgDriver;FireDACDSDriver;tethering;bindcompvcl;CloudService;DBXSybaseASADriver;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1029 + $(BDS)\bin\default_app.manifest + true + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + true + PerMonitorV2 + + + PerMonitorV2 + true + 1029 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + 1029 + FileVersion=1.0.0.0 + + + PerMonitorV2 + true + 3 + 2022 + 1016 + CompanyName=HD Consulting Strakonice;FileDescription=HDC DZ API server konfigurator;FileVersion=3.0.2022.1016;InternalName=;LegalCopyright=(c)2022 Tomas Buzin;LegalTrademarks=;OriginalFilename=hdcDZApiCfg.exe;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE11.2 + hdcDZApiCfg_Icon1.ico + + + PerMonitorV2 + true + 3 + 2024 + 704 + CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator API konfigurator;FileVersion=3.0.2024.704;InternalName=;LegalCopyright=(c) 2022-2024 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=hdcDZApiCfg.exe;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.1;LastCompiledTime=2025.01.13 12:16:02 + ..\api.png + ..\api.png + requireAdministrator + + + + MainSource + + +
frmMain
+ dfm +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + hdcDZApiCfg.dpr + + + DMVCFramework - CopyRight (2010-2023) Daniele Teti and the DMVCFramework Team + Ethea SVGIconImageList VCL components + TurboPack Essentials Delphi Runtime package + Png Components for Delphi + TurboPack LockBox 3 Delphi runtime package + Overbyte ICS VCL Run-Time Package for Delphi 12 + Embarcadero Standard Components + TurboPack Orpheus Delphi datataware designtime package + TurboPack LockBox 3 VCL designtime package + TurboPack LockBox Delphi designtime package + Overbyte ICS VCL Design-Time Package for Delphi 12 + Overbyte ICS FMX Design-Time Package for Delphi 12 + Overbyte ICS Common Design-Time Package for Delphi 12 + Ethea IconFontsImageList VCL components + Ethea IconFontsImageList FMX components + Ethea SVGIconImageList FMX components + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + Devart Universal Data Access Components + Devart Universal Data Access FMX Components + + + + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/cfgGUI/hdcDZApiCfg.dpr b/cfgGUI/hdcDZApiCfg.dpr new file mode 100644 index 0000000..4330e8d --- /dev/null +++ b/cfgGUI/hdcDZApiCfg.dpr @@ -0,0 +1,14 @@ +program hdcDZApiCfg; + +uses + Vcl.Forms, + uMain in 'uMain.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/cfgGUI/hdcDZApiCfg.res b/cfgGUI/hdcDZApiCfg.res new file mode 100644 index 0000000..5f3cc75 Binary files /dev/null and b/cfgGUI/hdcDZApiCfg.res differ diff --git a/cfgGUI/hdcDZApiCfg_Icon1.ico b/cfgGUI/hdcDZApiCfg_Icon1.ico new file mode 100644 index 0000000..9c766fd Binary files /dev/null and b/cfgGUI/hdcDZApiCfg_Icon1.ico differ diff --git a/cfgGUI/uMain.dfm b/cfgGUI/uMain.dfm new file mode 100644 index 0000000..79ce33f --- /dev/null +++ b/cfgGUI/uMain.dfm @@ -0,0 +1,565 @@ +object frmMain: TfrmMain + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = ' HDC DataZone API konfig' + ClientHeight = 541 + ClientWidth = 528 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poOwnerFormCenter + OnCreate = FormCreate + OnShow = FormShow + TextHeight = 15 + object bntSave: TButton + Left = 194 + Top = 472 + Width = 120 + Height = 28 + Caption = 'Ulo'#382'it a ukon'#269'it' + TabOrder = 2 + OnClick = bntSaveClick + end + object gbAPI: TGroupBox + Left = 14 + Top = 12 + Width = 503 + Height = 113 + Caption = ' HDC API service' + TabOrder = 0 + object Label2: TLabel + Left = 25 + Top = 53 + Width = 48 + Height = 15 + Caption = 'Certifk'#225't:' + end + object Label3: TLabel + Left = 9 + Top = 81 + Width = 64 + Height = 15 + Caption = 'Priv'#225'tn'#237' kl'#237#269':' + end + object edtAPIport: TLabeledEdit + Left = 83 + Top = 22 + Width = 55 + Height = 23 + Alignment = taCenter + EditLabel.Width = 69 + EditLabel.Height = 23 + EditLabel.Caption = 'HTTP(s) port:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 5 + NumbersOnly = True + TabOrder = 0 + Text = '8080' + OnExit = edtAPIportExit + end + object cbxEncConn: TCheckBox + Left = 237 + Top = 25 + Width = 136 + Height = 17 + Caption = #352'ifrov'#225'n'#237' SQL spojen'#237 + TabOrder = 5 + Visible = False + end + object cbxSSL: TCheckBox + Left = 146 + Top = 25 + Width = 41 + Height = 17 + Caption = 'SSL' + TabOrder = 1 + OnClick = cbxSSLClick + end + object edtSSLCert: TButtonedEdit + Left = 83 + Top = 50 + Width = 410 + Height = 23 + Images = imgList + RightButton.ImageIndex = 0 + RightButton.Visible = True + TabOrder = 2 + OnRightButtonClick = edtSSLCertRightButtonClick + end + object edtSSLKey: TButtonedEdit + Left = 83 + Top = 78 + Width = 410 + Height = 23 + Images = imgList + RightButton.ImageIndex = 0 + RightButton.ImageName = 'box3dots' + RightButton.Visible = True + TabOrder = 3 + OnRightButtonClick = edtSSLKeyRightButtonClick + end + object cbxJWTLogin: TCheckBox + Left = 236 + Top = 9 + Width = 122 + Height = 17 + Caption = 'JWT autentifikace' + TabOrder = 4 + end + end + object gbSQL: TGroupBox + Left = 14 + Top = 269 + Width = 503 + Height = 191 + Caption = ' MSSQL Server / Helios ' + TabOrder = 1 + object Image1: TImage + Left = 467 + Top = 128 + Width = 24 + Height = 24 + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000480000 + 0048080600000055EDB3470000000467414D410000B18F0BFC61050000000173 + 52474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048 + 59730000761C0000761C01A7C278EA00000CCC4944415478DAED9B7B9455551D + C77FE7CECC55501E8625CE8BC9CC5859689659A93DF40F2D1FBD247B47AFB130 + 4C53A9080C9188340B593DCCACB025610F2C23A2878FC97095AD6819594128AF + 3BC3E023108441EECCDCD3EF73F7BEB4EF9E73EFB9AF71C0757F6B7DC5CBD967 + 9FBDBFFBB77FAFBD09A42E452518E9011CEC52272846EA04C5489DA018A91314 + 23758262A44E508CD4098A913A4131F29C20A8ADAD853F8E545CAC98A2F893E2 + E78AFDA9544F557D1FF204414E1048220C65B6FE044D8A3D8A4F289686FAA0BB + 7BDBC14F905D65BE374E3141D1A178A1E230C578C55845A322ADD8A1D86B27BA + 4EB15DF1A44EB62F0812924A75FBFD9EA2B84BD1EA7CF2978A8B14FDD568D1B0 + 126407CFA49B15672ACE50BCC24EE428C5E8982E328ADD8AA714FF51FC5DF13B + C5DA20089E08510F91A4E256C507BC77E707C1E09C306CCC2374C4096A6D6D93 + C6C6BD3238380A025EAF78A7E274F812A3FED50A9AF5A8E21EC51D8AE72B6E17 + A3853981CCF3148F1C3436A8BDBD4532BADE6A0F20E21D8A778B3198715A528D + 3CA9D82786FC9C0C2AAE520D5B84828D3841EDEDCD4A4C4289095949BCC8C714 + 2F57248691986282077B9BE2F16AC9A99A206B630E579CA398A978B5189B3352 + B25FD1A9F8213F468C208809C38C6A4DE238FDF939C57BC4C421D54A58CDB854 + 5628DEABD8530B722A1A88D51A8C2D6A3C47CC768A9A281EA8A14857D88A5E31 + 5B62ABC54E311A8897E343532C8E28616878BBA962BC5C4DB4A76C822C39C430 + 572B3E292676F1E569C55FC4C438C7453C7FC692F263459762A378B14A6B6B8B + 0C0C84D2D414E009090B2E54BC5DD15E6478DF535C2A4EF4EC8419380ABCDF60 + B9C4954490FD1072BC62A11DAC6F84D198358A458A931597CB50B7FE88E27A4B + CEEE818146E9EDDD52CAB7F9169A3AD37E7B94D78C50F902C5DF3C722094C53C + 55F11BC5B7A44CE31D4B90430EB1CC4D8A5746342390FB86C51BC5046EBE4DFA + AD64DDEF610F87E1FEB2B7801DC7D18A95629C812B73D58BCE0BC320A45FDBB6 + C112D269DB642C49572AD6959A821425C8E439811AE4F06CFBB113229AFD4331 + 4B07B74A07C99622493CD16B431A80FAF7245417B66C29DF3ED849E32DD1BE71 + CEA37F8B090A3779DA8396AD52BCC1EBEAAF8A4F291ED4F1CAD6ADC5492A4890 + 212711A8B77AABFEFCBA98DCC99501C572C5B50CD2268C5FD3FFFFB4D7AE4B31 + 4DB1A552C369274CA4BC54F116E751BFE22AF5098BD985B994C2C9FBBE24C6CB + FAF3845416EC3E7E141B5724416D6DAD684E8E1C34E758AF094924DBE92B62B6 + 1782B7F9B518EF931396E75D8A07C89ABABBCB27A8B5B539ABC52A1F567C47F2 + EDDA1FC578D31DFE242D49CF53CC557C5C4CBCE60ACE413529D06D178685481A + 4290637320E7DB11E490697F41F17D3199B78C1A95907DFB329035D36987AB9F + D5D7D7B870F4E8818ADDAE1DCF4431D9F9A9CE23BCE134315B2EB27F67ABCD10 + 1392F876B1C792B7AA501F417E87AD765E59438BDBF4DD34718B1AB9F027FAEA + A063108F11137F4C71DA92309E2B8E6D285770F70D0DA1A63201DB84EDE27A4E + B6F787147B8BF5EFC46D18EBEBC454115CD9649FDD1D4552E075849CA658A298 + 1CC1362A7997AB92F6BDB3C444B16E627A9D6ED16B128906358495951B6CDF93 + 6DDFC73B8F0828A912DC570AF9A69F50BD5A40027DA398057565BD981C72350A + 924AFDDF70FB0411DCFD48F11AAF0334677A7FFFD85F3435ED3AD0414BCBB192 + 48641775969815CE09512D71C9FD556E2D823CE2AA4BBDC7B7DABF4B97DABFAD + 3CAA5DCD26D4389D895E13BCF1FB156BF991EB3770068341FBA69832852BACD6 + 8C44A2696926331055CD437D975B4272C2F67A93625B9504B15084082F701E6D + B5DF5A5B492C856BD790E47DFA73B19DB32B5D62B6EDD60304394115EEFAF392 + BFCF09CFD58DCA2D8A4C014F11156FE0CDA809555434B7FDB25D7104173B8F30 + 90D72493E1FCFEFE40B76EC57D3347BC2261899F2EB1D8A4514F30F61C414C06 + A3EC56E548266F507C510AA8B27D97A00D03ED46B7DF5575EEA48056AE6B9F34 + A94D8D32416FD68B12F7B8892A25D7F315DDD524A38EE61330CE977CDBC9C7C9 + 18700C69087A8998D2E5C95E3F0C8E7DBEABD0609CE4F56EEF7DC283E95568CF + 383BA6739D4704A6578889BFAACED69D5A160AC02E71EB587D8A2B1B1B839B21 + 888110CCB92E9F709CBACA86125C68A406E96EE8A4CB722642D9363415A14E4B + 841B14DE2BA69CB1A356A50C3BFEB1F65B7ED11F5B371582A8EB4E701E50E365 + DFAF884BE88AD8207EB36D9F296732B63F4E4070EBA778636202CB0DE9959F52 + 14F8E68BED985FE43C62A96643D043FA3F27790FB03D449EE9380D520E9BD4DE + F85E6C83182FD653BA1B6E966472BCA4D3BB0819B00BAE46FF4C8C77E9AB95F6 + 38E4207835CCC218E7318BD209411843DD12D9E3939CB0072FD7C9636C0B6E93 + 969616316150D6FB2D701E5134A3C8D5554E9CA2F25231E58C0EE7D17FC5E45B + AB6B4B0E8A9A5D031672890C2DC6FD54718912D4AAC629A4887585D72025C615 + DE532CD12C12491338CECE76143331C7AB10144EF71EAB4709D5880603B5B33D + A45438AB8022DC6D62AA96AE50F843ABD6E7DC3CFFC1589FE1357CC836FC57A1 + BD5F2417A37A88177AB44482B061774A7EF0C601216E7D5D8D0D3342EAB2444C + 21D01526C976BE171203E70506B854F2CB15C81FC468D2A642B1502291E16C0C + 8D99E53D9EA721CD5CDD86614CA870841DEC45CE2396784E1024167082526382 + 3AC4A42B677B8FA954742693E9E5E97432FBCD03A986CD532062B10C3D4560FB + 5CA2E82D1230A23D788266E7D1E3623C62972968A5F2DE1B33A645C69BD014F7 + 8DAABBB566D4FC8242DFAC821C4E61A9719DEF3DC6EE121C926E65F27231E765 + 2E02103851E87663103C1B9EE432C5F6E89423D0742524099CE17D98A2D634C5 + C602A9CA51B6EFB39C47048504A9B7547B7DC5FBD62431318F4F0E078ED86176 + 415E7A14447482ABFBAAE2A332F45C8B89705AD1D3DFDF24DBB76FF6DF3DC1B6 + F1CFCA483809EBB3468C0198B3FC906A2179CF4DDE82FC5E4CD25C7550E89810 + C6C6EE38C76BC262E0E2D19EBE82F520AFC3F1B6333FBA4456D9C96E74BD9B17 + 53501A75B7291AD8A598A936690DE700A68A9AB505BF92FC22FF1E4BCECA5A90 + 630F1DD8FE24DCA7794DC8376F16633B77C756143D928EB1244D8D68B7DA9244 + F2285EF12C693F08FC7331C2775479592613EC4C24C20576E55CA94950688358 + F861EB123EBC2C829C1F882913EF2CB926ED91445189920086D63F28E464E0B3 + DA85067661C62389DA2FFB9998C6BFCCC049C483624E14700AEEADB0C7C40485 + 7FC689A552BD1593631707334146D0EC35A1968E319EA778AAEC530DEF4344D8 + ACF407C568872BE4719430F10ABB3D92B06568C76552FAC5861B75C567EACA67 + 2AAD04B075F57D4827F0ED8CF836352E34EACB1253CF8E25C899EC91966D0CAA + 7F7C824670E270ADEEF587392D728AF9AC225AC229487BCCA7C8DF3800DC5045 + 99046D25D8457B5F1B313F1694C220F6A8A4726D3967F310C38AA0B2474734DB + 2C66659688AD21193B1072C4869164AF93F745DDD4C81E1169BB8514CBCA71EB + 9326998B0E8944C036425B29BE4F8868CA027C464CB5B3640D2DF97687539A25 + 7D200C981CD18CBD4DE48DDDC2C6EC77B4893CED744BF099DE7BD8242E25941C + 1476744C94C1C16C14423D87089CB8E924191A9AE43CE8D5419059138689B2A2 + F2B2AFBFA4D383924C369C6827CAA492114D7789B9AC70BB1DDCD3F6EFD1BC3B + 3D822015CDBCAD945A0F67655410D4CED01731CD3431DBEAF088E69CAE9052B0 + A0BD38AE546A7B3953AEFC869918238C3A133816B22FD454EE1773A1815BA9E7 + D9C1BA9E8DB88A1B6A71A55D845484800FD74DF8C14D93A805228FE3186781FD + 76C577A52BBEA3680FE3F4FD805A3446F8CD52F8466BEE3619CFDD6CFDC0AD30 + 6C4F4F4FAF4B48839D3CED39AFE3D899EDCDF7D09E429744A91F91D72D6A6A92 + 543A5DD99D80AA09423090E600226B78193CC5EF5749E917399788F92703AEAD + 624CDCAFC6FB758889C570DBA3A4F8CD59B495C303C28E071435A91FD5E49EB4 + 73479A98E9423B398AF8C52E8E6FB36DD778F11311EF0A197ADDA69010D7508B + 426B28EC67EDDD885DE22C26CE5515DC2C0694F3F3D789495BFC6FDDA0219306 + 92412677006809C2232D93E25AC896256DC1AE919A90FAC4067D234E902B4EE0 + 461D896CDD75BFFF145372D8EC4ECABE4342B95286C632D46B7041D489D014AE + D351602AFB62E6C1441011F832C9AFBF60B5B82748502943090A755B065C22F8 + 88FD6BBC1179DF7AFB272455F52F780E2682387C240E712B851850B6DE6385AA + 93E6765B08B984E17B897A2A39873F14082263764F29B8158601BFA3D22B79CF + B60C3741FE2120B605ADDAFD6C6D916A65B809C2ED933D938371699273320C74 + CDDCF070CBB0FE8B43F226F5FA44C3D8937D9A28EEE302532DCFD6875B0EF97F + D43BDC52272846EA04C5489DA018A9131423758262A44E508CD4098A91FF01DF + 047D51236589010000002574455874646174653A63726561746500323031382D + 31322D30355431373A30303A31372B30313A3030F97D27350000002574455874 + 646174653A6D6F6469667900323031382D31322D30355431373A30303A31372B + 30313A303088209F890000004674455874736F66747761726500496D6167654D + 616769636B20362E372E382D3920323031362D30362D31362051313620687474 + 703A2F2F7777772E696D6167656D616769636B2E6F7267E6BF34B60000001874 + 4558745468756D623A3A446F63756D656E743A3A50616765730031A7FFBB2F00 + 000018744558745468756D623A3A496D6167653A3A68656967687400353132C0 + D0505100000017744558745468756D623A3A496D6167653A3A57696474680035 + 31321C7C03DC00000019744558745468756D623A3A4D696D657479706500696D + 6167652F706E673FB2564E00000017744558745468756D623A3A4D54696D6500 + 31353434303235363137856B124D00000013744558745468756D623A3A53697A + 650032352E394B42428E400E1D0000003A744558745468756D623A3A55524900 + 66696C653A2F2F2E2F75706C6F6164732F35362F4C4975646762792F31373039 + 2F6579655F3131323437302E706E6724017DAC0000000049454E44AE426082} + Stretch = True + OnMouseDown = Image1MouseDown + OnMouseUp = Image1MouseUp + end + object Label1: TLabel + Left = 43 + Top = 27 + Width = 351 + Height = 15 + Caption = + 'V'#253'b'#283'r adres'#225#345'e s konfigura'#269'n'#237'mi soubory (Licence.ini, Helios.ini' + + ')' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + end + object lblIniPath: TLabel + Left = 43 + Top = 47 + Width = 446 + Height = 15 + AutoSize = False + end + object selHeoCfg: TSpeedButton + Left = 9 + Top = 22 + Width = 28 + Height = 23 + ImageIndex = 0 + ImageName = 'box3dots' + Images = imgList + OnClick = selHeoCfgClick + end + object edtServer: TLabeledEdit + Left = 73 + Top = 70 + Width = 162 + Height = 23 + EditLabel.Width = 35 + EditLabel.Height = 23 + EditLabel.Caption = 'Server:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 50 + TabOrder = 0 + Text = '' + end + object edtPort: TLabeledEdit + Left = 73 + Top = 99 + Width = 57 + Height = 23 + Alignment = taCenter + EditLabel.Width = 25 + EditLabel.Height = 23 + EditLabel.Caption = 'Port:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 5 + NumbersOnly = True + TabOrder = 2 + Text = '' + end + object edtPwd: TLabeledEdit + Left = 346 + Top = 128 + Width = 121 + Height = 23 + EditLabel.Width = 36 + EditLabel.Height = 23 + EditLabel.Caption = 'Heslo :' + LabelPosition = lpLeft + LabelSpacing = 10 + PasswordChar = '*' + TabOrder = 1 + Text = '' + end + object edtDB: TLabeledEdit + Left = 73 + Top = 128 + Width = 144 + Height = 23 + EditLabel.Width = 51 + EditLabel.Height = 23 + EditLabel.Caption = 'Datab'#225'ze:' + LabelPosition = lpLeft + LabelSpacing = 10 + TabOrder = 3 + Text = '' + OnChange = edtDBChange + end + object edtUser: TLabeledEdit + Left = 346 + Top = 99 + Width = 121 + Height = 23 + EditLabel.Width = 68 + EditLabel.Height = 23 + EditLabel.Caption = 'U'#382'ivatel SQL:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 50 + TabOrder = 4 + Text = '' + end + object edtHeoLic: TLabeledEdit + Left = 349 + Top = 70 + Width = 118 + Height = 23 + Color = clMenu + EditLabel.Width = 88 + EditLabel.Height = 23 + EditLabel.Caption = 'Helios licence: ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 5 + Text = '' + end + object edtLicCheckURL: TLabeledEdit + Left = 88 + Top = 163 + Width = 407 + Height = 23 + EditLabel.Width = 66 + EditLabel.Height = 23 + EditLabel.Caption = 'Helios Store:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 200 + TabOrder = 6 + Text = 'https://forum.helios.eu/HeliosStoreWS/wsHeliosStore.asmx' + end + end + object btnClose: TButton + Left = 432 + Top = 472 + Width = 75 + Height = 28 + Caption = 'Konec' + TabOrder = 3 + OnClick = btnCloseClick + end + object grpDZ: TGroupBox + Left = 14 + Top = 135 + Width = 503 + Height = 123 + Caption = ' ProHolding DataZone ' + TabOrder = 4 + object Label4: TLabel + Left = 170 + Top = 63 + Width = 24 + Height = 15 + Caption = 'min.' + end + object lblDZKlic: TLabeledEdit + Left = 99 + Top = 27 + Width = 390 + Height = 23 + Color = clMenu + EditLabel.Width = 87 + EditLabel.Height = 23 + EditLabel.Caption = 'DataZone kl'#237#269': ' + LabelPosition = lpLeft + ReadOnly = True + TabOrder = 0 + Text = '' + end + object edtDZTasksDown: TLabeledEdit + Left = 135 + Top = 59 + Width = 31 + Height = 23 + Alignment = taCenter + EditLabel.Width = 116 + EditLabel.Height = 23 + EditLabel.Caption = 'Interval stahov'#225'n'#237' dat:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 3 + NumbersOnly = True + TabOrder = 1 + Text = '0' + OnExit = edtDZTasksDownExit + end + object edtDZTasksZapis: TLabeledEdit + Left = 390 + Top = 59 + Width = 31 + Height = 23 + Alignment = taCenter + EditLabel.Width = 138 + EditLabel.Height = 23 + EditLabel.Caption = 'Interval z'#225'pisu do Heliosu:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 3 + NumbersOnly = True + TabOrder = 2 + Text = '2' + OnExit = edtDZTasksDownExit + OnKeyPress = edtDZTasksZapisKeyPress + end + object edtDZTasksURL: TLabeledEdit + Left = 52 + Top = 92 + Width = 443 + Height = 23 + EditLabel.Width = 35 + EditLabel.Height = 23 + EditLabel.Caption = 'Server:' + LabelPosition = lpLeft + LabelSpacing = 10 + MaxLength = 200 + TabOrder = 3 + Text = 'http://manager.datazone.cloud/api/task/PH2' + end + object cbTypIntervalZapis: TComboBox + Left = 422 + Top = 59 + Width = 47 + Height = 23 + Style = csDropDownList + ItemIndex = 0 + TabOrder = 4 + Text = 'sek' + Items.Strings = ( + 'sek' + 'min' + 'hod') + end + end + object cbL: TCheckBox + Left = 14 + Top = 512 + Width = 176 + Height = 21 + Caption = 'KONTROLA LICENCE' + Checked = True + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'Segoe UI' + Font.Style = [fsBold] + ParentFont = False + State = cbChecked + TabOrder = 5 + Visible = False + end + object lblCompname: TLabeledEdit + Left = 339 + Top = 512 + Width = 142 + Height = 23 + EditLabel.Width = 100 + EditLabel.Height = 23 + EditLabel.Caption = 'Compname: ' + EditLabel.Font.Charset = DEFAULT_CHARSET + EditLabel.Font.Color = clWindowText + EditLabel.Font.Height = -16 + EditLabel.Font.Name = 'Segoe UI' + EditLabel.Font.Style = [fsBold] + EditLabel.ParentFont = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + LabelPosition = lpLeft + ParentFont = False + TabOrder = 6 + Text = '' + end + object imgList: TVirtualImageList + Images = < + item + CollectionIndex = 0 + CollectionName = 'box3dots' + Name = 'box3dots' + end> + ImageCollection = imgColl + Left = 468 + end + object imgColl: TImageCollection + Images = < + item + Name = 'box3dots' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200800000000561125 + 28000000097048597300000EC400000EC401952B0E1B000001A74944415478DA + 7D94A17284301086778617681D13DB39517D2750353198085445555D0D0AC50C + 02198944E0A2A3E2A2A2D199BC0112834236D91CF46887FE9BFCBBD9F96EC330 + 7340432F243DD3CB5B038CD2821505F33BFABEBC2865F04A4BF34B7AAF4A7A01 + 52BB655997B8D1D76841AE26401A173AEB8ABEAC87E51A0269EDF6DF2E3FB3F0 + B4BA3A85B4B2EB99165B05C09D026B04C6E55F8094E372B8F7B1184B3F21029B + E64332089839CAB731C58D09812F04A679F3E9E114013D4F51F3E67B437F1D80 + 3F8AC0A79A5C0C77C8C1D467006468A1A6C71410043E446C5B676D709FECE6E2 + 03016B4E6411781FACD64A695E555A0D75356855555C2B1F56BCFB57ED0125BD + 9E01A4A40054498067297DD30E859F50F4A310428A2700818010004F22F4C6BE + 201B20069224626049C2844812822D0448D1997EE80754DF1F0AD3852B9807BA + AEBBEF3E5A3C989E8567E80CEF4204C3B56D6E3AE6AF60DCB49CB721823D646E + 7898C0B86EA39AF647586B1E26E4AD6CA26A1FCD5E7BC9D603976B5E56E589F2 + EB05F2B75B9665B75BE6135618B1CEAE590EF7BF3FB97F03888F74FF1EBCD0E6 + 1BF2A67C0C7E872E530000000049454E44AE426082} + end> + end> + Left = 400 + end +end diff --git a/cfgGUI/uMain.pas b/cfgGUI/uMain.pas new file mode 100644 index 0000000..c1d6ce2 --- /dev/null +++ b/cfgGUI/uMain.pas @@ -0,0 +1,737 @@ +unit uMain; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls, System.IOUtils, + System.StrUtils, Vcl.Imaging.pngimage, System.IniFiles, Winapi.ShlObj, + Xml.XmlIntf, Xml.XMLDoc, + flcCipher, System.ImageList, Vcl.ImgList, Vcl.VirtualImageList, + Vcl.BaseImageCollection, Vcl.ImageCollection, Vcl.Buttons; + +const + eKey2 = '9!81Aq#cU:MCntb6'; + sName = 'DBName'; + sSSLKey = 'SSLKeyFile'; + eKey1 = 'qe*cX!8k@4WA!gQ5'; + sEncConn = 'DBEncConn'; + sDZTasksIntZapisHeO = 'DZTasksIntervalZapisHeO'; + sServer = 'DBServer'; + pwd1 = 'L~4'; + sPortS = 'DBPort'; + sSSL = 'SSL'; + pwd2 = 'Qe!r'; + sHeliosStoreURL = 'HeliosStoreURL'; + sUser = 'DBUser'; + iVect2 = '3r!9q$'; + sDZTaskIntZapisTypCas = 'DZTaskZapisIntervalTypCas'; + sLCh = 'licCheck'; + sPwd = 'DBPwd'; + sDzKlic = 'DataZoneKey'; + sDZTasksIntDown = 'DZTasksIntervalDownload'; + sSSLCert = 'SSLCertFile'; + sHeoPath = 'HEOPath'; + iVect1 = 's4W*ERr9'; + sCfgComp = 'confComp'; + sLoginMod = 'JWTAuthMod'; + sDZTasksDownURL = 'DZTasksDownloadURL'; + sHeoLic = 'HEOLicence'; + sPort = 'APIPort'; + cfgFName = 'hdcDZAPIcfg.dat'; + + + +type + TfrmMain = class(TForm) + edtServer: TLabeledEdit; + edtPwd: TLabeledEdit; + edtPort: TLabeledEdit; + edtDB: TLabeledEdit; + edtUser: TLabeledEdit; + edtAPIport: TLabeledEdit; + bntSave: TButton; + gbAPI: TGroupBox; + gbSQL: TGroupBox; + btnClose: TButton; + Image1: TImage; + Label1: TLabel; + lblIniPath: TLabel; + cbxEncConn: TCheckBox; + cbxSSL: TCheckBox; + edtSSLCert: TButtonedEdit; + edtSSLKey: TButtonedEdit; + cbxJWTLogin: TCheckBox; + imgList: TVirtualImageList; + imgColl: TImageCollection; + Label2: TLabel; + Label3: TLabel; + selHeoCfg: TSpeedButton; + lblDZKlic: TLabeledEdit; + edtDZTasksDown: TLabeledEdit; + Label4: TLabel; + edtHeoLic: TLabeledEdit; + grpDZ: TGroupBox; + edtDZTasksZapis: TLabeledEdit; + edtDZTasksURL: TLabeledEdit; + edtLicCheckURL: TLabeledEdit; + cbL: TCheckBox; + lblCompname: TLabeledEdit; + cbTypIntervalZapis: TComboBox; + procedure FormCreate(Sender: TObject); + procedure btnCloseClick(Sender: TObject); + procedure bntSaveClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure cbxSSLClick(Sender: TObject); + function Encrypt(const AStr: string): RawByteString; + function Decrypt(const AStr: string): RawByteString; + function ReturnEncrypted(const AStr: string): string; + function ReturnDecrypted(const AStr: string): string; + procedure edtSSLKeyRightButtonClick(Sender: TObject); + procedure edtSSLCertRightButtonClick(Sender: TObject); + procedure selHeoCfgClick(Sender: TObject); + procedure edtDBChange(Sender: TObject); + procedure edtDZTasksDownExit(Sender: TObject); + procedure edtAPIportExit(Sender: TObject); + procedure edtDZTasksZapisKeyPress(Sender: TObject; var Key: Char); + public + end; + +var + frmMain: TfrmMain; + s, fleName: string; + cfgXML: IXMLDocument; + n1: IXMLNode; + + dbPwd, dbUsr, apiLic, iniFPath: string; + intDown: integer; + sTemp: RawByteString; + +implementation +{$R *.dfm} + +uses + System.Hash; + + + + function IsEmptyOrNull(const Value: Variant): Boolean; + begin + result := VarIsClear(Value) or VarIsEmpty(Value) or VarIsNull(Value) or (VarCompareValue(Value, Unassigned) = vrEqual); + if (not result) and VarIsStr(Value) then + result:= Value = ''; + end; + + + + function VyberAdresar(var Foldr: string; Title: string): Boolean; + var BrowseInfo: TBrowseInfo; + ItemIDList: PItemIDList; + DisplayName: array[0..MAX_PATH] of Char; + begin + Result := False; + FillChar(BrowseInfo, SizeOf(BrowseInfo), #0); + with BrowseInfo do + begin + hwndOwner := Application.Handle; + pszDisplayName := @DisplayName[0]; + lpszTitle := PChar(Title); + ulFlags := BIF_RETURNONLYFSDIRS; + end; + ItemIDList := SHBrowseForFolder(BrowseInfo); + if Assigned(ItemIDList) then + if SHGetPathFromIDList(ItemIDList, DisplayName) then + begin + Foldr := DisplayName; + Result := True; + end; + end; + + + + + function StringToMemoryStream(const AString: string): TMemoryStream; + var M: TMemoryStream; + begin + M:= TMemoryStream.Create; + try + M.Size:= (Length(AString)*SizeOf(Char)) div 2; + if (M.Size>0) then + begin + HexToBin(PChar(AString), M.Memory, M.Size); + M.Position:= 0; + end; + finally + result:= M; + end; + end; + + + + + function SimpleXOR(Buffer: String; Key: integer): String; + var i, c, x: integer; + begin + for i:= 1 to Length(Buffer) do + begin + c:= integer(Buffer[i]); + x:= c xor Key; + result:= result + Char(x); + end; + end; + + + + + function TfrmMain.Encrypt(const AStr: string): RawByteString; + begin + result:= flcCipher.Encrypt(ctRC4, cmECB, cpNone, 256, RawByteString(eKey1+eKey2), RawByteString(AStr), iVect1+iVect2); + end; + + + + + function TfrmMain.Decrypt(const AStr: string): RawByteString; + begin + result:= flcCipher.Decrypt(ctRC4, cmECB, cpNone, 256, RawByteString(eKey1+eKey2), RawByteString(AStr), iVect1+iVect2); + end; + + + + + procedure TfrmMain.edtAPIportExit(Sender: TObject); + var i: integer; + begin + i:= -1; + if not(TryStrToInt(edtAPIport.Text, i)) then + i:= -1; + + if (i<1) or (i>65535) then + begin + ShowMessage('Port nesmí být musí být v rozmezí 1-65535'); + edtAPIport.Text:= '8080'; + if (edtAPIport.CanFocus) then + edtAPIport.SetFocus; + end; + end; + + + + + procedure TfrmMain.edtDBChange(Sender: TObject); + var dbLic: string; + begin + dbLic:= edtHeoLic.Text + edtDB.Text; + + dbLic:= SimpleXOR(dbLic, 57846218); + lblDZKlic.Text:= THashMD5.GetHashString(dbLic).ToUpper; + end; + + + + + procedure TfrmMain.edtDZTasksDownExit(Sender: TObject); + var i: integer; + begin + i:= -1; + if not(TryStrToInt(edtDZTasksDown.Text, i)) then + i:= -1; + + if (i<0) then + begin + ShowMessage('Interval stahování nesmí být záporný.'); + edtDZTasksDown.Text:= '15'; + if (edtDZTasksDown.CanFocus) then + edtDZTasksDown.SetFocus; + end; + end; + + + + + procedure TfrmMain.edtDZTasksZapisKeyPress(Sender: TObject; var Key: Char); + begin + if (Key='.') or (Key=',') then + Key:= #0; + end; + + + + + procedure TfrmMain.edtSSLCertRightButtonClick(Sender: TObject); + var fod: TFileOpenDialog; + fn, initF: string; + begin + fn:= ''; + fod:= TFileOpenDialog.Create(nil); + try + initF:= GetEnvironmentVariable('USERPROFILE') + System.SysUtils.PathDelim + 'Desktop'; + if (edtSSLCert.Text<>'') then + if (ExtractFilePath(edtSSLCert.Text)<>'') then + if (DirectoryExists(ExtractFilePath(edtSSLCert.Text))) then + initF:= ExtractFilePath(edtSSLCert.Text); + fod.DefaultFolder:= initF; + fod.Options:= [fdoShareAware, fdoPathMustExist, fdoFileMustExist]; + + fod.FileTypes.Clear; + with fod.FileTypes.Add do + begin + DisplayName:= 'Soubor certifikátu'; + FileMask:= 'cacert.pem'; + end; + + if (fod.Execute) then + fn:= fod.FileName; + finally + fod.Free; + end; + + if (fn<>'') then + if (FileExists(fn)) then + edtSSLCert.Text:= fn; + end; + + + + + procedure TfrmMain.edtSSLKeyRightButtonClick(Sender: TObject); + var fod: TFileOpenDialog; + fn, initF: string; + begin + fn:= ''; + fod:= TFileOpenDialog.Create(nil); + try + initF:= GetEnvironmentVariable('USERPROFILE') + System.SysUtils.PathDelim + 'Desktop'; + if (edtSSLKey.Text<>'') then + if (ExtractFilePath(edtSSLKey.Text)<>'') then + if (DirectoryExists(ExtractFilePath(edtSSLKey.Text))) then + initF:= ExtractFilePath(edtSSLKey.Text); + fod.DefaultFolder:= initF; + fod.Options:= [fdoShareAware, fdoPathMustExist, fdoFileMustExist]; + + fod.FileTypes.Clear; + with fod.FileTypes.Add do + begin + DisplayName:= 'Soubor privátního klíče'; + FileMask:= 'privkey.pem'; + end; + + if (fod.Execute) then + fn:= fod.FileName; + finally + fod.Free; + end; + + if (fn<>'') then + if (FileExists(fn)) then + edtSSLKey.Text:= fn; + end; + + + + + function TfrmMain.ReturnEncrypted(const AStr: string): string; + var i: integer; + sTemp: RawByteString; + begin + sTemp:= Encrypt(AStr); + result:= ''; + for i:=1 to Length(sTemp) do + result:= result + IntToHex(Byte(sTemp[i])); + end; + + + + function TfrmMain.ReturnDecrypted(const AStr: string): string; + var i: integer; + sText: string; + sTemp: RawByteString; + begin + result:= ''; + sTemp:= ''; + sText:= AStr; + for i:=0 to (Length(sText) div 2)-1 do + sTemp:= sTemp + AnsiChar(StrToInt('$' + Copy(sText, (i*2)+1, 2))); + if (sTemp<>'') then + result:= Decrypt(sTemp); + end; + + + + + procedure TfrmMain.FormCreate (Sender: TObject); + var i: integer; + s, obsahXML: string; + t1: integer; + fs: TFileStream; + ms: TMemoryStream; + attribs: IXMLNodeList; + begin + fleName:= ExtractFileDir(Application.ExeName) + '\' + cfgFName; + cfgXML:= TXMLDocument.Create(nil); + + cbL.Visible:= (FileExists('lic')); + lblCompname.Visible:= cbL.Visible; + if (cbL.Visible) then + self.Height:= self.Height + 30; + + cbL.Checked:= true; + lblCompname.Text:= GetEnvironmentVariable('COMPUTERNAME'); + + if (FileExists(fleName)) then + try + s:= ''; + + try + fs:= TFileStream.Create(fleName, fmOpenRead); + if (fs.Size>0) then + begin + SetLength(s, (fs.Size div SizeOf(Char))); + fs.Read(s[Low(s)], fs.Size); + end; + s:= ReplaceStr(s, #0, ''); + finally + fs.Free; + end; + + if (LeftStr(s, 2)='7D') then + s:= ReturnDecrypted(s); + s:= s.Replace(#13#10,''); + + if (LeftStr(s, 2)='nil) then + begin + n1:= cfgXML.DocumentElement; + if (n1.NodeName='config') then + begin + attribs:= n1.AttributeNodes; + + i:= attribs.IndexOf(sPort); + if (i>-1) then + edtAPIport.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf('IniPath'); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + iniFPath:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sCfgComp); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + lblCompname.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sServer); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtServer.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sName); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtDB.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sPortS); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtPort.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sUser); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + dbUsr:= attribs.Get(i).NodeValue; + edtUser.Text:= ReturnDecrypted(dbUsr); + end; + + i:= attribs.IndexOf(sPwd); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + dbPwd:= attribs.Get(i).NodeValue; + edtPwd.Text:= ReturnDecrypted(dbPwd); + end; + + i:= attribs.IndexOf(sEncConn); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + if (attribs.Get(i).NodeValue='1') then + cbxEncConn.Checked:= true; + + + i:= attribs.IndexOf(sSSL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + cbxSSL.Checked:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sLoginMod); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + cbxJWTLogin.Checked:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sLCh); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + cbL.Checked:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sSSLCert); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtSSLCert.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sSSLKey); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtSSLKey.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDzKlic); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + lblDZKlic.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTasksIntDown); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtDZTasksDown.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTasksDownURL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtDZTasksURL.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTasksIntZapisHeO); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtDZTasksZapis.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTaskIntZapisTypCas); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + t1:= attribs.Get(i).NodeValue; + if (t1>-1) and (t1<3) then + cbTypIntervalZapis.ItemIndex:= t1; + end; + + + i:= attribs.IndexOf(sHeoLic); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtHeoLic.Text:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sHeliosStoreURL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + edtLicCheckURL.Text:= attribs.Get(i).NodeValue; + + end; + end; + end; + + lblIniPath.Caption:= iniFPath; + except + end + else + try + cfgXML.Active:= true; + cfgXML.Options:= [doNodeAutoIndent]; + cfgXML.NodeIndentStr:= ' '; + cfgXML.Version:= '1.0'; + cfgXML.AddChild('config'); + n1:= cfgXML.DocumentElement; + except + end; + +// TODO: JWT autentifikaci + cbxJWTLogin.Checked:= false; + cbxJWTLogin.Visible:= false; + + end; + + + + procedure TfrmMain.FormShow (Sender: TObject); + begin + iniFPath:= ''; + if (edtAPIport.CanFocus) then + edtAPIport.SetFocus; + end; + + + + + procedure TfrmMain.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + edtPwd.PasswordChar:= #0; + end; + + + + + procedure TfrmMain.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + begin + edtPwd.PasswordChar:= '*'; + end; + + + + + procedure TfrmMain.cbxSSLClick(Sender: TObject); + begin + edtSSLCert.Enabled:= (cbxSSL.Checked); + edtSSLKey.Enabled:= (cbxSSL.Checked); + end; + + + + procedure TfrmMain.selHeoCfgClick(Sender: TObject); + var ini: TIniFile; + srv, dbLic, selDirTit, fld, fn, DZLic: string; + i: integer; + md5hex: THashMD5; + begin + fn:= ''; + selDirTit:= 'Vyberte adresář Heliosu s konfiguračními soubory (Helios.ini/Licence.ini)'; + if (VyberAdresar(fld, selDirTit)) then + begin + fn:= fld + '\Helios.ini'; + if (FileExists(fn)) then + begin + iniFPath:= ExtractFileDir(fn); + lblIniPath.Caption:= iniFPath; + ini:= TIniFile.Create(fn); + srv:= ini.ReadString('SQLServer', 'Server', ''); + if (srv.Substring(0, 4).ToLower='tcp:') then + srv:= srv.Substring(4, 255); + i:= AnsiPos(srv, ','); + if (i>0) then + begin + edtServer.Text:= LeftStr(srv, i); + edtPort.Text:= MidStr(srv, i, 255); + end + else + edtServer.Text:= srv; + edtDB.Text:= ini.ReadString('SQLServer', 'SystemDB', ''); + if (edtUser.CanFocus) then + edtUser.SetFocus; + ini.Free; + end; + + fn:= fld + '\Licence.ini'; + if (FileExists(fn)) then + begin + ini:= TIniFile.Create(fn); + edtHeoLic.Text:= ini.ReadString('HELIOS', 'Licence', ''); + dbLic:= edtHeoLic.Text + edtDB.Text; + + dbLic:= SimpleXOR(dbLic, 57846218); + lblDZKlic.Text:= THashMD5.GetHashString(dbLic).ToUpper; + + ini.Free; + end; + + end; + + end; + + + + + procedure TfrmMain.bntSaveClick(Sender: TObject); + var s: AnsiString; + sx: string; + fs: TFileStream; + begin + + edtPort.Text:= Trim(edtPort.Text); + if (edtPort.Text='') then + edtPort.Text:= '1433'; + + edtSSLCert.Text:= Trim(edtSSLCert.Text); + edtSSLKey.Text:= Trim(edtSSLKey.Text); + + if (cbxSSL.Checked) and ((edtSSLCert.Text='') or (edtSSLKey.Text='')) then + begin + ShowMessage('Mód SSL - je nutno zadat soubory certifikátu a klíče !!'); + Exit; + end; + + dbPwd:= ReturnEncrypted(edtPwd.Text); + dbUsr:= ReturnEncrypted(edtUser.Text); + + if (lblIniPath.Caption<>'') then + iniFPath:= lblIniPath.Caption; + + if (Assigned(n1)) then + begin + n1.SetAttributeNS(sCfgComp, '', Trim(lblCompname.Text)); + n1.SetAttributeNS(sPort, '', Trim(edtAPIport.Text).ToInteger); + n1.SetAttributeNS(sLoginMod, '', IfThen(cbxJWTLogin.Checked, '1', '0')); + n1.SetAttributeNS(sSSL, '', IfThen(cbxSSL.Checked, '1', '0')); + n1.SetAttributeNS(sEncConn, '', IfThen(cbxEncConn.Checked, '1', '0')); + n1.SetAttributeNS(sSSLCert, '', IfThen(cbxSSL.Checked, Trim(edtSSLCert.Text), '')); + n1.SetAttributeNS(sSSLKey, '', IfThen(cbxSSL.Checked, Trim(edtSSLKey.Text), '')); + n1.SetAttributeNS(sServer, '', Trim(edtServer.Text)); + n1.SetAttributeNS(sPortS, '', Trim(edtPort.Text).ToInteger); + n1.SetAttributeNS(sName, '', Trim(edtDB.Text)); + n1.SetAttributeNS(sUser, '', dbUsr); + n1.SetAttributeNS(sPwd, '', dbPwd); + n1.SetAttributeNS(sDzKlic, '', Trim(lblDZKlic.Text)); + n1.SetAttributeNS(sDZTasksDownURL, '', Trim(edtDZTasksURL.Text)); + n1.SetAttributeNS(sDZTasksIntDown, '', Trim(edtDZTasksDown.Text)); + n1.SetAttributeNS(sDZTasksIntZapisHeO, '', Trim(edtDZTasksZapis.Text)); + n1.SetAttributeNS(sDZTaskIntZapisTypCas, '', cbTypIntervalZapis.ItemIndex.ToString); + n1.SetAttributeNS(sLCh, '', IfThen(cbL.Checked, '1', '0')); + n1.SetAttributeNS(sHeoLic, '', edtHeoLic.Text); + n1.SetAttributeNS(sHeliosStoreURL, '', Trim(edtLicCheckURL.Text)); + n1.SetAttributeNS('IniPath', '', iniFPath); + s:= cfgXML.XML.Text; + sx:= ReturnEncrypted(s); + try + fs:= TFileStream.Create(fleName, fmCreate or fmOpenWrite); + fs.Write(PChar(sx)^, Length(sx)*SizeOf(Char)); + finally + fs.Free; + end; + end; + + Close; + end; + + + + + procedure TfrmMain.btnCloseClick(Sender: TObject); + begin + Close; + end; + + + + + +end. diff --git a/compileZdroje.cmd b/compileZdroje.cmd new file mode 100644 index 0000000..7029796 --- /dev/null +++ b/compileZdroje.cmd @@ -0,0 +1,9 @@ +@echo off +rem copy NUL sqlZdroje.res +"C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" sqlZdroje.rc +"C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\Rootvin\zdroje.rc +rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\INCOSystems\zdroje.rc +rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\Gornicky\zdroje.rc +rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\EMPolar\zdroje.rc + + diff --git a/dorm.conf b/dorm.conf new file mode 100644 index 0000000..86c08dd --- /dev/null +++ b/dorm.conf @@ -0,0 +1,28 @@ +{ + "persistence": { + "development": { + "database_adapter": "dorm.adapter.FireDAC.SQLServer.TFireDACSQLServerPersistStrategy", + "database_connection_string": "DriverID=MSSQL;Server=.\\SQLEXPRESS;Database=DORM_DEV;User_Name=sa;Password=marmotta;LoginTimeout=10", + "keys_generator":"", + "key_type": "integer", + "null_key_value": "0" + }, + "test": { + "database_adapter": "dorm.adapter.FireDAC.SQLServer.TFireDACSQLServerPersistStrategy", + "database_connection_string": "DriverID=MSSQL;Server=.\\SQLEXPRESS;Database=DORM_TEST;User_Name=sa;Password=marmotta;LoginTimeout=10", + "keys_generator":"", + "key_type": "integer", + "null_key_value": "0" + }, + "release": { + "database_adapter": "dorm.adapter.FireDAC.SQLServer.TFireDACSQLServerPersistStrategy", + "database_connection_string": "DriverID=MSSQL;Server=.\\SQLEXPRESS;Database=DORM_REL;User_Name=sa;Password=marmotta;LoginTimeout=10", + "keys_generator":"", + "key_type": "integer", + "null_key_value": "0" + } + }, + "config": { + "logger_class_name": "dorm.loggers.FileLog.TdormFileLog" + } +} diff --git a/globalConsts.inc b/globalConsts.inc new file mode 100644 index 0000000..747075e --- /dev/null +++ b/globalConsts.inc @@ -0,0 +1,3 @@ +sqlPoolName = 'hdcdzapiConn'; +CRLF = #13#10; +fldsExclude = 'Autor,Zmenil,DatPorizeni,DatZmeny'; diff --git a/globalDefs.inc b/globalDefs.inc new file mode 100644 index 0000000..39a38c3 --- /dev/null +++ b/globalDefs.inc @@ -0,0 +1,43 @@ +{$DEFINE NORENDER400} + +{$DEFINE SWAGGER_ON} +{$DEFINE SWAGGER} +{$DEFINE SEC_ACCESS} + + +//{$DEFINE POST_PUT} +//{$DEFINE OMNIThreadLib} + + +//{$DEFINE CUSTOM_CTRL} +{$DEFINE CUSTOM_CTRL_GatemaSD} +//{$DEFINE CUSTOM_CTRL_Kdynium} +//{$DEFINE CUSTOM_CTRL_Koramex} +{$DEFINE CUSTOM_CTRL_Rootvin} +//{$DEFINE CUSTOM_CTRL_INCOSystems} +//{$DEFINE CUSTOM_CTRL_Gornicky} +//{$DEFINE CUSTOM_CTRL_EMPolar} + + + + +{$IFDEF CUSTOM_CTRL_Kdynium} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Koramex} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} + + diff --git a/hdcDZApi.dpr b/hdcDZApi.dpr new file mode 100644 index 0000000..7f19497 --- /dev/null +++ b/hdcDZApi.dpr @@ -0,0 +1,215 @@ +program hdcDZApi; + +{$IFDEF DEBUG} + {$APPTYPE CONSOLE} +{$ENDIF} + +{$I GlobalDefs.inc} + +uses + MSHeap, + Vcl.SvcMgr, + System.SysUtils, + Winapi.Windows, + + MVCFramework.Middleware.Swagger, + MVCFramework.Swagger.Commons, + uWinService in 'uWinService.pas' {HDCApiService: TService}, + uWebMod in 'uWebMod.pas' {WebModule1: TWebModule}, + uDataMod in 'uDataMod.pas' {datMod: TDataModule}, + + helTabsBIDs, + + uCommons in 'uCommons.pas', + uCtrlBase in 'uCtrlBase.pas', + uCtrlZamestnanci in 'uCtrlZamestnanci.pas', + uCtrlKmenZbozi in 'uCtrlKmenZbozi.pas', + uCtrlObehZbozi in 'uCtrlObehZbozi.pas', + uCtrlVyroba in 'uCtrlVyroba.pas', + uCtrlQMS in 'uCtrlQMS.pas', + uCtrlOrganizace in 'uCtrlOrganizace.pas', + uCtrlObecne in 'uCtrlObecne.pas', + + uHeOObj_Base in 'uHeOObj_Base.pas', + uHeoObj_Vyroba in 'uHeoObj_Vyroba.pas', + uHeoObj_QMS in 'uHeoObj_QMS.pas', + + uSvc_Base in 'uSvc_Base.pas', + uSvc_ObehZbozi in 'uSvc_ObehZbozi.pas', + uSvc_KmenZbozi in 'uSvc_KmenZbozi.pas', + uSvc_Vyroba in 'uSvc_Vyroba.pas', + uSvc_Organizace in 'uSvc_Organizace.pas', + uSvc_Zamestnanci in 'uSvc_Zamestnanci.pas', + uSvc_Obecne in 'uSvc_Obecne.pas', + uSvc_QMS in 'uSvc_QMS.pas' + +{$IFDEF CUSTOM_CTRL} + ,uHeOObj_Custom in 'uHeOObj_Custom.pas' + ,uCtrlCustom in 'uCtrlCustom.pas' + ,uSvcCustom in 'uSvcCustom.pas' +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Kdynium} + ,uHeOObj_Custom in '_custom\Kdynium\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Kdynium\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Kdynium\uSvcCustom.pas' +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_GatemaSD} + ,uHeOObj_CustomSDG in '_custom\GatemaSD\uHeOObj_CustomSDG.pas' + ,uCtrlCustomSDG in '_custom\GatemaSD\uCtrlCustomSDG.pas' + ,uSvcCustomSDG in '_custom\GatemaSD\uSvcCustomSDG.pas' +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + ,uHeOObj_Custom in '_custom\Rootvin\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Rootvin\uCtrlCustom.pas' {TRTNController: TBaseController}, + uSvcCustom in '_custom\Rootvin\uSvcCustom.pas' + {$R '_custom\Rootvin\zdroje.RES'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Koramex} + ,uHeOObj_Custom in '_custom\Koramex\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Koramex\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Koramex\uSvcCustom.pas' +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_INCOSystems} + ,uHeOObj_Custom in '_custom\INCOSystems\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\INCOSystems\uCtrlCustom.pas' + ,uSvcCustom in '_custom\INCOSystems\uSvcCustom.pas' +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + ,uHeOObj_Custom in '_custom\Gornicky\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Gornicky\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Gornicky\uSvcCustom.pas' + {$R '_custom\Gornicky\zdroje.RES'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + ,uHeOObj_Custom in '_custom\EMPolar\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\EMPolar\uCtrlCustom.pas' + ,uSvcCustom in '_custom\EMPolar\uSvcCustom.pas' + {$R '_custom\EMPolar\zdroje.RES'} +{$ENDIF} + ; + + +{$R *.RES} +{$R sqlZdroje.RES} + + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$R .\_custom\Rootvin\zdroje.RES} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_INCOSystems} + {$R .\_custom\INCOSystems\zdroje.RES} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$R .\_custom\Gornicky\zdroje.RES} +{$ENDIF} + + +procedure SpustitJakoPrg; +var Event : TInputrecord; + EventsRead : DWORD; + Done : Boolean; + begin + try + var HDCDZApiService: THDCDZApiService; + var started: boolean; + var stopped: boolean; + + Application.CreateForm (TdatMod, datMod); + // In debug mode the server acts as a console application. + // Create the TService descendant manually. + +// uWinService.UninstallMode:= true; + HDCDZApiService:= THDCDZApiService.Create (nil); + + WriteLn (HDCDZApiService.Name + ' DEBUG mode'); + + HDCDZApiService.ServiceAfterInstall (HDCDZApiService); + + // Simulate service start. + HDCDZApiService.ServiceStart (HDCDZApiService, started); + // Keep the console box running (ServerContainer1 code runs in the background) + WriteLn('Press ENTER to exit.'); + ReadLn; + WriteLn('Ukoncuji thready...'); + HDCDZApiService.ServiceStop (HDCDZApiService, stopped); + + HDCDZApiService.ServiceBeforeUninstall (HDCDZApiService); + HDCDZApiService.ServiceAfterUnInstall (HDCDZApiService); + + // On exit, destroy the service object. + if (stopped) then + FreeAndNil (HDCDZApiService); + except + on E: Exception do + begin + Writeln(E.ClassName, ': ', E.Message); +{$IFDEF DEBUG} + Done:= False; + repeat + ReadConsoleInput(GetStdhandle(STD_INPUT_HANDLE), Event, 1, EventsRead); + if Event.Eventtype = key_Event then + begin + if Event.Event.KeyEvent.bKeyDown then + begin + Done:= (Event.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE); +{ + if (not Done) and (Event.Event.KeyEvent.AsciiChar <> #0) then + WriteLn('You typed: ', Event.Event.KeyEvent.AsciiChar); +} + end; + end; + until Done; +{$ENDIF} +// WriteLn('Press ENTER to exit.'); +// ReadLn; + end; + end; + end; + + + + +begin + ReportMemoryLeaksOnShutdown:= false; + +{$IFDEF DEBUG} + SpustitJakoPrg; +{$ELSE} + if (FindCmdLineSwitch('dbg', true)) then + SpustitJakoPrg + else + begin + + // Windows 2003 Server requires StartServiceCtrlDispatcher to be + // called before CoRegisterClassObject, which can be called indirectly + // by Application.Initialize. TServiceApplication.DelayInitialize allows + // Application.Initialize to be called from TService.Main (after + // StartServiceCtrlDispatcher has been called). + // + // Delayed initialization of the Application object may affect + // events which then occur prior to initialization, such as + // TService.OnCreate. It is only recommended if the ServiceApplication + // registers a class object with OLE and is intended for use with + // Windows 2003 Server. + // + // Application.DelayInitialize := True; + // + if not Application.DelayInitialize or Application.Installing then + Application.Initialize; + Application.CreateForm(THDCDZApiService, HDCDZApiService); + Application.CreateForm(TdatMod, datMod); + Application.Run; + end; + +{$ENDIF} + +end. diff --git a/hdcDZApi.dproj b/hdcDZApi.dproj new file mode 100644 index 0000000..b2f47fd --- /dev/null +++ b/hdcDZApi.dproj @@ -0,0 +1,1287 @@ + + + {45323E7F-B291-46C5-9D32-F467DD8D8E5D} + 20.3 + VCL + hdcDZApi.dpr + True + Release + Win64 + 2 + Application + hdcDZApi + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + hdcDZApi + $(BDS)\bin\delphi_PROJECTICNS.icns + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + true + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDS)\bin\default_app.manifest + true + 1033 + .\bin + FireDACSqliteDriver;TsiLang_XE5r;GraphControls;DBXSqliteDriver;FireDACPgDriver;fmx;TreeViewPresenter;IndySystem;i18n;TeeDB;DTButtons;frx19;UpDownLiveBindingPackage;ITDevCon2012AdapterPackage;vclib;inetdbbde;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapServer;frxADO19;SystemSensorComponents;DataSnapProviderClient;DPFAndroidPackagesXE5;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;i18nDB;fmxase;vcl;IndyCore;IndyIPCommon;CloudService;DBXMSSQLDriver;FmxTeeUI;FireDACIBDriver;CodeSiteExpressPkg;DataSnapFireDAC;FireDACDBXDriver;inetdbxpress;frxe19;FireDACDb2Driver;adortl;CustomAdaptersMDPackage;SimpleGraphPackage;frxDB19;DataBindingsVCL;FireDACASADriver;fs19;bindcompfmx;vcldbx;FireDACODBCDriver;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DataBindings;DBXOdbcDriver;vclFireDAC;CPortLibDXE;xmlrtl;svnui;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;soaprtl;bindcompdbx;FMXTee;TeeUI;bindcompvcl;fsDB19;frxFD19;vclie;FireDACADSDriver;vcltouch;fmxinfopower;VclSmp;FireDACMSSQLDriver;FireDAC;VCLRESTComponents;Intraweb;DBXInformixDriver;DataSnapConnectors;FireDACDataSnapDriver;dsnapcon;DBXFirebirdDriver;BitEditSample;inet;SampleGenerator1Package;fmxobj;FireDACMySQLDriver;vclx;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;bdertl;VirtualTreesR;FireDACMSAccDriver;DataSnapIndy10ServerTransport;dbexpress;IndyIPClient;$(DCC_UsePackage) + CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName) + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + ..\articles_crud_server;$(DCC_UnitSearchPath) + WINDOWSSERVICE;$(DCC_Define) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + none + + + DEBUG;$(DCC_Define) + true + false + true + true + true + 1029 + FileVersion=1.0.0.0 + + + true + 1033 + false + Debug + true + + + PerMonitorV2 + true + 3 + 2024 + 306 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=3.0.2024.306;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.1;LastCompiledTime=2025.03.27 17:09:27 + api2-5.ico + x64 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + 1029 + FileVersion=1.0.0.0 + + + PerMonitorV2 + 700000 + true + 3 + 2025 + 521 + CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator (API);FileVersion=3.0.2025.521;InternalName=;LegalCopyright=(c) 2022-25 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;LastCompiledTime=2025.05.21 17:11:11 + api2-5.ico + 3 + 2 + true + + + + MainSource + + +
HDCApiService
+ TService +
+ +
WebModule1
+ TWebModule +
+ +
datMod
+ TDataModule +
+ + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + + + + + hdcDZApi.dpr + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1040 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + Ethea SVGIconImageList VCL components + TurboPack Essentials Delphi Runtime package + Png Components for Delphi + DMVCFramework - CopyRight (2010-2024) Daniele Teti and the DMVCFramework Team + Devart Universal Data Access FMX Components + Devart Universal Data Access Components + JVCL Application and Form Components + JVCL Band Objects + JVCL Non-Visual Components + JVCL Visual Controls + JVCL Encryption and Compression + JVCL Custom Controls + JVCL Database Components + JVCL Dialog Components + JVCL Docking Components + JVCL DotNet Controls + JVCL Globus Components + JVCL HMI Controls + JVCL Jans Components + JVCL Managed Threads + JVCL Multimedia and Image Components + JVCL Network Components + JVCL Page Style Components + JVCL Interpreter Components + JVCL Plugin Components + JVCL Print Preview Components + JVCL Runtime Design Components + JVCL Standard Controls + JVCL System Components + JVCL Time Framework + JVCL Wizard + JVCL XP Controls + Ethea SVGIconImageList FMX components + Helios Orange Components + Express Cross Platform Library Icon Library by Developer Express Inc. + TurboPack LockBox 3 Delphi runtime package + Embarcadero Standard Components + TurboPack Orpheus Delphi datataware designtime package + TurboPack LockBox 3 VCL designtime package + TurboPack LockBox Delphi designtime package + Ethea IconFontsImageList VCL components + Ethea IconFontsImageList FMX components + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + + + + + hdcDZApi.exe + true + + + + + + + .\ + true + + + + + + + .\ + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + + + + + + + + + + + + False + True + + False + + 12 + + + + +
diff --git a/hdcDZApi.mes b/hdcDZApi.mes new file mode 100644 index 0000000..3b6f033 --- /dev/null +++ b/hdcDZApi.mes @@ -0,0 +1,163 @@ +[GeneralSettings] +MesVersion=4 +HandleExceptions=0 +LinkInCode=1 +AppendMapFileToBinary=1 +NoOwnMadExceptSettings=0 +CheckFileCrc=1 +CheckForFrozenMainThread=0 +FreezeTimeout=60000 +ReportLeaks=0 +WindowsLogo=0 +CrashOnBuffer=0 +CrashOnUnderrun=0 +AutomaticallySaveBugReport=1 +AutoSaveBugReportIfNotSent=0 +AutomaticallyMailBugReport=0 +AutoMailProgressBox=0 +CopyBugReportToClipboard=0 +SuspendAllRunningThreads=0 +ShowPleaseWaitBox=1 +PleaseWaitIcon=plwait1 +AutomaticallyContinueApplication=1 +AutomaticallyRestartApplication=0 +AutomaticallyCloseApplication=0 +SendInBackground=1 +SendHelper=196864 +Send32Icon=send321 +UploadViaHttp=0 +HttpServer= +HttpSsl=0 +HttpPort=0 +HttpAccount= +HttpPassword= +UploadToFogBugz=0 +UploadToBugZilla=0 +UploadToMantis=0 +BugTrackerAccount= +BugTrackerPassword= +BugTrackerProject= +BugTrackerArea= +BugTrackerAssignTo= +MailAsSmtpServer=0 +MailAsSmtpClient=1 +SmtpServer=smtp.forpsi.com +SmtpSsl=0 +SmtpTls=1 +SmtpPort=0 +SmtpAccount=helios_info@hdconsulting.cz +SmtpPassword=SVKrFWa9/396BZ3oRdkq9/KgphAaE0+i +MailViaMapi=0 +MailViaMailto=0 +MailAddress=tomas.buzin@hdconsulting.cz +BugReportFile=bugreport.txt +AttachBugReport=1 +AttachBugReportFile=1 +DeleteBugReportFile=1 +BugReportSendAs=bugreport.txt +BugReportZip= +ScreenShotDepth=8 +ScreenShotAppOnly=0 +ScreenShotSendAs=screenshot.png +ScreenShotZip= +AdditionalAttachments= +AppendBugReports=1 +BugReportFileSize=200000 +DontSaveDuplicateExceptions=1 +DontSaveDuplicateFreezings=1 +DuplicateExceptionDefinition=1 +DuplicateFreezeDefinition=2 +ShowExceptionBox=1 +OkBtnText=&OK +DetailsBtnText=&Details +PleaseWaitTitle=Information +PleaseWaitText=Please wait a moment... +BugTrackerTitle=%25appname%25, %25exceptMsg%25 +BugTrackerDescr=error details: %0d%0a%25errorDetails%25 +MailSubject=bug report +MailBody=please find the bug report attached +SendBoxTitle=Sending bug report... +PrepareAttachMsg=Preparing attachments... +MxLookupMsg=Searching for mail server... +ConnectMsg=Connecting to server... +SendMailMsg=Sending mail... +FieldsMsg=Setting fields... +SendAttachMsg=Sending attachments... +SendFinalizeMsg=Finalizing... +MailFailureMsg=Sorry, sending the bug report didn't work. +VersionVariable= +[ExceptionBox] +ShowButtonMailBugReport=0 +ShowButtonSaveBugReport=0 +ShowButtonPrintBugReport=0 +ShowButtonShowBugReport=1 +ShowButtonContinueApplication=1 +ShowButtonRestartApplication=0 +ShowButtonCloseApplication=1 +IconButtonSendBugReport=send1 +IconButtonSaveBugReport=save1 +IconButtonPrintBugReport=print1 +IconButtonShowBugReport=show1 +IconButtonContinueApplication=continue1 +IconButtonCantContinueApplication=cantContinue1 +IconButtonRestartApplication=restart1 +IconButtonCloseApplication=close1 +FocusedButton=6 +SendAssistant=SendAssistant +SaveAssistant=SaveAssistant +PrintAssistant=PrintAssistant +AutomaticallyShowBugReport=0 +NoOwnerDrawButtons=0 +BigExceptionIcon=big1 +TitleBar=%25appname%25 +ExceptionMessage=An error occurred in the application. +FrozenMessage=The application seems to be frozen. +BitFaultMsg=The file "%25modname%25" seems to be corrupt! +MailBugReportText=send bug report +SaveBugReportText=save bug report +PrintBugReportText=print bug report +ShowBugReportText=show bug report +ContinueApplicationText=continue application +RestartApplicationText=restart application +CloseApplicationText=close application +[BugReport] +ListThreads=1 +ListModules=1 +ListHardware=1 +ShowCpuRegisters=1 +ShowStackDump=1 +Disassembly=1 +HideUglyItems=0 +ShowRelativeAddrs=1 +ShowRelativeLines=1 +FormatDisassembly=1 +LimitDisassembly=5 +EnabledPlugins=modules|processes|hardware +[Filters] +Filter1ExceptionClasses=EDBEditError +Filter1DontCreateBugReport=0 +Filter1DontCreateScreenshot=0 +Filter1DontSuspendThreads=1 +Filter1DontCallHandlers=0 +Filter1ShowBox=4 +Filter1Assis= +Filter2ExceptionClasses= +Filter2DontCreateBugReport=0 +Filter2DontCreateScreenshot=0 +Filter2DontSuspendThreads=0 +Filter2DontCallHandlers=0 +Filter2ShowBox=0 +Filter2Assis= +GeneralDontCreateBugReport=0 +GeneralDontCreateScreenshot=0 +GeneralDontSuspendThreads=0 +GeneralDontCallHandlers=0 +GeneralShowBox=0 +GeneralAssis= +[Assistants] +Assistant1=SendAssistant|Send Assistant|ContactForm|DetailsForm|ScrShotForm +Assistant2=SaveAssistant|Save Assistant|ContactForm|DetailsForm +Assistant3=PrintAssistant|Print Assistant|ContactForm|DetailsForm +Forms1=TPF0%0eTMEContactForm%0bContactForm%07Message%0c%13%00%00%00Contact Information%08MinWidth%04%00%00%00%00%08OnAction%0c%1b%00%00%00madExcept.HandleContactForm%05Timer%04%00%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%08%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%08INVLabel%06Label1%07Caption%0c%0a%00%00%00your name:%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%08NameEdit%07Colored%09%07Enabled%09%05Lines%04%01%00%00%00%08Optional%09%0aOutputName%0c%0c%00%00%00contact name%0aOutputType%07%09nvoHeader%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%08INVLabel%06Label2%07Caption%0c%0b%00%00%00your email:%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%09EmailEdit%07Colored%09%07Enabled%09%05Lines%04%01%00%00%00%08Optional%08%0aOutputName%0c%0d%00%00%00contact email%0aOutputType%07%09nvoHeader%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%0bINVCheckBox%08MemCheck%07Caption%0c%0b%00%00%00remember me%07Checked%08%07Enabled%09%0aOutputName%0c%00%00%00%00%07Spacing%04%00%00%00%00%00%00%00 +Forms2=TPF0%0eTMEDetailsForm%0bDetailsForm%07Message%0c%0d%00%00%00Error Details%08MinWidth%04%00%00%00%00%08OnAction%0c%00%00%00%00%05Timer%04%00%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%08INVLabel%06Label1%07Caption%0c,%00%00%00what were you doing when the error occurred?%07Enabled%09%07Spacing%04%00%00%00%00%00%00%07INVEdit%0bDetailsMemo%07Colored%09%07Enabled%09%05Lines%04%09%00%00%00%08Optional%08%0aOutputName%0c%0d%00%00%00error details%0aOutputType%07%0dnvoOwnSection%07Spacing%04%00%00%00%00%04Text%0c%00%00%00%00%05Valid%09%00%00%00 +Forms3=TPF0%0eTMEScrShotForm%0bScrShotForm%0dActiveControl%07%0bContinueBtn%07Message%0c%18%00%00%00Screenshot Configuration%08MinWidth%04%00%00%00%00%08OnAction%0c%1e%00%00%00madExcept.HandleScreenshotForm%05Timer%04%fa%00%00%00%00%09INVButton%0bContinueBtn%07Caption%0c%08%00%00%00Continue%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%07SkipBtn%07Caption%0c%04%00%00%00Skip%07Enabled%08%0bNoOwnerDraw%08%07Visible%09%00%00%09INVButton%09CancelBtn%07Caption%0c%06%00%00%00Cancel%07Enabled%09%0bNoOwnerDraw%08%07Visible%09%00%00%0bINVCheckBox%0bAttachCheck%07Caption%0c%25%00%00%00attach a screenshot to the bug report%07Checked%09%07Enabled%09%0aOutputName%0c%00%00%00%00%07Spacing%04%00%00%00%00%00%00%08INVImage%0aScrShotImg%06Border%09%09Clickable%09%07Enabled%09%04File%0c%00%00%00%00%06Height%04%00%00%00%00%07Spacing%04%00%00%00%00%05Width%04%00%00%00%00%00%00%08INVLabel%06Label1%07Caption%0c%15%00%00%00(click to edit image)%07Enabled%09%07Spacing%04%00%00%00%00%00%00%00 diff --git a/hdcDZApi.res b/hdcDZApi.res new file mode 100644 index 0000000..69aa6c7 Binary files /dev/null and b/hdcDZApi.res differ diff --git a/hdcDZApiService.groupproj b/hdcDZApiService.groupproj new file mode 100644 index 0000000..9c2e894 --- /dev/null +++ b/hdcDZApiService.groupproj @@ -0,0 +1,48 @@ +ďťż + + {2630F676-A97D-41B8-BE91-D8E4911C1BA0} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helTabsBIDs.pas b/helTabsBIDs.pas new file mode 100644 index 0000000..32f6d5a --- /dev/null +++ b/helTabsBIDs.pas @@ -0,0 +1,335 @@ +unit helTabsBIDs; + +interface + +const + strBlokEdit = 'BlokovaniEditoru, JeNovaVetaEditor'; + + + bidTabExtKom = 541; // #TabExtKom + + bidCisOrg = 1; // TabCisOrg + bidKZ = 2; + bidStrom = 4; + bidDok = 5; // TabDokumenty + bidSS = 8; // Stav skladu + bidSZ = 15; // TabSkupinyZbozi + bidDZPrij = 16; // Prijemky + bidDZVydej = 18; // Vydejky + bidExpPr = 25; // Exp. prikazy + bidNabid = 27; // Nabidky + bidDDZ = 34; // TabDruhDokZbo + bidPZ = 45; // Pohyby zbozi pres editaci dokladu + bidPZ2 = 74; // Pohyby zbozi pres F9 + bidCisNC = 51; // TabCisNC + bidSUKod = 56; // TabSkupUKod + bidKOs = 115; // TabCisKOs + bidKList = 62; + bidCisZam = 86; // Ciselnik zamestnancu + bidUkoly = 240; + bidKategUk = 1117; + bidDilce = 11001; // vyrabene dilce + bidMaterialy = 11002; // nakupovane materialy + bidVyrPrik = 11011; // Vyrobni prikazy + bidVyrPrikVC = 11083; // Vyrobni cisla na prikaze + bidVyrCisKm = 1978; // kmen vyrobniho cisla + bidFrontaPrace = 11109; + bidZavady = 11015; + bidPrKVaz = 11050; + bidVyrOper = 11051; + bidEvidOp = 11122; + bidPrPostupy = 11074; + bidPostup = 11019; + bidTpvOPN = 11174; + bidVyrDokum = 11339; + bidCisOPN = 11128; + + bidQMSReklPrij = 1671; + bidQMSReklPrijStavy = 1678; + + bidQMSReklVyd = 1681; + bidQMSReklVydStavy = 1684; + + bidQMSUkoly = 1696; + bidQMSKateg = 1650; + bidQMSKategUkol = 1670; + + bidQMSMeridlaStavy = 1652; + bidQMSMeridlaDruhy = 1653; + bidQMSMeridlaKateg = 1654; + + bidQMSZarizStavy = 1657; + bidQMSZarizDruhy = 1658; + + bidFV = 29; // vydane faktury + bidFP = 134; // prijate faktury + bidCSmen = 11293; // ciselnik smen + bidZak = 59; // Zakazky + bidRadyZak = 1386; // Rady zakazek + bidUmisteni = 542; + bidMzdObd = 200; // TabMzdObd + bidPoklDokl = 84; // pokladni doklady + bidMaPrZa = 247; // protokoly zavedeni + bidMaKar = 144; // karty majetku + + + + tblErrSQL = '[dbo].[_TabSQLErr]'; + tblLastSet = '[dbo].[TabLastSetting]'; + + + tblMailProfil = '[dbo].[TabEMailProfil]'; + + tblHGlob = '[dbo].[TabHGlob]'; + tblExtKom = '[dbo].[TabExtKom]'; + tblDefZprav = '[dbo].[TabDefZprav]'; + tblFormDef = '[dbo].[TabFormDef]'; + + tblPravaSklad = '[dbo].[TabPravaSklad]'; + tblRole = '[dbo].[TabRole]'; + tblUziv = '[dbo].[TabUziv]'; + tblUserCfg = '[dbo].[TabUserCfg]'; + tblPlgInfo = '[dbo].[TabPluginInfo]'; + tblObecPrehled = '[dbo].[TabObecnyPrehled]'; + tblUzivAtr = '[dbo].[TabUzivAtr]'; + tblZmenLog = '[dbo].[TabZmenovyLOG]'; + tblZurnal = '[dbo].[TabZurnal]'; + + tblMaPrZa = '[dbo].[TabMaPrZa]'; + tblMaKar = '[dbo].[TabMaKar]'; + + tblInvH = '[dbo].[TabInvHead]'; + tblInvI = '[dbo].[TabInvItem]'; + tblDDZ = '[dbo].[TabDruhDokZbo]'; + tblDZDod = '[dbo].[TabDokZboDodatek]'; + tblDDZdef = '[dbo].[TabDruhDokZboDef]'; + tblDZ = '[dbo].[TabDokladyZbozi]'; + tblDZe = '[dbo].[TabDokladyZbozi_EXT]'; + tblPZ = '[dbo].[TabPohybyZbozi]'; + tblPZe = '[dbo].[TabPohybyZbozi_EXT]'; + tblKZ = '[dbo].[TabKmenZbozi]'; + tblKZe = '[dbo].[TabKmenZbozi_EXT]'; + tblKZDod = '[dbo].[TabKmenZboziDodatek]'; + tblSortim = '[dbo].[TabSortiment]'; + tblSortimE = '[dbo].[TabSortiment_EXT]'; + tblDodavateleZbozi = '[dbo].[TabZboziDodavatel]'; + tblDodavateleZboziE = '[dbo].[TabZboziDodavatel_EXT]'; + tblMJ = '[dbo].[TabMJ]'; + tblMJZbo = '[dbo].[TabMJZbozi]'; + tblOZSumCen = '[dbo].[TabOZSumaceCen]'; + + tblParKZ = '[dbo].[TabParKmZ]'; + tblParamKZ = '[dbo].[TabParametryKmeneZbozi]'; + tblSZ = '[dbo].[TabSkupinyZbozi]'; + tblSZe = '[dbo].[TabSkupinyZbozi_EXT]'; + tblSS = '[dbo].[TabStavSkladu]'; + tblSSE = '[dbo].[TabStavSkladu_EXT]'; + tblVyrCK = '[dbo].[TabVyrCK]'; + tblVyrCKE = '[dbo].[TabVyrCK_EXT]'; + tblVyrCS = '[dbo].[TabVyrCS]'; + tblVyrCSE = '[dbo].[TabVyrCS_EXT]'; + tblVyrCP = '[dbo].[TabVyrCP]'; + tblCOrg = '[dbo].[TabCisOrg]'; + tblCOrgE = '[dbo].[TabCisOrg_EXT]'; + tblCZam = '[dbo].[TabCisZam]'; + tblCisZam = '[dbo].[TabCisZam]'; + tblCZamE = '[dbo].[TabCisZam_EXT]'; + tblCisZamE = '[dbo].[TabCisZam_EXT]'; + tblStrom = '[dbo].[TabStrom]'; + tblStromE = '[dbo].[TabStrom_EXT]'; + tblJC = '[dbo].[TabJC]'; + tblCisNC = '[dbo].[TabCisNC]'; + tblNC = '[dbo].[TabNC]'; + tblNCe = '[dbo].[TabNC_EXT]'; + tblNCCis = '[dbo].[TabCisNC]'; + tblKList = '[dbo].[TabKurzList]'; + tblMzSloz = '[dbo].[TabMzSloz]'; + tblPredzpr = '[dbo].[TabPredzp]'; + tblZamMzd = '[dbo].[TabZamMzd]'; + tblZamMzdE = '[dbo].[TabZamMzd_EXT]'; + tlbZamVyp = '[dbo].[TabZamVyp]'; + tblMzdObd = '[dbo].[TabMzdObd]'; + tblSazbyDPH = '[dbo].[TabSazbyDPH]'; + tblSazbyDPHZbo = '[dbo].[TabSazbyDPHZbo]'; + tblDPH = '[dbo].[TabDPH]'; + tblDPHDef = '[dbo].[TabDPHDef]'; + tblPostup = '[dbo].[TabPostup]'; + tblPostupE = '[dbo].[TabPostup_EXT]'; + tblKaCe = '[dbo].[TabKalkCe]'; + tblZaKalk = '[dbo].[TabZKalkulace]'; + tblObd = '[dbo].[TabObdobi]'; + tblPSC = '[dbo].[TabPSC]'; + tblZeme = '[dbo].[TabZeme]'; + tblZemeE = '[dbo].[TabZeme_EXT]'; + + tblBVrad = '[dbo].[TabBankVypisR]'; + tblPokl = '[dbo].[TabPokladna]'; + tblPoklP = '[dbo].[TabPolozkyPokl]'; + tblKOs = '[dbo].[TabCisKOs]'; + tblKOsE = '[dbo].[TabCisKOs_EXT]'; + tblPPlan = '[dbo].[TabZadVyp]'; + tblPPlanE = '[dbo].[TabZadVyp_EXT]'; + tblPPlanImp = '[dbo].[TabZadVypImp]'; + tblStruktKus = '[dbo].[TabStrukKusovZV]'; + tblKJ = '[dbo].[TabKontaktJednani]'; + tblKJE = '[dbo].[TabKontaktJednani_EXT]'; + tblKategKJ = '[dbo].[TabKategKontJed]'; + tblKontakt = '[dbo].[TabKontakty]'; + tblKontOrgKOs = '[dbo].[TabVztahOrgKOs]'; + tblKJPozn = '[dbo].[TabPoznKontJed]'; + tblKJZam = '[dbo].[TabKJUcastZam]'; + tblCZmen = '[dbo].[TabCzmeny]'; + tblCisOPN = '[dbo].[TabCisOPN]'; + tblTpvOPN = '[dbo].[TabTpvOPN]'; + tblZak = '[dbo].[TabZakazka]'; + tblZakE = '[dbo].[TabZakazka_EXT]'; + tblRadyZak = '[dbo].[TabZakazkaRada]'; + tblKUKod = '[dbo].[TabSkupUKod]'; + tblBCode = '[dbo].[TabBarCodeZbo]'; + tblVStin = '[dbo].[TabVStin]'; + tblCUct = '[dbo].[TabCisUct]'; + tblCUctE = '[dbo].[TabCisUct_EXT]'; + tblUkoly = '[dbo].[TabUkoly]'; + tblUkolyE = '[dbo].[TabUkoly_EXT]'; + tblKatUk = '[dbo].[TabKategUkoly]'; + tblPlnUk = '[dbo].[TabDosleObjH20]'; + tblPlnUkE = '[dbo].[TabDosleObjH20_EXT]'; + tblDokum = '[dbo].[TabDokumenty]'; + tblDokumE = '[dbo].[TabDokumenty_EXT]'; + tblDokumStr = '[dbo].[TabDokumStrom]'; + tblDokumStrom = '[dbo].[TabDokumStrom]'; + tblDokumStromE = '[dbo].[TabDokumStrom_EXT]'; + tblDokumVaz = '[dbo].[TabDokumVazba]'; + tblZamDopl = '[dbo].[TabZamPer]'; + tblZamDoplE = '[dbo].[TabZamPer_EXT]'; + tblProfes = '[dbo].[TabProfes]'; + tblBSpoj = '[dbo].[TabBankSpojeni]'; + tblPUstavy = '[dbo].[TabPenezniUstavy]'; + tblPlanKal = '[dbo].[TabPlanKalendare]'; + tblPlanKalE = '[dbo].[TabPlanKalendare_EXT]'; + tblPlanKalPol = '[dbo].[TabPlanKalendPol]'; + tblPlanKalPolE = '[dbo].[TabPlanKalendPol_EXT]'; + tblVyrPerZdr = '[dbo].[TabVyrPerZdroje]'; + tblUmisteni = '[dbo].[TabUmisteni]'; + tblStavUmisteni = '[dbo].[TabVStavUmisteni]'; + tblUctenkaH = '[dbo].[TabUctenkaH]'; + tblUctenkaR = '[dbo].[TabUctenkaR]'; + tblfrmUhrady = '[dbo].[TabFormaUhrady]'; + tblfrmUhradyE = '[dbo].[TabFormaUhrady_EXT]'; + + tblKodMen = '[dbo].[TabKodMen]'; + tblKodMenE = '[dbo].[TabKodMen_EXT]'; + + tblSoz = '[dbo].[TabSoz]'; + tblSozNa = '[dbo].[TabSozNa]'; + + tblDObjR02 = '[dbo].[TabDosleObjR02]'; + tblDObjR02E = '[dbo].[TabDosleObjR02_EXT]'; + tblDObjH02 = '[dbo].[TabDosleObjH02]'; + tblDObjH02E = '[dbo].[TabDosleObjH02_EXT]'; + bidDObjR02 = 974; + + tblDenik = '[dbo].[TabDenik]'; + tblRozpRez = '[dbo].[TabFIARozpusteniRezii]'; + tblPreuctRez = '[dbo].[TabFIAPreuctovaniRezii]'; + tblRozpRezDet = '[dbo].[TabFIARozpusteniReziiDetail]'; + tblRozpRezDetVst = '[dbo].[TabFIARozpusteniReziiDetailVstup]'; + + tblPrikaz = '[dbo].[TabPrikaz]'; + tblPrikazE = '[dbo].[TabPrikaz_EXT]'; + tblVPr = '[dbo].[TabPrikaz]'; + tblVPrE = '[dbo].[TabPrikaz_EXT]'; + tblPrikazRada = '[dbo].[TabRadyPrikazu]'; + tblPrikazVC = '[dbo].[TabVyrCisPrikaz]'; + tblPrikazVCE = '[dbo].[TabVyrCisPrikaz_EXT]'; + tblVyrobDokum = '[dbo].[TabVyrDokum]'; + tblVazbyVyrobDokum = '[dbo].[TabVazbyVyrDokum]'; + tblPrikazVazby = '[dbo].[TabVazbyPrikazu]'; + + tblPrKVazby = '[dbo].[TabPrKVazby]'; + tblPrVazbyVC = '[dbo].[TabVyrCisPrKV]'; + tblKVaz = '[dbo].[TabKVazby]'; + tblKVazE = '[dbo].[TabKVazby_EXT]'; + tblKVazImp = '[dbo].[TabKVazbyImp]'; + tblAlterKZ = '[dbo].[TabAlterKZ]'; + tblPrPost = '[dbo].[TabPrPostup]'; + tblPrPostE = '[dbo].[TabPrPostup_EXT]'; + tblPrNVazby = '[dbo].[TabPrNVazby]'; + tblPrNVazbyE = '[dbo].[TabPrNVazby_EXT]'; + tblKObj = '[dbo].[TabKoopObj]'; + tblPKObj = '[dbo].[TabPolKoopObj]'; + tblMzdZm = '[dbo].[TabPrikazMzdyAZmetky]'; + tblPMZ = '[dbo].[TabPrikazMzdyAZmetky]'; + tblMzdZmE = '[dbo].[TabPrikazMzdyAZmetky_EXT]'; + tblPMZE = '[dbo].[TabPrikazMzdyAZmetky_EXT]'; + tblMzdZmGenPZ = '[dbo].[TabPrikazMzdyAZmetkyGenPZ]'; + tblPMZGenPZ = '[dbo].[TabPrikazMzdyAZmetkyGenPZ]'; + tblMzdZavady = '[dbo].[TabPrikazMzdyAZmetkyRozpisZavad]'; + tblPMZZavady = '[dbo].[TabPrikazMzdyAZmetkyRozpisZavad]'; + tblZavady = '[dbo].[TabCZavad]'; + tblCZavad = '[dbo].[TabCZavad]'; + tblCZavadE = '[dbo].[TabCZavad_EXT]'; + + tblPrikazPlan = '[dbo].[TabPrikazZdrojVyrPlan]'; + tblPrikazZdrojOZ = '[dbo].[TabPrikazZdrojOZ]'; + + + tblZakazModif = '[dbo].[TabZakazModif]'; + tblZakazModifDilce = '[dbo].[TabZakazModifDilce]'; + + + tblTar = '[dbo].[TabTarP]'; + tblTarH = '[dbo].[TabTarH]'; + tblCPrac = '[dbo].[TabCPraco]'; + tblCPracE = '[dbo].[TabCPraco_EXT]'; + tblCisStroj = '[dbo].[TabCisStroju]'; + tblCisStrojE = '[dbo].[TabCisStroju_EXT]'; + tblCSmen = '[dbo].[TabCSmeny]'; + tblCisKoop = '[dbo].[TabCKoop]'; + tblPredna = '[dbo].[TabPredna]'; + tblPrednaE = '[dbo].[TabPredna_EXT]'; + + + + tblSdrPrikazy = '[dbo].[TabSdruzVyrPrikazy]'; + tblSdrPrikazyE = '[dbo].[TabSdruzVyrPrikazy_EXT]'; + tblSdrPrikazyR = '[dbo].[TabSdruzVyrPrikazyR]'; + tblSdrOperace = '[dbo].[TabSdruzVyrOperace]'; + tblSdrOperaceR = '[dbo].[TabSdruzVyrOperaceR]'; + tblKodySdruz = '[dbo].[TabCisKoduSdruzeni]'; + + tblRozpracOper = '[dbo].[TabEvidRozpracOper]'; + tblRozpracOperE = '[dbo].[TabEvidRozpracOper_EXT]'; + tblRozpracOperR = '[dbo].[TabEvidRozpracOperR]'; + tblRozpracOperRE = '[dbo].[TabEvidRozpracOperR_EXT]'; + tblRozpracOperPr = '[dbo].[TabEvidRozpracOperProstoje]'; + tblRozpracOperPrE = '[dbo].[TabEvidRozpracOperProstoje_EXT]'; + tblRozpracOperZm = '[dbo].[TabEvidRozpracOperRZmetky]'; + tblRozpracOperZmE = '[dbo].[TabEvidRozpracOperRZmetky_EXT]'; + + + tblQMSCis = '[dbo].[TabQMSCis]'; + + tblKPParams = '[dbo].[TabKPParametry]'; + tblKPCisParamsKontr = '[dbo].[TabKPCisParametryKontrol]'; + + tblPrPostupKPs = '[dbo].[TabPostupKontrPostupy]'; + tblKPLHlav = '[dbo].[TabKPLHlav]'; // hlavicky kontrolniho planu + tblKPLHlavE = '[dbo].[TabKPLHlav_EXT]'; + tblKPLParams = '[dbo].[TabKPLParametry]'; // kontrolovane parametry planu + + tblAdvKPlan = '[dbo].[TabAdvKapacPlan]'; + tblAdvKPlanDavky = '[dbo].[TabAdvKPDavky]'; + tblKapacPlanPol = '[dbo].[TabKapacPlanPol]'; + + tblGSDDoklady = '[dbo].[Gatema_SDDoklady]'; + tblGSDScanData = '[dbo].[Gatema_SDScanData]'; + + + + tblDZTasky = '[dbo].[_hdc_DataZone_Tasky]'; + tblDZSubtasky = '[dbo].[_hdc_DataZone_Subtasky]'; + +implementation + +end. diff --git a/sqlDefs/ef_EncodeBase64.sql b/sqlDefs/ef_EncodeBase64.sql new file mode 100644 index 0000000..e9225db --- /dev/null +++ b/sqlDefs/ef_EncodeBase64.sql @@ -0,0 +1,9 @@ +-- dbo.ef_EncodeBase64 +CREATE FUNCTION dbo.ef_EncodeBase64 (@source AS varchar(max)) + RETURNS varchar(max) +AS + BEGIN + DECLARE @bin varbinary(max), @result varchar(max) + SET @bin = CONVERT(varbinary(max), @source) + RETURN CAST(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'varchar(max)') + END diff --git a/sqlDefs/ep_HDCDZApi_ZpracujPrijataData.sql b/sqlDefs/ep_HDCDZApi_ZpracujPrijataData.sql new file mode 100644 index 0000000..a1e0e88 --- /dev/null +++ b/sqlDefs/ep_HDCDZApi_ZpracujPrijataData.sql @@ -0,0 +1,169 @@ +-- dbo.ep_HDCDZApi_ZpracujPrijataData +CREATE PROCEDURE dbo.ep_HDCDZApi_ZpracujPrijataData + @idJson INT=NULL +AS + + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @sql NVARCHAR(max), + @datPorizeni DATETIME, + @errMsg NVARCHAR(500), + @bChyba BIT, + @iChyba INT, + @debugXml XML, + @aktDatum DATETIME, + @logTyp TINYINT, + @logText NVARCHAR(500), + @logInt INT, + @logStr NVARCHAR(255), + @log4Mail BIT=0 + +DECLARE + @jsonString NVARCHAR(MAX), + @jsonString2 NVARCHAR(MAX), + @phDeviceId NVARCHAR(40), + @typDokum NVARCHAR(50), + @subtypDokum NVARCHAR(50), + @akce NVARCHAR(50), + @akceSource NVARCHAR(50), + @datumText NVARCHAR(25) + +DECLARE @TabPHObj TABLE (ID INT NOT NULL, IDPHIdent INT) + + +-- vytvor pomocnou tabulku +/* +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) +*/ +DROP TABLE IF EXISTS #TabJSONData +CREATE TABLE #TabJSONData (ID INT IDENTITY(1,1) NOT NULL, doc NVARCHAR(max)) + + + + + +IF (@idJson IS NULL) + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce, DatPorizeni + FROM dbo._hdc_ph_PrijataJsonData + WHERE DatZpracovani IS NULL + AND Nezpracovat=0 + AND ISNULL(JSONData, N'')<>N'' + ORDER BY DatPorizeni ASC + ELSE + DECLARE j CURSOR LOCAL FOR + SELECT ID, JSONData, Akce, DatPorizeni + FROM dbo._hdc_ph_PrijataJsonData + WHERE ID=@idJson +OPEN j +WHILE (1=1) + BEGIN + FETCH NEXT FROM j INTO @idJson, @jsonString, @akce, @datPorizeni + IF (@@FETCH_STATUS<>0) BREAK + + IF (ISJSON(@jsonString)=0) + CONTINUE + + + BEGIN TRY + SET @tranPred = @@TRANCOUNT + IF (@tranPred=0) + BEGIN TRAN + + + SET @datumText = NULL +-- smaz pomocnou tabulku + DELETE FROM #TabJSONData + INSERT #TabJSONData (doc) SELECT @jsonString + SELECT TOP(1) @akce = JSON_VALUE(doc, '$.action'), + @akceSource = JSON_VALUE(doc, '$.source'), + @datumText = JSON_VALUE(doc, '$.actionAt') + FROM #TabJSONData + + SET @akce = ISNULL(@akce, N'') + SET @akceSource = ISNULL(@akceSource, N'') + SET @datumText = ISNULL(@datumText, N'') + IF (@datumText<>N'') + SET @datPorizeni = CONVERT(datetime, @datumText, 120) + + IF (@akce<>N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET Akce=@akce WHERE ID=@idJson AND Akce IS NULL + + + IF ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE IdJsonData=@idJson), 0)>=3 + BEGIN + IF EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson AND ISNULL(PosledniChyba,N'')=N'') + UPDATE dbo._hdc_ph_PrijataJsonData SET Nezpracovat=1, + PosledniChyba=(SELECT TOP(1) LogText FROM dbo._hdc_ph_Log + WHERE IdJsonData=@idJson ORDER BY DatPorizeni DESC) + WHERE ID=@idJson + CONTINUE + END + + + SET @logTyp = 0 + SET @logInt = NULL + SET @logStr = N'' + SET @log4Mail = 0 + SET @logText = N'' + + + +-- BEGIN: CERVENE TLACITKO + IF (@akce=N'click' AND @akceSource='button') + BEGIN + SELECT TOP(1) @phDeviceId = JSON_VALUE(doc, '$.deviceId') FROM #TabJSONData + UPDATE dbo._hdc_ph_PrijataJsonData SET PHDeviceID=@phDeviceId WHERE ID=@idJson + + SET @akce = N'' + IF OBJECT_ID(N'dbo.ep_HDCDZApi_AkceCerveneTlacitko') IS NOT NULL + BEGIN + SET @sql = 'EXEC dbo.ep_HDCDZApi_AkceCerveneTlacitko @IDJson=@idJson, @PHDeviceId=@phDeviceId' + EXEC sp_executesql @sql, N'@idJson INT, @phDeviceId NVARCHAR(40)', @idJson, @phDeviceId + END + END -- akce: vyroba_zacatek +-- END: CERVENE TLACITKO + + + + + + IF (@tranPred=0) AND (@@TRANCOUNT>0) + COMMIT TRAN + END TRY + BEGIN CATCH + IF (@tranPred=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() + + UPDATE dbo._hdc_ph_PrijataJsonData SET PosledniChyba=@errMsg WHERE ID=@idJson + + IF (@logTyp>0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue, StrValue, IdJsonData, ForMail) + SELECT @logTyp, ISNULL(@logText, N'') + NCHAR(13)+NCHAR(10) + @errMsg, @logInt, @logStr, @idJson, @log4Mail + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IdJsonData, ForMail) SELECT 1, N'Chyba zpracovani PrijataJsonData: ' + @errMsg, @idJson, 1 + END CATCH + SET @logTyp=0 + + END +CLOSE j +DEALLOCATE j + + + + +-- pro jistotu +IF OBJECT_ID(N'tempdb..#TabJSONData', N'U') IS NOT NULL + DROP TABLE #TabJSONData diff --git a/sqlDefs/tbl_hdc_ph_Log.sql b/sqlDefs/tbl_hdc_ph_Log.sql new file mode 100644 index 0000000..462f0cc --- /dev/null +++ b/sqlDefs/tbl_hdc_ph_Log.sql @@ -0,0 +1,36 @@ +IF OBJECT_ID(N'dbo._hdc_ph_Log', N'U') IS NULL + CREATE TABLE dbo._hdc_ph_Log ( + ID int IDENTITY(1, 1) NOT NULL, + LogText nvarchar(500) NULL, + LogTextLong nvarchar(max) NULL, + Typ tinyint NULL, + IntValue int NULL, + NumValue numeric(19, 6) NULL, + StrValue nvarchar(255) NULL, + DatValue datetime NULL, + MailAddress nvarchar(255) NULL, + MailSent datetime NULL, + ForMail BIT NOT NULL DEFAULT 0, + IdJsonData int NULL, + Autor nvarchar(80) DEFAULT suser_sname() NOT NULL, + DatPorizeni datetime DEFAULT getdate() NOT NULL, + CONSTRAINT PK__hdc_ph_Log PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +/* 12.12.2023 */ +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'MailAddress') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD MailAddress NVARCHAR(255) NULL +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'MailSent') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD MailSent DATETIME NULL + +/* 31.1.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'IdJsonData') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD IdJsonData INT NULL +DROP INDEX IF EXISTS EI_hdc_ph_Log_IdJsonData ON dbo._hdc_ph_Log +CREATE NONCLUSTERED INDEX EI_hdc_ph_Log_IdJsonData ON dbo._hdc_ph_Log (IdJsonData) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +/* 25.6.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'ForMail') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD ForMail BIT NOT NULL DEFAULT 0 + +/* 7.10.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_Log', N'LogTextLong') IS NULL ALTER TABLE dbo._hdc_ph_Log ADD LogTextLong NVARCHAR(max) + diff --git a/sqlDefs/tbl_hdc_ph_PrijataJsonData.sql b/sqlDefs/tbl_hdc_ph_PrijataJsonData.sql new file mode 100644 index 0000000..8aeba36 --- /dev/null +++ b/sqlDefs/tbl_hdc_ph_PrijataJsonData.sql @@ -0,0 +1,70 @@ +IF OBJECT_ID(N'dbo._hdc_ph_PrijataJsonData', N'U') IS NULL + CREATE TABLE dbo._hdc_ph_PrijataJsonData ( + ID bigint IDENTITY(1, 1) NOT NULL, + GUIDIdent uniqueidentifier DEFAULT newid() NOT NULL, + IdPHIdent bigint DEFAULT 0 NOT NULL, + PHOznaceni nvarchar(50) NULL, + UzivIdent nvarchar(100) NULL, + JSONData nvarchar(max) NULL, + DatPotvrzeni datetime NULL, + DatZpracovani datetime NULL, + Nezpracovat bit NOT NULL DEFAULT 0, + DatPorizeni datetime DEFAULT getdate() NULL, + IDDoklad int NULL, + CisloZam int NULL, + PosledniChyba nvarchar(255) NULL, + Blokovano bit NOT NULL DEFAULT 0, + IDMzda int NULL, + IDMezd NVARCHAR(max) NULL, + IDEvidRozpOp int NULL, + Objekt nvarchar(50) NULL, + Akce nvarchar(50) NULL, + PHDeviceID NVARCHAR(40) NULL, + Zpracovano AS CONVERT(bit, CASE WHEN DatZpracovani IS NULL THEN 0 ELSE 1 END), + CONSTRAINT PK_hdc_ph_JsonData PRIMARY KEY CLUSTERED (ID DESC) + WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + + +DROP INDEX IF EXISTS EI_hdc_ph_PrijataJsonData_DokladOZ ON dbo._hdc_ph_PrijataJsonData +CREATE NONCLUSTERED INDEX EI_hdc_ph_PrijataJsonData_DokladOZ ON dbo._hdc_ph_PrijataJsonData (IDDoklad) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + + + +/* 28.10.2023 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'CisloZam') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD CisloZam INT NULL + +/* 26.10.2023 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'PosledniChyba') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD PosledniChyba NVARCHAR(255) NULL + +/* 27.10.2023 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'Blokovano') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD Blokovano BIT NOT NULL DEFAULT 0 + +/* 31.1.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'IDMzda') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD IDMzda INT NULL +DROP INDEX IF EXISTS EI_hdc_ph_PrijataJsonData_IDMzda ON dbo._hdc_ph_PrijataJsonData +CREATE NONCLUSTERED INDEX EI_hdc_ph_PrijataJsonData_IDMzda ON dbo._hdc_ph_PrijataJsonData (IDMzda) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +/* 23.6.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'Objekt') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD Objekt NVARCHAR(50) NULL +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'Akce') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD Akce NVARCHAR(50) NULL +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'IDEvidRozpOp') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD IDEvidRozpOp INT NULL + +/* 24.7.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'Nezpracovat') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD Nezpracovat BIT NOT NULL DEFAULT 0 + +/* 4.8.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'PHDeviceID') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD PHDeviceID NVARCHAR(40) NULL +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'GUIDIdent') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD GUIDIdent UNIQUEIDENTIFIER DEFAULT newid() NOT NULL + +/* 8.10.2024 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'IDMezd') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD IDMezd NVARCHAR(MAX) NULL + +/* 10.1.2025 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'Zpracovano') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD Zpracovano AS CONVERT(bit, CASE WHEN DatZpracovani IS NULL THEN 0 ELSE 1 END) + +/* 23.1.2025 */ +IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'UzivIdent') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD UzivIdent NVARCHAR(100) NULL + diff --git a/sqlDefs/tbl_hdcdzapi_SQLDefs.sql b/sqlDefs/tbl_hdcdzapi_SQLDefs.sql new file mode 100644 index 0000000..6cf012f --- /dev/null +++ b/sqlDefs/tbl_hdcdzapi_SQLDefs.sql @@ -0,0 +1,7 @@ +IF OBJECT_ID(N'dbo._hdcdzapi_SQLDefs', N'U') IS NULL + CREATE TABLE dbo._hdcdzapi_SQLDefs ( + ID int IDENTITY(1, 1) NOT NULL, + SrcName sysname NOT NULL, + DatPorizeni DATETIME NOT NULL DEFAULT GETDATE(), + CONSTRAINT PK__hdcdzapi_SQLDefs PRIMARY KEY CLUSTERED (ID DESC) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) diff --git a/sqlDefs/trg_hdc_ph_Log_D.sql b/sqlDefs/trg_hdc_ph_Log_D.sql new file mode 100644 index 0000000..3421e1f --- /dev/null +++ b/sqlDefs/trg_hdc_ph_Log_D.sql @@ -0,0 +1,25 @@ +-- dbo.ET__hdc_ph_Log_D +CREATE TRIGGER dbo.ET__hdc_ph_Log_D ON dbo._hdc_ph_Log +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- ! trigger neupravujte, bude stejne pregenerovan pri startu pluginu PluginHDCRTN ! + + DECLARE + @id INT + + + +-- cisteni seedu + IF EXISTS(SELECT 1 FROM dbo._hdc_ph_Log) + BEGIN + SELECT @id=MAX(ID) FROM dbo._hdc_ph_Log + DBCC CHECKIDENT(_hdc_ph_Log, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._hdc_ph_Log + +END diff --git a/sqlDefs/trg_hdc_ph_PrijataJsonData_D.sql b/sqlDefs/trg_hdc_ph_PrijataJsonData_D.sql new file mode 100644 index 0000000..eeb30b8 --- /dev/null +++ b/sqlDefs/trg_hdc_ph_PrijataJsonData_D.sql @@ -0,0 +1,24 @@ +-- dbo.ET_hdc_ph_PrijataJsonData_D +CREATE TRIGGER dbo.ET_hdc_ph_PrijataJsonData_D ON dbo._hdc_ph_PrijataJsonData +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + +-- !! trigger neupravujte, bude stejne pregenerovan pri startu pluginu HDCDZAPI !! + + DECLARE + @id INT + + + IF NOT EXISTS(SELECT 1 FROM dbo._hdc_ph_PrijataJsonData) + TRUNCATE TABLE dbo._hdc_ph_PrijataJsonData + ELSE + BEGIN + SELECT @id=MAX(ID) FROM dbo._hdc_ph_PrijataJsonData + DBCC CHECKIDENT (_hdc_ph_PrijataJsonData, RESEED, @id) + END + + +END diff --git a/sqlZdroje.RES b/sqlZdroje.RES new file mode 100644 index 0000000..3c42456 Binary files /dev/null and b/sqlZdroje.RES differ diff --git a/sqlZdroje.rc b/sqlZdroje.rc new file mode 100644 index 0000000..7f77084 --- /dev/null +++ b/sqlZdroje.rc @@ -0,0 +1,5 @@ +tbl_hdc_ph_Log RCDATA .\sqlDefs\tbl_hdc_ph_Log.sql +trg_hdc_ph_Log_D RCDATA .\sqlDefs\trg_hdc_ph_Log_D.sql +tbl_hdc_ph_PrijataJsonData RCDATA .\sqlDefs\tbl_hdc_ph_PrijataJsonData.sql +trg_hdc_ph_PrijataJsonData_D RCDATA .\sqlDefs\trg_hdc_ph_PrijataJsonData_D.sql +ef_EncodeBase64 RCDATA .\sqlDefs\ef_EncodeBase64.sql diff --git a/uCommons.pas b/uCommons.pas new file mode 100644 index 0000000..fc794be --- /dev/null +++ b/uCommons.pas @@ -0,0 +1,46 @@ +unit uCommons; + +interface + +uses + System.SysUtils, System.StrUtils, System.Rtti; + +type + EServiceException = class(Exception) + end; + + function StrToNQuotedList (inStr: string): string; + function IsVal0Or1 (inStr: string): boolean; + + +implementation + + function StrToNQuotedList (inStr: string): string; + var x: string; + begin + result:= ''; + inStr:= inStr.Trim; + x:= inStr; + if (x.Contains(',')) then + begin + while (x.Contains(',')) do + begin + result:= result + 'N' + LeftStr(x, x.IndexOf(',')).QuotedString + ','; + x:= MidStr(x, x.IndexOf(',')+2, Length(x)); + end; + if (x<>'') then + result:= result + 'N' + x.QuotedString; + end + else + result:= 'N' + x.QuotedString; + end; + + + + function IsVal0Or1 (inStr: string): boolean; + begin + result:= (inStr='0') or (inStr='1'); + end; + + +end. diff --git a/uCtrlBase.pas b/uCtrlBase.pas new file mode 100644 index 0000000..31b1203 --- /dev/null +++ b/uCtrlBase.pas @@ -0,0 +1,743 @@ +ďťżunit uCtrlBase; + +interface +{$I 'GlobalDefs.inc'} + + +uses + MVCFramework, + MVCFramework.Commons, + MVCFramework.Serializer.Commons, + MVCFramework.Nullables, + MVCFramework.Controllers.Register, + uDataMod, + uCommons, + uSvc_Base, + uSvc_Obecne, + uSvc_Organizace, + uSvc_Zamestnanci, + uSvc_ObehZbozi, + uSvc_KmenZbozi, + uSvc_Vyroba, + uSvc_QMS, + MVCFramework.Swagger.Commons +{$IF DEFINED(CUSTOM_CTRL_Rootvin)}, uSvcCustom {$ENDIF} +{$IF DEFINED(CUSTOM_CTRL_INCOSystems)}, uSvcCustom {$ENDIF} +{$IF DEFINED(CUSTOM_CTRL_Gornicky)}, uSvcCustom {$ENDIF} +{$IF DEFINED(CUSTOM_CTRL_EMPolar)}, uSvcCustom {$ENDIF} +{$IF DEFINED(CUSTOM_CTRL_GatemaSD)}, uSvcCustomSDG {$ENDIF} + ; + + +const +{$I globalConsts.inc} + +type + TBaseController = class abstract(TMVCController) + strict private + FObecnyService: TObecnyService; + + FAktivitaService: TAktivitaService; + FUkolAktivityService: TUkolAktivityService; + + FZamestnanciService: TZamestnanciService; + FDokumentService: TDokumentService; + FPlanKalendarService: TPlanKalendarService; + FPolPlanKalendarService: TPolPlanKalendarService; + + FSkupinaZboziService: TSkupinaZboziService; + FKmenZboziService: TKmenZboziService; + FDokladOZService: TDokladOZService; + FPolozkaOZService: TPolozkaOZService; + FStavSkladuService: TStavSkladuService; + + FTPVOperaceDilceService: TTPVOperaceDilceService; + FTPVKusovnikDilceService: TTPVKusovnikDilceService; + + FVyrobniPrikazService: TVyrobniPrikazService; + FVyrobaVyrCisPrikazService: TVyrobaVyrCisPrikazService; + FMaterialPrikazuService: TMaterialPrikazuService; + FVyrobniOperaceService: TVyrobniOperaceService; + FKooperacniObjednavkaService: TKooperacniObjednavkaService; + + FVyrobaEvidRozpracOperaciService: TVyrobaEvidRozpracOperaciService; + FVyrobaEvidRozpracOperaciOperaceService: TVyrobaEvidRozpracOperaciOperaceService; + FVyrobaEvidenceOperaciService: TVyrobaEvidenceOperaciService; + + FQMSUdrzbaStrojuAZarizeniService: TQMSUdrzbaStrojuAZarizeniService; + FQMSObecneService: TQMSObecneService; + FQMSKontrolniPostupyService: TQMSKontrolniPostupyService; + FQMSKontrolniPlanService: TQMSKontrolniPlanService; + + FOrganizaceService: TOrganizaceService; + FTPVPracovisteService: TTPVPracovisteService; + FTPVStrojService: TTPVStrojService; + FTPVCisKoopService: TTPVCisKoopService; + FTPVCiselnikZmenService: TTPVCiselnikZmenService; + FTPVPrednastaveniOperaciService: TTPVPrednastaveniOperaciService; + FTPVZakazkoveModifikaceService: TTPVZakazkoveModifikaceService; + FTPVZakazkoveModifikaceDilceService: TTPVZakazkoveModifikaceDilceService; + +{$IFDEF CUSTOM_CTRL_Rootvin} + FRTNService: TRTNService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + FINCOSysService: TINCOSysService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + FGornickyService: TGornickyService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + FEMPNadobaService: TEMPNadobaService; +{$ENDIF} + function GetDataModule: TdatMod; + strict protected + FDM: TdatMod; + + function GetObecnyService: TObecnyService; + + function GetAktivitaService: TAktivitaService; + function GetUkolAktivityService: TUkolAktivityService; + + function GetQMSUdrzbaStrojuAZarizeniService: TQMSUdrzbaStrojuAZarizeniService; + function GetQMSObecneService: TQMSObecneService; + + function GetZamestnanciService: TZamestnanciService; + function GetOrganizaceService: TOrganizaceService; + function GetDokumentService: TDokumentService; + function GetPlanKalendarService: TPlanKalendarService; + function GetPolPlanKalendarService: TPolPlanKalendarService; + + function GetSkupinaZboziService: TSkupinaZboziService; + function GetKmenZboziService: TKmenZboziService; + function GetDokladOZService: TDokladOZService; + function GetPolozkaOZService: TPolozkaOZService; + function GetStavSkladuService: TStavSkladuService; + + function GetTPVOperaceDilceService: TTPVOperaceDilceService; + function GetTPVKusovnikDilceService: TTPVKusovnikDilceService; + + function GetVyrobniPrikazService: TVyrobniPrikazService; + function GetVyrobaVyrCisPrikazService: TVyrobaVyrCisPrikazService; + function GetMaterialPrikazuService: TMaterialPrikazuService; + function GetVyrobniOperaceService: TVyrobniOperaceService; + function GetKooperacniObjednavkaService: TKooperacniObjednavkaService; + + function GetVyrobaEvidRozpracOperaciService: TVyrobaEvidRozpracOperaciService; + function GetVyrobaEvidRozpracOperaciOperaceService: TVyrobaEvidRozpracOperaciOperaceService; + function GetVyrobaEvidenceOperaciService: TVyrobaEvidenceOperaciService; + + + function GetQMSKontrolniPostupyService: TQMSKontrolniPostupyService; + function GetQMSKontrolniPlanService: TQMSKontrolniPlanService; + + function GetTPVPracovisteService: TTPVPracovisteService; + function GetTPVStrojService: TTPVStrojService; + function GetTPVCisKoopService: TTPVCisKoopService; + function GetTPVCiselnikZmenService: TTPVCiselnikZmenService; + function GetTPVPrednastaveniOperaciService: TTPVPrednastaveniOperaciService; + function GetTPVZakazkoveModifikaceService: TTPVZakazkoveModifikaceService; + function GetTPVZakazkoveModifikaceDilceService: TTPVZakazkoveModifikaceDilceService; + +{$IFDEF CUSTOM_CTRL_Rootvin} + function GetRTNService: TRTNService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + function GetINCOSysService: TINCOSysService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + function GetGornickyService: TGornickyService; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + function GetEMPNadobaService: TEMPNadobaService; +{$ENDIF} + public + constructor Create; override; + destructor Destroy; override; + function sanitizeSQLString (s: string): string; + end; + + + [MVCPath('')] + TObecnyController = class(TBaseController) + public + [MVCPath('/test')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Obecny kontroler', 'Test dostupnosti DB', 'BaseTestDB')] +// [MVCProduces('text/plain')] + procedure TestDB; + + [MVCDoc('PomocĂ­ POST zapĂ­ĹĄe obecnĂĄ json data do Heliosu')] + [MVCPath('/zapisjson')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Obecny kontroler', 'ZĂĄpis JSON dat do db Heliosu', 'BaseZapisJSONDoHeliosu')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisJSONDoHeliosu (CTX: TWebContext); + + end; + + + + + + [MVCPatch] + + + + + [MVCSwagIgnorePath] + [MVCPath] + TRedirectController = class(TMVCController) + public + [MVCPath('/')] + [MVCHTTPMethod([httpGET])] + procedure DoRedirect; + end; + + +implementation + +uses + Winapi.ActiveX, + System.SysUtils, + System.DateUtils, + FireDAC.Stan.Consts; + + +{ TBaseController } + + constructor TBaseController.Create; + begin + inherited; + if not(Assigned(FDM)) then + FDM:= GetDataModule; + end; + + + + destructor TBaseController.Destroy; + begin + FObecnyService.Free; + FZamestnanciService.Free; + FOrganizaceService.Free; + FDokumentService.Free; + FPlanKalendarService.Free; + + FKmenZboziService.Free; + FStavSkladuService.Free; + + FDokladOZService.Free; + FPolozkaOZService.Free; + + FTPVOperaceDilceService.Free; + FTPVKusovnikDilceService.Free; + + FVyrobniPrikazService.Free; + FVyrobaVyrCisPrikazService.Free; + FVyrobniOperaceService.Free; + FKooperacniObjednavkaService.Free; + + FVyrobaEvidRozpracOperaciService.Free; + FVyrobaEvidRozpracOperaciOperaceService.Free; + FVyrobaEvidenceOperaciService.Free; + + FQMSObecneService.Free; + FQMSUdrzbaStrojuAZarizeniService.Free; + FQMSKontrolniPostupyService.Free; + FQMSKontrolniPlanService.Free; + + + FTPVPracovisteService.Free; + FTPVStrojService.Free; + FTPVCisKoopService.Free; + FTPVCiselnikZmenService.Free; + FTPVPrednastaveniOperaciService.Free; + FTPVZakazkoveModifikaceService.Free; + FTPVZakazkoveModifikaceDilceService.Free; + +{$IFDEF CUSTOM_CTRL_Rootvin} + FRTNService.Free; +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_INCOSystems} + FINCOSysService.Free; +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + FGornickyService.Free; +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + FEMPNadobaService.Free; +{$ENDIF} + + if Assigned(FDM) then + FDM.Free; + + inherited; + end; + + + + function TBaseController.GetDataModule: TdatMod; + begin + if not Assigned(FDM) then + FDM:= TdatMod.Create(nil); + + with FDM do + try + sqlConn.Params.Clear; + sqlConn.Params.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); + sqlConn.Params.Add(S_FD_ConnParam_Common_Server + '=' + datMod.dbServer); + sqlConn.Params.Add(S_FD_ConnParam_Common_Port + '=' + datMod.dbPort.ToString); + sqlConn.Params.Add(S_FD_ConnParam_Common_Database + '=' + datMod.dbName); + sqlConn.Params.Add(S_FD_ConnParam_Common_UserName + '=' + datMod.dbUser); + sqlConn.Params.Add(S_FD_ConnParam_Common_Password + '=' + datMod.dbPwd); + sqlConn.Params.Add(S_FD_ConnParam_Common_OSAuthent + '=No'); + sqlConn.Params.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); + sqlConn.Params.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes'); + sqlConn.Params.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc'); +// sqlConn.Open; + except on E:Exception do + end; + + result:= FDM; + end; + + + + function TBaseController.GetObecnyService: TObecnyService; + begin + if not Assigned(FObecnyService) then + FObecnyService:= TObecnyService.Create (GetDataModule); + result:= FObecnyService; + end; + + + function TBaseController.GetUkolAktivityService: TUkolAktivityService; + begin + if not Assigned(FUkolAktivityService) then + FUkolAktivityService:= TUkolAktivityService.Create (GetDataModule); + result:= FUkolAktivityService; + end; + + function TBaseController.GetAktivitaService: TAktivitaService; + begin + if not Assigned(FAktivitaService) then + FAktivitaService:= TAktivitaService.Create (GetDataModule); + result:= FAktivitaService; + end; + + + + + function TBaseController.GetQMSUdrzbaStrojuAZarizeniService: TQMSUdrzbaStrojuAZarizeniService; + begin + if not Assigned(FQMSUdrzbaStrojuAZarizeniService) then + FQMSUdrzbaStrojuAZarizeniService:= TQMSUdrzbaStrojuAZarizeniService.Create (GetDataModule); + result:= FQMSUdrzbaStrojuAZarizeniService; + end; + + + + function TBaseController.GetQMSObecneService: TQMSObecneService; + begin + if not Assigned(FQMSObecneService) then + FQMSObecneService:= TQMSObecneService.Create (GetDataModule); + result:= FQMSObecneService; + end; + + + + function TBaseController.GetZamestnanciService: TZamestnanciService; + begin + if not Assigned(FZamestnanciService) then + FZamestnanciService:= TZamestnanciService.Create (GetDataModule); + result:= FZamestnanciService; + end; + + + function TBaseController.GetDokumentService: TDokumentService; + begin + if not Assigned(FDokumentService) then + FDokumentService:= TDokumentService.Create (GetDataModule); + result:= FDokumentService; + end; + + + function TBaseController.GetPlanKalendarService: TPlanKalendarService; + begin + if not Assigned(FPlanKalendarService) then + FPlanKalendarService:= TPlanKalendarService.Create (GetDataModule); + result:= FPlanKalendarService; + end; + + function TBaseController.GetPolPlanKalendarService: TPolPlanKalendarService; + begin + if not Assigned(FPolPlanKalendarService) then + FPolPlanKalendarService:= TPolPlanKalendarService.Create (GetDataModule); + result:= FPolPlanKalendarService; + end; + + + + function TBaseController.GetKmenZboziService: TKmenZboziService; + begin + if not Assigned(FKmenZboziService) then + FKmenZboziService:= TKmenZboziService.Create (GetDataModule); + result:= FKmenZboziService; + end; + + + + function TBaseController.GetDokladOZService: TDokladOZService; + begin + if not Assigned(FDokladOZService) then + FDokladOZService:= TDokladOZService.Create(GetDataModule); + result:= FDokladOZService; + end; + + + + function TBaseController.GetPolozkaOZService: TPolozkaOZService; + begin + if not Assigned(FPolozkaOZService) then + FPolozkaOZService:= TPolozkaOZService.Create(GetDataModule); + result:= FPolozkaOZService; + end; + + + + function TBaseController.GetStavSkladuService: TStavSkladuService; + begin + if not Assigned(FStavSkladuService) then + FStavSkladuService:= TStavSkladuService.Create(GetDataModule); + result:= FStavSkladuService; + end; + + + + function TBaseController.GetSkupinaZboziService: TSkupinaZboziService; + begin + if not Assigned(FSkupinaZboziService) then + FSkupinaZboziService:= TSkupinaZboziService.Create(GetDataModule); + result:= FSkupinaZboziService; + end; + + + + + + function TBaseController.GetVyrobniPrikazService: TVyrobniPrikazService; + begin + if not Assigned(FVyrobniPrikazService) then + FVyrobniPrikazService:= TVyrobniPrikazService.Create(GetDataModule); + result:= FVyrobniPrikazService; + end; + + + + function TBaseController.GetVyrobaVyrCisPrikazService: TVyrobaVyrCisPrikazService; + begin + if not Assigned(FVyrobaVyrCisPrikazService) then + FVyrobaVyrCisPrikazService:= TVyrobaVyrCisPrikazService.Create(GetDataModule); + result:= FVyrobaVyrCisPrikazService; + end; + + + + function TBaseController.GetMaterialPrikazuService: TMaterialPrikazuService; + begin + if not Assigned(FMaterialPrikazuService) then + FMaterialPrikazuService:= TMaterialPrikazuService.Create (GetDataModule); + result:= FMaterialPrikazuService; + end; + + + + function TBaseController.GetVyrobniOperaceService: TVyrobniOperaceService; + begin + if not Assigned(FVyrobniOperaceService) then + FVyrobniOperaceService:= TVyrobniOperaceService.Create (GetDataModule); + result:= FVyrobniOperaceService; + end; + + + + function TBaseController.GetVyrobaEvidenceOperaciService: TVyrobaEvidenceOperaciService; + begin + if not Assigned(FVyrobaEvidenceOperaciService) then + FVyrobaEvidenceOperaciService:= TVyrobaEvidenceOperaciService.Create (GetDataModule); + result:= FVyrobaEvidenceOperaciService; + end; + + + + function TBaseController.GetVyrobaEvidRozpracOperaciService: TVyrobaEvidRozpracOperaciService; + begin + if not Assigned(FVyrobaEvidRozpracOperaciService) then + FVyrobaEvidRozpracOperaciService:= TVyrobaEvidRozpracOperaciService.Create (GetDataModule); + result:= FVyrobaEvidRozpracOperaciService; + end; + + + function TBaseController.GetVyrobaEvidRozpracOperaciOperaceService: TVyrobaEvidRozpracOperaciOperaceService; + begin + if not Assigned(FVyrobaEvidRozpracOperaciOperaceService) then + FVyrobaEvidRozpracOperaciOperaceService:= TVyrobaEvidRozpracOperaciOperaceService.Create (GetDataModule); + result:= FVyrobaEvidRozpracOperaciOperaceService; + end; + + + + function TBaseController.GetKooperacniObjednavkaService: TKooperacniObjednavkaService; + begin + if not Assigned(FKooperacniObjednavkaService) then + FKooperacniObjednavkaService:= TKooperacniObjednavkaService.Create (GetDataModule); + result:= FKooperacniObjednavkaService; + end; + + + + function TBaseController.GetOrganizaceService: TOrganizaceService; + begin + if not Assigned(FOrganizaceService) then + FOrganizaceService:= TOrganizaceService.Create (GetDataModule); + result:= FOrganizaceService; + end; + + + function TBaseController.GetQMSKontrolniPostupyService: TQMSKontrolniPostupyService; + begin + if not Assigned(FQMSKontrolniPostupyService) then + FQMSKontrolniPostupyService:= TQMSKontrolniPostupyService.Create (GetDataModule); + result:= FQMSKontrolniPostupyService; + end; + + + function TBaseController.GetQMSKontrolniPlanService: TQMSKontrolniPlanService; + begin + if not Assigned(FQMSKontrolniPlanService) then + FQMSKontrolniPlanService:= TQMSKontrolniPlanService.Create (GetDataModule); + result:= FQMSKontrolniPlanService; + end; + + + + function TBaseController.GetTPVCiselnikZmenService: TTPVCiselnikZmenService; + begin + if not Assigned(FTPVCiselnikZmenService) then + FTPVCiselnikZmenService:= TTPVCiselnikZmenService.Create(GetDataModule); + result:= FTPVCiselnikZmenService; + end; + + + function TBaseController.GetTPVPracovisteService: TTPVPracovisteService; + begin + if not Assigned(FTPVPracovisteService) then + FTPVPracovisteService:= TTPVPracovisteService.Create(GetDataModule); + result:= FTPVPracovisteService; + end; + + + function TBaseController.GetTPVStrojService: TTPVStrojService; + begin + if not Assigned(FTPVStrojService) then + FTPVStrojService:= TTPVStrojService.Create(GetDataModule); + result:= FTPVStrojService; + end; + + + function TBaseController.GetTPVCisKoopService: TTPVCisKoopService; + begin + if not Assigned(FTPVCisKoopService) then + FTPVCisKoopService:= TTPVCisKoopService.Create(GetDataModule); + result:= FTPVCisKoopService; + end; + + + + function TBaseController.GetTPVPrednastaveniOperaciService: TTPVPrednastaveniOperaciService; + begin + if not Assigned(FTPVPrednastaveniOperaciService) then + FTPVPrednastaveniOperaciService:= TTPVPrednastaveniOperaciService.Create (GetDataModule); + result:= FTPVPrednastaveniOperaciService; + end; + + + + function TBaseController.GetTPVZakazkoveModifikaceService: TTPVZakazkoveModifikaceService; + begin + if not Assigned(FTPVZakazkoveModifikaceService) then + FTPVZakazkoveModifikaceService:= TTPVZakazkoveModifikaceService.Create (GetDataModule); + result:= FTPVZakazkoveModifikaceService; + end; + + + + function TBaseController.GetTPVZakazkoveModifikaceDilceService: TTPVZakazkoveModifikaceDilceService; + begin + if not Assigned(FTPVZakazkoveModifikaceDilceService) then + FTPVZakazkoveModifikaceDilceService:= TTPVZakazkoveModifikaceDilceService.Create (GetDataModule); + result:= FTPVZakazkoveModifikaceDilceService; + end; + + + + function TBaseController.GetTPVOperaceDilceService: TTPVOperaceDilceService; + begin + if not Assigned(FTPVOperaceDilceService) then + FTPVOperaceDilceService:= TTPVOperaceDilceService.Create (GetDataModule); + result:= FTPVOperaceDilceService; + end; + + + function TBaseController.GetTPVKusovnikDilceService: TTPVKusovnikDilceService; + begin + if not Assigned(FTPVKusovnikDilceService) then + FTPVKusovnikDilceService:= TTPVKusovnikDilceService.Create (GetDataModule); + result:= FTPVKusovnikDilceService; + end; + + +{$IFDEF CUSTOM_CTRL_Rootvin} + function TBaseController.GetRTNService: TRTNService; + begin + if not Assigned(FRTNService) then + FRTNService:= TRTNService.Create(GetDataModule); + result:= FRTNService; + end; +{$ENDIF} + + +{$IFDEF CUSTOM_CTRL_INCOSystems} + function TBaseController.GetINCOSysService: TINCOSysService; + begin + if not Assigned(FINCOSysService) then + FINCOSysService:= TINCOSysService.Create (GetDataModule); + result:= FINCOSysService; + end; +{$ENDIF} + + +{$IFDEF CUSTOM_CTRL_Gornicky} + function TBaseController.GetGornickyService: TGornickyService; + begin + if not Assigned(FGornickyService) then + FGornickyService:= TGornickyService.Create (GetDataModule); + result:= FGornickyService; + end; +{$ENDIF} + + +{$IFDEF CUSTOM_CTRL_EMPolar} + function TBaseController.GetEMPNadobaService: TEMPNadobaService; + begin + if not Assigned(FEMPNadobaService) then + FEMPNadobaService:= TEMPNadobaService.Create (GetDataModule); + result:= FEMPNadobaService; + end; +{$ENDIF} + + + function TBaseController.sanitizeSQLString (s: string): string; + begin + result:= s.Replace(' ', '').Replace(';', '').Replace('--', '').Replace(' OR', '').Trim; + end; + + + + + +{ TRedirectController } + procedure TRedirectController.DoRedirect; + begin + Redirect('/swagger'); + end; + + + + + + +{ TObecnyController } + + procedure TObecnyController.TestDB; + begin + + try + if not(FDM.sqlConn.Connected) then + FDM.sqlConn.Open; + finally + end; + if not(FDM.sqlConn.Connected) then + begin + RenderStatusMessage(200, FDM.ErrorStatusJsonText('NO_DB_CONNECTION')); +{$IFDEF NORENDER400} +// RenderStatusMessage(200); +{$ENDIF} + Exit; + end; + + + try + Render(ObjectDict().Add('data', GetObecnyService.DoTesty)); // viz uSvc_KmenZbozi.pas + except +{$IFDEF NORENDER400} + RenderStatusMessage(200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; +{$ENDIF} + end; + end; + + + + + procedure TObecnyController.ZapisJSONDoHeliosu (CTX: TWebContext); + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + try + if not(FDM.sqlConn.Connected) then + FDM.sqlConn.Open; + finally + end; + if not(FDM.sqlConn.Connected) then + begin + RenderStatusMessage(200, FDM.ErrorStatusJsonText('NO_DB_CONNECTION')); +{$IFDEF NORENDER400} +// RenderStatusMessage(200); +{$ENDIF} + Exit; + end; + + + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + GetObecnyService.ZapisJsonDoHeliosu (jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + except +{$IFDEF NORENDER400} + RenderStatusMessage(200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; +{$ENDIF} + end; + end; + + +end. diff --git a/uCtrlKmenZbozi.pas b/uCtrlKmenZbozi.pas new file mode 100644 index 0000000..65a28db --- /dev/null +++ b/uCtrlKmenZbozi.pas @@ -0,0 +1,429 @@ +ďťż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; + begin + params:= TDictionary.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; + begin + + params:= TDictionary.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; + begin + params:= TDictionary.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. diff --git a/uCtrlObecne.pas b/uCtrlObecne.pas new file mode 100644 index 0000000..2a111b9 --- /dev/null +++ b/uCtrlObecne.pas @@ -0,0 +1,633 @@ +unit uCtrlObecne; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + mvcframework, + mvcframework.Commons, + mvcframework.Serializer.Commons, + uCtrlBase, + uHeoObj_Base +{$IFDEF SWAGGER} + , MVCFramework.Swagger.Commons +{$ENDIF} +; + + +const +{$I globalConsts.inc} + +type + [MVCPath('/aktivity')] + TAktivitaController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Aktivity', 'Vrátí metadata', 'AktivityGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] +// [MVCProduces('application/json')] + [MVCSwagSummary('Aktivity', 'Vratí detail aktivity', 'AktivityGetByID')] + [MVCSwagParam(plPath, 'id', 'ID aktivity', ptString, true)] + [MVCSwagParam(plQuery, 'kateg', 'Kategorie', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagResponses(200, 'Success', TAktivita, false)] + procedure GetByID (id: string=''; + [MVCFromQueryString('kateg', '')] kateg: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string='' + ); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Aktivity', 'Vratí seznam aktivit', 'GetAll_Aktivity')] + [MVCSwagParam(plQuery, 'kateg', 'Kategorie', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagResponses(200, 'Success', TAktivita, true)] + procedure GetAll ([MVCFromQueryString('kateg', '')] kateg: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string='' + ); + end; + + + + + [MVCPath('/ukoly')] + TUkolAktivityController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Úkoly', 'Vrátí metadata', 'UkolAktivityGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] +// [MVCProduces('application/json')] + [MVCSwagSummary('Úkoly', 'Vratí detail úkolu', 'UkolAktivityGetByID')] + [MVCSwagParam(plPath, 'id', 'ID úkolu', ptString, true)] + [MVCSwagResponses(200, 'Success', TUkolAktivity, false)] + procedure GetByID (id: string=''); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Úkoly', 'Vratí seznam úkolů', 'UkolAktivityGetAll')] + [MVCSwagParam(plQuery, 'idkj', 'ID aktivity', ptString, false)] + [MVCSwagResponses(200, 'Success', TUkolAktivity, true)] + procedure GetAll ([MVCFromQueryString('idkj', '')] sIdKj: string='0' + ); + end; + + + + + + [MVCPath('/dokumenty')] + [MVCSwagSummary('Dokumenty', 'Dokumenty', '')] + TDokumentController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Dokument', 'Vrátí metadata', 'DokumentyGetMeta')] + procedure GetMeta; + + [MVCPath('/strom')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Dokument', 'Vrátí stromovou strukturu dokumentu', 'DokumentyGetDokumStrom')] + procedure GetDokumStrom; + + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] +// [MVCProduces('application/json')] + [MVCSwagSummary('Dokument', 'Vratí dokument', 'DokumentyGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dokumentu', ptString, true)] + [MVCSwagParam(plQuery, 'jenHlavicka', '1=jen hlavičku (bez obsahu dokumetu)', ptString, false)] + [MVCSwagResponses(200, 'Success', TDokument, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('jenHlavicka', '1')] jenHlavicka: string='1' + ); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Dokument', 'Vratí dokument', 'DokumentyGetAll')] + [MVCSwagParam(plQuery, 'jenHlavicka', '1=jen hlavičku (bez obsahu dokumetu)', ptString, false)] + [MVCSwagParam(plQuery, 'pripona', 'Přípona názvu souboru dokumetu', ptString, false)] + [MVCSwagParam(plQuery, 'iddokstrom', 'ID stromové struktury dokumetu', ptString, false)] + [MVCSwagParam(plQuery, 'iddoktyp', 'ID typu dokumetu', ptString, false)] + [MVCSwagResponses(200, 'Success', TDokument, true)] + procedure GetAll ([MVCFromQueryString('jenHlavicka', '1')] jenHlavicka: string='1'; + [MVCFromQueryString('pripona', '')] pripona: string=''; + [MVCFromQueryString('iddokstrom', '')] idDokStrom: string=''; + [MVCFromQueryString('iddoktyp', '')] idDokTyp: string='' + ); + end; + + + + + [MVCPath('/ciselnik/plankalendar')] + TPlanKalendarController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Plánovací kalendář', 'Vrátí metadata', 'TPVPlanKalendarGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] +// [MVCProduces('application/json')] + [MVCSwagSummary('Plánovací kalendář', 'Vratí plánovací kalendář', 'TPVPlanKalendarGetByID')] + [MVCSwagParam(plPath, 'id', 'ID plánovacího kalendáře', ptString, true)] + [MVCSwagParam(plQuery, 'polozky', '1=vrátí kalendář včetně položek', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'idkooperace', 'ID kooperace', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD / RRRRMMDDHHMM', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formátu RRRRMMDD / RRRRMMDDHHMM', ptString, false)] + [MVCSwagResponses(200, 'Success', TPlanKalendar, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('polozky', '')] polozky: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('idstroj', '')] idstroj: string=''; + [MVCFromQueryString('idkooperace', '')] idkooperace: string='' + ); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Plánovací kalendář', 'Vratí dokument', 'TPVPlanKalendarGetAll')] + [MVCSwagParam(plQuery, 'oznaceni', 'Označení kalendáře', ptString, false)] + [MVCSwagResponses(200, 'Success', TPlanKalendar, true)] + procedure GetAll ([MVCFromQueryString('oznaceni', '')] oznaceni: string=''); + + end; + +implementation + + +uses + uSvc_Base, + uCommons, + mvcframework.Serializer.Intf, + System.RegularExpressions, + System.StrUtils, + System.SysUtils; + + +{ TDokumentController } + + procedure TDokumentController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetDokumentService.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 TDokumentController.GetDokumStrom; + begin + try + Render(ObjectDict().Add('data', GetDokumentService.GetDokumStrom)); + 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 TDokumentController.GetAll (jenHlavicka: string='1'; pripona: string=''; idDokStrom: string=''; idDokTyp: string=''); + var params: TDictionary; + i1, i2: integer; + begin + params:= TDictionary.Create; + + jenHlavicka:= sanitizeSQLString(jenHlavicka); + if (jenHlavicka='1') then + params.Add('jenHlavicka', '1'); + + pripona:= sanitizeSQLString(pripona); + if (pripona<>'') then + params.Add('pripona', pripona); + + 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 + Render(ObjectDict().Add('data', GetDokumentService.GetByParams (params))); // viz uSvc_Obecne.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 TDokumentController.GetByID (id: string=''; jenHlavicka: string='1'); + var iId: integer; + h: boolean; + begin + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + h:= false; + if (jenHlavicka='1') then + h:= true; + + try + Render(ObjectDict().Add('data', GetDokumentService.GetByID (iId, h))) + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +{$ENDIF} + end; + end; + + + + + + +{ TPlanKalendarController } + procedure TPlanKalendarController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetPlanKalendarService.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 TPlanKalendarController.GetByID (id: string=''; polozky: string=''; odDatum: string=''; doDatum: string=''; idStroj: string=''; idKooperace: string=''); + var iId, iIdStroj, iIdKooperace: integer; + bPolozky: boolean; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + iIdStroj:= 0; + idStroj:= sanitizeSQLString(idStroj); + if (idStroj<>'') then + if not(TryStrToInt(idStroj, iIdStroj)) then + iIdStroj:= 0; + if (iIdStroj>0) then + params.Add('idstroj', iIdStroj.ToString); + + iIdKooperace:= 0; + idKooperace:= sanitizeSQLString(idKooperace); + if (idKooperace<>'') then + if not(TryStrToInt(idKooperace, iIdKooperace)) then + iIdKooperace:= 0; + if (iIdKooperace>0) then + params.Add('idkooperace', iIdKooperace.ToString); + + bPolozky:= False; + polozky:= sanitizeSQLString(polozky); + if (polozky='1') then + bPolozky:= true; + if (bPolozky) then + params.Add('polozky', '1'); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('oddatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('dodatum', doDatum); + + try + try +// Render(ObjectDict().Add('data', GetPlanKalendarService.GetByParams (params)) ); + Render(ObjectDict().Add('data', GetPlanKalendarService.GetByID (iId, bPolozky, params))) + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +{$ENDIF} + end; + finally + params.Free; + end; + end; + + + + procedure TPlanKalendarController.GetAll (oznaceni: string=''); + var params: TDictionary; + begin + params:= TDictionary.Create; + + oznaceni:= sanitizeSQLString(oznaceni); + if (oznaceni<>'') then + params.Add('oznaceni', oznaceni); + + try + Render(ObjectDict().Add('data', GetPlanKalendarService.GetByParams (params), nil, nil)); // viz uSvc_Obecne.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; + + + + + + + +{ TUkolAktivityController } + procedure TUkolAktivityController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetUkolAktivityService.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 TUkolAktivityController.GetAll (sIdKj: string = '0'); + var idKJ: Integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + idKJ:= 0; + sIdKj:= sanitizeSQLString(sIdKj); + if (sIdKj<>'') then + if not(TryStrToInt(sIdKj, idKJ)) then + idKJ:= 0; + if (idKJ>0) then + params.Add('idKontaktJedn', idKJ.ToString); + + try + Render(ObjectDict().Add('data', GetUkolAktivityService.GetByParams (params) )); // viz uSvc_Obecne.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; + + + + + procedure TUkolAktivityController.GetByID (id: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetUkolAktivityService.GetByParams (params) )); // viz uSvc_Obecne.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; + + + + + + + +{ TAktivitaController } + procedure TAktivitaController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetAktivitaService.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 TAktivitaController.GetAll (kateg: string = ''; odDatum: string=''; doDatum: string=''); + var params: TDictionary; + begin + params:= TDictionary.Create; + + kateg:= sanitizeSQLString(kateg); + if (kateg<>'') then + params.Add('kategorie', kateg); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + + try + Render(ObjectDict().Add('data', GetUkolAktivityService.GetByParams (params) )); // viz uSvc_Obecne.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; + + + + + procedure TAktivitaController.GetByID (id: string=''; kateg: string = ''; odDatum: string=''; doDatum: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + kateg:= sanitizeSQLString(kateg); + if (kateg<>'') then + params.Add('kategorie', kateg); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + + + try + Render(ObjectDict().Add('data', GetAktivitaService.GetByParams (params) )); // viz uSvc_Obecne.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; + + +end. diff --git a/uCtrlObehZbozi.pas b/uCtrlObehZbozi.pas new file mode 100644 index 0000000..af79cdd --- /dev/null +++ b/uCtrlObehZbozi.pas @@ -0,0 +1,612 @@ +unit uCtrlObehZbozi; + +interface +{$I 'GlobalDefs.inc'} + + +uses + mvcframework, + mvcframework.Commons, + mvcframework.Serializer.Commons, + uCtrlBase, + uHeoObj_Base, + MVCFramework.Swagger.Commons; + + +const +{$I globalConsts.inc} + +type + [MVCPath('/stavskladu')] + TStavSkladuController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Stav skladu', 'Vraci metadata položky stavu skladu', 'StavSkladuGetMeta')] + procedure GetMeta; + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Stav skladu', 'Vraci položky stavu skladu', 'StavSkladuGetAll')] + [MVCSwagParam(plQuery, 'idsklad', 'Číslo skladu', ptString, false)] + [MVCSwagParam(plQuery, 'archivni', '1=včetně blokovaných', ptString, false)] + [MVCSwagResponses(200, 'Success', TStavSkladu, true)] + procedure GetAll ([MVCFromQueryString('idsklad', '')] idSklad: string=''; + [MVCFromQueryString('archivni', '')] archivni: string='' + ); + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Stav skladu', 'Vrací data položky stavu skladu', 'StavSkladuGetByID')] +// [MVCSwagParam(plQuery, 'idsklad', 'Číslo skladu', ptString, false)] +// [MVCSwagParam(plQuery, 'archivni', '1=včetně blokovaných', ptString, false)] + [MVCSwagResponses(200, 'Success', TStavSkladu, true)] + [MVCSwagParam(plPath, 'id', 'ID stavu skladu', ptString, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('idsklad', '')] idSklad: string=''; + [MVCFromQueryString('archivni', '')] archivni: string='' + ); + end; + + + + [MVCPath('/dokladoz')] + TDokladOZController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Doklady oběhu zboží', 'Vrací metadata dokladu oběhu zboží', 'DokladOZGetMeta')] + procedure GetMeta; + + [MVCPath('/radadokladu')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Doklady oběhu zboží', 'Vrací seznam řad dokladů oběhu zboží', 'DokladOZGetDruhyDok')] + [MVCSwagResponses(200, 'Success', TDruhDokZbo, true)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu dokladu', ptString, false)] + procedure GetDruhyDokladu ([MVCFromQueryString('druhpohybu', '')] druhpohybu: string=''); + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Doklady oběhu zboží', 'Vrací doklad oběhu zboží dle ID', 'DokladOZGetByID')] + [MVCSwagResponses(200, 'Success', TDokladOZ, true)] + [MVCSwagParam(plPath, 'id', 'ID dokladu OZ', ptString, true)] + [MVCSwagParam(plQuery, 'polozky', '0=bez polozek / 1=polozkami', ptString, false)] + [MVCSwagParam(plQuery, 'sdserver', '1=vyrobni cisla/sarze z tabulky SDScanData', ptString, false)] + procedure GetByID (id: string=''; + [MVCFromQueryString('sdserver', '')] sdServer: string='1'; + [MVCFromQueryString('polozky', '')] polozky: string='0' + ); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Doklady oběhu zboží', 'Vrací doklady oběhu zboží', 'DokladOZGetAll')] + [MVCSwagResponses(200, 'Success', TDokladOZ, true)] + [MVCSwagParam(plQuery, 'cisloorg', 'Číslo organizace', ptString, false)] + [MVCSwagParam(plQuery, 'druhpohybu', 'Druh pohybu dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'radadokladu', 'Řada dokladů pohybového dokladu', ptString, false)] + [MVCSwagParam(plQuery, 'sklad', 'Sklad', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum od ve formátu RRRRMMDD (pokud neni zadano, bere se jen vcera a dnes)', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do ve formátu RRRRMMDD', ptString, false)] + [MVCSwagParam(plQuery, 'realizovane', '1=jen realizované doklady', ptString, false)] + [MVCSwagParam(plQuery, 'seznam', '1=jen seznam se základními údaji', ptString, false)] + [MVCSwagParam(plQuery, 'minimum', '0=vsechny sloupce / 1=jen zakladni udaje', ptString, false)] + [MVCSwagParam(plQuery, 'polozky', '0=bez polozek / 1=s polozkami (default)', ptString, false)] + [MVCSwagParam(plQuery, 'sdserver', '1=vyrobni cisla/sarze z tabulky SDScanData', ptString, false)] + procedure GetAll ([MVCFromQueryString('cisloorg', '')] cisloorg: string=''; + [MVCFromQueryString('druhpohybu', '')] druhpohybu: string=''; + [MVCFromQueryString('radadokladu', '')] radadokladu: string=''; + [MVCFromQueryString('sklad', '')] sklad: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string=''; + [MVCFromQueryString('realizovane', '')] realizovane: string=''; + [MVCFromQueryString('seznam', '0')] jenSeznam: string=''; + [MVCFromQueryString('minimum', '')] minimumDat: string=''; + [MVCFromQueryString('polozky', '1')] polozky: string=''; + [MVCFromQueryString('sdserver', '')] sdServer: string='' + ); + +{$IFDEF POST_PUT} + [MVCPath('/($id)')] + [MVCHTTPMethod([httpPUT])] + [MVCSwagSummary('Doklady oběhu zboží', 'Upraví doklad oběhu zboží', 'DokladOZZalozUpravOZ')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure UpravDokladOZ (id: string; CTX: TWebContext); + + [MVCPath('')] + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Doklady oběhu zboží', 'Založí doklad oběhu zboží', 'DokladOZZalozDokladOZ')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZalozDokladOZ (CTX: TWebContext); +{$ENDIF} + end; + + + + [MVCPath('/polozkaoz')] + TPolozkaOZController = class(TBaseController) + public +{ + procedure GetByICODIC(const [MVCFromQueryString('ico', '')] ico: string; + const [MVCFromQueryString('dic', '')] dic: string + ); +} + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Položky oběhu zboží', 'Vrací metadata položky dokladu oběhu zboží', 'PolozkaOZGetMeta')] + procedure GetMeta; + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCSwagSummary('Položky oběhu zboží', 'Vrací položky dokladů oběhu zboží.' + CRLF + CRLF + 'Pozor u výrobních čísel (serialnums) položek materiálové příjemky' + CRLF + '- atribut Nazev1 je ŠARŽE' + + CRLF + '- atribut VyrCis je číslo PALETOVÉHO LISTU' + CRLF + '!! Pokud je nastaven sloupec ZdrojSD=1 je potreba to pri komunikaci zminovat !!' + + CRLF + '(je to příznak že ID není ze standardní tabulky Heliosu ale zdrojem jsou skenovaná data SD Serveru)', 'PolozkaOZGetAll')] +{$ELSE} + [MVCSwagSummary('Položky oběhu zboží', 'Vrací položky dokladů oběhu zboží', 'PolozkaOZGetAll')] +{$ENDIF} + [MVCSwagResponses(200, 'Success', TPohybOZ, true)] + [MVCSwagParam(plQuery, 'iddoklad', 'ID dokladu oběhu zboží', ptString, false)] + procedure GetAll ([MVCFromQueryString('iddoklad', '')] iddoklad: string='' + ); + + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Položky oběhu zboží', 'Vrací data položky/položek oběhu zboží', 'PolozkaOZGetByID')] + [MVCSwagResponses(200, 'Success', TPohybOZ, true)] + [MVCSwagParam(plPath, 'id', 'ID položky OZ', ptString, true)] + procedure GetByID (id: string=''; + [MVCFromQueryString('iddoklad', '')] iddoklad: string='' + ); + +{$IFDEF POST_PUT} + [MVCPath('/($id)')] + [MVCHTTPMethod([httpPUT])] + [MVCSwagSummary('Položky oběhu zboží', 'Upraví položku na doklad oběhu zboží', 'PolozkaOZUpravPolozkuOZ')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure UpravPolozkuOZ (id: string=''; CTX: TWebContext); + + [MVCPath('')] + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Položky oběhu zboží', 'Založí položku na doklad oběhu zboží', 'PolozkaOZZalozPolozkuOZ')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZalozPolozkuOZ (CTX: TWebContext); +{$ENDIF} + end; + + + +implementation + +uses + uSvc_Base, + uCommons, + mvcframework.Serializer.Intf, + System.Generics.Collections, + System.RegularExpressions, + System.StrUtils, + System.SysUtils; + + + + +{ TStavSkladuController } + + procedure TStavSkladuController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetDokladOZService.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 TStavSkladuController.GetAll(idSklad: string=''; archivni: string=''); + begin + idSklad:= sanitizeSQLString(idSklad); + archivni:= sanitizeSQLString(archivni); + GetByID('', idSklad, archivni); + end; + + + + procedure TStavSkladuController.GetByID(id: string = ''; idSklad: string=''; archivni: string=''); + var iId: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + idSklad:= sanitizeSQLString(idSklad); + if (idSklad<>'') then + params.Add('idsklad', idSklad); + + archivni:= sanitizeSQLString(archivni); + if (archivni<>'') then + if (archivni='1') then + params.Add('blokovane', '1'); + + + try + Render(ObjectDict().Add('data', GetStavSkladuService.GetByParams(params))); // viz uSvc_ObehZbozi.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; + + + + + + +{ TDokladOZController } + + procedure TDokladOZController.GetAll (cisloorg: string=''; druhpohybu: string=''; radadokladu: string=''; sklad: string=''; odDatum: string=''; + doDatum: string=''; realizovane: string=''; jenSeznam: string=''; minimumDat: string=''; polozky: string=''; + sdServer: string=''); + var iId, iCisOrg, dpz: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; +{ + cisloorg:= sanitizeSQLString(cisloorg); + druhpohybu:= sanitizeSQLString(druhpohybu); + radadokladu:= sanitizeSQLString(radadokladu); + sklad:= sanitizeSQLString(sklad); + odDatum:= sanitizeSQLString(odDatum); + doDatum:= sanitizeSQLString(doDatum); + jenSeznam:= sanitizeSQLString(jenSeznam); + + GetByID ('', cisloorg, druhpohybu, radadokladu, sklad, odDatum, doDatum, jenSeznam); +} + + iCisOrg:= -1; + cisloorg:= sanitizeSQLString(cisloorg); + if not(TryStrToInt(cisloorg, iCisOrg)) then + iCisOrg:= -1; + if (iCisOrg>-1) then + params.Add('organizace', iCisOrg.ToString); + + dpz:= -1; + druhpohybu:= sanitizeSQLString(druhpohybu); + if not(TryStrToInt(druhpohybu, dpz)) then + dpz:= -1; + if (dpz>-1) then + params.Add('druhpohybu', dpz.ToString); + + radadokladu:= sanitizeSQLString(radadokladu); + if (radadokladu<>'') then + params.Add('radadokladu', radadokladu); + + sklad:= sanitizeSQLString(sklad); + if (sklad<>'') then + params.Add('sklad', sklad); + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + params.Add('seznam', '1'); + + minimumDat:= sanitizeSQLString(minimumDat); + if (minimumDat='1') then + params.Add('minimum', '1'); + + polozky:= sanitizeSQLString(polozky); + if (polozky='1') then + params.Add('polozky', '1'); + + realizovane:= sanitizeSQLString(realizovane); + if (realizovane='1') then + params.Add('jenReal', '1'); + + sdServer:= sanitizeSQLString(sdServer); + if (sdServer='1') then + params.Add('sdServer', '1'); + + + try + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); // viz uSvc_ObehZbozi.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 TDokladOZController.GetDruhyDokladu (druhpohybu: string = ''); + begin + druhpohybu:= sanitizeSQLString(druhpohybu); + + try + Render(ObjectDict().Add('data', GetDokladOZService.GetDruhyDokladu(druhpohybu))); // viz uSvc_ObehZbozi.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; + + + + + procedure TDokladOZController.GetByID (id: string=''; sdServer: string='1'; polozky: string='0'); + var iId: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + sdServer:= sanitizeSQLString(sdServer); + if (sdServer='1') then + params.Add('sdServer', '1'); + + if (polozky='1') then + params.Add('polozky', '1'); + + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + begin + params.Add('id', iId.ToString); + try + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); // viz uSvc_ObehZbozi.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 + RenderStatusMessage (200); + + params.Free; + + end; + + + + + procedure TDokladOZController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetDokladOZService.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; + + + +{$IFDEF POST_PUT} + procedure TDokladOZController.UpravDokladOZ (id: string; CTX: TWebContext); + var iId: integer; + begin + try + 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 TDokladOZController.ZalozDokladOZ (CTX: TWebContext); + begin + try + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +{$ENDIF} + end; + end; +{$ENDIF} + + + + + +{ TPolozkaOZController } + + procedure TPolozkaOZController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetPolozkaOZService.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 TPolozkaOZController.GetAll (iddoklad: string = ''); + begin + iddoklad:= sanitizeSQLString(iddoklad); + GetByID('', iddoklad); + end; + + + + + procedure TPolozkaOZController.GetByID (id: string=''; iddoklad: string=''); + var iId, iIdDoklad: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + + iIdDoklad:= -1; + iddoklad:= sanitizeSQLString(iddoklad); + if not(TryStrToInt(iddoklad, iIdDoklad)) then + iIdDoklad:= -1; + if (iIdDoklad>-1) then + params.Add('iddoklad', iIdDoklad.ToString); + + try + Render(ObjectDict().Add('data', GetPolozkaOZService.GetByParams(params))); // viz uSvc_ObehZbozi.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; + + + +{$IFDEF POST_PUT} + procedure TPolozkaOZController.UpravPolozkuOZ (id: string=''; CTX: TWebContext); + var iId: integer; + begin + + try + 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 TPolozkaOZController.ZalozPolozkuOZ (CTX: TWebContext); + begin + try + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +{$ENDIF} + end; + end; + +{$ENDIF} + +end. diff --git a/uCtrlOrganizace.pas b/uCtrlOrganizace.pas new file mode 100644 index 0000000..7fd8a5f --- /dev/null +++ b/uCtrlOrganizace.pas @@ -0,0 +1,188 @@ +unit uCtrlOrganizace; + +interface +{$I 'GlobalDefs.inc'} + +uses + mvcframework, + mvcframework.Commons, + mvcframework.Serializer.Commons, + uCtrlBase, + uHeoObj_Base +{$IFDEF SWAGGER} + ,MVCFramework.Swagger.Commons +{$ENDIF} + ; + + +const +{$I globalConsts.inc} + +type + [MVCPath('/organizace')] + TOrganizaceController = class(TBaseController) + public +{ + procedure GetByICODIC(const [MVCFromQueryString('ico', '')] ico: string; + const [MVCFromQueryString('dic', '')] dic: string + ); +} + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Organizace', 'Vraci metadata kmenové karty', 'OrganizaceGetMeta')] + procedure GetMeta; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Organizace', 'Vrací seznam všech organizací', 'OrganizaceGetAll')] + [MVCSwagResponses(200, 'Success', TOrganizace)] + procedure GetAll; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Organizace', 'Vrací detail organizace', 'OrganizaceGetByID')] + [MVCSwagParam(plPath, 'id', 'ID organizace', ptString, false)] + [MVCSwagParam(plQuery, 'cislo', 'Číslo organizace', ptString, false)] + [MVCSwagParam(plQuery, 'ico', 'IČO organizace', ptString, false)] + [MVCSwagParam(plQuery, 'dic', 'DIČ organizace', ptString, false)] + [MVCSwagResponses(200, 'Success', TOrganizace)] + procedure GetByID (id: string='0'; + [MVCFromQueryString('cislo', '')] cislo: string=''; + [MVCFromQueryString('ico', '')] ico: string=''; + [MVCFromQueryString('dic', '')] dic: string='' + ); + end; + +implementation + +uses + uSvc_Base, + uCommons, + mvcframework.Serializer.Intf, + System.Generics.Collections, + System.RegularExpressions, + System.StrUtils, + System.SysUtils; + + +{ TKmenZboziController } + + + procedure TOrganizaceController.GetAll; + begin + try + Render(ObjectDict().Add('data', GetOrganizaceService.GetAll)); // viz uSvc_Organizace.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + end; + + +{ + procedure TOrganizaceController.GetByICODIC(const ico, dic: string); + begin + try + if (dic.Trim<>'')then + Render(ObjectDict().Add('data', GetOrganizaceService.GetByDIC(dic))) + else + if (ico.Trim<>'')then + Render(ObjectDict().Add('data', GetOrganizaceService.GetByICO(ico))) // viz uSvc_Organizace.pas + else + Render(ObjectDict().Add('data', GetOrganizaceService.GetAll)) + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + end; +} + + procedure TOrganizaceController.GetByID(id: string='0'; cislo: string=''; ico: string=''; dic: string=''); + var iId, iCislo: integer; + typ: Byte; + params: TDictionary; + begin + + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + + iCislo:= -1; + cislo:= sanitizeSQLString(cislo); + if not(TryStrToInt(cislo, iCislo)) then + iCislo:= -1; + if (iCislo>-1) then + params.Add('cislo', iCislo.ToString); + + ico:= sanitizeSQLString(ico); + if (ico<>'') then + params.Add('ico', ico); + + dic:= sanitizeSQLString(dic); + if (dic<>'') then + params.Add('dic', dic); + + typ:= 0; + if (iId>-1) then + typ:= 0; + if (iCislo>-1) then + typ:= 1; + if (ico<>'') then + typ:= 2; + if (dic<>'') then + typ:= 3; + + typ:= 4; + + try + case typ of + 0: Render(ObjectDict().Add('data', GetOrganizaceService.GetByID(iId))); // viz uSvc_Organizace.pas + 1: Render(ObjectDict().Add('data', GetOrganizaceService.GetByCislo(iCislo))); + 2: Render(ObjectDict().Add('data', GetOrganizaceService.GetByICO(ico))); + 3: Render(ObjectDict().Add('data', GetOrganizaceService.GetByDIC(dic))); + 4: Render(ObjectDict().Add('data', GetOrganizaceService.GetByParams(params))); + end; + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + + params.Free; + + end; + + + + procedure TOrganizaceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetOrganizaceService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; + end; + end; + +end. diff --git a/uCtrlQMS.pas b/uCtrlQMS.pas new file mode 100644 index 0000000..1616497 --- /dev/null +++ b/uCtrlQMS.pas @@ -0,0 +1,561 @@ +ďťż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; + begin + + params:= TDictionary.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; + 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; + begin + p:= TDictionary.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. diff --git a/uCtrlVyroba.pas b/uCtrlVyroba.pas new file mode 100644 index 0000000..7ce8775 --- /dev/null +++ b/uCtrlVyroba.pas @@ -0,0 +1,2551 @@ +unit uCtrlVyroba; + +interface +{$I 'GlobalDefs.inc'} + + +uses + MVCFramework, + MVCFramework.Logger, + MVCFramework.Commons, + MVCFramework.Serializer.Commons, + uCtrlBase, + uHeoObj_Vyroba, + uHeoObj_QMS +{$IFDEF SWAGGER} + ,MVCFramework.Swagger.Commons +{$ENDIF} + ; + +const +{$I globalConsts.inc} + +type + [MVCPath('/vyroba/prikaz')] + [MVCPath('/vyrobniprikaz')] + TVyrobniPrikazController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí metadata', 'VyrobniPrikazGetMeta')] + procedure GetMeta; + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí seznam výrobních příkazů', 'VyrobniPrikazGetAll')] + [MVCSwagParam(plQuery, 'stav', 'Příkazy jen v požadovaném stavu (číselně, např. 30=zadáno)', ptString, false)] + [MVCSwagParam(plQuery, 'rada', 'Řada výrobních příkazů', ptString, false)] + [MVCSwagParam(plQuery, 'prikaz', 'Číslo vvýrobního', ptString, false)] + [MVCSwagParam(plQuery, 'skdilce', 'Skupina karet dílce', ptString, false)] + [MVCSwagParam(plQuery, 'iddilce', 'ID vyráběného dílce', ptString, false)] + [MVCSwagParam(plQuery, 'cislozakazky', 'Číslo zakázky', ptString, false)] + [MVCSwagParam(plQuery, 'zakazmodif', 'ID zakázkové modifikace', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '1=vrátí seznam výrobní operace', ptString, false, '0')] + [MVCSwagParam(plQuery, 'material', '1=vrátí seznam materiálových požadavků', ptString, false, '0')] + [MVCSwagParam(plQuery, 'spustene', '1=jen spuštené, tj. ty, co mají svou operaci v neukončené Evidenci rozpracovaných operací', ptString, false)] + [MVCSwagParam(plQuery, 'debug', '1=zapise SQL query do log souboru', ptString, false, '0')] + [MVCSwagResponses(200, 'Success', TVyrobniPrikaz, true)] + [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetAll ([MVCFromQueryString('stav', '')] stav: string=''; + [MVCFromQueryString('rada', '')] radaVPr: string=''; + [MVCFromQueryString('prikaz', '')] cisloVPr: string=''; + [MVCFromQueryString('skdilce', '')] skDilce: string=''; + [MVCFromQueryString('iddilce', '')] sIdDilce: string=''; + [MVCFromQueryString('cislozakazky', '')] cisloZak: string=''; + [MVCFromQueryString('zakazmodif', '')] sIdZakModif: string=''; + [MVCFromQueryString('operace', '0')] operace: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('spustene', '0')] spustene: string=''; + [MVCFromQueryString('debug', '0')] debug: string='' + ); + +// kusovnik +// [MVCDoc('VrĂĄtĂ­ meta informace kusovnĂ­ku')] + [MVCPath('/meta/tpvkusovnik')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí meta informace TPV kusovníku', 'VyrobniPrikazGetTPVKusovnikMeta')] + procedure GetMetaKusovniku; + +// [MVCDoc('VratĂ­ kusovnĂ­k výrobního příkazu')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCPath('/($id)/tpvkusovnik')] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí kusovník z TPV pro dílec výrobního příkazu *** požadavek vrátí v Mnozstvi *** pokud není zadán parametr "pocetmj", vrátí množství na 1 MJ', 'VyrobniPrikazGetTPVKusovnik')] + [MVCSwagParam(plPath, 'id', 'ID výrobního příkazu', ptString, false)] + [MVCSwagParam(plQuery, 'pocetmj', 'Na kolik MJ příkazu vrátí TPV kusovník', ptString, false, '1')] +// [MVCSwagParam(plQuery, 'jenplatne', 'Jen platné materiály', ptBoolean, false)] + [MVCSwagResponses(200, 'Success', TTPVKusovnikDilce, false)] + procedure GetKusovnik (id: string=''; + [MVCFromQueryString('pocetmj', '1')] sMnozReq: string='1'; + [MVCFromQueryString('jenplatne', true)] jenPlatne: boolean=true + ); + + [MVCPath('/($id)/dokladyoz')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí seznam dokladů OZ k danému výrobnímu příkazu', 'VyrobniPrikazGetDokladyOZ')] + [MVCSwagParam(plPath, 'id', 'ID výrobního příkazu', ptString, true)] + [MVCSwagParam(plQuery, 'polozky', 'Doklady včetně poloĹžek', ptString, false, '1')] + procedure GetDokladyOZ (id: string='0'; + [MVCFromQueryString('polozky', '')] polozky: string='1' + ); + + [MVCPath('/($id)/dokumenty')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí seznam dokumentů k výrobnímu příkazu', 'VyrobniPrikazGetDokumenty')] + [MVCSwagParam(plPath, 'id', 'ID výrobního příkazu', ptString, true)] + [MVCSwagParam(plQuery, 'jenSeznam', 'Jen seznam (bez obsahu dokumentu)', ptString, false, '1')] + [MVCSwagParam(plQuery, 'pripona', 'Přípona souboru dokumentu', ptString, false)] + [MVCSwagParam(plQuery, 'base64', 'Obsah dokumentu vrátit v kódování BASE64', ptString, false, '0')] + procedure GetDokumenty (id: string='0'; + [MVCFromQueryString('jenSeznam', '')] jenSeznam: string='1'; + [MVCFromQueryString('pripona', '')] pripona: string=''; + [MVCFromQueryString('base64', '')] base64: string='0' + ); + + [MVCPath('/($id)/dokumentace')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Výrobní dokumentace k výrobnímu příkazu', 'VyrobniPrikazGetDokumentaci')] + [MVCSwagParam(plPath, 'id', 'ID výrobního příkazu', ptString, true)] + [MVCSwagParam(plQuery, 'jenSeznam', 'Bez obsahu dokumentu', ptString, false, '1')] + [MVCSwagParam(plQuery, 'oblast', '1=vyráběný dílec, 3=výrobní příkaz', ptString, false, '1')] + [MVCSwagParam(plQuery, 'operace', 'číslo operace', ptString, false, '1')] + [MVCSwagParam(plQuery, 'base64', 'Obsah dokumentu vrátit v kódování BASE64', ptString, false, '0')] + procedure GetDokumenaci (id: string='0'; + [MVCFromQueryString('jenSeznam', '')] jenSeznam: string='1'; + [MVCFromQueryString('operace', '')] operace: string=''; + [MVCFromQueryString('oblast', '')] oblast: string=''; + [MVCFromQueryString('base64', '')] base64: string='0' + ); + + [MVCPath('/($id)/vyssiprikazy')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí seznam (hlavičku) vyšších příkazů', 'VyrobniPrikazGetVyssiPrikazy')] + [MVCSwagParam(plPath, 'id', 'ID výrobního příkazu', ptString, true)] + procedure GetVyssiPrikazy (id: string='0'); + + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí výrobní příkaz', 'VyrobniPrikazGetByID')] + [MVCSwagResponses(200, 'Success', TVyrobniPrikaz)] + [MVCSwagParam(plPath, 'id', 'ID příkazu', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '1=vrátí seznam výrobní operace', ptString, false, '0')] + [MVCSwagParam(plQuery, 'material', '1=vrátí seznam materiálových požadavků', ptString, false, '0')] + [MVCSwagParam(plQuery, 'debug', '1=zapise SQL query do log souboru', ptString, false, '0')] + procedure GetByID (id: string='0'; + [MVCFromQueryString('operace', '0')] operace: string=''; + [MVCFromQueryString('material', '0')] material: string=''; + [MVCFromQueryString('debug', '0')] debug: string='' + ); + end; + + + + + [MVCPath('/vyroba/prikaz/material')] + [MVCPath('/vyroba/materialproprikazy')] + [MVCPath('/materialprikazu')] +// [MVCDoc('Seznam materiálovĂ˝ch poĹžadavkĹŻ výrobních příkazů')] +// [MVCSwagSummary('MaterialPrikazu', 'materiálovĂŠ poĹžadavky příkazu', '')] + TMaterialPrikazuController = class(TBaseController) + public +// metadata TabPrKVazby + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - materiálové požadavky příkazu', 'Vrátí meta informace', 'MaterialPrikazuGetMeta')] + procedure GetMeta; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - materiálové požadavky příkazu', 'Vrátí seznam všech materiálových požadavků', 'MaterialPrikazuGetAll')] + [MVCSwagParam(plQuery, 'idprikaz', 'ID výrobního příkazu', ptString, false)] + [MVCSwagParam(plQuery, 'jenplatne', 'Jen platné materiály', ptBoolean, false, '1')] + [MVCSwagParam(plQuery, 'stavprikazu', 'Materiály jen pro příkazy ve stavu (30=zadáno)', ptString, false, '30')] + [MVCSwagParam(plQuery, 'sk', 'Skupina karet materiálu', ptString, false)] + [MVCSwagParam(plQuery, 'rc', 'Registračí číslo materiálu', ptString, false)] + [MVCSwagResponses(200, 'Success', TMaterialPrikazu, true)] +// [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetAll ([MVCFromQueryString('idprikaz', '0')] sIdVPr: string=''; + [MVCFromQueryString('jenplatne', true)] jenPlatne: boolean=true; + [MVCFromQueryString('stavprikazu', '30')] stavPrikazu: string='30'; + [MVCFromQueryString('sk', '')] skMat: string=''; + [MVCFromQueryString('rc', '')] rcMat: string='' + ); + +// [MVCDoc('Vrátí data poĹžadavku na materiály a polotovary')] + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - materiálové požadavky příkazu', 'Vrátí materiály a polotovary příkazu', 'MaterialPrikazuGetByID')] + [MVCSwagParam(plPath, 'id', 'ID materiálového požadavku', ptString, false)] + [MVCSwagParam(plQuery, 'idprikaz', 'ID výrobního příkazu', ptString, false)] + [MVCSwagParam(plQuery, 'jenplatne', 'Jen platné materiály', ptString, false)] + [MVCSwagResponses(200, 'Success', TMaterialPrikazu, true)] +// [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetByID (id: string='0'; + [MVCFromQueryString('idprikaz', '0')] sIdVPr: string='0'; + [MVCFromQueryString('jenplatne', '0')] jenPlatne: string='0' + ); + +// kusovnik +// [MVCDoc('Vrátí meta informace kusovnĂ­ku')] + [MVCPath('/kusovnik/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - materiálové požadavky příkazu', 'Vrátí meta informace kusovníku', 'MaterialPrikazuGetKusovnikMeta')] + procedure GetMetaKusovniku; + + end; + + + + [MVCPath('/vyroba/vyrobnioperace')] + [MVCPath('/vyroba/operace')] + [MVCPath('/vyrobnioperace')] +// [MVCDoc('Operace výrobního příkazu')] + TVyrobniOperaceController = class(TBaseController) + public +// [MVCDoc('Vrátí seznam výrobních operací')] +// [MVCDoc('Vrátí všechny platné operace výrobních příkazů')] + [MVCPath] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výrobní příkaz - operace', 'Vrátí seznam výrobních operací', 'VyrobniOperaceGetAll')] + [MVCSwagParam(plQuery, 'barcode', 'Čárový kód operace', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje', ptString, false)] + [MVCSwagParam(plQuery, 'operace', 'Číslo operace', ptString, false)] + [MVCSwagParam(plQuery, 'rada', 'Řada výrobných příkazů', ptString, false)] + [MVCSwagParam(plQuery, 'idprikaz', 'ID výrobního příkazu', ptInteger, false)] + [MVCSwagParam(plQuery, 'stavprikazu', 'Příkaz operace jen v požadovaném stavu (číselně, např. 30=zadáno)', ptString, false)] + [MVCSwagParam(plQuery, 'jenplatne', 'Jen platné operace', ptBoolean, false)] + [MVCSwagParam(plQuery, 'jenkoop', 'Jen kooperační operace', ptBoolean, false)] + [MVCSwagParam(plQuery, 'ziveprikazy', 'Jen z neuzavřených příkazů', ptBoolean, false)] + [MVCSwagResponses(200, 'Success', TVyrobniOperace)] +// [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetAll( + [MVCFromQueryString('barcode', '')] barcode: string=''; + [MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('operace', '')] operace: string=''; + [MVCFromQueryString('rada', '')] radaVPr: string=''; + [MVCFromQueryString('idprikaz', '0')] sIdVPr: string=''; + [MVCFromQueryString('stavprikazu', '')] stavVPr: string=''; + [MVCFromQueryString('jenkoop', false)] jenKooperace: boolean=false; + [MVCFromQueryString('jenplatne', true)] jenPlatne: boolean=true; + [MVCFromQueryString('ziveprikazy', true)] jenZiveVPr: boolean=true + ); + +// [MVCDoc('Vrátí metadata operace výrobního příkazu')] + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výrobní příkaz - operace', 'Vrátí meta informace', 'VyrobniOperaceGetMeta')] + procedure GetMeta; + + +// [MVCDoc('Vrátí údaje výrobní operace dle jejĂ­ho ID')] + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výrobní příkaz - operace', 'Vrátí detail výrobní operace', 'VyrobniOperaceGetByID')] + [MVCSwagParam(plPath, 'id', 'ID operace postupu', ptString, false)] + [MVCSwagParam(plQuery, 'barcode', 'Čárový kód operace', ptString, false)] + [MVCSwagParam(plQuery, 'kp', '1=zobrazit kontrolní plány operace', ptString, false)] + [MVCSwagResponses(200, 'Success', TVyrobniOperace)] +// [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetByID (id: string='0'; + [MVCFromQueryString('barcode', '')] barcode: string= ''; + [MVCFromQueryString('kp', '')] kp: string='' + ); + +// [MVCDoc('Pomocí POST zapíše data DataZone tasků (kontroluje duplicitu, vrací NEW, OLD nebo NOT OK s textem chyby)')] + [MVCPath('/zapisoperaci')] // zapis operaci DZ tasky + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('Výrobní příkaz - operace DZ', 'Zápis DataZone tasků', 'VyrobaZapisDZTasku')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure VyrobaZapisDZTasku (CTX: TWebContext); + +// [MVCDoc('Vrátí seznam nezaevidovaných DataZone tasků (nezapsaných v Evidenci operací)')] + [MVCPath('/zapisoperaci/neevidovane')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výrobní příkaz - operace DZ', 'Vrátí seznam nezaevidovaných DataZone tasků', 'VyrobaZapisDZTaskuNeevidovane')] + [MVCSwagParam(plQuery, 'od', 'Datum od (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum do (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + procedure GetDZTaskyNeevidovane ( + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string='' + ); + end; + + + + + + [MVCPath('/tpv/zakazkmodif')] +// [MVCSwagSummary('KontrolniPostupy', 'KontrolnĂ­ postupy', '')] + TTPVZakazkoveModifikaceController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - zakázkové modifikace', 'Vrátí meta informace', 'VyrobaZakazModifGetMeta')] + procedure GetMeta; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - zakázkové modifikace', 'Vrátí zakázkové modifikace', 'VyrobaZakazModifGetAll')] + [MVCSwagParam(plQuery, 'rada', 'Řada zakázkových modifikací', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVZakazkovaModifikace, true)] + procedure GetAll ([MVCFromQueryString('rada', '')] rada: string='' + ); + end; + + + + + + + [MVCPath('/tpv/zakazkmodifdilce')] +// [MVCSwagSummary('KontrolniPostupy', 'KontrolnĂ­ postupy', '')] + TTPVZakazkoveModifikaceDilceController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - zakázkové modifikace', 'Vrátí meta informace', 'VyrobaZakazModifDilceGetMeta')] + procedure GetMeta; + + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - zakázkové modifikace', 'Vrátí seznam dílců zakázkových modifikací', 'VyrobaZakazModifDilceGetAll')] + [MVCSwagParam(plQuery, 'idkmen', 'ID kmen', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVZakazkovaModifikaceDilce, true)] + procedure GetAll ([MVCFromQueryString('idkmen', '')] idkmen: string='' + ); + end; + + + + + + [MVCPath('/vyroba/kooperacniobjednavka')] + [MVCPath('/kooperacniobjednavka')] +// [MVCSwagSummary('KontrolniPostupy', 'KontrolnĂ­ postupy', '')] + TKooperacniObjednavkaController = class(TBaseController) + public + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - kooperační objednávka', 'Vrátí seznam kooperačních objednávek', 'VyrobaKoopObjGetAll')] + [MVCSwagParam(plQuery, 'rada', 'Řada kooperačních objednávek', ptString, false)] + [MVCSwagParam(plQuery, 'corgkoop', 'Číslo organizace kooperanta', ptString, false)] + [MVCSwagParam(plQuery, 'polozky', '1=včetně položek', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum vystavení od (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum vystavení do (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + [MVCSwagResponses(200, 'Success', TKooperacniObjednavka, true)] + procedure GetAll([MVCFromQueryString('rada', '')] rada: string=''; + [MVCFromQueryString('corgkoop', '')] cisOrgKoop: string=''; + [MVCFromQueryString('polozky', '0')] polozky: string='0'; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string='' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - kooperační objednávka', 'Vrátí meta informace', 'VyrobaKoopObjGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - kooperační objednávka', 'Vrátí detail kooperační objednávky', 'VyrobaKoopObjGetByID')] + [MVCSwagParam(plPath, 'id', 'ID kooperační objednávky', ptString, true)] + [MVCSwagParam(plQuery, 'polozky', '1=včetně položek', ptString, false, '0')] + [MVCSwagResponses(200, 'Success', TKooperacniObjednavka)] + procedure GetByID(id: string='0'; + [MVCFromQueryString('polozky', '0')] polozky: string='0' + ); + end; + + + + + + [MVCPath('/tpv/prednastprooperace')] + [MVCPath('/ciselnik/tpv/prednastprooperace')] +// [MVCDoc('TPV - přednastavení pro operace postupu')] + [MVCSwagSummary('TPV - přednastavení pro operace postupu', 'Přednastavení pro operace postupu (TPV)', '')] + TTPVPrednastaveniOperaciController = class(TBaseController) + public + [MVCPath('')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - přednastavení pro operace postupu', 'Seznam přednastavení pro operace postupu', 'TPVPrednastaveniOperaciGetAll')] + [MVCSwagParam(plQuery, 'minimumdat', '1=zobrazí jen základní informace (default) / 0=zobrazení všech sloupců', ptString, false)] +{$IFDEF CUSTOM_CTRL_INCOSystems} + [MVCSwagParam(plQuery, 'cislo', 'Předdefinované číslo z Přednastavení operace (ext.informace)', ptString, false)] +{$ENDIF} + [MVCSwagResponses(200, 'Success', TTPVPrednastaveniOperaci, true)] + procedure GetAll ([MVCFromQueryString('minimumdat', '1')] minimumDat: string='' +{$IFDEF CUSTOM_CTRL_INCOSystems} + ; [MVCFromQueryString('cislo', '')] cislo: string='' +{$ENDIF} + ); + + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - přednastavení pro operace postupu', 'Vrací meta informace', 'TPVPrednastaveniOperaciGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - přednastavení pro operace postupu', 'Vrací detail přednastavení pro operace postupu', 'TPVPrednastaveniOperaciGetByID')] + [MVCSwagParam(plPath, 'id', 'ID přednastavení pro operace', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVPrednastaveniOperaci, false)] + procedure GetByID (id: string='0'); + end; + + + + + + [MVCPath('/tpv/ciselnik/pracoviste')] + [MVCPath('/ciselnik/tpv/pracoviste')] +// [MVCDoc('TPV - číselnĂ­k pracoviĹĄĹĽ')] + [MVCSwagSummary('TPV - číselník pracoviš', 'číselník pracoviš (TPV)', '')] + TTPVPracovisteController = class(TBaseController) + public + [MVCPath] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník pracoviš', 'Vrací seznam pracoviš', 'TPVPracovisteGetAll')] + [MVCSwagParam(plQuery, 'stredisko', 'Středisko', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVPracoviste, true)] + procedure GetAll; + + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník pracoviš', 'Vrátí meta informace', 'TPVPracovisteGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník pracoviš', 'Vrcí detail pracoviště', 'TPVPracovisteGetByID')] + [MVCSwagParam(plPath, 'id', 'ID pracoviště', ptString, true)] + [MVCSwagParam(plQuery, 'stredisko', 'Středisko', ptString, false)] + [MVCSwagParam(plQuery, 'frontaPrace', 'Zobrazit frontu práce daného pracoviště', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVPracoviste)] + procedure GetByID (id: string='0'; + [MVCFromQueryString('frontaPrace', '')] sFrontaPrace: string=''; + [MVCFromQueryString('stredisko', '')] stredisko: string='' + ); + end; + + + + [MVCPath('/tpv/ciselnik/kooperace')] + [MVCPath('/ciselnik/tpv/kooperace')] +// [MVCDoc('TPV - číselnĂ­k kooperací')] + TTPVCisKooperaciController = class(TBaseController) + public + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník kooperací', 'Vrátí čísleník kooperací', 'TPVCisKoopGetAll')] + [MVCSwagParam(plQuery, 'rada', 'Řada kooperací', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVCisKoop, true)] + [MVCSwagResponses(500, 'Internal Server Error')] + procedure GetAll ([MVCFromQueryString('rada', '')] rada: string='' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník kooperací', 'Vrátí metadata', 'TPVCisKoopGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník kooperací', 'Vrátí údaje kooperace', 'TPVCisKoopGetByID')] + [MVCSwagResponses(200, 'Success', TTPVCisKoop)] + [MVCSwagParam(plPath, 'id', 'ID kooperace', ptString, true)] + [MVCSwagParam(plQuery, 'rada', 'Řada kooperací', ptString, false)] + procedure GetByID (id: string='0'; + [MVCFromQueryString('rada', '')] rada: string='' + ); + end; + + + + [MVCPath('/tpv/ciselnik/zmeny')] + [MVCPath('/ciselnik/tpv/zmeny')] +// [MVCDoc('TPV - číselnĂ­k změnovĂ˝ch řízenĂ­')] +// [MVCSwagSummary('TPV - číselnĂ­k změnovĂ˝ch řízenĂ­', 'ČíselnĂ­k změnovĂ˝ch řízenĂ­ (TPV)', '')] + TTPVCiselnikZmenController = class(TBaseController) + public + [MVCPath] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník změnových řízení', 'Vrátí seznam změnových řízení', 'TPVCisZmenGetAll')] + [MVCSwagParam(plQuery, 'rada', 'Řada změn', ptString, false)] + [MVCSwagParam(plQuery, 'platne', 'Platné', ptString, false)] + [MVCSwagParam(plQuery, 'datum', 'Datum platnosti', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVCiselnikZmen, true)] + procedure GetAll([MVCFromQueryString('rada', '')] rada: string=''; + [MVCFromQueryString('platne', '')] jenPlatne: string=''; + [MVCFromQueryString('datum', '')] datPlatnosti: string='' + ); + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník změnových řízení', 'Vrací meta informace', 'TPVCisZmenGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník změnových řízení', 'Vrací změnové řízení', 'TPVCisZmenGetByID')] + [MVCSwagParam(plPath, 'id', 'ID kooperace', ptString, true)] + [MVCSwagParam(plQuery, 'rada', 'Řada změn', ptString, false)] + [MVCSwagParam(plQuery, 'platne', 'Platné', ptString, false)] + [MVCSwagParam(plQuery, 'datum', 'Datum platnosti', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVCiselnikZmen)] + procedure GetByID (id: string='0'; + [MVCFromQueryString('rada', '')] rada: string=''; + [MVCFromQueryString('platne', '')] jenPlatne: string=''; + [MVCFromQueryString('datum', '')] datPlatnosti: string='' + ); + end; + + + [MVCPath('/tpv/ciselnik/stroj')] + [MVCPath('/ciselnik/tpv/stroj')] +// [MVCDoc('TPV - číselnĂ­k strojĹŻ')] +// [MVCSwagSummary('TPV - číselnĂ­k strojĹŻ', 'ČíselnĂ­k strojĹŻ (TPV)', '')] + TTPVStrojController = class(TBaseController) + public + [MVCPath] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník strojů', 'Vrátí seznam strojů', 'TPVCisStrojuGetAll')] + [MVCSwagParam(plQuery, 'idprac', 'ID pracoviště', ptString, false)] + [MVCSwagParam(plQuery, 'prac', 'Kód pracoviště', ptString, false)] + [MVCSwagParam(plQuery, 'stredisko', 'Středisko', ptString, false)] + [MVCSwagResponses(200, 'Success', TTPVStroj, true)] + procedure GetAll ([MVCFromQueryString('idprac', '')] idprac: string=''; + [MVCFromQueryString('prac', '')] prac: string=''; + [MVCFromQueryString('stredisko', '')] stredisko: string='' + ); + + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - číselník strojů', 'Vrátí meta informace', 'TPVCisStrojuGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCDoc('Vrátí detail stroje')] + [MVCSwagSummary('TPV - číselník strojů', 'Vrátí detail stroje', 'TPVCisStrojuGetByID')] + [MVCSwagParam(plPath, 'id', 'ID stroje', ptString, true)] + [MVCSwagResponses(200, 'Success', TTPVStroj, false)] + procedure GetByID (id: string='0'); + end; + + + + [MVCPath('/tpv/dilec')] +// [MVCDoc('TPV - kusovnĂ­k vyrĂĄběnĂŠho dílce')] +// [MVCSwagSummary('TPV - KusovnĂ­k', '(TPV) KusovnĂ­k', '')] + TTPVKusovnikDilceController = class(TBaseController) + public + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - Kusovník', 'Vrátí meta informace dilce', 'TPVKusovnikDilceGetMeta')] + procedure GetMeta; + + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - Kusovník', 'Vrátí dilec', 'TPVKusovnikDilceGetByID')] + [MVCSwagParam(plPath, 'id', 'ID dílce', ptString, true)] + procedure GetByID (id: string='0'); + + + [MVCPath('/($id)/dokumentace')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - Kusovník', 'Výrobní dokumentace k dílci', 'TPVKusovnikGetDokumenaciDilce')] + [MVCSwagParam(plPath, 'id', 'ID dílce', ptString, true)] + [MVCSwagParam(plQuery, 'jenSeznam', 'Bez obsahu dokumentu', ptString, false, '1')] + [MVCSwagParam(plQuery, 'operace', 'Číslo operace', ptString, false, '')] + [MVCSwagParam(plQuery, 'base64', 'Obsah dokumentu vrátit v kódování BASE64', ptString, false, '0')] + procedure GetDokumenaciDilce (id: string='0'; + [MVCFromQueryString('jenSeznam', '')] jenSeznam: string='1'; + [MVCFromQueryString('operace', '')] operace: string=''; + [MVCFromQueryString('base64', '')] base64: string='0' + ); + [MVCPath('/($id)/kusovnik')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - Kusovník', 'Vrátí kusovník dílce', 'TPVKusovnikDilceGetKusovnik')] + [MVCSwagParam(plPath, 'id', 'ID dílce', ptString, false)] + [MVCSwagParam(plQuery, 'pocetmj', 'Na kolik MJ dílce vrátí kusovník', ptString, false, '1')] + [MVCSwagParam(plQuery, 'alt', '1=včetně alternativ', ptString, false, '0')] +// [MVCSwagParam(plQuery, 'jenplatne', 'Jen platné materiály', ptBoolean, false)] + [MVCSwagResponses(200, 'Success', TTPVKusovnikDilce, true)] + procedure GetKusovnik (id: string=''; + [MVCFromQueryString('pocetmj', '1')] sMnozReq: string='1'; + [MVCFromQueryString('alt', '')] alt: string='' +// ;[MVCFromQueryString('jenplatne', true)] jenPlatne: boolean=true + ); + end; + + + + + + + [MVCPath('/tpv/dilec/postupy')] +// [MVCDoc('TPV - technologickĂŠ postupy vyrĂĄběnĂŠho dílce')] + TTPVOperaceDilceController = class(TBaseController) + public +// [MVCDoc('Vrátí seznam výrobních operací')] +// [MVCDoc('Vrátí všechny platné operace výrobních příkazů')] + [MVCPath] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - technologické postupy', 'Vrátí postupy vyráběných dílců', 'TPVOperaceDilceGetAll')] + [MVCSwagParam(plQuery, 'vyssi', 'ID dílce', ptString, true)] + procedure GetAll ([MVCFromQueryString('vyssi', '')] sIdDilce: string='' + ); + + + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - technologické postupy', 'Vrátí meta informace', 'TPVOperaceDilceGetMeta')] + procedure GetMeta; + end; + + + + + + + + [MVCPath('/vyroba/evidenceoperaci')] + [MVCPath('/evidenceoperaci')] +// [MVCDoc('Výroba - evidence vyrobnich operací')] +// [MVCSwagSummary('Výroba - evidence rozpracovanĂ˝ch operací', '(Výroba) Evidence rozpracovanĂŠ operace', '')] + TVyrobaEvidenceOperaciController = class(TBaseController) + public + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence výrobních operací', 'Vrátí meta informace', 'VyrobaEvidenceOperaciGetMeta')] + procedure GetMeta; + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence výrobních operací', 'Vrati Evidovanou vyrobni operaci', 'VyrobaEvidenceOperaciGetByID')] + [MVCSwagParam(plPath, 'id', 'ID evidované operace', ptString, true)] + [MVCSwagResponses(200, 'Success', TVyrobaEvidovanaOperace, false)] + procedure GetByID (id: string='0'); + end; + + + + + + + [MVCPath('/vyroba/evidrozpracoperace')] + [MVCPath('/evidrozpracoperace')] +// [MVCDoc('Výroba - evidence rozpracovaných operací')] +// [MVCSwagSummary('Výroba - evidence rozpracovaných operací', '(Výroba) Evidence rozpracované operace', '')] + TVyrobaEvidRozpracOperaceController = class(TBaseController) + public + [MVCPath('/meta')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence rozpracovaných operací', 'Vrátí meta informace', 'VyrobaEvidRozpracOperaceGetMeta')] + procedure GetMeta; + + + [MVCPath('/meta/radek')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence rozpracovaných operací', 'Vrátí meta informace řádků/operací', 'VyrobaEvidRozpracOperaceRadekGetMeta')] + procedure RadekGetMeta; + + + [MVCPath('/($id)')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence rozpracovaných operací', 'Vrátí hlavičku Evidence rozpracovaných operací', 'VyrobaEvidRozpracOperaceGetByID')] + [MVCSwagParam(plPath, 'id', 'ID hlavičky rozpracovaných operací', ptString, true)] + [MVCSwagResponses(200, 'Success', TEvidRozpracOperace, false)] + procedure GetByID (id: string='0'); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Výroba - evidence rozpracovaných operací', 'Vrátí hlavičky Evidencí rozpracovaných operací', 'VyrobaEvidRozpracOperaceGetAll')] + [MVCSwagParam(plQuery, 'datum', 'Datum případu evidence rozpracovaných operací', ptString, false)] + [MVCSwagParam(plQuery, 'od', 'Datum vystavení od (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + [MVCSwagParam(plQuery, 'do', 'Datum vystavení do (formát RRRRMMDD / RRRRMMDDHHMM)', ptString, false)] + [MVCSwagParam(plQuery, 'idprikaz', 'ID výrobního příkazu rozpracovaných operací', ptString, false)] + [MVCSwagParam(plQuery, 'idstroj', 'ID stroje, na kterém jsou rozpracované operace', ptString, false)] + [MVCSwagParam(plQuery, 'idpracoviste', 'ID pracoviště, na kterém jsou rozpracované operace', ptString, false)] + [MVCSwagParam(plQuery, 'radaprikazu', 'Řada výrobních příkazů rozpracovaných operací', ptString, false)] + [MVCSwagParam(plQuery, 'operace', '1=včetně seznamu rozpracovaných operací/řádků (default) / 0=bez seznamu operací', ptString, false)] + [MVCSwagParam(plQuery, 'cislozamest', 'Osobní číslo zaměstnance', ptString, false)] + [MVCSwagParam(plQuery, 'idzamest', 'ID zaměstnance', ptString, false)] +{$IFDEF CUSTOM_CTRL_INCOSystems} + [MVCSwagParam(plQuery, 'datazoneid', 'Datazone ID "balíku"', ptString, false)] +{$ENDIF} + [MVCSwagParam(plQuery, 'stav', 'Stav rozpracovanosti evidence (10=pořízeno, 20=zahájeno, 25=prostoj, 26=prostoj obsluhy, 27=prostoj stroje, 30=ukončeno, 40=uzavřeno)', ptString, false)] + [MVCSwagResponses(200, 'Success', TEvidRozpracOperace, true)] + procedure GetAll ([MVCFromQueryString('idprikaz', '')] sIdPrikaz: string=''; + [MVCFromQueryString('idstroj', '')] sIdStroj: string=''; + [MVCFromQueryString('idpracoviste', '')] sIdPrac: string=''; + [MVCFromQueryString('radaprikazu', '')] radaPrikazu: string=''; + [MVCFromQueryString('operace', '1')] operace: string='1'; + [MVCFromQueryString('cislozamest', '')] sCisloZam: string=''; + [MVCFromQueryString('idzamest', '')] sIdZam: string=''; + [MVCFromQueryString('stav', '')] stavRozprac: string=''; + [MVCFromQueryString('datum', '')] datum: string=''; + [MVCFromQueryString('od', '')] odDatum: string=''; + [MVCFromQueryString('do', '')] doDatum: string='' +{$IFDEF CUSTOM_CTRL_INCOSystems} + ; [MVCFromQueryString('datazoneid', '')] datazoneId: string='' +{$ENDIF} + ); + +{ + [MVCPath('/($id)/dokumentace')] +// [MVCProduces('application/json')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('TPV - KusovnĂ­k', 'výrobní dokumentace k danĂŠmu dĂ­lci', 'GetDokumenaciDilce')] + [MVCSwagParam(plPath, 'id', 'ID dílce', ptString, true)] + [MVCSwagParam(plQuery, 'jenSeznam', 'Bez obsahu dokumentu', ptString, false, '1')] + [MVCSwagParam(plQuery, 'operace', 'Číslo operace', ptString, false, '')] + [MVCSwagParam(plQuery, 'base64', 'Obsah dokumentu vrĂĄtit v kĂłdovĂĄnĂ­ BASE64', ptString, false, '0')] + procedure GetDokumenaciDilce (id: string='0'; + [MVCFromQueryString('jenSeznam', '')] jenSeznam: string='1'; + [MVCFromQueryString('operace', '')] operace: string=''; + [MVCFromQueryString('base64', '')] base64: string='0' + ); +} + end; + + + +implementation + +uses + uSvc_Base, + uHeoObj_Base, + uCommons, + MVCFramework.Serializer.Intf, + MVCFramework.Controllers.Register, + System.Generics.Collections, + System.RegularExpressions, + System.StrUtils, + System.SysUtils, + Winapi.ActiveX, + IdHTTP, + System.JSON, + JsonDataObjects, + helTabsBIDs; + + + + + +{ TVyrobaEvidRozpracOperaceController } + + procedure TVyrobaEvidRozpracOperaceController.GetAll (sIdPrikaz: string=''; sIdStroj: string=''; sIdPrac: string=''; radaPrikazu: string=''; operace: string='1'; + sCisloZam: string=''; sIdZam: string=''; stavRozprac: string=''; datum: string=''; + odDatum: string=''; doDatum: string='' +{$IFDEF CUSTOM_CTRL_INCOSystems} + ; datazoneId: string='' +{$ENDIF} +); + var idPrikaz, idStroj, idPrac, cisZam, idZam: integer; + incOper: boolean; + params: TDictionary; +{$IFDEF CUSTOM_CTRL_INCOSystems} + idDatazone: integer; +{$ENDIF} + begin + params:= TDictionary.Create; + + odDatum:= sanitizeSQLString(odDatum); + if (odDatum<>'') then + params.Add('odDatum', odDatum); + + doDatum:= sanitizeSQLString(doDatum); + if (doDatum<>'') then + params.Add('doDatum', doDatum); + + idPrikaz:= 0; + sIdPrikaz:= sanitizeSQLString(sIdPrikaz); + if not(TryStrToInt(sIdPrikaz, idPrikaz)) then + idPrikaz:= 0; + if (idPrikaz>0) then + params.Add('idPrikaz', idPrikaz.ToString); + +{$IFDEF CUSTOM_CTRL_INCOSystems} + idDatazone:= 0; + datazoneId:= sanitizeSQLString(datazoneId); + if not(TryStrToInt(datazoneId, idDatazone)) then + idDatazone:= 0; + if (idDatazone>0) then + params.Add('datazoneId', idDatazone.ToString); +{$ENDIF} + + cisZam:= 0; + sCisloZam:= sanitizeSQLString(sCisloZam); + if not(TryStrToInt(sCisloZam, cisZam)) then + cisZam:= 0; + if (cisZam>0) then + params.Add('cisZam', cisZam.ToString); + + idZam:= 0; + sIdZam:= sanitizeSQLString(sIdZam); + if not(TryStrToInt(sIdZam, idZam)) then + idZam:= 0; + if (idZam>0) then + params.Add('idZam', idZam.ToString); + + idStroj:= 0; + sIdStroj:= sanitizeSQLString(sIdStroj); + if not(TryStrToInt(sIdStroj, idStroj)) then + idStroj:= 0; + if (idStroj>0) then + params.Add('idStroj', idStroj.ToString); + + idPrac:= 0; + sIdPrac:= sanitizeSQLString(sIdPrac); + if not(TryStrToInt(sIdPrac, idPrac)) then + idPrac:= 0; + if (idPrac>0) then + params.Add('idPrac', idPrac.ToString); + + radaPrikazu:= sanitizeSQLString(radaPrikazu); + if (radaPrikazu<>'') then + params.Add('radaPrikazu', radaPrikazu); + + stavRozprac:= sanitizeSQLString(stavRozprac); + if (stavRozprac<>'') then + params.Add('stav', stavRozprac); + + incOper:= true; + operace:= sanitizeSQLString(operace); + if (operace='0') then + incOper:= false; + params.Add('vcetneOper', incOper.ToInteger.ToString); + + datum:= sanitizeSQLString(datum); + if (datum<>'') then + params.Add('datumPripadu', datum); + + + try + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + end; + + + + procedure TVyrobaEvidRozpracOperaceController.GetByID (id: string = '0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + end; + + + + procedure TVyrobaEvidRozpracOperaceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + procedure TVyrobaEvidRozpracOperaceController.RadekGetMeta; + begin + try + Render(ObjectDict().Add('data', GetVyrobaEvidRozpracOperaciService.RadekGetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + +{ TVyrobaEvidenceOperaciController } + + procedure TVyrobaEvidenceOperaciController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetVyrobaEvidenceOperaciService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TVyrobaEvidenceOperaciController.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', GetVyrobaEvidenceOperaciService.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; + + + + + + +{ TTPVCisKooperaciController } + + procedure TTPVCisKooperaciController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVCisKoopService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TTPVCisKooperaciController.GetAll (rada: string=''); + begin + rada:= sanitizeSQLString(rada); + GetByID('', rada); + end; + + + + procedure TTPVCisKooperaciController.GetByID (id: string='0'; rada: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetTPVCisKoopService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + end; + + + + + +{ TVyrobniPrikazController } + + procedure TVyrobniPrikazController.GetAll (stav: string=''; radaVPr: string=''; cisloVPr: string=''; skDilce: string=''; sIdDilce: string=''; + cisloZak: string=''; sIdZakModif: string=''; operace: string=''; material: string=''; spustene: string=''; + debug: string=''); + var errMsg: string; + idDilce, idZakModif: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + + debug:= sanitizeSQLString (debug); + if (debug='1') then + params.Add('debug', debug); + + + + radaVPr:= sanitizeSQLString (radaVPr); + if (radaVPr<>'') then + params.Add('rada', radaVPr); + + skDilce:= sanitizeSQLString (skDilce); + if (skDilce<>'') then + params.Add('skDilce', skDilce); + + sIdDilce:= sanitizeSQLString (sIdDilce); + idDilce:= 0; + if (sIdDilce<>'') then + if not(TryStrToInt(sIdDilce, idDilce)) then + idDilce:= 0; + if (idDilce>0) then + params.Add('idDilce', idDilce.ToString); + + cisloZak:= sanitizeSQLString (cisloZak); + if (cisloZak<>'') then + params.Add('cisloZakazky', cisloZak); + + sIdZakModif:= sanitizeSQLString (sIdZakModif); + idZakModif:= 0; + if (sIdZakModif<>'') then + if not(TryStrToInt(sIdZakModif, idZakModif)) then + idZakModif:= 0; + if (idZakModif>0) then + params.Add('idZakazModif', idZakModif.ToString); + + operace:= sanitizeSQLString(operace); + if (operace='1') then + params.Add('operace', '1'); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', '1'); + + spustene:= sanitizeSQLString(spustene); + if (spustene='1') then + params.Add('spustene', '1'); + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params) )); + except on E:Exception do + begin + RenderStatusMessage (200); + errMsg:= E.Message; + end; +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + } + end; + + params.Free; + end; + + + + + procedure TVyrobniPrikazController.GetVyssiPrikazy (id: string = '0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + params.Add('jenId', '1'); + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByParams (params))); + except + RenderStatusMessage (200); + end; + + params.Free; + + end; + + + + + procedure TVyrobniPrikazController.GetByID (id: string='0'; operace: string=''; material: string=''; debug: string=''); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + operace:= sanitizeSQLString(operace); + if (operace='1') then + params.Add('operace', '1'); + + material:= sanitizeSQLString(material); + if (material='1') then + params.Add('material', '1'); + + + debug:= sanitizeSQLString(debug); + if (debug='1') then + params.Add('debug', '1'); + + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetByID (iId, params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + } + end; + + if (params<>nil) then + params.Free; + + end; + + + + procedure TVyrobniPrikazController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TVyrobniPrikazController.GetMetaKusovniku; + begin + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetMetaKusovniku)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TVyrobniPrikazController.GetDokumenaci (id: string = '0'; jenSeznam: string = '1'; operace: string=''; oblast: string=''; base64: string='0'); + var iId, iOblast: integer; + b, b64: Boolean; + begin + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + b:= false; + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + b:= true; + + operace:= sanitizeSQLString(operace); + base64:= sanitizeSQLString(base64); + b64:= (base64='1'); + + oblast:= sanitizeSQLString(oblast); + if not(TryStrToInt(oblast, iOblast)) then + iOblast:= 3; + + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetDokumentaci (iId, b, iOblast, operace, b64))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + end; + + + + + procedure TVyrobniPrikazController.GetDokladyOZ (id: string = '0'; polozky: string = '1'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + if (iId>0) then + params.Add('idPrikaz', iId.ToString); + + polozky:= sanitizeSQLString(polozky); + if (polozky='1') then + params.Add('polozky', '1'); + +// omezeni dokladu na datum - zrusit + params.Add('noDatum', '1'); + + + try + Render(ObjectDict().Add('data', GetDokladOZService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + + procedure TVyrobniPrikazController.GetDokumenty (id: string = '0'; jenSeznam: string = '1'; pripona: string = ''; base64: string='0'); + var iId: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + params.Add('vazba_ident', '21'); + 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); + + base64:= sanitizeSQLString(base64); + if (base64='1') then + params.Add('base64', '1'); + + + + try + Render(ObjectDict().Add('data', GetDokumentService.GetByParams(params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + + end; + + + + + procedure TVyrobniPrikazController.GetKusovnik (id: string=''; sMnozReq: string='1'; jenPlatne: boolean=true); + var idVPr: integer; + mnReq: Extended; + begin + + id:= sanitizeSQLString(id); + if (Pos('&', id)>0) then + id:= LeftStr(id, Pos('&', id)-1); + + idVPr:= 0; + if (id<>'') then + if not(TryStrToInt(id, idVPr)) then + idVPr:= 0; + + mnReq:= 0; + if (sMnozReq<>'') then + if not(TryStrToFloat(sMnozReq, mnReq)) then + mnReq:= 0; + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetKusovnik (idVPr, mnReq, jenPlatne, 0))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + end; + + + + +{ TMaterialyPrikazuController } + + procedure TMaterialPrikazuController.GetAll (sIdVPr: string=''; jenPlatne: boolean=true; stavPrikazu: string='30'; skMat: string=''; rcMat: string=''); + var typ: byte; + idVPr, platne, iStav: integer; + mnReq: extended; + + params: TDictionary; + begin + params:= TDictionary.Create; + + if (jenPlatne) then + params.Add('jenplatne', '1'); + + sIdVPr:= sanitizeSQLString(sIdVPr); + idVPr:= 0; + if (sIdVPr<>'') then + if not(TryStrToInt(sIdVPr, idVPr)) then + idVPr:= 0; + if (idVPr>0) then + params.Add('idprikaz', idVPr.ToString); + + skMat:= sanitizeSQLString(skMat); + if (skMat<>'') then + params.Add('skMat', skMat); + + rcMat:= sanitizeSQLString(rcMat); + if (rcMat<>'') then + params.Add('rcMat', rcMat); + + iStav:= 0; + stavPrikazu:= sanitizeSQLString(stavPrikazu); + if (stavPrikazu<>'') then + if not(TryStrToInt(stavPrikazu, iStav)) then + iStav:= 0; + if (iStav=10) or (iStav=20) or (iStav=30) or (iStav=40) or (iStav=50) or (iStav=60) then + params.Add('stavPrikazu', iStav.ToString); + + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + params.Free; + end; + + + + + procedure TMaterialPrikazuController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TMaterialPrikazuController.GetMetaKusovniku; + begin + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetMetaKusovniku)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + procedure TMaterialPrikazuController.GetByID (id: string='0'; sIdVPr: string='0'; jenPlatne: string='0'); + var iid, idVPr: integer; + mnReq: Extended; + platne: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + + iid:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iid)) then + iid:= 0; + if (iid>0) then + params.Add('id',iid.ToString); + + sIdVPr:= sanitizeSQLString(sIdVPr); + idVPr:= 0; + if (sIdVPr<>'') then + if not(TryStrToInt(sIdVPr, idVPr)) then + idVPr:= 0; + if (idVPr>0) then + params.Add('idprikaz', idVPr.ToString); + + jenPlatne:= sanitizeSQLString(jenPlatne); + platne:= 0; + if (jenPlatne<>'') then + if not(TryStrToInt(jenPlatne, platne)) then + platne:= 0; + if (platne=1) then + params.Add('jenplatne', '1'); + + + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + + end; + + + + + + + + +{ TVyrobniOperaceController } + + + procedure TVyrobniOperaceController.GetDZTaskyNeevidovane (odDatum: string = ''; doDatum: string = ''); + begin + odDatum:= sanitizeSQLString(odDatum); + doDatum:= sanitizeSQLString(doDatum); + try + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetDZTaskyNeevidovane(odDatum, doDatum))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + procedure TVyrobniOperaceController.VyrobaZapisDZTasku (CTX: TWebContext); + var dataZoneKlic, urlDZTaskyDown, jsonData, respStr: string; + o: System.JSON.TJSONObject; + begin + respStr:= ''; + o:= System.JSON.TJSONObject.Create; + try + jsonData:= CTX.Request.Body; + if (jsonData<>'') then + GetVyrobniOperaceService.ZapisDZTasku (jsonData, respStr); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respStr); + except + RenderStatusMessage (200); +{ + on E:Exception do + raise EMVCException.Create(E.Message, '', 0, 200); +} + end; + if (o<>nil) then + o.Free; + end; + + + + + procedure TVyrobniOperaceController.GetAll (barcode: string=''; sIdStroj: string=''; operace: string=''; radaVPr: string=''; sIdVPr: string=''; stavVPr: string=''; + jenKooperace: boolean=false; jenPlatne: Boolean=true; jenZiveVPr: Boolean=true); + var p: TDictionary; + begin + p:= TDictionary.Create; + + barcode:= sanitizeSQLString(barcode); + if (barcode<>'') then + p.Add ('barcode', barcode); + + sIdStroj:= sanitizeSQLString(sIdStroj); + if (sIdStroj<>'') then + p.Add ('idstroj', sIdStroj); + + operace:= sanitizeSQLString(operace); + if (operace<>'') then + p.Add ('operace', operace); + + radaVPr:= sanitizeSQLString(radaVPr); + if (radaVPr<>'') then + p.Add ('radaprikazu', radaVPr); + + sIdVPr:= sanitizeSQLString(sIdVPr); + if (sIdVPr<>'') then + p.Add ('idprikaz', sIdVPr); + + stavVPr:= sanitizeSQLString(stavVPr); + if (stavVPr<>'') then + p.Add ('stavprikazu', stavVPr); + + if (jenKooperace) then + p.Add ('jenKoop', '1'); + + + try + Render(ObjectDict().Add('data', GetVyrobniOperaceService.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; + end; + + + + + procedure TVyrobniOperaceController.GetByID (id: string='0'; barcode: string= ''; kp: string=''); + var iid: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + barcode:= sanitizeSQLString(barcode); + if (barcode<>'') then + params.Add('barcode', barcode); + + barcode:= sanitizeSQLString(barcode); + if (barcode<>'') then + params.Add('barcode', barcode); + + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iid)) then + iid:= 0; + + kp:= sanitizeSQLString(kp); + + if (kp='1') then + params.Add ('kontrolnipostupy', '1'); + + try + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetByID (iid, params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + params.Free; + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + begin + params.Free; + raise; + end; +} + end; + + params.Free; + end; + +{ + procedure TVyrobniOperaceController.GetKPsByID(const id: integer); + begin + try + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetKPsByID(id))) + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + end; +} + + procedure TVyrobniOperaceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetVyrobniOperaceService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + + + + + + +{ TKooperacniObjednavkaController } + + procedure TKooperacniObjednavkaController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + procedure TKooperacniObjednavkaController.GetAll (rada: string = ''; cisOrgKoop: string = ''; polozky: string='0'; odDatum: string = ''; doDatum: string = ''); + var params: TDictionary; + cOrg: integer; + d1, d2: TDateTime; + begin + + params:= TDictionary.Create; + rada:= sanitizeSQLString(rada); + cisOrgKoop:= sanitizeSQLString(cisOrgKoop); + polozky:= sanitizeSQLString(polozky); + odDatum:= sanitizeSQLString(odDatum); + doDatum:= sanitizeSQLString(doDatum); + + if (rada<>'') and (rada.Length=3) then + params.Add('rada', rada); + + cOrg:= 0; + if not(TryStrToInt(cisOrgKoop, cOrg)) then + cOrg:= 0; + if (cOrg>0) then + params.Add('cOrgKoop', cOrg.ToString); + + if (odDatum<>'') then + if (TryStrToDateTime(odDatum, d1)) then + params.Add('odDatum', FormatDateTime('dd.mm.yyyy hh:nn:ss', d1)); + + if (doDatum<>'') then + if (TryStrToDateTime(doDatum, d2)) then + params.Add('doDatum', FormatDateTime('dd.mm.yyyy hh:nn:ss', d2)); + + if (polozky='1') then + params.Add('polozky', '1'); + + + try + Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByParams(params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + } + end; + + params.Free; + end; + + + + + procedure TKooperacniObjednavkaController.GetByID (id: string = '0'; polozky: string = '0'); + var iId, p: Integer; + bPol: boolean; + begin + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + p:= 0; + polozky:= sanitizeSQLString(polozky); + if not(TryStrToInt(polozky, p)) then + p:= 0; + bPol:= (p=1); + + try + Render(ObjectDict().Add('data', GetKooperacniObjednavkaService.GetByID(iId, bPol))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + end; + + + + + + +{ TTPVPracovisteController } + + procedure TTPVPracovisteController.GetAll; + begin + try + Render(ObjectDict().Add('data', GetTPVPracovisteService.GetAll)); // viz uSvc_Vyroba.pas + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + end; + + + + procedure TTPVPracovisteController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVPracovisteService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + end; + + + + procedure TTPVPracovisteController.GetByID (id: string='0'; sFrontaPrace: string=''; stredisko: string=''); + var iId, iFronta: integer; + typ: byte; + params: TDictionary; + begin + + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + params.Add('id', iId.ToString); + + iFronta:= 0; + sFrontaPrace:= sanitizeSQLString(sFrontaPrace); + if not(TryStrToInt(sFrontaPrace, iFronta)) then + iFronta:= 0; + if (iFronta>0) then + params.Add('fronta', '1'); + + stredisko:= sanitizeSQLString(stredisko); + if (stredisko<>'') then + params.Add('stred', stredisko); + + + try + if (iFronta=0) then + Render(ObjectDict().Add('data', GetTPVPracovisteService.GetByID(iId))) + else + Render(ObjectDict().Add('data', GetTPVPracovisteService.GetFrontaPrace(iId))); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + + params.Free; + + end; + + + + + + + +{ TTPVStroj } + procedure TTPVStrojController.GetAll (idprac: string=''; prac: string=''; stredisko: string=''); + var iIdPrac: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iIdPrac:= 0; + idprac:= sanitizeSQLString(idprac); + if not(TryStrToInt(idprac, iIdPrac)) then + iIdPrac:= 0; + if (iIdPrac>0) then + params.Add('idprac', iIdPrac.ToString); + + prac:= sanitizeSQLString(prac); + if (prac<>'') then + params.Add('prac', prac); + + stredisko:= sanitizeSQLString(stredisko); + if (stredisko<>'') then + params.Add('stred', stredisko); + + try + Render(ObjectDict().Add('data', GetTPVStrojService.GetByParams(params))); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + + params.Free; + + end; + + + + procedure TTPVStrojController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVStrojService.GetMeta)); + except + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + end; + end; + + + + procedure TTPVStrojController.GetByID (id: string='0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + if (iId>0) then + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetTPVStrojService.GetByParams (params))); + except + RenderStatusMessage (200); + end; + + params.Free; + end; + + + + + + +{ TTPVOperaceDilceController } + + procedure TTPVOperaceDilceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVOperaceDilceService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TTPVOperaceDilceController.GetAll (sIdDilce: string = ''); + var idDilce: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + idDilce:= 0; + sIdDilce:= sanitizeSQLString(sIdDilce); + if not(TryStrToInt(sIdDilce, idDilce)) then + idDilce:= 0; + if (idDilce>0) then + begin + params.Add('dilec', idDilce.ToString); + + try + Render(ObjectDict().Add('data', GetTPVOperaceDilceService.GetByParams (params))); + except + RenderStatusMessage (200); + end; + end + else + RenderStatusMessage (200); + + params.Free; + end; + + + + + +{ TTPVKusovnikDilceController } + + procedure TTPVKusovnikDilceController.GetKusovnik (id: string=''; sMnozReq: string='1'; alt: string=''); + var idKZ: integer; + mnReq: Extended; + p: TDictionary; + begin + p:= TDictionary.Create; + + alt:= sanitizeSQLString (alt); + if (alt='1') then + p.Add ('alt', '1'); + + id:= sanitizeSQLString (id); + if (Pos('&', id)>0) then + id:= LeftStr(id, Pos('&', id)-1); + + idKZ:= 0; + if (id<>'') then + if not(TryStrToInt(id, idKZ)) then + idKZ:= 0; + + mnReq:= 1; + if (sMnozReq<>'') then + if not(TryStrToFloat(sMnozReq, mnReq)) then + mnReq:= 1; + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetKusovnik (idKZ, mnReq, true))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + p.Free; + end; + + + + + procedure TTPVKusovnikDilceController.GetByID (id: string = '0'); + var iId: integer; + params: TDictionary; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + if (iId>0) then + begin + params.Add('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetByParams (params))); + 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 TTPVKusovnikDilceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetMaterialPrikazuService.GetMetaKusovniku)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TTPVKusovnikDilceController.GetDokumenaciDilce (id: string='0'; jenSeznam: string='1'; operace: string=''; base64: string='0'); + var iId: integer; + b, b64: Boolean; + begin + + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + b:= false; + jenSeznam:= sanitizeSQLString(jenSeznam); + if (jenSeznam='1') then + b:= true; + + operace:= sanitizeSQLString(operace); + base64:= sanitizeSQLString(base64); + b64:= (base64='1'); + + try + Render(ObjectDict().Add('data', GetVyrobniPrikazService.GetDokumentaci (iId, b, 1, operace, b64))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + end; + + + + + + +{ TTPVCiselnikZmenController } + + procedure TTPVCiselnikZmenController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVCiselnikZmenService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TTPVCiselnikZmenController.GetByID (id: string='0'; rada: string= ''; jenPlatne: string=''; datPlatnosti: string=''); + var iId: integer; + begin + iId:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, iId)) then + iId:= 0; + + try + Render(ObjectDict().Add('data', GetTPVCiselnikZmenService.GetByID(iId))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + } + end; + + end; + + + + procedure TTPVCiselnikZmenController.GetAll (rada: string= ''; jenPlatne: string=''; datPlatnosti: string=''); + var params: TDictionary; + d1: TDateTime; + begin + params:= TDictionary.Create; + + rada:= sanitizeSQLString(rada); + if (rada<>'') and (rada.Length<11) then + params.Add('rada', rada); + + jenPlatne:= sanitizeSQLString(jenPlatne); + if (jenPlatne='1') then + params.Add('jenPlatne', '1'); + + datPlatnosti:= sanitizeSQLString(datPlatnosti); + if (datPlatnosti<>'') then + if (TryStrToDateTime(datPlatnosti, d1)) then + params.Add('datum', FormatDateTime('dd.mm.yyyy hh:nn:ss', d1)); + + + try + Render(ObjectDict().Add('data', GetTPVCiselnikZmenService.GetByParams(params))); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; + } + end; + + + params.Free; + end; + + + + + +{ TTPVPrednastaveniOperaciController } + procedure TTPVPrednastaveniOperaciController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + procedure TTPVPrednastaveniOperaciController.GetByID (id:string='0'); + var params: TDictionary; + iId: integer; + begin + params:= TDictionary.Create; + + iId:= 0; + id:= sanitizeSQLString(id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + if (iId>0) then + params.Add ('id', iId.ToString); + + try + Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByID (iId, params))); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + + params.Free; + + end; + + + + + procedure TTPVPrednastaveniOperaciController.GetAll (minimumDat: string='' +{$IFDEF CUSTOM_CTRL_INCOSystems}; cislo: string=''{$ENDIF} +); + var params: TDictionary; + begin + params:= TDictionary.Create; + + minimumDat:= sanitizeSQLString(minimumDat); + if (minimumDat='1') or (minimumDat='0') then + params.Add ('minimumDat', minimumDat); + +{$IFDEF CUSTOM_CTRL_INCOSystems} + cislo:= sanitizeSQLString (cislo); + if (cislo<>'') then + params.Add ('cislo', cislo); +{$ENDIF} + + try + Render(ObjectDict().Add('data', GetTPVPrednastaveniOperaciService.GetByParams (params))); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + + params.Free; + end; + + + + + + +{ TTPVZakazkoveModifikaceController } + + procedure TTPVZakazkoveModifikaceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVZakazkoveModifikaceService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + procedure TTPVZakazkoveModifikaceController.GetAll (rada: string=''); + var params: TDictionary; + begin + params:= TDictionary.Create; + try + Render(ObjectDict().Add('data', GetTPVZakazkoveModifikaceService.GetByParams (params))); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + params.Free; + end; + + + + + + +{ TTPVZakazkoveModifikaceDilceController } + + procedure TTPVZakazkoveModifikaceDilceController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetTPVZakazkoveModifikaceDilceService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + + + + procedure TTPVZakazkoveModifikaceDilceController.GetAll (idkmen: string=''); + var params: TDictionary; + idKZ: integer; + begin + params:= TDictionary.Create; + + idKZ:= 0; + idkmen:= sanitizeSQLString(idkmen); + if not(TryStrToInt(idkmen, idKZ)) then + idKZ:= 0; + + if (idKZ>0) then + params.Add('id', idKZ.ToString); + + + try + Render(ObjectDict().Add('data', GetTPVZakazkoveModifikaceDilceService.GetByParams (params))); + except +// RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end +} + on E:Exception do + begin + Writeln(E.Message); + raise EMVCException.Create(E.Message, '', 0, 200); + end; +// RenderStatusMessage (200); // raise; + end; + params.Free; + end; + + +end. diff --git a/uCtrlZamestnanci.pas b/uCtrlZamestnanci.pas new file mode 100644 index 0000000..570de04 --- /dev/null +++ b/uCtrlZamestnanci.pas @@ -0,0 +1,180 @@ +unit uCtrlZamestnanci; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + mvcframework, + mvcframework.Commons, + mvcframework.Serializer.Commons, + uCtrlBase, + uHeoObj_Base +{$IFDEF SWAGGER} + , MVCFramework.Swagger.Commons +{$ENDIF} +; + +const +{$I globalConsts.inc} + +type + [MVCPath('/zamestnanec')] + [MVCSwagSummary('Zaměstnanec', 'Zaměstnanci', '')] + TZamestnanciController = class(TBaseController) + public + [MVCPath('/meta')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Zaměstnanec', 'Vratí metadata', 'ZamestnanciGetMeta')] + procedure GetMeta; + +// [MVCDoc('Vrati udaje zamestnance dle jeho ID')] + [MVCPath('/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Zaměstnanec', 'Vratí detail zaměstnance (jen jméno/příjmení/tituly/středisko/zakázka)', 'ZamestnanciGetByID')] + [MVCSwagParam(plPath, 'id', 'ID zaměstnance', ptString, true)] + [MVCSwagParam(plQuery, 'cislo', 'Číslo zaměstnance', ptString, false)] + [MVCSwagParam(plQuery, 'prijm', 'Příjmení zaměstnance', ptString, false)] + [MVCSwagParam(plQuery, 'vestavu', '1=zaměstnanci ve stavu', ptString, false)] + [MVCSwagParam(plQuery, 'kodcipu', 'Kód čipu zaměstnance (max 36 znaků)', ptString, false)] + [MVCSwagResponses(200, 'Success', TZamestnanec)] + procedure GetByID (id: string=''; + [MVCFromQueryString('cislo', '')] cislo: string=''; + [MVCFromQueryString('prijm', '')] prijm: string=''; + [MVCFromQueryString('vestavu', '')] veStavu: string=''; + [MVCFromQueryString('kodcipu', '')] kodCipu: string='' + ); + + [MVCPath('')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('Zaměstnanec', 'Vratí seznam zaměstnanců', 'ZamestnanciGetAll')] + [MVCSwagParam(plQuery, 'vestavu', '1=jen zaměstnance ve stavu', ptString, false)] + [MVCSwagResponses(200, 'Success', TZamestnanec, true)] + procedure GetAll ([MVCFromQueryString('vestavu', '')] veStavu: string='' + ); + end; + + +implementation + + +uses + uSvc_Base, + uCommons, + mvcframework.Serializer.Intf, + System.RegularExpressions, + System.StrUtils, + System.SysUtils; + + + + procedure TZamestnanciController.GetAll (veStavu: string= ''); + var idZam, cisZam: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + veStavu:= sanitizeSQLString(veStavu); + if (veStavu='1') then + params.Add('veStavu', veStavu); + + + try + Render(ObjectDict().Add('data', GetZamestnanciService.GetByParams (params))) + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + + end; + + + + + + procedure TZamestnanciController.GetByID (id: string=''; cislo: string=''; prijm: string=''; veStavu: string=''; kodCipu: string=''); + var idZam, cisZam: integer; + params: TDictionary; + begin + + params:= TDictionary.Create; + + idZam:= 0; + id:= sanitizeSQLString(id); + if (id<>'') then + if not(TryStrToInt(id, idZam)) then + idZam:= 0; + if (idZam>0) then + params.Add('id', idZam.ToString); + + cisZam:= 0; + cislo:= sanitizeSQLString(cislo); + if (cislo<>'') then + if not(TryStrToInt(cislo, cisZam)) then + cisZam:= 0; + if (cisZam>0) then + params.Add('cislo', cisZam.ToString); + + prijm:= sanitizeSQLString(prijm); + if (prijm<>'') then + params.Add('prijm', prijm); + + kodCipu:= sanitizeSQLString(kodCipu); + if (kodCipu<>'') then + params.Add('kodCipu', kodCipu); + + veStavu:= sanitizeSQLString(veStavu); + if (veStavu<>'') then + params.Add('veStavu', veStavu); + + + try + Render(ObjectDict().Add('data', GetZamestnanciService.GetByParams (params))) + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + + params.Free; + + end; + + + + procedure TZamestnanciController.GetMeta; + begin + try + Render(ObjectDict().Add('data', GetZamestnanciService.GetMeta)); + except + RenderStatusMessage (200); +{ + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 200); + end + else + raise; +} + end; + end; + + +end. + diff --git a/uDataMod.dfm b/uDataMod.dfm new file mode 100644 index 0000000..e3bf701 --- /dev/null +++ b/uDataMod.dfm @@ -0,0 +1,52 @@ +object datMod: TdatMod + OnDestroy = DataModuleDestroy + Height = 480 + Width = 640 + object sqlConn: TFDConnection + FetchOptions.AssignedValues = [evRecordCountMode] + FetchOptions.RecordCountMode = cmTotal + FormatOptions.AssignedValues = [fvInlineDataSize] + FormatOptions.InlineDataSize = 2000 + ResourceOptions.AssignedValues = [rvCmdExecMode, rvAutoConnect, rvAutoReconnect] + ResourceOptions.CmdExecMode = amNonBlocking + ResourceOptions.AutoReconnect = True + LoginPrompt = False + Left = 58 + Top = 48 + end + object sqlWaitCur: TFDGUIxWaitCursor + Provider = 'Forms' + Left = 222 + Top = 48 + end + object sqlMSSQLDrv: TFDPhysMSSQLDriverLink + ODBCDriver = 'ODBC Driver 18 for SQL Server' + Left = 308 + Top = 50 + end + object sqlQry1: TFDQuery + Left = 58 + Top = 128 + end + object sqlQry2: TFDQuery + Left = 126 + Top = 126 + end + object sqlQry3: TFDQuery + Left = 184 + Top = 128 + end + object sqlQry10: TFDQuery + Left = 280 + Top = 126 + end + object sqlQry11: TFDQuery + Left = 344 + Top = 126 + end + object qryZpracPrijataData: TFDQuery + ConnectionName = 'hdcdzapiConn' + Left = 50 + Top = 372 + end +end diff --git a/uDataMod.pas b/uDataMod.pas new file mode 100644 index 0000000..65d1c70 --- /dev/null +++ b/uDataMod.pas @@ -0,0 +1,617 @@ +ďťżunit uDataMod; + +interface + +uses + System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, + FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, + FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait, + Data.DB, FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Phys.MSSQLDef, + FireDAC.Phys.ODBCBase, FireDAC.Phys.MSSQL, FireDAC.Stan.Param, FireDAC.DatS, + FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Stan.Consts, + Winapi.ActiveX, + MVCFramework.Logger, + Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files; + + +const +{$I globalConsts.inc} + +type + TdatMod = class(TDataModule) + sqlConn: TFDConnection; + sqlWaitCur: TFDGUIxWaitCursor; + sqlMSSQLDrv: TFDPhysMSSQLDriverLink; + sqlQry1: TFDQuery; + sqlQry2: TFDQuery; + sqlQry3: TFDQuery; + sqlQry10: TFDQuery; + sqlQry11: TFDQuery; + qryZpracPrijataData: TFDQuery; + procedure DataModuleDestroy(Sender: TObject); + private + constructor Create (AOwner: TComponent); override; + function InterniConnectDB (odbc:Boolean=false; pool:Boolean=true): string; + public + dbName, dbServer, dbUser, dbPwd, cfgComp: string; + dbPort: integer; + dbEncConn, dbConnOleDB, chL: boolean; + sqlConnParams: TStringList; + Logger: TLogFileProvider; + function ConnectServer: boolean; + function ErrorStatusJsonText (const errText: string): string; + function SQLTableExists (const tabName: string): Boolean; + function SQLRecordExists (sqlText: string): Boolean; + function SQLColumnExists (const tabName: string; const colName: string): Boolean; + function SQLIDsToString (const tabName: string=''; where: string=''): string; + function SQLGetString (sqlCmd: string=''; sqlConnLoc: TFDConnection=nil): string; + + function StreamToString (const M: TStream): string; + function MemoryStreamToString (const M: TMemoryStream): string; + function MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString; + + procedure CreateLogger (fileName: string=''); + procedure LogInfo (eTyp: Quick.Logger.TEventType; const msg: string); + end; + +var + datMod: TdatMod; + ConnDef: IFDStanConnectionDef; + + +implementation +{%CLASSGROUP 'Vcl.Controls.TControl'} +{$R *.dfm} +uses System.StrUtils, Data.Win.ADODB, + System.JSON.Builders, System.JSON.Writers, System.JSON.Types, JsonDataObjects, + uWinService; + + + + + constructor TdatMod.Create (AOwner: TComponent); + begin + inherited Create (AOwner); + CreateLogger; + end; + + + + + procedure TdatMod.CreateLogger (fileName: string=''); + begin + if (fileName='') then + fileName:= 'hdcDZApi.log'; + Logger:= TLogFileProvider.Create; + Logger.AutoFlush:= true; + Logger.FileName:= ExtractFilePath(ParamStr(0)) + fileName; + Logger.Init; + end; + + + + + procedure TdatMod.DataModuleDestroy(Sender: TObject); + begin + if (sqlConnParams<>nil) then + sqlConnParams.Free; + end; + + + + function TdatMod.StreamToString (const M: TStream): string; + var s: TStringStream; + begin + result:= ''; + if (M<>nil) then + begin + s:= TStringStream.Create; + try + s.CopyFrom (M, 0); + result:= s.DataString; + finally + s.Free; + end; + end; + end; + + + function TdatMod.MemoryStreamToString (const M: TMemoryStream): string; + begin + SetString(Result, PWideChar(M.Memory), M.Size div SizeOf(Char)); + end; + + + + function TdatMod.MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString; + begin + SetString (Result, PAnsiChar(M.Memory), M.Size); + end; + + + + procedure TdatMod.LogInfo (eTyp: Quick.Logger.TEventType; const msg: string); + begin + logItem.EventType:= eTyp; + logItem.EventDate:= now; + logItem.Msg:= msg; + Logger.WriteLog(logItem); + end; + + + + function TdatMod.InterniConnectDB (odbc: Boolean = False; pool: Boolean = True): string; + var drvList: TStringList; + errMsg, connStr, drvName, drvName2: string; + mamOdbc, mamOleDb: Boolean; + idx: integer; + maxNum: byte; + oPars: TStrings; // TFDPhysMSSQLConnectionDefParams; + begin + result:= ''; + mamOdbc:= false; + mamOleDb:= false; + drvName:= 'MSSQL'; + drvName2:= 'SQL Server'; + + dbConnOleDB:= false; + +{ + drvList:= TStringList.Create; + try + GetProviderNames(drvList); + +{$IFDEF DEBUG} +{ + if (drvList.Count>0) then + begin + Writeln(CRLF+'Registrovane drivery:'); + for idx:=0 to drvList.Count-1 do + Writeln(drvList.Strings[idx]); + end; + Writeln(''); +{$ENDIF} +{ + if (drvList.IndexOf('MSOLEDBSQL') >= 0) then + mamOleDb:= true; + if (drvList.IndexOf('MSOLEDBSQL19') >= 0) then + dbEncConn:= true; + if not(mamOleDb) or (odbc) then + begin + mamOleDb:= false; + idx:= -1; + if (drvList.Find('ODBC Driver 17', idx)) then + drvName2:= drvList.Strings[idx]; + if (drvList.Find('ODBC Driver 18', idx)) then + begin + drvName2:= drvList.Strings[idx]; + dbEncConn:= true; + end; + if (drvList.Find('ODBC Driver 19', idx)) then + begin + drvName2:= drvList.Strings[idx]; + dbEncConn:= true; + end; + end; + + sqlMSSQLDrv.ODBCDriver:= drvName2; + if (drvName.Contains('ODBC')) then + drvName:= 'ODBC'; +// sqlMSSQLDrv.DriverID:= drvName; + + dbConnOleDB:= mamOleDb; + +{$IFDEF DEBUG} +{ Writeln('Vybrany driver: ' + sqlMSSQLDrv.ODBCDriver); +{$ENDIF} +{ + finally + drvList.Free; + end; +} + + if not(sqlConn.Connected) and (dbServer<>'') and (dbName<>'') then + begin + try + sqlConnParams:= TStringList.Create; + sqlConnParams.Clear; + oPars:= TStringList.Create; + try +// sqlConn.Params.Clear; +// sqlConn.DriverName:= drvName; +// sqlConn.Params.Add(S_FD_ConnParam_Common_DriverID + '=' + drvName); + + + sqlConnParams.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); + sqlConnParams.Add(S_FD_ConnParam_Common_Server + '=' + dbServer); + sqlConnParams.Add(S_FD_ConnParam_Common_Port + '=' + dbPort.ToString); + sqlConnParams.Add(S_FD_ConnParam_Common_Database + '=' + dbName); + sqlConnParams.Add(S_FD_ConnParam_Common_UserName + '=' + dbUser); + sqlConnParams.Add(S_FD_ConnParam_Common_Password + '=' + dbPwd); + sqlConnParams.Add(S_FD_ConnParam_Common_OSAuthent + '=No'); + sqlConnParams.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); + sqlConnParams.Add(S_FD_ConnParam_Common_LoginTimeout + '=15'); + sqlConnParams.Add(S_FD_ConnParam_MSSQL_MARS + '=Yes'); +// sqlConnParams.Add(S_FD_ConnParam_Common_Pooled + '=True'); +// sqlConnParams.Add(S_FD_ConnParam_Common_Pool_MaximumItems + '=100'); + sqlConnParams.Add(S_FD_ConnParam_Common_ExtendedMetadata + '=True'); + sqlConnParams.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc2'); + sqlConnParams.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes'); + + + oPars.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); + oPars.Add(S_FD_ConnParam_Common_Server + '=' + dbServer); + oPars.Add(S_FD_ConnParam_Common_Port + '=' + dbPort.ToString); + oPars.Add(S_FD_ConnParam_Common_Database + '=' + dbName); + oPars.Add(S_FD_ConnParam_Common_UserName + '=' + dbUser); + oPars.Add(S_FD_ConnParam_Common_Password + '=' + dbPwd); + oPars.Add(S_FD_ConnParam_Common_OSAuthent + '=No'); + oPars.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); + oPars.Add(S_FD_ConnParam_Common_LoginTimeout + '=15'); + oPars.Add(S_FD_ConnParam_MSSQL_MARS + '=Yes'); + oPars.Add(S_FD_ConnParam_Common_ExtendedMetadata + '=True'); + oPars.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcdzAPIsvc'); + oPars.Add(S_FD_ConnParam_Common_Pooled + '=True'); + oPars.Add(S_FD_ConnParam_Common_Pool_MaximumItems + '=100'); + oPars.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=TrustServerCertificate=yes'); + + if (FDManager.FindConnection(sqlPoolName)=nil) then + begin + FDManager.AddConnectionDef (sqlPoolName, 'MSSQL', oPars, true); + if (FDManager.State<>dmsInactive) then + Sleep(0); + end; + FDManager.Open; + +// sqlConn.Params.SetStrings(oPars); + sqlConn.ConnectionDefName:= sqlPoolName; + sqlQry1.ConnectionName:= sqlConn.ConnectionDefName; + sqlQry2.ConnectionName:= sqlConn.ConnectionDefName; + sqlQry3.ConnectionName:= sqlConn.ConnectionDefName; + sqlQry10.ConnectionName:= sqlConn.ConnectionDefName; + sqlQry11.ConnectionName:= sqlConn.ConnectionDefName; + +// if (dbConnOleDB) then +// sqlMSSQLDrv.ODBCDriver:= ''; + + if (dbEncConn) then + begin + if (dbConnOleDB) then + connStr:= 'Encrypt=True;TrustServerCertificate=True;UseEncryptionForData=True' + else + connStr:= 'Encrypt=yes;TrustServerCertificate=yes;Encrypt=yes'; +// sqlConn.Params.Add(S_FD_ConnParam_ODBC_ODBCAdvanced + '=' + connStr); + end; + + connStr:= sqlConn.Params.DelimitedText; + sqlConn.Open; + except on E:Exception do + begin + result:= E.Message; +{$IFDEF DEBUG} + Writeln('Chyba spojeni - ' + E.ClassName, ': ', result); +{$ENDIF} + end; + end; // try + finally + if (oPars<>nil) then + oPars.Free; + end; // try + end; + end; + + + + + function TdatMod.ConnectServer: Boolean; + var drvList: TStringList; + errMsg, connStr, drvName, drvName2: string; + mamOdbc, mamOleDb: Boolean; + idx: integer; + maxNum: byte; + begin + try + errMsg:= InterniConnectDB (false); + if (errMsg.Contains('ogin failed for us')) or (errMsg.Contains('ogin failed')) then + errMsg:= InterniConnectDB (true); + + if (errMsg<>'') then + LogInfo (etWarning, 'Chyba spojeni: ' + errMsg); + except on E:Exception do + errMsg:= E.Message; + end; + + result:= (errMsg=''); + end; + + + + + + function TdatMod.ErrorStatusJsonText (const errText: string): string; + var b: TJSONObjectBuilder; + w: TJsonTextWriter; + sB: TStringBuilder; + sW: TStringWriter; + p: TJSONCollectionBuilder.TPairs; + o: TJSONObject; + begin + o:= TJSONObject.Create; + sB:= TStringBuilder.Create; + sW:= TStringWriter.Create(sB); + w:= TJsonTextWriter.Create(sW); + w.Formatting:= TJsonFormatting.Indented; + b:= TJSONObjectBuilder.Create(w); +// b.BeginObject.BeginArray('status').BeginObject.Add('status', status).EndObject.EndArray.EndObject; + p:= b.BeginObject.Add('status', errText); + p.EndObject; + + o.FromJSON(sB.ToString); + result:= o.ToString; + end; + + + + + function TdatMod.SQLTableExists (const tabName: string): Boolean; + var lSQL, s, t: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + c: boolean; + begin + result:= false; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; +// sqlConnX.DriverName:= 'MSSQL'; + try + sqlConnX.Open; + finally + end; + c:= sqlConnX.Connected; + + if (c) then + begin + s:= ''; + t:= tabName.Replace('[', '', [rfReplaceAll]).Replace(']', '', [rfReplaceAll]); + if (t.ToLower.Contains('dbo.')) then + begin + s:= 'dbo'; + t:= t.Replace('dbo.', '', [rfIgnoreCase]); + end; + lSQL:= 'SELECT 1 AS A FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME=N' + t.QuotedString + IfThen(s<>'', ' AND c.TABLE_SCHEMA=N' + s.QuotedString, ''); + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= (lQry.RecordCount>0); +// Log.Info('SQLTableExists OK', 'uDataMod'); + except on E:Exception do + begin + Log.Warn('Chyba SQLTableExists: ' + E.Message + CRLF + lSQL, 'uDataMod'); + result:= false; + end; + end; + finally + lQry.Free; + end; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + + function TdatMod.SQLRecordExists (sqlText: string): boolean; + var lSQL, s, t: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + c: boolean; + begin + result:= false; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.Params:= sqlConn.Params; + try + sqlConnX.Open; + finally + end; + c:= sqlConnX.Connected; + + sqlText:= sqlText.Replace(';', '').Replace('--', ''); + + if (c) and (sqlText<>'') then + begin + lQry:= TFDQuery.Create(nil); + if (sqlConnX<>nil) then + lQry.Connection:= sqlConnX + else + lQry.Connection:= sqlConn; + try + try + lQry.Open(sqlText); + result:= (lQry.RecordCount>0); + except on E:Exception do + begin + Log.Warn('Chyba SQLRecordExists: ' + E.Message + CRLF + lSQL, 'uDataMod'); + result:= false; + end; + end; + finally + lQry.Free; + end; + end; + + if (sqlConnX<>nil) then + begin + sqlConnX.Close; + sqlConnX.Free; + end; + + end; + + + + + function TdatMod.SQLIDsToString (const tabName: string = ''; where: string = ''): string; + var lSQL, s, t: string; + c: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= ''; + + try + if (self.sqlConn.Connected) then + begin + s:= ''; + t:= tabName; + if not(t.Contains('dbo.')) and not(t.Contains('dbo].')) then + t:= '[' + t; + if not(t.EndsWith(']')) then + t:= t + ']'; + if not(t.Contains('dbo.')) and not(t.Contains('dbo].')) then + t:= '[dbo].' + t; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + try + sqlConnX.Open; + finally + end; + c:= sqlConnX.Connected; + + if (c) then + begin + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + where:= where.Replace(';', '').Replace('--', '').Trim; // sanitace podminky + lSQL:= 'SELECT STRING_AGG(ID,'','') AS IDs FROM ' + t + IfThen(where<>'', ' WHERE ' + where, ''); + try + lQry.Open(lSQL); + result:= lQry.FieldByName('IDs').AsString; + except on E:Exception do + result:= ''; + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + end; + + sqlConnX.Free; + end; + except on E:Exception do + LogInfo (Quick.Logger.etInfo, 'In SQLIDsToString error: ' + E.Message); + end; + + end; + + + + + function TdatMod.SQLColumnExists (const tabName: string; const colName: string): Boolean; + var lSQL, s, t: string; + lQry: TFDQuery; + c: boolean; + sqlConnX: TFDConnection; + begin + result:= false; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + c:= sqlConnX.Connected; + + if (c) then + begin + s:= ''; + t:= tabName.Replace('[', '', [rfReplaceAll]).Replace(']', '', [rfReplaceAll]); + if (t.ToLower.Contains('dbo.')) then + begin + s:= 'dbo'; + t:= t.Replace('dbo.', '', [rfIgnoreCase]); + end; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lSQL:= 'SELECT 1 AS A FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME=N' + t.QuotedString + IfThen(s<>'', ' AND c.TABLE_SCHEMA=N' + s.QuotedString, ''); + lSQL:= lSQL + ' AND c.COLUMN_NAME=N' + colName.QuotedString; + try + lQry.Open(lSQL); + result:= (lQry.RecordCount>0); + except on E:Exception do + begin + Log.Warn('Chyba SQLColumnExists: ' + E.Message + CRLF + lSQL, 'uDataMod'); + result:= false; + end; + end; + finally + lQry.Free; + end; + sqlConnX.Close; + end; + + sqlConnX.Free; + end; + + + + + function TdatMod.SQLGetString (sqlCmd: string=''; sqlConnLoc: TFDConnection=nil): string; + var lSQL, s, t: string; + lQry: TFDQuery; + c: boolean; + sqlConnX: TFDConnection; + begin + result:= ''; + + if (sqlConnLoc<>nil) then + sqlConnX:= sqlConnLoc + else + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + end; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(sqlCmd); + result:= lQry.Fields.Fields[0].AsString; + except on E:Exception do + begin + Log.Warn('Chyba SQLGetString: ' + E.Message + CRLF + lSQL, 'uDataMod'); + end; + end; + finally + lQry.Free; + end; + + if (sqlConnLoc=nil) then + begin + sqlConnX.Close; + FreeAndNil (sqlConnX); + end; + end; + + + + initialization +// CoInitialize(nil); + + + finalization +// CoUninitialize; + +end. diff --git a/uHeOObj_Base.pas b/uHeOObj_Base.pas new file mode 100644 index 0000000..9069a03 --- /dev/null +++ b/uHeOObj_Base.pas @@ -0,0 +1,1891 @@ +unit uHeoObj_Base; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.Nullables + , MVCFramework.Swagger.Commons + ; + + +const +{$I globalConsts.inc} + +type + THeliosObjekty = class + private + procedure SetID (const Value: Integer); + protected + [MVCTableField('ID',[foPrimaryKey])] + FID: Integer; + FExtInfo: NullableString; // externi informace v JSON formatu + + FAutor: string; + FDatPorizeni: TDateTime; + FZmenil: NullableString; + FDatZmeny: NullableTDateTime; + + FAVAReferenceID: NullableString; + FAVAExternalID: NullableString; + + // load events + /// + /// Called just after load the object state from database + /// + procedure OnAfterLoad; virtual; + /// + /// Called before load the object state from database + /// + procedure OnBeforeLoad; virtual; + /// + /// Called before insert the object state to database + /// + procedure OnBeforeInsert; virtual; + /// + /// Called after insert the object state to database + /// + procedure OnAfterInsert; virtual; + /// + /// Called before update the object state to database + /// + procedure OnBeforeUpdate; virtual; + /// + /// Called after update the object state to database + /// + procedure OnAfterUpdate; virtual; + /// + /// Called before delete object from database + /// + procedure OnBeforeDelete; virtual; + /// + /// Called after delete object from database + /// + procedure OnAfterDelete; virtual; + /// + /// Called before insert or update the object to the database + /// + procedure OnBeforeInsertOrUpdate; virtual; + /// + /// Called before execute sql + /// + procedure OnBeforeExecuteSQL(var SQL: string); virtual; + /// + /// Called after insert or update the object to the database + /// + procedure OnAfterInsertOrUpdate; virtual; + public + constructor Create; virtual; + procedure CheckInsert; virtual; + procedure CheckUpdate; virtual; + procedure CheckDelete; virtual; + + [MVCColumn('ID', true)] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID záznamu', true, false)] + property ID: Integer read FID write SetID; + + [MVCColumn('ExtInfo')] + [MVCSwagJsonSchemaField(stString, 'ExtInfo', 'Externí informace záznamu (JSON)', false, true)] + property ExtInfo: NullableString read FExtInfo write FExtInfo; + + [MVCColumn('Autor')] + [MVCSwagJsonSchemaField(stString, 'Autor', 'Autor dokladu', true, false, 1, 128)] + property Autor: string read FAutor write FAutor; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatPorizeni', 'Datum pořízení', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + + [MVCColumn('Zmenil')] + [MVCSwagJsonSchemaField(stString, 'Zmenil', 'Kdo změnil dokument', false, true, 1, 128)] + property Zmenil: NullableString read FZmenil write FZmenil; + + [MVCColumn('DatZmeny')] + [MVCSwagJsonSchemaField(stDateTime, 'DatZmeny', 'Datum změny', false, true)] + property DatZmeny: NullableTDateTime read FDatZmeny write FDatZmeny; + + [MVCColumn('AVAReferenceID')] + [MVCSwagJsonSchemaField(stString, 'AVAReferenceID', 'AVA reference', false, true, 1, 40)] + property AVAReferenceID: NullableString read FAVAReferenceID write FAVAReferenceID; + + [MVCColumn('AVAExternalID')] + [MVCSwagJsonSchemaField(stString, 'AVAExternalID', 'AVA externí ID', false, true, 1, 255)] + property AVAExternalID: NullableString read FAVAExternalID write FAVAExternalID; + end; + +{ mustr + [MVCNameCase(ncLowerCase)] + TObjekt = class(THeliosObjekty) + private + FCislo: integer; + procedure NastavCislo(const Value: integer); + public + procedure CheckInsert; override; + procedure CheckUpdate; override; + procedure CheckDelete; override; + [MVCColumn('Cislo')] + property Cislo: integer read FCislo write NastavCislo; + end; +} + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPlanKalendPol')] + TPolozkaPlanKal = class(THeliosObjekty) + private +// [MVCTableField('ID',[foPrimaryKey])] +// FID: integer; + FIDKalendar: NullableInt32; + FIDStroj: NullableInt32; + FIDKooperace: NullableInt32; + FIDVyrPerZdroj: NullableInt32; + FDatum: TDateTime; + FKoefPlneni: Extended; + FMinOd: NullableInt32; + FMinDo: NullableInt32; + FIDSmeny: NullableInt32; + public + [MVCColumn('IDPlanKalend')] + [MVCSwagJsonSchemaField(stInteger, 'IDKalendar', 'ID plánovacího kalendáře', false, true)] // required, nullable + property IDKalendar: NullableInt32 read FIDKalendar write FIDKalendar; + + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroj', 'ID stroje', false, true)] // required, nullable + property IDStroj: NullableInt32 read FIDStroj write FIDStroj; + + [MVCColumn('IDKoop')] + [MVCSwagJsonSchemaField(stInteger, 'IDKoop', 'ID kooperace', false, true)] // required, nullable + property IDKoop: NullableInt32 read FIDKooperace write FIDKooperace; + + [MVCColumn('IDVyrPerZdroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDVyrPerZdroje', 'ID personálního zdroje', false, true)] // required, nullable + property IDVyrPerZdroj: NullableInt32 read FIDVyrPerZdroj write FIDVyrPerZdroj; + + [MVCColumn('IDSmeny')] + [MVCSwagJsonSchemaField(stInteger, 'IDSmeny', 'ID směny', false, true)] // required, nullable + property IDSmeny: NullableInt32 read FIDSmeny write FIDSmeny; + + [MVCColumn('Datum')] + [MVCSwagJsonSchemaField(stDate, 'Datum', 'Datum plánovacího kalendáře', true, false)] // required, nullable + property Datum: TDateTime read FDatum write FDatum; + + [MVCColumn('KoefPlneni')] + [MVCSwagJsonSchemaField(stNumber, 'KoefPlneni', 'Koeficient plnění', true, false)] // required, nullable + property KoefPlneni: Extended read FKoefPlneni write FKoefPlneni; + + [MVCColumn('MinOd')] + [MVCSwagJsonSchemaField(stInteger, 'MinOd', 'Minuty (od)', false, true)] // required, nullable + property MinOd: NullableInt32 read FMinOd write FMinOd; + + [MVCColumn('MinDo')] + [MVCSwagJsonSchemaField(stInteger, 'MinDo', 'Minuty (do)', false, true)] // required, nullable + property MinDo: NullableInt32 read FMinDo write FMinDo; + end; + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPlanKalendare')] + TPlanKalendar = class(THeliosObjekty) + private +// [MVCTableField('ID',[foPrimaryKey])] +// FID: integer; + FVychozi: boolean; + FUplatnitSvatky: boolean; + FOznaceni: string; + FNazev: NullableString; + FPocetTydnuPredpisu: integer; + FPolozky: TObjectList; + procedure SetPolozkyKalendare (const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; + + [MVCColumn('Vychozi')] + [MVCSwagJsonSchemaField(stBoolean, 'Vychozi', 'Výchozí kalendář', true, false)] // required, nullable + property Vychozi: boolean read FVychozi write FVychozi; + + [MVCColumn('UplatnitSvatky')] + [MVCSwagJsonSchemaField(stBoolean, 'UplatnitSvatky', 'Uplatnit svátky', true, false)] // required, nullable + property UplatnitSvatky: boolean read FUplatnitSvatky write FUplatnitSvatky; + + [MVCColumn('Oznaceni')] + [MVCSwagJsonSchemaField(stString, 'Oznaceni', 'Označení plánovacího kalendáře', true, false, 1, 10)] // required, nullable + property Oznaceni: string read FOznaceni write FOznaceni; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název plánovacího kalendáře', false, true, 1, 100)] // required, nullable + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('PocetTydnuPredpisu')] + [MVCSwagJsonSchemaField(stInteger, 'PocetTydnuPredpisu', 'Počet týdnů předpisu', true, false)] // required, nullable + property PocetTydnuPredpisu: integer read FPocetTydnuPredpisu write FPocetTydnuPredpisu; + + [MVCListOf(TPolozkaPlanKal)] + property Polozky: TObjectList read FPolozky write SetPolozkyKalendare; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabDokumentStrom')] + TDokumentStrom = class(THeliosObjekty) + private + FIDParent: NullableInt32; + FNazevUrovne: string; + FFullNazev: string; + FPoradiVeVetvi: Integer; + public + [MVCColumn('IDParent')] + [MVCSwagJsonSchemaField(stInteger, 'IDParent', 'ID rodičovské úrovně', false, true)] + property IDParent: NullableInt32 read FIDParent write FIDParent; + + [MVCColumn('NazevUrovne')] + [MVCSwagJsonSchemaField(stString, 'NazevUrovne', 'Název úrovně', true, false, 0, 255)] // required, nullable + property NazevUrovne: string read FNazevUrovne write FNazevUrovne; + + [MVCColumn('FullNazev')] + [MVCSwagJsonSchemaField(stString, 'FullNazev', 'Plný název úrovně', true, false, 0, 255)] // required, nullable + property FullNazev: string read FFullNazev write FFullNazev; + + [MVCColumn('PoradiVeVetvi')] + [MVCSwagJsonSchemaField(stInteger, 'PoradiVeVetvi', 'Pořadí ve větvi', true, false)] + property PoradiVeVetvi: integer read FPoradiVeVetvi write FPoradiVeVetvi; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabDokument')] + TDokument = class(THeliosObjekty) + private + FPopis: string; + FJmenoACesta: string; + FDokument: NullableString; + FUlozenoDB: Boolean; + FVelikostVDB: integer; + FSledovatHistorii: Boolean; + FIDDokumStrom: NullableInt32; + FIDDokTyp: NullableInt32; + FDatPorizeni: TDateTime; + FDatZmeny: NullableTDateTime; + FAutor, FZmenil: string; + public + [MVCColumn('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis dokumentu', true, false, 1, 255)] // required, nullable + property Popis: string read FPopis write FPopis; + + [MVCColumn('JmenoACesta')] + [MVCSwagJsonSchemaField(stString, 'JmenoACesta', 'Jméno a cesta k uloženému dokumentu', true, false, 1, 255)] + property JmenoACesta: string read FJmenoACesta write FJmenoACesta; + + [MVCColumn('Dokument')] + [MVCSwagJsonSchemaField(stString, 'Dokument', 'Obsah (dokumentu)', false, true)] + property Dokument: NullableString read FDokument write FDokument; + + [MVCColumn('UlozenoDB')] + [MVCSwagJsonSchemaField(stBoolean, 'UlozenoDB', 'Dokument je uložen v databázi', true, false)] + property UlozenoDB: Boolean read FUlozenoDB write FUlozenoDB; + + [MVCColumn('VelikostVDB')] + [MVCSwagJsonSchemaField(stInteger, 'VelikostVDB', 'Velikost souboru', true, false)] + property VelikostVDB: integer read FVelikostVDB write FVelikostVDB; + + [MVCColumn('SledovatHistorii')] + [MVCSwagJsonSchemaField(stBoolean, 'SledovatHistorii', 'Sledovat historii dokumentu', true, false)] + property SledovatHistorii: Boolean read FSledovatHistorii write FSledovatHistorii; + + [MVCColumn('IDDokumStrom')] + [MVCSwagJsonSchemaField(stInteger, 'IDDokumStrom', 'ID stromové struktury dokumentu', false, true)] + property IDDokumStrom: NullableInt32 read FIDDokumStrom write FIDDokumStrom; + + [MVCColumn('IDDokTyp')] + [MVCSwagJsonSchemaField(stInteger, 'IDDokTyp', 'ID typu dokumentu', false, true)] + property IDDokTyp: NullableInt32 read FIDDokTyp write FIDDokTyp; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TSerioveCisloStav')] + TSerioveCisloStav = class(THeliosObjekty) + private + FIDStavSkladu: integer; + FIDVyrCK: integer; + FNazev1, FNazev2: string; + FMnozstvi, FMnozstviDispo: Extended; + FDatPorizeni: TDateTime; + FDatVstup, FDatExpirace: NullableTDatetime; + public + [MVCColumn('IDStavSkladu')] + [MVCSwagJsonSchemaField('IDStavSkladu', 'ID karty stavu skladu', true, false)] + property IDStavSkladu: integer read FIDStavSkladu write FIDStavSkladu; + + [MVCColumn('Nazev1')] +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCSwagJsonSchemaField(stString, 'Nazev1', 'Číslo paletovĂŠho listu (vĂ˝robnĂ­ číslo)', true, false, 1, 100)] +{$ELSE} + [MVCSwagJsonSchemaField('Nazev1', 'VĂ˝robnĂ­ číslo', true, false, 1, 100)] +{$ENDIF} + property Nazev1: string read FNazev1 write FNazev2; + + [MVCColumn('Nazev2')] +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCSwagJsonSchemaField(stString, 'Nazev2', 'Ĺ arĹže (popis vĂ˝robnĂ­ho číslo)', true, false, 1, 100)] +{$ELSE} + [MVCSwagJsonSchemaField('Nazev2', 'Popis vĂ˝robnĂ­ho číslo', true, false, 1, 100)] +{$ENDIF} + property Nazev2: string read FNazev2 write FNazev2; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField('Mnozstvi', 'MnoĹžstvĂ­', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('MnozstviDispo')] + [MVCSwagJsonSchemaField('MnozstviDispo', 'MnoĹžstvĂ­ k dispozici', true, false)] + property MnozstviDispo: Extended read FMnozstviDispo write FMnozstviDispo; + + [MVCColumn('DatPorizeni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatPorizeni', 'Datum pořízenĂ­', true, false)] + property DatPorizeni: TDatetime read FDatPorizeni write FDatPorizeni; + + [MVCColumn('DatVstup')] + [MVCSwagJsonSchemaField(stDateTime, 'DatVstup', 'Datum vstup', false, true)] + property DatVstup: NullableTDatetime read FDatVstup write FDatVstup; + + [MVCColumn('DatExpirace')] + [MVCSwagJsonSchemaField(stDateTime, 'DatExpirace', 'Datum expirace', false, true)] + property DatExpirace: NullableTDatetime read FDatExpirace write FDatExpirace; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TSerioveCisloPohybOZ')] + TSerioveCisloPohybOZ = class(THeliosObjekty) + private + FIDPolozkaOZ: integer; + FIDVyrCS: integer; + FIDVyrCK: integer; + FNazev: NullableString; + FVyrCis: NullableString; + FMnozstvi: Extended; + FMnozstviEvid: Extended; + FDatVstup: NullableTDateTime; + FDatVystup: NullableTDateTime; + FDatExpirace: NullableTDateTime; + FPoznamka: NullableString; + FZdrojSD: NullableString; + FIDDokladGSD: NullableInt32; + public + [MVCColumn('IDPolozkaDokladu')] // 2nd param=true if is PrimaryKey + [MVCSwagJsonSchemaField(stInteger, 'IDPolozkaDokladu', 'ID pohybu zboŞí dokladu OZ', true, false)] + property IDPolozkaDokladu: integer read FIDPolozkaOZ write FIDPolozkaOZ; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'MnoĹžstvĂ­', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('MnozstviEvid')] + [MVCSwagJsonSchemaField(stNumber, 'MnozstviEvid', 'MnoĹžstvĂ­ v evidenčnĂ­ jednotce', true, false)] + property MnozstviEvid: Extended read FMnozstviEvid write FMnozstviEvid; + + [MVCColumn('IDVyrCis')] + [MVCSwagJsonSchemaField(stInteger, 'IDVyrCis', 'ID karty stavu skladu', true, false)] + property IDVyrCis: integer read FIDVyrCS write FIDVyrCS; + + [MVCColumn('Nazev')] // nazev ze Selectu +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCSwagJsonSchemaField(stString, 'Nazev1', 'Ĺ arĹže (popis vĂ˝robnĂ­ho číslo)', true, false, 1, 100)] +{$ELSE} + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Popis vĂ˝robnĂ­ho čísla', true, false, 1, 100)] +{$ENDIF} + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('VyrCis')] +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCSwagJsonSchemaField(stString, 'VyrCis', 'Číslo paletovĂŠho listu (vĂ˝robnĂ­ číslo)', true, false, 1, 100)] +{$ELSE} + [MVCSwagJsonSchemaField(stString, 'VyrCis', 'VĂ˝robnĂ­ číslo', true, false, 1, 100)] +{$ENDIF} + property VyrCis: NullableString read FVyrCis write FVyrCis; + + [MVCColumn('DatVstup')] + [MVCSwagJsonSchemaField(stDateTime, 'DatVstup', 'Datum vstupu', false, true)] + property DatVstup: NullableTDateTime read FDatVstup write FDatVstup; + + [MVCColumn('DatVystup')] + [MVCSwagJsonSchemaField(stDateTime, 'DatVystup', 'Datum vĂ˝stupu', false, true)] + property DatVystup: NullableTDateTime read FDatVystup write FDatVystup; + + [MVCColumn('DatExpirace')] + [MVCSwagJsonSchemaField(stDateTime, 'DatExpirace', 'Datum expirace', false, true)] + property DatExpirace: NullableTDateTime read FDatExpirace write FDatExpirace; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'PoznĂĄmka', false, true)] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('ZdrojSD')] + [MVCSwagJsonSchemaField(stString, 'ZdrojSD', '1=zdrojem dat je SD ScanData', false, true)] + property ZdrojSD: NullableString read FZdrojSD write FZdrojSD; + + [MVCColumn('IDDokladGSD')] + [MVCSwagJsonSchemaField(stInteger, 'IDDokladGSD', 'Id dokladu SD serveru', false, true)] + property IDDokladGSD: NullableInt32 read FIDDokladGSD write FIDDokladGSD; + + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabUmisteni')] + TUmisteni = class(THeliosObjekty) + private + FIDSklad: string; + FKod: string; + FNazev: string; + FPoznamka: NullableString; + FBlokovano: Boolean; + public + constructor Create; virtual; + destructor Destroy; override; + + [MVCColumn('IDSklad')] + [MVCSwagJsonSchemaField(stString, 'IDSklad', 'Sklad umĂ­stěnĂ­', true, false, 1, 30)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDSklad: string read FIDSklad write FIDSklad; + + [MVCColumn('Kod')] + [MVCSwagJsonSchemaField(stString, 'Kod', 'KĂłd umĂ­stenĂ­', true, false, 1, 15)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Kod: string read FKod write FKod; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'NĂĄzev umĂ­stenĂ­', true, false, 1, 40)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Nazev: string read FNazev write FNazev; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'PoznĂĄmka', false, true)] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('Blokovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Blokovano', 'BlokovĂĄno', true, false)] + property Blokovano: Boolean read FBlokovano write FBlokovano default false; + end; + + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPohybyZbozi')] + TPohybOZ = class(THeliosObjekty) + private +// FID: integer; + FIDDoklad: integer; + FJednotkaMeny: integer; + FVstupniCena: integer; + FPoradi: integer; + FDruhPohybu: integer; + FSkupZbo: string; + FRegCis: string; + FIDKmenZbozi: integer; + FIDZboSklad: integer; + FNazev1, FNazev2, FNazev3, FNazev4, FNazSoz1, FNazSoz2, FNazSoz3, FNazSoz4: string; + FMena, FMJ, FMJEvidence: NullableString; + FMnozstvi: Extended; + FKurz: Extended; + FIDPrikaz: NullableInt32; + FTypVyrobnihoDokladu: NullableInt32; + FUmisteni: TUmisteni; + FSerialNums: TObjectList; +{$IFDEF CUSTOM_CTRL_Rootvin} + FPHObjIdent: NullableInt32; + FPHPolIdent: NullableInt32; + FSilo: NullableInt32; + FSarze: NullableString; + FPaletList: NullableString; + FIDMzdy: NullableInt32; +{$ENDIF} + procedure ZapisIDKmene; + procedure SetSerialNums( const Value: TObjectList); + procedure SetUmisteni (const Value: TUmisteni); + public + constructor Create; virtual; + destructor Destroy; override; + +// [MVCColumn('IDTabStrom')] // nazev v tabulce +// [MVCTableField('Stredisko')] // nazev pro API + + [MVCColumn('IDDoklad')] // 2nd param=true if is PrimaryKey + [MVCSwagJsonSchemaField(stInteger, 'IDDoklad', 'ID dokladu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDDoklad: integer read FIDDoklad write FIDDoklad; + + [MVCColumn('Poradi')] + [MVCSwagJsonSchemaField(stInteger, 'Poradi', 'Poradi polozky na dokladu', true, false)] + property Poradi: integer read FPoradi write FPoradi; + + [MVCColumn('DruhPohybuZbo')] + [MVCTableField('DruhPohybu')] + [MVCSwagJsonSchemaField(stInteger, 'DruhPohybu', 'Druh pohybu zbozi', true, false)] + property DruhPohybu: integer read FDruhPohybu write FDruhPohybu; + + [MVCColumn('VstupniCena')] + [MVCSwagJsonSchemaField(stInteger, 'VstupniCena', 'Druh vstupnĂ­ ceny', true, false)] + property VstupniCena: integer read FVstupniCena write FVstupniCena; + + [MVCColumn('SkupZbo')] + [MVCSwagJsonSchemaField(stString, 'SkupZbo', 'Skupina karet', true, false, 1, 3)] + property SkupZbo: string read FSkupZbo write FSkupZbo; + + [MVCColumn('RegCis')] + [MVCSwagJsonSchemaField(stString, 'RegCis', 'Registracni cislo', true, false, 1, 30)] + property RegCis: string read FRegCis write FRegCis; + + [MVCColumn('IDZboSklad')] + [MVCSwagJsonSchemaField(stInteger, 'IDZboSklad', 'ID skladov0 karty', true, false)] + property IDZboSklad: integer read FIDZboSklad write FIDZboSklad; + + [MVCColumn('Mena')] + [MVCSwagJsonSchemaField(stString, 'Mena', 'Měna', false, true, 1, 3)] + property Mena: NullableString read FMena write FMena; + + [MVCColumn('Nazev1')] + [MVCSwagJsonSchemaField(stString, 'Nazev1', 'NĂĄzev 1', true, false, 1, 100)] + property Nazev1: string read FNazev1 write FNazev1; + + [MVCColumn('Nazev2')] + [MVCSwagJsonSchemaField(stString, 'Nazev2', 'NĂĄzev 2', true, false, 1, 100)] + property Nazev2: string read FNazev2 write FNazev2; + + [MVCColumn('Nazev3')] + [MVCSwagJsonSchemaField(stString, 'Nazev3', 'NĂĄzev 3', true, false, 1, 100)] + property Nazev3: string read FNazev3 write FNazev3; + + [MVCColumn('Nazev4')] + [MVCSwagJsonSchemaField(stString, 'Nazev4', 'NĂĄzev 4', true, false, 1, 100)] + property Nazev4: string read FNazev4 write FNazev4; + + [MVCColumn('NazevSozNa1')] + [MVCSwagJsonSchemaField(stString, 'NazevSozNa1', '', true, false, 1, 100)] + property NazevSozNa1: string read FNazSoz1 write FNazSoz1; + + [MVCColumn('NazevSozNa2')] + [MVCSwagJsonSchemaField(stString, 'NazevSozNa2', '', true, false, 1, 100)] + property NazevSozNa2: string read FNazSoz2 write FNazSoz2; + + [MVCColumn('NazevSozNa3')] + [MVCSwagJsonSchemaField(stString, 'NazevSozNa3', '', true, false, 1, 100)] + property NazevSozNa3: string read FNazSoz3 write FNazSoz3; + + [MVCColumn('Popis4')] + [MVCTableField('NazevSozNa4')] // nazev pro API + [MVCSwagJsonSchemaField(stString, 'NazevSozNa4', '', true, false, 1, 100)] + property Popis4: string read FNazSoz4 write FNazSoz4; + + [MVCColumn('MJ')] + [MVCSwagJsonSchemaField(stString, 'MJ', 'MJ', false, true, 1, 10)] + property MJ: NullableString read FMJ write FMJ; + + [MVCColumn('MJEvidence')] + [MVCSwagJsonSchemaField(stString, 'MJEvidence', 'MJEvidence', false, true, 1, 10)] + property MJEvidence: NullableString read FMJEvidence write FMJEvidence; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'Mnozstvi', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MapperListOf(TSerioveCisloPohybOZ)] + property SerialNums: TObjectList read FSerialNums write SetSerialNums; + + [MVCColumn('IDUmisteni')] + [MapperListOf(TUmisteni)] + property Umisteni: TUmisteni read FUmisteni write SetUmisteni; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID zdrojového výrobního příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('TypVyrobnihoDokladu')] + [MVCSwagJsonSchemaField(stInteger, 'TypVyrobnihoDokladu', 'Typ výrobního dokladu - 0=odvádění výrobku, 1=výdej materiálu, ', false, true)] + property TypVyrobnihoDokladu: NullableInt32 read FTypVyrobnihoDokladu write FTypVyrobnihoDokladu; + +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCColumn('PHObjIdent')] + [MVCSwagJsonSchemaField(stInteger, 'PHObjIdent', 'ID objednavky PH', false, true)] + property PHObjIdent: NullableInt32 read FPHObjIdent write FPHObjIdent; + + [MVCColumn('PHPolIdent')] + [MVCSwagJsonSchemaField(stInteger, 'PHPolIdent', 'ID radku objednavky PH', false, true)] + property PHPolIdent: NullableInt32 read FPHPolIdent write FPHPolIdent; + + [MVCColumn('Silo')] + [MVCSwagJsonSchemaField(stInteger, 'Silo', 'Cislo sila (u mouky)', false, true)] + property Silo: NullableInt32 read FSilo write FSilo; + + [MVCColumn('Sarze')] + [MVCSwagJsonSchemaField(stString, 'Sarze', 'Šarže (poslední převedená na sklad)', false, true)] + property Sarze: NullableString read FSarze write FSarze; + + [MVCColumn('PaletList')] + [MVCSwagJsonSchemaField(stString, 'PaletList', 'Paletový list', false, true)] + property PaletList: NullableString read FPaletList write FPaletList; + + [MVCColumn('IDMzdy')] + [MVCSwagJsonSchemaField(stInteger, 'IDMzdy', 'ID evidence operace, z jake byla polozka generovana', false, true)] + property IDMzdy: NullableInt32 read FIDMzdy write FIDMzdy; +{$ENDIF} + end; + + + + + + [MVCTable('TabDokladyZbozi')] + [MVCNameCase(ncLowerCase)] + TDruhDokZbo = class(THeliosObjekty) + private + FRadaDokladu: string; + FNazev: string; + FNavaznaRada: NullableString; + FDruhPohybu: integer; + FUKod: NullableInt32; + FTypPrevodky: NullableString; + FIDSkladPrevodu: NullableString; + FCisloOrg: NullableInt32; + FVstupniCena: integer; + FCisloZakazky: NullableString; + FAutoRealizace: integer; + FFormaUhrady: NullableString; + public + [MVCColumn('RadaDokladu')] + [MVCSwagJsonSchemaField('RadaDokladu', 'Řada dokladu', true, false, 0, 3)] + property RadaDokladu: string read FRadaDokladu write FRadaDokladu; + + [MVCColumn('DruhPohybuZbo')] // nazev v tabulce + [MVCTableField('DruhPohybu')] // nazev pro API + [MVCSwagJsonSchemaField('DruhPohybu', 'Druh pohybu zboží', true, false)] + property DruhPohybu: integer read FDruhPohybu write FDruhPohybu; + + [MVCColumn('NavaznaRada')] + [MVCSwagJsonSchemaField('NavaznaRada', 'Návazná řada dokladu', false, true, 0, 3)] + property NavaznaRada: NullableString read FNavaznaRada write FNavaznaRada; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField('Nazev', 'Název řady dokladu', true, false, 0, 40)] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('UKod')] + [MVCSwagJsonSchemaField(stInteger, 'UKod', 'Účetní kód (kontace)', false, true)] + property UKod: NullableInt32 read FUKod write FUKod; + + [MVCColumn('TypPrevodky')] + [MVCSwagJsonSchemaField(stString, 'TypPrevodky', 'Řada dokladu převodu', false, true, 0, 3)] + property TypPrevodky: NullableString read FTypPrevodky write FTypPrevodky; + + [MVCColumn('IDSkladPrevodu')] + [MVCSwagJsonSchemaField(stString, 'IDSkladPrevodu', 'Sklad převodu', false, true, 0, 30)] + property IDSkladPrevodu: NullableString read FIDSkladPrevodu write FIDSkladPrevodu; + + [MVCColumn('CisloOrg')] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('VstupniCena')] + [MVCSwagJsonSchemaField(stInteger, 'VstupniCena', 'Druh vstupní ceny', true, false)] + property VstupniCena: integer read FVstupniCena write FVstupniCena; + + [MVCColumn('CisloZakazky')] + [MVCSwagJsonSchemaField(stString, 'CisloZakazky', 'Číslo zakázky', false, true, 0, 15)] + property CisloZakazky: NullableString read FCisloZakazky write FCisloZakazky; + + [MVCColumn('AutoRealizace')] + [MVCSwagJsonSchemaField(stInteger, 'AutoRealizace', 'Automatická realizace', true, false)] + property AutoRealizace: integer read FAutoRealizace write FAutoRealizace; + + [MVCColumn('FormaUhrady')] + [MVCSwagJsonSchemaField(stString, 'FormaUhrady', 'Forma úhrady', false, true, 0, 30)] + property FormaUhrady: NullableString read FFormaUhrady write FFormaUhrady; + end; + + + + + [MVCTable('TabDokladyZbozi')] + [MVCNameCase(ncLowerCase)] + TDokladOZ = class(THeliosObjekty) + private + FCislo: integer; + FRadaDokladu: string; + FDruhPohybu: integer; + FDruPohybuPrevod: integer; + FIDSklad: string; + FIDSkladPrevodu: NullableString; + FDatPorizeni: TDatetime; + FDatRealizace, FDatDUZP, FDatSplatnost: NullableTDatetime; + FCisloOrg: NullableInt32; + FVstupniCena: integer; + FParovaciZnak: string; + FCisloZakazky: NullableString; + FPohybyOZ: TObjectList; + FKurz: Extended; + FMena: string; + FFormaUhrady: NullableString; + FIDPrikaz: NullableInt32; + procedure SetPohybyOZ(const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; + +// [MVCColumn('IDTabStrom')] // nazev v tabulce +// [MVCTableField('Stredisko')] // nazev pro API + + [MVCColumn('PoradoveCislo')] // 2nd param=true if is PrimaryKey + [MVCSwagJsonSchemaField('Cislo', 'Pořadove číslo dokladu', true, false)] // required, nullable, minlen, maxlen + property PoradoveCislo: integer read FCislo write FCislo; + + [MVCColumn('RadaDokladu')] + [MVCSwagJsonSchemaField('RadaDokladu', 'Řada dokladu', true, false, 0, 3)] + property RadaDokladu: string read FRadaDokladu write FRadaDokladu; + + [MVCColumn('DruhPohybuZbo')] // nazev v tabulce + [MVCTableField('DruhPohybu')] // nazev pro API + [MVCSwagJsonSchemaField('DruhPohybu', 'Druh pohybu zboží', true, false)] + property DruhPohybu: integer read FDruhPohybu write FDruhPohybu; + + [MVCColumn('DruhPohybuPrevod')] // nazev v tabulce + [MVCTableField('DruhPohybuPrevod')] // nazev pro API + [MVCSwagJsonSchemaField('DruhPohybuPrevod', 'Druh pohybu převodu', false, true)] + property DruhPohybuPrevod: integer read FDruPohybuPrevod write FDruPohybuPrevod; + + [MVCColumn('IDSklad')] + [MVCSwagJsonSchemaField(stString, 'IDSklad', 'Sklad', true, false, 0, 30)] + property IDSklad: string read FIDSklad write FIDSklad; + + [MVCColumn('IDSkladPrevodu')] + [MVCSwagJsonSchemaField(stString, 'IDSkladPrevodu', 'Sklad převodu', false, true, 0, 30)] + property IDSkladPrevodu: NullableString read FIDSkladPrevodu write FIDSkladPrevodu; + + [MVCColumn('CisloOrg')] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('VstupniCena')] + [MVCSwagJsonSchemaField(stInteger, 'VstupniCena', 'Druh vstupní ceny', true, false)] + property VstupniCena: integer read FVstupniCena write FVstupniCena; + + [MVCColumn('DatRealizace')] + [MVCSwagJsonSchemaField(stDateTime, 'DatRealizace', 'Datum realizace', false, true)] + property DatRealizace: NullableTDatetime read FDatRealizace write FDatRealizace; + + [MVCColumn('DUZP')] + [MVCSwagJsonSchemaField(stDateTime, 'DUZP', 'Datum uskutečnění zdanitelného plnění', false, true)] + property DUZP: NullableTDatetime read FDatDUZP write FDatDUZP; + + [MVCColumn('Splatnost')] + [MVCSwagJsonSchemaField(stDateTime, 'Splatnost', 'Splatnost', false, true)] + property Splatnost: NullableTDatetime read FDatSplatnost write FDatSplatnost; + + [MVCColumn('ParovaciZnak')] + [MVCSwagJsonSchemaField(stString, 'ParovaciZnak', 'Párovací znak', true, false, 0, 20)] + property ParovaciZnak: string read FParovaciZnak write FParovaciZnak; + + [MVCColumn('CisloZakazky')] + [MVCSwagJsonSchemaField(stString, 'CisloZakazky', 'Číslo zakázky', false, true, 0, 15)] + property CisloZakazky: NullableString read FCisloZakazky write FCisloZakazky; + +// [MapperListOf(TPohybOZ)] + property PohybyOZ: TObjectList read FPohybyOZ write SetPohybyOZ; + + [MVCColumn('Mena')] + [MVCSwagJsonSchemaField(stString, 'Mena', 'Měna', false, true, 1, 3)] + property Mena: string read FMena write FMena; + + [MVCColumn('Kurz')] + [MVCSwagJsonSchemaField(stNumber, 'Kurz', 'Kurz', true, false)] + property Kurz: Extended read FKurz write FKurz; + + [MVCColumn('FormaUhrady')] + [MVCSwagJsonSchemaField(stString, 'FormaUhrady', 'Forma úhrady', false, true, 0, 30)] + property FormaUhrady: NullableString read FFormaUhrady write FFormaUhrady; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID zdrojového výrobního příkazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + end; + + + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabStavSkladu')] + TStavSkladu = class(THeliosObjekty) + private +// FID: integer; + FIDSklad: string; + FIDKmenZbozi: integer; + FMnozstvi: Extended; + FMinimum, FMaximum: Extended; + FObjednano: Extended; + public +// [MVCColumn('IDTabStrom')] // nazev v tabulce +// [MVCTableField('Stredisko')] // nazev pro API + + [MVCColumn('IDSklad')] // 2nd param=true if is PrimaryKey + [MVCSwagJsonSchemaField('IDSklad', 'Číslo skladu', true, false, 1, 30)] + property IDSklad: string read FIDSklad write FIDSklad; + + [MVCColumn('IDKmenZbozi')] + [MVCSwagJsonSchemaField('IDKmenZbozi', 'ID kmenovĂŠ karty', true, false)] + property IDKmenZbozi: integer read FIDKmenZbozi write FIDKmenZbozi; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField('Mnozstvi', 'Mnozstvi', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('Minimum')] + [MVCSwagJsonSchemaField('Minimum', 'Minimum', true, false)] + property Minimum: Extended read FMinimum write FMinimum; + + [MVCColumn('Maximum')] + [MVCSwagJsonSchemaField('Maximum', 'Maximum', true, false)] + property Maximum: Extended read FMaximum write FMaximum; + + [MVCColumn('Objednano')] + [MVCSwagJsonSchemaField('Objednano', 'Objednano', true, false)] + property Objednano: Extended read FObjednano write FObjednano; + end; + + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabUkoly')] + TUkolAktivity = class(THeliosObjekty) + private + FPredmet: string; + FTerminZahajeni: NullableTDateTime; + FTerminSplneni: NullableTDateTime; + FDatumZahajeni: NullableTDateTime; + FDatumKontroly: NullableTDateTime; + FDatumDokonceni: NullableTDateTime; + FStav: Integer; + FPriorita: integer; + FHotovoProcent: Extended; + FZadavatel: NullableInt32; + FIDUtvarZadavatel: NullableInt32; + FResitel: NullableInt32; + FIDUtvarResitel: NullableInt32; + FCelkemHod: Extended; + FHotovoHod: Extended; + FIDKontJednani: NullableInt32; + FIDUkolu: NullableInt32; + FPopis, FPopis1: NullableString; + public + constructor Create; + destructor Destroy; override; + + [MVCColumn('Predmet')] + [MVCSwagJsonSchemaField(stString, 'Predmet', 'Předmět Ăşkolu', true, false, 0, 255)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Predmet: string read FPredmet write FPredmet; + + [MVCColumn('TerminZahajeni')] + [MVCSwagJsonSchemaField(stDateTime, 'TerminZahajeni', 'TermĂ­n plĂĄnovanĂŠho zahĂĄjenĂ­', false, true)] + property TerminZahajeni: NullableTDateTime read FTerminZahajeni write FTerminZahajeni; + + [MVCColumn('TerminSplneni')] + [MVCSwagJsonSchemaField(stDateTime, 'TerminSplneni', 'TermĂ­n plĂĄnovanĂŠho splněnĂ­', false, true)] + property TerminSplneni: NullableTDateTime read FTerminSplneni write FTerminSplneni; + + [MVCColumn('DatumZahajeni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumZahajeni', 'Datum skutečnĂŠho zahĂĄjenĂ­', false, true)] + property DatumZahajeni: NullableTDateTime read FDatumZahajeni write FDatumZahajeni; + + [MVCColumn('DatumKontroly')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumKontroly', 'Datum kontroly', false, true)] + property DatumKontroly: NullableTDateTime read FDatumKontroly write FDatumKontroly; + + [MVCColumn('DatumDokonceni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumDokonceni', 'Datum skutečnĂŠho dokončenĂ­', false, true)] + property DatumDokonceni: NullableTDateTime read FDatumDokonceni write FDatumDokonceni; + + [MVCColumn('Stav')] + [MVCSwagJsonSchemaField(stInteger, 'Stav', 'Stav', true, false)] + property Stav: integer read FStav write FStav; + + [MVCColumn('Priorita')] + [MVCSwagJsonSchemaField(stInteger, 'Priorita', 'Priorita', true, false)] + property Priorita: integer read FPriorita write FPriorita; + + [MVCColumn('HotovoProcent')] + [MVCSwagJsonSchemaField(stNumber, 'HotovoProcent', 'Hotovo (procent)', true, false)] + property HotovoProcent: Extended read FHotovoProcent write FHotovoProcent; + + [MVCColumn('Zadavatel')] + [MVCSwagJsonSchemaField(stInteger, 'Zadavatel', 'Zadavatel (zaměstnanec)', false, true)] + property Zadavatel: NullableInt32 read FZadavatel write FZadavatel; + + [MVCColumn('IDUtvarZadavatel')] + [MVCSwagJsonSchemaField(stInteger, 'IDUtvarZadavatel', 'ID Ăştvar Zadavatele', false, true)] + property IDUtvarZadavatel: NullableInt32 read FIDUtvarZadavatel write FIDUtvarZadavatel; + + [MVCColumn('Resitel')] + [MVCSwagJsonSchemaField(stInteger, 'Resitel', 'ŘeĹĄitel (zaměstnanec)', false, true)] + property Resitel: NullableInt32 read FResitel write FResitel; + + [MVCColumn('IDUtvarResitel')] + [MVCSwagJsonSchemaField(stInteger, 'IDUtvarResitel', 'ID Ăştvar ŘeĹĄitele', false, true)] + property IDUtvarResitel: NullableInt32 read FIDUtvarResitel write FIDUtvarResitel; + + [MVCColumn('IDKontJednani')] + [MVCSwagJsonSchemaField(stInteger, 'IDKontJednani', 'ID aktivity', false, true)] + property IDKontJednani: NullableInt32 read FIDKontJednani write FIDKontJednani; + + [MVCColumn('IDUkolu')] + [MVCSwagJsonSchemaField(stInteger, 'IDUkolu', 'ID souvisejĂ­cĂ­ho Ăşkolu', false, true)] + property IDUkolu: NullableInt32 read FIDUkolu write FIDUkolu; + + [MVCColumn('CelkemHod')] + [MVCSwagJsonSchemaField(stNumber, 'CelkemHod', 'Celkem hodin plĂĄn', true, false)] + property CelkemHod: Extended read FCelkemHod write FCelkemHod; + + [MVCColumn('HotovoHod')] + [MVCSwagJsonSchemaField(stNumber, 'HotovoHod', 'Hodin hotovo', true, false)] + property HotovoHod: Extended read FHotovoHod write FHotovoHod; + + [MVCColumn('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis', false, true)] + property Popis: NullableString read FPopis write FPopis; + + [MVCColumn('Popis1')] + [MVCSwagJsonSchemaField(stString, 'Popis1', 'Popis1', false, true)] + property Popis1: NullableString read FPopis1 write FPopis1; + end; + + + +// TabKontaktJednani + [MVCNameCase(ncLowerCase)] + [MVCTable('TabAktivita')] + TAktivita = class(THeliosObjekty) + protected + FPoradoveCislo: integer; + FKategorie: string; + FPredmet: string; + FTyp: string; + FStav: string; + FDruhVystupu: string; + FCisloOrg: NullableInt32; + FCisloZam: NullableInt32; + FCisloKontOsoba: NullableInt32; + FCisloZakazky: NullableString; + FNakladOkruh: NullableString; + FUtvar: NullableString; + FMistoKonani: string; + FDatumJednOd: NullableTDateTime; + FDatumJednDo: NullableTDateTime; + FIDSouvisKJ: NullableInt32; + FPopis: NullableString; + FIDCis1: NullableInt32; + FIDCis2: NullableInt32; + FIDCis3: NullableInt32; + FIDMajetek: NullableInt32; + FIDKmenZbozi: NullableInt32; + FIDStavSkladu: NullableInt32; + FIDVyrCS: NullableInt32; + FIDStroj: NullableInt32; + + FUkoly: TObjectList; + procedure SetUkoly (const Value: TObjectList); + public + constructor Create; + destructor Destroy; override; + +// [MVCTableField('ID', [foPrimaryKey])] + [MVCColumn('PoradoveCislo')] + [MVCSwagJsonSchemaField(stInteger, 'PoradoveCislo', 'Poradove cislo', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property PoradoveCislo: integer read FPoradoveCislo write FPoradoveCislo; + + [MVCColumn('Kategorie')] + [MVCSwagJsonSchemaField(stString, 'Kategorie', 'Kategorie aktivity', true, false, 0, 3)] + property Kategorie: string read FKategorie write FKategorie; + + [MVCColumn('Predmet')] + [MVCSwagJsonSchemaField(stString, 'Predmet', 'Předmět aktivity', true, false, 0, 255)] + property Predmet: string read FPredmet write FPredmet; + + [MVCColumn('Typ')] + [MVCSwagJsonSchemaField(stString, 'Typ', 'KĂłd typu', true, false, 1, 3)] + property Typ: string read FTyp write FTyp; + + [MVCColumn('Stav')] + [MVCSwagJsonSchemaField(stString, 'Stav', 'KĂłd stavu', true, false, 1, 3)] + property Stav: string read FStav write FStav; + + [MVCColumn('DruhVystupu')] + [MVCSwagJsonSchemaField(stString, 'DruhVystupu', 'KĂłd druhu vĂ˝stupu', true, false, 1, 3)] + property DruhVystupu: string read FDruhVystupu write FDruhVystupu; + + [MVCColumn('CisloOrg')] + [MVCSwagJsonSchemaField(stInteger, 'CisloOrg', 'Číslo organizace', false, true)] + property CisloOrg: NullableInt32 read FCisloOrg write FCisloOrg; + + [MVCColumn('CisloZam')] + [MVCSwagJsonSchemaField(stInteger, 'CisloZam', 'Číslo zaměstnance', false, true)] + property CisloZam: NullableInt32 read FCisloZam write FCisloZam; + + [MVCColumn('CisloKontOsoba')] + [MVCSwagJsonSchemaField(stInteger, 'CisloKontOsoba', 'Číslo kontaktnĂ­ osoby', false, true)] + property CisloKontOsoba: NullableInt32 read FCisloKontOsoba write FCisloKontOsoba; + + [MVCColumn('CisloZakazky')] + [MVCSwagJsonSchemaField(stString, 'CisloZakazky', 'Číslo zakĂĄzky', false, true, 1, 15)] + property CisloZakazky: NullableString read FCisloZakazky write FCisloZakazky; + + [MVCColumn('NakladOkruh')] + [MVCSwagJsonSchemaField(stString, 'NakladOkruh', 'NĂĄkladovĂ˝ okruh', false, true, 1, 30)] + property NakladOkruh: NullableString read FNakladOkruh write FNakladOkruh; + + [MVCColumn('MistoKonani')] + [MVCSwagJsonSchemaField(stString, 'MistoKonani', 'MĂ­sto jednĂĄnĂ­', true, false, 0, 255)] + property MistoKonani: string read FMistoKonani write FMistoKonani; + + [MVCColumn('DatumJednOd')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumJednOd', 'Datum jednĂĄnĂ­ (od)', false, true)] + property DatumJednOd: NullableTDateTime read FDatumJednOd write FDatumJednOd; + + [MVCColumn('DatumJednDo')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumJednDo', 'Datum jednĂĄnĂ­ (do)', false, true)] + property DatumJednDo: NullableTDateTime read FDatumJednDo write FDatumJednDo; + + [MVCColumn('IDSouvisKJ')] + [MVCSwagJsonSchemaField(stInteger, 'IDSouvisKJ', 'ID souvisejĂ­cĂ­ aktivity', false, true)] + property IDSouvisKJ: NullableInt32 read FIDSouvisKJ write FIDSouvisKJ; + + [MVCColumn('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis', true, false)] + property Popis: NullableString read FPopis write FPopis; + + [MVCColumn('IDCis1')] + [MVCSwagJsonSchemaField(stInteger, 'IDCis1', 'ID karty majetku', false, true)] + property IDCis1: NullableInt32 read FIDCis1 write FIDCis1; + + [MVCColumn('IDCis2')] + [MVCSwagJsonSchemaField(stInteger, 'IDCis2', 'ID karty majetku', false, true)] + property IDCis2: NullableInt32 read FIDCis2 write FIDCis2; + + [MVCColumn('IDCis3')] + [MVCSwagJsonSchemaField(stInteger, 'IDCis3', 'ID QMS číselnĂ­ku 3', false, true)] + property IDCis3: NullableInt32 read FIDCis3 write FIDCis3; + + [MVCColumn('IDMajetek')] + [MVCSwagJsonSchemaField(stInteger, 'IDMajetek', 'ID karty majetku', false, true)] + property IDMajetek: NullableInt32 read FIDMajetek write FIDMajetek; + + [MVCColumn('IDKmenZbozi')] + [MVCSwagJsonSchemaField(stInteger, 'IDKmenZbozi', 'ID kmenovĂŠ karty', false, true)] + property IDKmenZbozi: NullableInt32 read FIDKmenZbozi write FIDKmenZbozi; + + [MVCColumn('IDStavSkladu')] + [MVCSwagJsonSchemaField(stInteger, 'IDStavSkladu', 'ID skladovĂŠ karty', false, true)] + property IDStavSkladu: NullableInt32 read FIDStavSkladu write FIDStavSkladu; + + [MVCColumn('IDVyrCS')] + [MVCSwagJsonSchemaField(stInteger, 'IDVyrCS', 'ID vĂ˝robnĂ­ho čísla', false, true)] + property IDVyrCS: NullableInt32 read FIDVyrCS write FIDVyrCS; + + [MVCColumn('IDStroj')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroj', 'ID stroje', false, true)] + property IDStroj: NullableInt32 read FIDStroj write FIDStroj; + + [MVCListOf(TUkolAktivity)] + property Ukoly: TObjectList read FUkoly write SetUkoly; + + end; + + + + + TQMSCiselnik = class(THeliosObjekty) + private + FCislo: string; + FAgenda: NullableInt32; + FCiselnik: integer; + FPoznamka: NullableString; + public + [MVCColumn('Cislo')] + [MVCSwagJsonSchemaField(stString, 'Cislo', 'Číslo', true, false, 1, 3)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Cislo: string read FCislo write FCislo; + + [MVCColumn('Ciselnik')] + [MVCSwagJsonSchemaField(stInteger, 'Ciselnik', 'ČíselnĂ­k', true, false)] + property Ciselnik: integer read FCiselnik write FCiselnik; + + [MVCColumn('IDQMS')] + [MVCSwagJsonSchemaField(stInteger, 'Agenda', 'Agenda (0-měřidla, 1-zařízenĂ­)', false, true)] + property Agenda: NullableInt32 read FAgenda write FAgenda; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'PoznĂĄmka', false, true)] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + end; + + + + + TQMSUdrzbaStrojuAZarizeni = class(TAktivita) + private +// FIDCis1: NullableInt32; + FDruhZarizeniKod: NullableString; + + protected + procedure OnAfterLoad; virtual; + public +{ + [MVCColumn('PoradoveCislo')] + [MVCSwagJsonSchemaField(stInteger, 'PoradoveCislo', 'Poradove cislo', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property PoradoveCislo: integer read FPoradoveCislo write FPoradoveCislo; +} +{ + [MVCColumn('IDCis1')] + [MVCSwagJsonSchemaField(stInteger, 'IDCis1', 'ID z QMS číselnĂ­ku 1', false, true)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDCis1: NullableInt32 read FIDCis1 write FIDCis1; +} + [MVCColumn('DruhZarizeniKod')] + [MVCSwagJsonSchemaField(stString, 'DruhZarizeniKod', 'KĂłd/číslo druhu zařízenĂ­', false, true, 1, 3)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property DruhZarizeniKod: NullableString read FDruhZarizeniKod; + end; + + + + + [MVCNameCase(ncLowerCase)] + TZamestnanec = class(THeliosObjekty) + private + FOsCislo: integer; + FPrijmeni: string; + FJmeno: string; + FTitulPred: string; + FTitulZa: string; + FLogin: string; + FStredisko: NullableString; + FNaklOkruh: NullableString; + FZakazka: NullableString; + FKodCipu: NullableString; + public + procedure CheckInsert; override; + procedure CheckUpdate; override; + procedure CheckDelete; override; + + constructor Create; // nastaveni Default hodnot +{ + [MVCColumn('ID')] +// [MVCTableField('ID', [foPrimaryKey])] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('Cislo')] // 2nd param=true if is PrimaryKey + [MVCSwagJsonSchemaField(stInteger, 'Cislo', 'OsobnĂ­ číslo', true, false)] + property OsCislo: integer read FOsCislo write FOsCislo; + + [MVCColumn('Jmeno')] + [MVCSwagJsonSchemaField(stString, 'Jmeno', 'JmĂŠno zaměstnance', false, false, 1, 100)] + property Jmeno: string read FJmeno write FJmeno; + + [MVCColumn('Prijmeni')] + [MVCSwagJsonSchemaField(stString, 'Prijmeni', 'PříjmenĂ­ zaměstnance', false, false, 1, 100)] + property Prijmeni: string read FPrijmeni write FPrijmeni; + + [MVCColumn('LoginId')] + [MVCSwagJsonSchemaField(stString, 'LoginId', 'Login v Helios', false, false, 1, 128)] + property Login: string read FLogin write FLogin; + + [MVCColumn('TitulPred')] + [MVCSwagJsonSchemaField('TitulPred', 'Titul před', false, false, 1, 100)] + property TitulPred: string read FTitulPred write FTitulPred; + + [MVCColumn('TitulZa')] + [MVCSwagJsonSchemaField(stString, 'TitulZa', 'Titul za', false, false, 1, 100)] + property TitulZa: string read FTitulZa write FTitulZa; + + [MVCColumn('Stredisko')] + [MVCSwagJsonSchemaField(stString, 'Stredisko', 'Útvar', false, true, 1, 30)] + property Stredisko: NullableString read FStredisko write FStredisko; + + [MVCColumn('NakladovyOkruh')] + [MVCSwagJsonSchemaField(stString, 'NakladovyOkruh', 'NĂĄkladovĂ˝ okruh', false, true, 1, 15)] + property NakladovyOkruh: NullableString read FNaklOkruh write FNaklOkruh; + + [MVCColumn('Zakazka')] + [MVCSwagJsonSchemaField(stString, 'Zakazka', 'Útvar', false, true, 1, 15)] + property Zakazka: NullableString read FZakazka write FZakazka; + + [MVCColumn('KodCipu')] + [MVCSwagJsonSchemaField(stString, 'KodCipu', 'KĂłd čipu zaměstnance', false, true, 1, 36)] + property KodCipu: NullableString read FKodCipu write FKodCipu; + end; + + + + TPrepocetMJ = class(THeliosObjekty) + private + FKodMJ1, FKodMJ2: string; + FMnozHlavni, FMnozOdvoz: Single; + FDatPorizeni: TDatetime; + public + [MVCColumn('KodMJ1')] + [MVCSwagJsonSchemaField(stString, 'KodMJ1', 'MJ hlavnĂ­ měrnĂŠ jednotky', true, false, 1, 3)] // FieldName, Description, Required, Nullable, MinLength, MaxLength + property KodMJ1: string read FKodMJ1 write FKodMJ1; + + [MVCColumn('KodMJ2')] + [MVCSwagJsonSchemaField(stString, 'KodMJ2', 'MJ odvozenĂŠ měrnĂŠ jednotky', true, false, 1, 3)] + property KodMJ2: string read FKodMJ2 write FKodMJ2; + + [MVCColumn('PocetHlavni')] + [MVCSwagJsonSchemaField('PocetHlavni', 'MnoĹžstvĂ­ hlavnĂ­ jednotky', true, false)] + property PocetHlavni: Single read FMnozHlavni write FMnozHlavni; + + [MVCColumn('PocetOdvozene')] + [MVCSwagJsonSchemaField('PocetOdvozene', 'MnoĹžstvĂ­ odvozenĂŠ jednotky', true, false)] + property PocetOdvozene: Single read FMnozOdvoz write FMnozOdvoz; + end; + + + + + + TDruhSkladuEnum = (drsklSluzba, drsklGLobal, drsklFIFO, drsklPrumer, drsklCelniSklad); + + [MVCNameCase(ncLowerCase)] + TSkupinaKaret = class(THeliosObjekty) + private +// FID: integer; + FSkupZbo: string; + FNazev: string; + FDilec: boolean; +// FDruhSkladu: TDruhSkladuEnum; + FAutocislovani: Boolean; + public + [MVCColumn('SkupZbo')] + [MVCSwagJsonSchemaField('SkupZbo', 'Skupina karet/zboŞí', true, false, 1, 3)] // FieldName, Description, Required, Nullable, MinLength, MaxLength + property SkupZbo: string read FSkupZbo write FSkupZbo; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField('Nazev', 'NĂĄzev', false, false, 1, 100)] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('Dilec')] + [MVCSwagJsonSchemaField('Dilec', 'DĂ­lec', true, false)] + property Dilec: boolean read FDilec write FDilec default false; + + [MVCColumn('Autocislovani')] + [MVCSwagJsonSchemaField('Autocislovani', 'AutočíslovĂĄnĂ­', true, false)] + property Autocislovani: boolean read FAutocislovani write FAutocislovani default false; + +{ + [MVCEnumSerializationType(estEnumMappedValues, 'SluĹžba, Podle globĂĄlnĂ­ konfigurace, FIFO, PrĹŻměry, CelnĂ­ sklad')] + [MVCColumn('DruhSkladu')] + [MVCSwagJSONSchemaField(stEnumeraion, '', '', true, false)] + property DruhSkladu: TDruhSkladuEnum read FDruhSkladu write FDruhSkladu; +} + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabKmenZbozi')] + TKmenZbozi = class(THeliosObjekty) + private + FSkupZbo: string; + FRegCis: string; + FNazev1: string; + FNazev2: string; + FNazev3: string; + FNazev4: string; + FMJEvidence: string; + FVykres: NullableString; + FSKP: string; + FPLUKod: string; + FDilec: boolean; + FMaterial: boolean; + FNaradi: boolean; + FHmotnost: Double; + FPoznamka: NullableString; + FBlokovano: boolean; +{$IFDEF CUSTOM_CTRL_Rootvin} + FTypDilce: NullableString; +{$ENDIF} + procedure NastavDilecMaterial(const Index: integer; const Value: boolean); + public + procedure CheckInsert; override; + procedure CheckUpdate; override; + procedure CheckDelete; override; + + [MVCColumn('SkupZbo')] + [MVCSwagJsonSchemaField('SkupZbo', 'Skupina karet/zboŞí', true, false, 1, 3)] // FieldName, Description, Required, Nullable, MinLength, MaxLength + property SkupZbo: string read FSkupZbo write FSkupZbo; + + [MVCColumn('RegCis')] + [MVCSwagJsonSchemaField('RegCis', 'RegistračnĂ­ číslo', true, false, 1, 30)] + property RegCis: string read FRegCis write FRegCis; + + [MVCColumn('Nazev1')] + [MVCSwagJsonSchemaField(stString, 'Nazev1', 'NĂĄzev 1', false, false, 1, 100)] + property Nazev1: string read FNazev1 write FNazev1; + + [MVCColumn('Nazev2')] + property Nazev2: string read FNazev2 write FNazev2; + + [MVCColumn('Nazev3')] + property Nazev3: string read FNazev3 write FNazev3; + + [MVCColumn('Nazev4')] + property Nazev4: string read FNazev4 write FNazev4; + + [MVCColumn('MJEvidence')] + property MJEvidence: string read FMJEvidence write FMJEvidence; + + [MVCColumn('Vykres')] + [MVCSwagJsonSchemaField(stString, 'Vykres', 'VĂ˝kres', false, true, 0, 35)] + property Vykres: NullableString read FVykres write FVykres; + + [MVCColumn('PLUKod')] + [MVCSwagJsonSchemaField(stString, 'PLUKod', 'PLU kĂłd', false, false, 0, 10)] + property PLUKod: string read FPLUKod write FPLUKod; + + [MVCColumn('SKP')] + [MVCSwagJsonSchemaField(stString, 'SKP', 'DoplňkovĂ˝ kĂłd', false, false, 0, 50)] + property SKP: string read FSKP write FSKP; + + [MVCColumn('Dilec')] + [MVCSwagJsonSchemaField(stBoolean, 'Dilec', 'DĂ­lec', true, false)] + property Dilec: Boolean read FDilec write FDilec; + + [MVCColumn('Material')] + [MVCSwagJsonSchemaField(stBoolean, 'Material', 'MateriĂĄl', true, false)] + property Material: Boolean read FMaterial write FMaterial; + + [MVCColumn('Sluzba')] + [MVCSwagJsonSchemaField(stBoolean, 'Sluzba', 'SluĹžba', true, false)] + property Sluzba: Boolean read FMaterial write FMaterial; + + [MVCColumn('Naradi')] + [MVCSwagJsonSchemaField('Naradi', 'NářadĂ­', true, false)] + property Naradi: Boolean read FNaradi write FNaradi; + + [MVCColumn('Hmotnost')] + [MVCSwagJsonSchemaField('Hmotnost', 'Hmotnost', true, false)] + property Hmotnost: Double read FHmotnost write FHmotnost; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField('Poznamka', 'PoznĂĄmka', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('Blokovano')] + [MVCSwagJsonSchemaField('Blokovano', 'BlokovnĂĄno', true, false)] + property Blokovano: Boolean read FBlokovano write FBlokovano; + +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCColumn('TypDilce')] + [MVCSwagJsonSchemaField('TypDilce', 'Typ dĂ­lce', false, true)] // 1-Surovina / 2-Polotovar / 3-Obal + property TypDilce: NullableString read FTypDilce write FTypDilce; +{$ENDIF} + end; + + + + + TOrgPravniFormaEnum = (opfPravnickaOsoba, opfFyzickaOsoba, opfSoukromaOsoba, opfNeurceno); + TOrgStav = (osAktivni, osBlokovano, osZakaz, osPotencial); + + [MVCNameCase(ncLowerCase)] + TOrganizace = class(THeliosObjekty) + private + FPravniForma: TOrgPravniFormaEnum; + FNazev: string; + FICO: string; + FDIC: string; + FUlice: string; + FPopCislo: string; + FOrCislo: string; + FUliceSCisly: string; + FMisto: string; + FPSC: string; +// FStav: TOrgStav; + FStav: byte; + procedure SetUlice(Value: string); + procedure SetPopCislo(Value: string); + procedure SetOrCislo(Value: string); + procedure SetUliceSCisly(Value: string); + public + procedure CheckInsert; override; + procedure CheckUpdate; override; + procedure CheckDelete; override; + + [MVCColumn('PravniForma')] + [MVCEnumSerialization(estEnumMappedValues, 'PrĂĄvnickĂĄ.osoba,FyzickĂĄ.osoba,SoukromĂĄ.osoba,Neurčeno')] + property PravniForma: TOrgPravniFormaEnum read FPravniForma write FPravniForma; + + [MVCColumn('Nazev')] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('ICO')] + property ICO: string read FICO write FICO; + + [MVCColumn('DIC')] + property DIC: string read FDIC write FDIC; + + [MVCColumn('Ulice')] + property Ulice: string read FUlice write SetUlice; + + [MVCColumn('PopCislo')] + property PopCislo: string read FPopCislo write SetPopCislo; + + [MVCColumn('OrCislo')] + property OrCislo: string read FOrCislo write SetOrCislo; + + [MVCColumn('UliceSCisly')] + property UliceSCisly: string read FUliceSCisly; + + [MVCColumn('Misto')] + property Misto: string read FMisto write FMisto; + + [MVCColumn('PSC')] + property PSC: string read FPSC write FPSC; +{ + [MVCColumn('Stav')] + [MVCEnumSerialization(estEnumMappedValues, 'AktivnĂ­,BlokovanĂĄ,ZakĂĄzanĂĄ,PotencionĂĄlnĂ­')] + property Stav: TOrgStav read FStav write FStav; +} + [MVCColumn('Stav')] + property Stav: byte read FStav write FStav; + end; + + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + + + +{ THeliosObjekty } + constructor THeliosObjekty.Create; + begin + FAVAReferenceID:= ''; + FAVAExternalID:= ''; + end; + + procedure THeliosObjekty.OnAfterLoad; + begin + end; + + procedure THeliosObjekty.OnBeforeLoad; + begin + end; + + procedure THeliosObjekty.OnBeforeInsert; + begin + end; + + procedure THeliosObjekty.OnAfterInsert; + begin + end; + + procedure THeliosObjekty.OnBeforeUpdate; + begin + end; + + procedure THeliosObjekty.OnAfterUpdate; + begin + end; + + procedure THeliosObjekty.OnBeforeDelete; + begin + end; + + procedure THeliosObjekty.OnAfterDelete; + begin + end; + + procedure THeliosObjekty.OnBeforeInsertOrUpdate; + begin + end; + + procedure THeliosObjekty.OnBeforeExecuteSQL(var SQL: string); + begin + end; + + procedure THeliosObjekty.OnAfterInsertOrUpdate; + begin + end; + + procedure THeliosObjekty.CheckDelete; + begin + end; + + procedure THeliosObjekty.CheckInsert; + begin + end; + + procedure THeliosObjekty.CheckUpdate; + begin + end; + + procedure THeliosObjekty.SetID(const Value: Integer); + begin + FID:= Value; + end; + + + + + + +{ TUmisteni } + constructor TUmisteni.Create; + begin + inherited; + end; + + destructor TUmisteni.Destroy; + begin + inherited; + end; + + + + + + +{ TPohybOZ } + constructor TPohybOZ.Create; + begin + inherited; + FSerialNums:= TObjectList.Create; + end; + + + destructor TPohybOZ.Destroy; + begin +// if (FSerialNums<>nil) then +// FSerialNums.Free; + inherited; + end; + + + procedure TPohybOZ.SetSerialNums (const Value: TObjectList); + begin + if (Value<>FSerialNums) then + begin + FSerialNums.Free; + FSerialNums:= Value; + end; + end; + + + procedure TPohybOZ.SetUmisteni (const Value: TUmisteni); + begin + if (Value<>FUmisteni) then + begin + FUmisteni.Free; + FUmisteni:= Value; + end; + end; + + + procedure TPohybOZ.ZapisIDKmene; + begin + end; + + + + +{ TDokladOZ } + + + constructor TDokladOZ.Create; + begin + inherited; + FPohybyOZ:= TObjectList.Create; + end; + + + destructor TDokladOZ.Destroy; + begin +// if (FPohybyOZ<>nil) then +// FPohybyOZ.Free; + inherited; + end; + + + procedure TDokladOZ.SetPohybyOZ(const Value: TObjectList); + begin + if (Value<>FPohybyOZ) then + begin + FPohybyOZ.Free; + FPohybyOZ:= Value; + end; + end; + + + + + +{ TSkupinaZbozi } + + + + + + + +{ TZamestnanec } + constructor TZamestnanec.Create; + begin + inherited; + FJmeno:= ''; + FPrijmeni:= ''; + FLogin:= ''; + FTitulPred:= ''; + FTitulZa:= ''; + end; + + + procedure TZamestnanec.CheckInsert; + begin + inherited; + end; + + + procedure TZamestnanec.CheckUpdate; + begin + inherited; + CheckInsert; + end; + + + procedure TZamestnanec.CheckDelete; + begin + inherited; +{ + if Price <= 5 then + raise Exception.Create('Cannot delete an article with a price below 5 euros (yes, it is a silly check)'); +} + end; + + + + + + +{ TKmenZbozi } + procedure TKmenZbozi.CheckInsert; + begin + inherited; + end; + + + procedure TKmenZbozi.CheckUpdate; + begin + inherited; + end; + + + procedure TKmenZbozi.CheckDelete; + begin + inherited; + end; + + + procedure TKmenZbozi.NastavDilecMaterial (const Index: Integer; const Value: Boolean); + begin + case Index of + 1: FDilec:= Value; + 2: FMaterial:= Value; + end; + end; + + + + + + + + + +{ TOrganizace } + procedure TOrganizace.CheckInsert; + begin + inherited; + end; + + + procedure TOrganizace.CheckUpdate; + begin + inherited; + CheckInsert; + end; + + + procedure TOrganizace.CheckDelete; + begin + inherited; + end; + + + procedure TOrganizace.SetUlice(Value: string); + begin + FUlice:= Value; + SetUliceSCisly(''); + end; + + + procedure TOrganizace.SetPopCislo(Value: string); + begin + FPopCislo:= Value; + SetUliceSCisly(''); + end; + + + procedure TOrganizace.SetOrCislo(Value: string); + begin + FOrCislo:= Value; + SetUliceSCisly(''); + end; + + + procedure TOrganizace.SetUliceSCisly (Value: string); + begin + if (Value<>'') then + FUliceSCisly:= Value + else + FUliceSCisly:= IfThen(FUlice<>'', FUlice, '') + ' ' + + IfThen((FPopCislo<>'') and (FOrCislo<>''), FPopCislo + ' / ' + FOrCislo, IfThen(FPopCislo<>'', FPopCislo, IfThen(FOrCislo<>'', FOrCislo, ''))); + end; + + + + + + + +{ TPlanKalendar } + constructor TPlanKalendar.Create; + begin + inherited; + FPolozky:= TObjectList.Create; + end; + + + destructor TPlanKalendar.Destroy; + begin +// if (FPolozky<>nil) then +// FPolozky.Free; + inherited; + end; + + + procedure TPlanKalendar.SetPolozkyKalendare (const Value: TObjectList); + begin + if (Value<>FPolozky) then + begin + FPolozky.Free; + FPolozky:= Value; + end; + end; + + + + + + + + +{ TQMSUdrzbaStrojuAZarizeni } + procedure TQMSUdrzbaStrojuAZarizeni.OnAfterLoad; + begin + FDruhZarizeniKod:= ''; + if not(Self.FIDCis1=nil) then + begin + FDruhZarizeniKod:= ''; + end; + end; + + + + + + + +{ TUkolAktivity } + constructor TUkolAktivity.Create; + begin + inherited; + FPredmet:= ''; + HotovoProcent:= 0; + end; + + + destructor TUkolAktivity.Destroy; + begin +// if (FUkoly<>nil) then +// FUkoly.Free; + inherited; + end; + + + + + + +{ TAktivita } + constructor TAktivita.Create; + begin + inherited; + FUkoly:= TObjectList.Create; + end; + + + destructor TAktivita.Destroy; + begin +// if (FUkoly<>nil) then +// FUkoly.Free; + inherited; + end; + + + procedure TAktivita.SetUkoly (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FUkoly) then + begin + FUkoly.Free; + FUkoly:= Value; + end; + end; + + + +end. diff --git a/uHeOObj_QMS.pas b/uHeOObj_QMS.pas new file mode 100644 index 0000000..911a051 --- /dev/null +++ b/uHeOObj_QMS.pas @@ -0,0 +1,209 @@ +ďťżunit uHeOObj_QMS; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.Nullables, + MVCFramework.Swagger.Commons, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + uDataMod, + helTabsBIDs, + uHeoObj_Base, + uSvc_Base + ; + + +const +{$I globalConsts.inc} + +type + [MVCNameCase(ncLowerCase)] +// [MVCTable('TabPlanKalendPol')] + TQMSUdrzbaStrojuAZarizeni = class(TAktivita) + private +// FIDStroj: NullableInt32; + public + constructor Create; virtual; + destructor Destroy; override; + +{ + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroj', 'ID stroje', false, true)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDStroj: NullableInt32 read FIDStroj write FIDStroj; +} + end; + + + + + + +// TabKLPHlav +// TabKontaktJednani + [MVCNameCase(ncLowerCase)] + [MVCTable('TabKontaktJednani')] + TQMSKontrolniPostup = class(TAktivita) + private + FTypKP: integer; + public +{ + [MVCColumn('Kategorie')] + [MVCSwagJsonSchemaField(stString, 'Kategorie', 'Kategorie kontrolnĂ­ho postupu', true, false, 1, 3)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Kategorie: string read FKategorie write FKategorie; +} + [MVCColumn('TypKP')] + [MVCSwagJsonSchemaField(stInteger, 'TypKP', 'Typ KontrolnĂ­ho postupu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property TypKP: integer read FTypKP write FTypKP; + end; + + + + +// TabKontaktJednani.Kategorie = (SELECT Cislo FROM TabKategKontJed WHERE QMSAgenda=12) + [MVCNameCase(ncLowerCase)] + [MVCTable('TabKPLHlav')] + TQMSKontrolniPlan = class(TAktivita) + private + FOblastQMS: NullableString; + FStavZpracovaniKP: NullableString; + public + constructor Create; virtual; + procedure OnAfterLoad; virtual; // Called just after load the object state from database + procedure OnAfterUpdate; virtual; // Called after update the object state to database + end; + + + + + [MVCNameCase(ncLowerCase)] + TQMSParamKontrolnihoPostupu = class(THeliosObjekty) + private + FIDKPLHlav: integer; + FPoradi: integer; + FTypHodnoty: NullableInt32; + FTypHodnotyText: string; + FPopis: string; + FPrvniKontrola: boolean; + FHodnotaPozadovana: Extended; + FToleranceHorni: Extended; + FToleranceDolni: Extended; + public + [MVCColumn('IDKPLHlav')] + [MVCSwagJsonSchemaField(stInteger, 'IDKPLHlav', 'ID hlavičky kontrolnĂ­ho postupu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDKPLHlav: integer read FIDKPLHlav write FIDKPLHlav; + + [MVCColumn('Poradi')] + [MVCSwagJsonSchemaField(stInteger, 'Poradi', 'PořadovĂŠ číslo parametru', true, false)] + property Poradi: integer read FPoradi write FPoradi; + + [MVCColumn('TypHodnoty')] + [MVCSwagJsonSchemaField(stInteger, 'TypHodnoty', 'Typ hodnoty', false, true)] + property TypHodnoty: NullableInt32 read FTypHodnoty write FTypHodnoty; + + [MVCColumn('TypHodnotyText')] + [MVCSwagJsonSchemaField(stString, 'TypHodnotyText', 'Typ hodnoty textově', true, false)] + property TypHodnotyText: string read FTypHodnotyText write FTypHodnotyText; + + [MVCColumn('Popis')] + [MVCTableField('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis parametru', false, false)] + property Popis: string read FPopis write FPopis; + + [MVCColumn('PrvniKontrola')] + [MVCSwagJsonSchemaField(stBoolean, 'PrvniKontrola', 'Kontrola 1.kusu', true, false)] + property PrvniKontrola: boolean read FPrvniKontrola write FPrvniKontrola; + + [MVCColumn('HodnotaPozadovana')] + [MVCSwagJsonSchemaField(stNumber, 'HodnotaPozadovana', 'PoĹžadovanĂĄ hodnota', false, false)] + property HodnotaPozadovana: Extended read FHodnotaPozadovana write FHodnotaPozadovana; + + [MVCColumn('ToleranceHorni')] + [MVCSwagJsonSchemaField(stNumber, 'ToleranceHorni', 'Tolerance hornĂ­', false, false)] + property ToleranceHorni: Extended read FToleranceHorni write FToleranceHorni; + + [MVCColumn('ToleranceDolni')] + [MVCSwagJsonSchemaField(stNumber, 'ToleranceDolni', 'Tolerance dolnĂ­', false, false)] + property ToleranceDolni: Extended read FToleranceDolni write FToleranceDolni; + + end; + + + +implementation + +uses + System.SysUtils, + System.StrUtils, + System.RegularExpressions; + + + + + +{ TQMSUdrzbaStrojuAZarizeni } + + constructor TQMSUdrzbaStrojuAZarizeni.Create; + begin + inherited; + end; + + + destructor TQMSUdrzbaStrojuAZarizeni.Destroy; + begin + inherited; + end; + + + + + +{ TQMSKontrolniPlan } + + constructor TQMSKontrolniPlan.Create; + begin + inherited; + FStavZpracovaniKP:= ''; // dle IDCis1 + FOblastQMS:= ''; // dle IDCis2 + end; + + + + procedure TQMSKontrolniPlan.OnAfterLoad; + var lSQL: string; + lQry: TFDQuery; + begin + inherited; +{ + lQry:= TFDQuery.Create(nil); + lQry.Connection:= uDataMod.datMod.sqlConn; + try + lSQL:= 'SELECT Cislo FROM ' + tblQMSCis + ' WHERE ID=:ID'; + lQry.Open(lSQL, [FIDCis1.Value]); + if (lQry.RecordCount>0) then + if not(FIDCis1.IsNull) then + FStavZpracovaniKP:= lQry.FieldByName('Cislo').AsString; + + lSQL:= 'SELECT Cislo FROM ' + tblQMSCis + ' WHERE ID=:ID'; + lQry.Open(lSQL, [FIDCis2.Value]); + if (lQry.RecordCount>0) then + if not(FIDCis2.IsNull) then + FOblastQMS:= lQry.FieldByName('Cislo').AsString; + finally + lQry.Free; + end; +} + end; + + + + procedure TQMSKontrolniPlan.OnAfterUpdate; + begin + end; + + +end. diff --git a/uHeoObj_Vyroba.pas b/uHeoObj_Vyroba.pas new file mode 100644 index 0000000..5467971 --- /dev/null +++ b/uHeoObj_Vyroba.pas @@ -0,0 +1,2805 @@ +unit uHeoObj_Vyroba; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + MVCFramework.Serializer.Commons, + MVCFramework.ActiveRecord, + MVCFramework.Nullables, + MVCFramework.Swagger.Commons, + helTabsBIDs, + uHeoObj_Base; + +const +{$I globalConsts.inc} + tblKategKJ = '[dbo].[TabKategKontJed]'; + +type + TVyrobaNadrizenePrikazy = class(THeliosObjekty) + private + FIDPrikaz: integer; + FIDPrikazVyssi: integer; + FMnozstvi: Extended; + FKryteMnozstvi: Extended; + FPoziceKV: NullableString; + FIDDilecVyssi: NullableInt32; + FSZDilecVyssi: NullableString; + FRegCisDilecVyssi: NullableString; + FNazev1Vyssi: NullableString; + FIDDilecNizsi: NullableInt32; + FSZDilecNizsi: NullableString; + FRegCisDilecNizsi: NullableString; + FNazev1Nizsi: NullableString; + public + constructor Create; // nastaveni Default hodnot + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vyššího výrobního příkazu', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('IDPrikazVyssi')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikazVyssi', 'ID vyššího výrobního příkazu', true, false)] + property IDPrikazVyssi: integer read FIDPrikazVyssi write FIDPrikazVyssi; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'Množství', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('KryteMnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'KryteMnozstvi', 'Množství', true, false)] + property KryteMnozstvi: Extended read FKryteMnozstvi write FKryteMnozstvi; + + [MVCColumn('PoziceKV')] + [MVCSwagJsonSchemaField(stString, 'PoziceKV', 'Pozice KV', false, true, 1, 100)] + property PoziceKV: NullableString read FPoziceKV write FPoziceKV; + + [MVCColumn('IDDilecVyssi')] + [MVCSwagJsonSchemaField(stInteger, 'IDDilecVyssi', 'ID dílce vyššího výrobního příkazu', false, true)] + property IDDilecVyssi: NullableInt32 read FIDDilecVyssi write FIDDilecVyssi; + + [MVCColumn('SkupZboV')] + [MVCSwagJsonSchemaField(stString, 'SkupZboV', 'Skupina karet vyššího dílce', false, true, 0, 3)] + property SZDilecVyssi: NullableString read FSZDilecVyssi write FSZDilecVyssi; + + [MVCColumn('RegCisV')] // nazev dle SELECTu + [MVCSwagJsonSchemaField(stString, 'RegCisV', 'Registrační číslo vyššího dílce', false, true, 0, 30)] + property RegCisDilecVyssi: NullableString read FRegCisDilecVyssi write FRegCisDilecVyssi; + + [MVCColumn('Nazev1V')] + [MVCSwagJsonSchemaField(stString, 'Nazev1V', 'Název vyššího dílce', false, true, 0, 100)] + property Nazev1Vyssi: NullableString read FNazev1Vyssi write FNazev1Vyssi; + + [MVCColumn('IDDilecNizsi')] + [MVCSwagJsonSchemaField(stInteger, 'IDDilecNizsi', 'ID dílce ni6šího výrobního příkazu', false, true)] + property IDDilecNizsi: NullableInt32 read FIDDilecNizsi write FIDDilecNizsi; + + [MVCColumn('SkupZboN')] + [MVCSwagJsonSchemaField(stString, 'SkupZboN', 'Skupina karet vyššího dílce', false, true, 0, 3)] + property SZDilecNizsi: NullableString read FSZDilecNizsi write FSZDilecNizsi; + + [MVCColumn('RegCisN')] // nazev dle SELECTu + [MVCSwagJsonSchemaField(stString, 'RegCisN', 'Registrační číslo vyššího dílce', false, true, 0, 30)] + property RegCisDilecNizsi: NullableString read FRegCisDilecNizsi write FRegCisDilecNizsi; + + [MVCColumn('Nazev1N')] + [MVCSwagJsonSchemaField(stString, 'Nazev1N', 'Název vyššího dílce', false, true, 0, 100)] + property Nazev1Nizsi: NullableString read FNazev1Nizsi write FNazev1Nizsi; + end; + + + TMaterialPrikazu_Cols = (clMnozstviOdvedene, clMnozNevydane); + [MVCNameCase(ncLowerCase)] + TMaterialPrikazu = class(THeliosObjekty) + private +// FID: integer; + FBarcode: string; + FIDPrikaz: integer; + FDoklad: integer; + FIDOdchylkyOd: NullableInt32; + FIDOdchylkyDo: NullableInt32; + FIDPracoviste: NullableInt32; +{$IFDEF CUSTOM_CTRL_Rootvin} + FTypDilce: NullableString; +{$ENDIF} + FSklad: string; + FVychoziSklad: string; + FRezijniMat: boolean; + FPrednastaveno: boolean; + FPredzpracovano: boolean; + FVyssi: integer; + FSZVyssi: string; + FRegCisVyssi: string; + FNizsi: integer; + FSZNizsi: string; + FRegCisNizsi: string; + FNazev1Nizsi: string; + FPozice: string; + FOperace: string; + FSpotRozmer: string; + FFixniMnozstvi: Extended; + FMnozstvi: Extended; + FProcZtrat: Extended; + FmnozstviSeZtratou: Extended; + FMnozstviZadane: Extended; + FMnozstviNevydane: Extended; + FVydanoRefMnoz: Extended; + FRefMnoz: Extended; + FPrirez: Extended; + FMnoz_nepotrebne: Extended; + FMnoz_skut_realizovane: Extended; + FMnoz_odv: Extended; + procedure WritePropReadOnlySingle(index: TMaterialPrikazu_Cols; Value: Extended); + function ReadPropSingle(index: TMaterialPrikazu_Cols): Extended; + public + constructor Create; // nastaveni Default hodnot +{ + [MVCColumn('ID')] +// [MVCTableField('ID', [foPrimaryKey])] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID kontrolního postupu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID výrobního příkazu', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('Doklad')] + [MVCSwagJsonSchemaField(stInteger, 'Doklad', 'ID výrobního příkazu', true, false)] + property Doklad: integer read FDoklad write FDoklad; + + [MVCColumn('IDOdchylkyOd')] + [MVCSwagJsonSchemaField(stInteger, 'IDOdchylkyOd', 'ID odchylky od', false, true)] + property IDOdchylkyOd: NullableInt32 read FIDOdchylkyOd write FIDOdchylkyOd; + + [MVCColumn('IDOdchylkyDo')] + [MVCSwagJsonSchemaField(stInteger, 'IDOdchylkyDo', 'ID odchylky do', false, true)] + property IDOdchylkyDo: NullableInt32 read FIDOdchylkyDo write FIDOdchylkyDo; + + [MVCColumn('Sklad')] + [MVCSwagJsonSchemaField(stString, 'Sklad', 'Číslo skladu', false, true, 1, 30)] + property Sklad: string read FSklad write FSklad; + + [MVCColumn('Barcode')] + [MVCSwagJsonSchemaField(stString, 'Barcode', 'Barcode operace', true, false, 1, 30)] + property Barcode: string read FBarcode write FBarcode; + + [MVCColumn('VychoziSklad')] + [MVCSwagJsonSchemaField(stString, 'VychoziSklad', 'Výchozí sklad pro výdej do výroby', false, true, 1, 30)] + property VychoziSklad: string read FVychoziSklad write FVychoziSklad; + + [MVCColumn('RezijniMat')] + [MVCSwagJsonSchemaField(stBoolean, 'RezijniMat', 'Režijní materiál', false, false)] + property RezijniMat: boolean read FRezijniMat write FRezijniMat default false; + + [MVCColumn('Prednastaveno')] + [MVCSwagJsonSchemaField(stBoolean, 'Prednastaveno', 'Přednastaveno', false, false)] + property Prednastaveno: boolean read FPrednastaveno write FPrednastaveno default true; + + [MVCColumn('Predzpracovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Predzpracovano', 'Předzpracováno', false, false)] + property Predzpracovano: boolean read FPredzpracovano write FPredzpracovano default false; + + [MVCColumn('IDPracoviste')] + [MVCSwagJsonSchemaField(stInteger, 'IDPracoviste', 'ID pracoviště', false, true)] + property IDPracoviste: NullableInt32 read FIDPracoviste write FIDPracoviste; + + [MVCColumn('Vyssi')] + [MVCSwagJsonSchemaField(stInteger, 'Vyssi', 'ID kmene vyšší', true, false)] + property Vyssi: integer read FVyssi write FVyssi; + + [MVCColumn('SZVyssi')] + [MVCSwagJsonSchemaField(stString, 'SZVyssi', 'Skupina karet vyšší karty', true, false, 3, 3)] + property SZVyssi: string read FSZVyssi write FSZVyssi; + + [MVCColumn('RCVyssi')] + [MVCSwagJsonSchemaField(stString, 'RCVyssi', 'Reg.číslo vyšší karty', true, false, 1, 30)] + property RegCisVyssi: string read FRegCisVyssi write FRegCisVyssi; + + [MVCColumn('Nizsi')] + [MVCSwagJsonSchemaField(stInteger, 'Nizsi', 'ID kmene nižší', true, false)] + property Nizsi: integer read FNizsi write FNizsi; + + [MVCColumn('SZNizsi')] + [MVCSwagJsonSchemaField(stString, 'SZNizsi', 'Skupina karet nižší karty', true, false, 3, 3)] + property SZNizsi: string read FSZNizsi write FSZNizsi; + + [MVCColumn('RCNizsi')] + [MVCSwagJsonSchemaField(stString, 'RCNizsi', 'Reg.číslo nižší karty', true, false, 1, 30)] + property RegCisNizsi: string read FRegCisNizsi write FRegCisNizsi; + + [MVCColumn('Nazev1Nizsi')] + [MVCSwagJsonSchemaField(stString, 'Nazev1Nizsi', 'Název 1 nižší karty', true, false, 1, 100)] + property Nazev1Nizsi: string read FNazev1Nizsi write FNazev1Nizsi; + + [MVCColumn('Pozice')] + [MVCSwagJsonSchemaField(stString, 'Pozice', 'Pozice', false, true, 1, 100)] + property Pozice: string read FPozice write FPozice; + + [MVCColumn('Operace')] + [MVCSwagJsonSchemaField(stString, 'Operace', 'Operace', false, true, 1, 4)] + property Operace: string read FOperace write FOperace; + + [MVCColumn('SpotRozmer')] + [MVCSwagJsonSchemaField(stString, 'SpotRozmer', 'Spotřební rozměr', false, true, 1, 100)] + property SpotRozmer: string read FSpotRozmer write FSpotRozmer; + + [MVCColumn('FixniMnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'FixniMnozstvi', 'Fixní množství', false, false)] + property FixniMnozstvi: Extended read FFixniMnozstvi write FFixniMnozstvi; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'Množství', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('ProcZtrat')] + [MVCSwagJsonSchemaField(stNumber, 'ProcZtrat', 'Procento ztrát', true, false)] + property ProcentoZtrat: Extended read FProcZtrat write FProcZtrat; + + [MVCColumn('MnozstviSeZtratou')] + [MVCSwagJsonSchemaField(stNumber, 'MnozstviSeZtratou', 'Množství se ztrátou', false, false)] + property MnozstviSeZtratou: Extended read FmnozstviSeZtratou write FmnozstviSeZtratou; + + [MVCColumn('Mnoz_zad')] + [MVCSwagJsonSchemaField(stNumber, 'Mnoz_zad', 'Množství zadané', false, false)] + property MnozstviZadane: Extended read FMnozstviZadane write FMnozstviZadane; + + [MVCColumn('Prirez')] + [MVCSwagJsonSchemaField(stNumber, 'Prirez', 'Počet kusů z přířezu', false, false)] + property Prirez: Extended read FPrirez write FPrirez; + + [MVCColumn('Mnoz_nepotrebne')] + [MVCSwagJsonSchemaField(stNumber, 'Mnoz_nepotrebne', 'Množství nepotřebné', false, false)] + property Mnoz_nepotrebne: Extended read FMnoz_nepotrebne write FMnoz_nepotrebne; + + [MVCColumn('Mnoz_skut_realizovane')] + [MVCSwagJsonSchemaField(stNumber, 'Mnoz_skut_realizovane', 'Množství vydané', true, false)] + property MnozstviSkutecneRealizovane: Extended read FMnoz_skut_realizovane write FMnoz_skut_realizovane; +{ + [MVCColumn('Mnoz_skut_realizovane')] + [MVCSwagJsonSchemaField(stNumber, 'Mnoz_skut_realizovane', 'Množství nepotřebné', false, false)] + property MnozstviOdvedene: Single index clMnozstviOdvedene read FMnoz_odv write FMnoz_odv; // write WritePropReadOnlySingle; +} + [MVCColumn('mnoz_Nevydane')] + [MVCSwagJsonSchemaField(stNumber, 'mnoz_Nevydane', 'Množství nevydané', false, true)] + property MnozstviNevydane: Extended index clMnozNevydane read FMnozstviNevydane write FMnozstviNevydane; // read ReadPropSingle write WritePropReadOnlySingle; + + [MVCColumn('RefMnoz')] + [MVCSwagJsonSchemaField(stNumber, 'RefMnoz', 'Referenční množství', false, false)] // Pro vnitřní účely, realizované + nepotřebné + property RefMnoz: Extended read FRefMnoz write FRefMnoz; + + [MVCColumn('VydanoRefMnoz')] + [MVCSwagJsonSchemaField(stNumber, 'VydanoRefMnoz', 'Vydáno ref. množství', false, false)] // Pro vnitřní účely, realizované + nepotřebné + property VydanoRefMnoz: Extended read FVydanoRefMnoz write FVydanoRefMnoz; + +{$IFDEF CUSTOM_CTRL_Rootvin} + [MVCColumn('TypDilce')] + [MVCSwagJsonSchemaField(stString, 'TypDilce', 'Typ dílce', false, true)] + property TypDilce: NullableString read FTypDilce write FTypDilce; +{$ENDIF} + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabCKoop')] + TTPVCisKoop = class(THeliosObjekty) + FBlokovano: boolean; + FRada: string; + FKod: string; + FNazev: NullableString; + FDodavatel: NullableInt32; + FMistoUrceni: NullableInt32; + public + [MVCColumn('Blokovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Blokovano', 'Archivní záznam', true, false)] + property Blokovano: boolean read FBlokovano write FBlokovano; + + [MVCColumn('Rada')] + [MVCSwagJsonSchemaField(stString, 'Rada', 'Řada kooperace', true, false)] + property Rada: string read FRada write FRada; + + [MVCColumn('Kod')] + [MVCSwagJsonSchemaField(stString, 'Kod', 'Kód kooperace', true, false, 1, 10)] + property Kod: string read FKod write FKod; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název kooperace', false, true, 1, 100)] + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('Dodavatel')] + [MVCSwagJsonSchemaField(stInteger, 'Dodavatel', 'Číslo organizace dodavatele', false, true)] + property Dodavatel: NullableInt32 read FDodavatel write FDodavatel; + + [MVCColumn('MistoUrceni')] + [MVCSwagJsonSchemaField(stInteger, 'MistoUrceni', 'Místo určení', false, true)] + property MistoUrceni: NullableInt32 read FMistoUrceni write FMistoUrceni; + end; + + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPostup')] + TTPVOperaceDilce = class(THeliosObjekty) + private + FDilec: integer; + FIDZakazModif: NullableInt32; + FIDVarianta: NullableInt32; + FOdvadeci: boolean; + FTyp: integer; + FZmenaOd: NullableInt32; + FZmenaDo: NullableInt32; + public + constructor Create; // nastaveni Default hodnot + + [MVCColumn('dilec')] + [MVCSwagJsonSchemaField(stInteger, 'dilec', 'ID kmenové karty', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property dilec: integer read FDilec write FDilec; + + [MVCColumn('IDZakazModif')] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazModif', 'Interní ID zakázkové modifikace', false, true)] + property IDZakazModif: NullableInt32 read FIDZakazModif write FIDZakazModif; + + [MVCColumn('IDVarianta')] + [MVCSwagJsonSchemaField(stInteger, 'IDVarianta', 'Interní ID varianty', false, true)] + property IDVarianta: NullableInt32 read FIDVarianta write FIDVarianta; + + [MVCColumn('Odvadeci')] + [MVCSwagJsonSchemaField(stBoolean, 'Odvadeci', 'Odváděcí operace', true, false)] + property Odvadeci: Boolean read FOdvadeci write FOdvadeci; + + [MVCColumn('Typ')] + [MVCSwagJsonSchemaField(stInteger, 'Typ', 'Typ operace (0=Režijní operace/1=Jednicová operace/2=Kooperace)', true, false)] + property Typ: integer read FTyp write FTyp; + + [MVCColumn('ZmenaOd')] + [MVCSwagJsonSchemaField(stInteger, 'ZmenaOd', 'ID čísleníku změn', true, false)] + property ZmenaOd: NullableInt32 read FZmenaOd write FZmenaOd; + + [MVCColumn('ZmenaDo')] + [MVCSwagJsonSchemaField(stInteger, 'ZmenaDo', 'ID čísleníku změn', true, false)] + property ZmenaDo: NullableInt32 read FZmenaDo write FZmenaDo; + + end; + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPrikazMzdyAZmetky')] + TVyrobaEvidovanaOperace = class(THeliosObjekty) + private +// [MVCTableField('ID',[foPrimaryKey])] +// FID: integer; + FDatum: TDateTime; + FIDSmeny: NullableInt32; + FStav: Integer; + FIDKoopObj: NullableInt32; + FIDPolKoopObj: NullableInt32; + FIDPrikaz: NullableInt32; + FDokladPrPostup: NullableInt32; + FAltPrPostup: NullableString; + FNazevOperace: NullableString; + + FIDTabKmen: NullableInt32; + FIDTabStrom: NullableString; + FIDPracoviste: NullableInt32; + FIDStroje: NullableInt32; + FIDVyrCis: NullableInt32; + FDatumZahajeniOp: NullableTDateTime; + FDatumUkonceniOp: NullableTDateTime; + FZamestnanec: NullableInt32; + FTarif: NullableInt32; + + FKusyOdv: Extended; + FKusyZmetOprav: Extended; + FKusyZmetIntOprav: Extended; + FKusyZmetNeoprav: Extended; + FOperOdv: Extended; + FOperZmetOprav: Extended; + FOperZmetIntOprav: Extended; + FOperZmetNeoprav: Extended; + + FNorCas: Extended; + FNorCasT: integer; + FNorCasObsl: Extended; + FNorCasObslT: integer; + FSkCas: Extended; + FSkCasT: integer; + FSkCasObsl: Extended; + FSkCasObslT: integer; + + FMena: NullableString; + FKurz: Extended; + FNormoMzda: Extended; + FNormoMzdaVal: Extended; + FMzda: Extended; + FMzdaVal: Extended; + + FIDSdruzVyrOperaceR: NullableInt32; + FIDEvidRozpracOperR: NullableInt32; + FIDEvidRozpracOper: NullableInt32; + public +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID výrobní operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + [MVCColumn('Datum')] + [MVCSwagJsonSchemaField(stDateTime, 'Datum', 'Datum', true, false)] + property Datum: TDateTime read FDatum write FDatum; + + [MVCColumn('IDSmeny')] + [MVCSwagJsonSchemaField(stInteger, 'IDSmeny', 'ID smeny', false, true)] + property IDSmeny: NullableInt32 read FIDSmeny write FIDSmeny; + + [MVCColumn('Stav')] + [MVCSwagJsonSchemaField(stInteger, 'Stav', 'Stav - 0=porizeno, 1=realizovano', true, false)] + property Stav: integer read FStav write FStav; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID prikazu', false, true)] + property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + + [MVCColumn('DokladPrPostup')] + [MVCSwagJsonSchemaField(stInteger, 'DokladPrPostup', 'Doklad pracovniho postupu', false, true)] + property DokladPrPostup: NullableInt32 read FDokladPrPostup write FDokladPrPostup; + + [MVCColumn('AltPrPostup')] + [MVCSwagJsonSchemaField(stString, 'AltPrPostup', 'Alernativa pracovniho postupu', false, true)] + property AltPrPostup: NullableString read FAltPrPostup write FAltPrPostup; + + [MVCColumn('NazevOperace')] + [MVCSwagJsonSchemaField(stString, 'NazevOperace', 'Nazev pracovniho postupu', false, true)] + property NazevOperace: NullableString read FNazevOperace write FNazevOperace; + + [MVCColumn('IDTabKmen')] + [MVCSwagJsonSchemaField(stInteger, 'IDTabKmen', 'ID kmenové karty dílce', false, true)] + property IDTabKmen: NullableInt32 read FIDTabKmen write FIDTabKmen; + + [MVCColumn('IdTabStrom')] + [MVCSwagJsonSchemaField(stString, 'IdTabStrom', 'Sklad', false, true)] + property IdTabStrom: NullableString read FIdTabStrom write FIdTabStrom; + + [MVCColumn('IDPracoviste')] + [MVCSwagJsonSchemaField(stInteger, 'IDPracoviste', 'ID pracoviste', false, true)] + property IDPracoviste: NullableInt32 read FIDPracoviste write FIDPracoviste; + + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroje', 'ID stroje', false, true)] + property IDStroje: NullableInt32 read FIDStroje write FIDStroje; + + [MVCColumn('Zamestnanec')] + [MVCSwagJsonSchemaField(stInteger, 'Zamestnanec', 'ID zamestnance', false, true)] + property Zamestnanec: NullableInt32 read FZamestnanec write FZamestnanec; + + [MVCColumn('IDVyrCis')] + [MVCSwagJsonSchemaField(stInteger, 'IDVyrCis', 'ID vyrobniho cisla prikazu', false, true)] + property IDVyrCis: NullableInt32 read FIDVyrCis write FIDVyrCis; + + [MVCColumn('DatumZahajeniOp')] + [MVCSwagJsonSchemaField(stInteger, 'DatumZahajeniOp', 'Datum a cas zahajeni operace (z evidence rozprac.operaci)', false, true)] + property DatumZahajeniOp: NullableTDateTime read FDatumZahajeniOp write FDatumZahajeniOp; + + [MVCColumn('DatumUkonceniOp')] + [MVCSwagJsonSchemaField(stInteger, 'DatumUkonceniOp', 'Datum a cas ukonceni operace (z evidence rozprac.operaci)', false, true)] + property DatumUkonceniOp: NullableTDateTime read FDatumUkonceniOp write FDatumUkonceniOp; + + [MVCColumn('kusy_odv')] + [MVCSwagJsonSchemaField(stNumber, 'kusy_odv', 'Pocet odvedenych ks', true, false)] + property kusy_odv: Extended read FKusyOdv write FKusyOdv; + + [MVCColumn('kusy_zmet_opr')] + [MVCSwagJsonSchemaField(stNumber, 'kusy_zmet_opr', 'Pocet opravitelnych zmetku', true, false)] + property kusy_zmet_opr: Extended read FKusyZmetOprav write FKusyZmetOprav; + + [MVCColumn('kusy_zmet_opr_IO')] + [MVCSwagJsonSchemaField(stNumber, 'kusy_zmet_opr_IO', 'Pocet interne opravitelnych zmetku', true, false)] + property kusy_zmet_opr_IO: Extended read FKusyZmetIntOprav write FKusyZmetIntOprav; + + [MVCColumn('kusy_zmet_neopr')] + [MVCSwagJsonSchemaField(stNumber, 'kusy_zmet_neopr', 'Pocet neopravitelnych zmetku', true, false)] + property kusy_zmet_neopr: Extended read FKusyZmetNeoprav write FKusyZmetNeoprav; + + [MVCColumn('Operace_odv')] + [MVCSwagJsonSchemaField(stNumber, 'Operace_odv', 'Pocet odvedenych operaci', true, false)] + property Operace_odv: Extended read FOperOdv write FOperOdv; + + [MVCColumn('Operace_zmet_opr')] + [MVCSwagJsonSchemaField(stNumber, 'Operace_zmet_opr', 'Pocet opravitelnych operaci', true, false)] + property Operace_zmet_opr: Extended read FOperZmetOprav write FOperZmetOprav; + + [MVCColumn('Operace_zmet_opr_IO')] + [MVCSwagJsonSchemaField(stNumber, 'Operace_zmet_opr_IO', 'Pocet interne opravitelnych operaci', true, false)] + property Operace_zmet_opr_IO: Extended read FOperZmetIntOprav write FOperZmetIntOprav; + + [MVCColumn('Operace_zmet_neopr')] + [MVCSwagJsonSchemaField(stNumber, 'Operace_zmet_neopr', 'Pocet neopravitelnych operaci', true, false)] + property Operace_zmet_neopr: Extended read FOperZmetNeoprav write FOperZmetNeoprav; + + [MVCColumn('Tarif')] + [MVCSwagJsonSchemaField(stInteger, 'Tarif', 'ID tarifu operace', false, true)] + property Tarif: NullableInt32 read FTarif write FTarif; + + [MVCColumn('Nor_cas')] + [MVCSwagJsonSchemaField(stNumber, 'Nor_cas', 'Normovany cas (typ viz Nor_cas_T)', true, false)] + property Nor_cas: Extended read FNorCas write FNorCas; + + [MVCColumn('Nor_cas_T')] + [MVCSwagJsonSchemaField(stInteger, 'Nor_cas_T', 'Typ normovaneho casu (0=sec / 1=min / 2=hod)', true, false)] + property Nor_cas_T: integer read FNorCasT write FNorCasT default 1; + + [MVCColumn('Nor_cas_Obsluhy')] + [MVCSwagJsonSchemaField(stNumber, 'Nor_cas_Obsluhy', 'Normovany cas obsluhy (typ viz Nor_cas_Obsluhy_T)', true, false)] + property Nor_cas_Obsluhy: Extended read FNorCasObsl write FNorCasObsl; + + [MVCColumn('Nor_cas_Obsluhy_T')] + [MVCSwagJsonSchemaField(stInteger, 'Nor_cas_Obsluhy_T', 'Typ normovaneho casu obsluhy (0=sec / 1=min / 2=hod)', true, false)] + property Nor_cas_Obsluhy_T: integer read FNorCasObslT write FNorCasObslT default 1; + + [MVCColumn('Sk_cas')] + [MVCSwagJsonSchemaField(stNumber, 'Sk_cas', 'Skutecny cas (typ viz Nor_cas_T)', true, false)] + property Sk_cas: Extended read FSkCas write FSkCas; + + [MVCColumn('Sk_cas_T')] + [MVCSwagJsonSchemaField(stInteger, 'Sk_cas_T', 'Typ skutecneho casu (0=sec / 1=min / 2=hod)', true, false)] + property Sk_cas_T: integer read FSkCasT write FSkCasT default 1; + + [MVCColumn('Sk_cas_Obsluhy')] + [MVCSwagJsonSchemaField(stNumber, 'Sk_cas_Obsluhy', 'Skutecny cas obsluhy (typ viz Nor_cas_Obsluhy_T)', true, false)] + property Sk_cas_Obsluhy: Extended read FSkCasObsl write FSkCasObsl; + + [MVCColumn('Sk_cas_Obsluhy_T')] + [MVCSwagJsonSchemaField(stInteger, 'Sk_cas_Obsluhy_T', 'Typ skutecneho casu obsluhy (0=sec / 1=min / 2=hod)', true, false)] + property Sk_cas_Obsluhy_T: integer read FSkCasObslT write FSkCasObslT default 1; + + + [MVCColumn('Mena')] + [MVCSwagJsonSchemaField(stString, 'Mena', 'Mena', false, true)] + property Mena: NullableString read FMena write FMena; + + [MVCColumn('Kurz')] + [MVCSwagJsonSchemaField(stNumber, 'Kurz', 'Kurz', true, false)] + property Kurz: Extended read FKurz write FKurz; + + [MVCColumn('NormoMzda')] + [MVCSwagJsonSchemaField(stNumber, 'NormoMzda', 'Mzda za normu', true, false)] + property NormoMzda: Extended read FNormoMzda write FNormoMzda; + + [MVCColumn('NormoMzdaVal')] + [MVCSwagJsonSchemaField(stNumber, 'NormoMzdaVal', 'Mzda za normu (valuty)', true, false)] + property NormoMzdaVal: Extended read FNormoMzdaVal write FNormoMzdaVal; + + [MVCColumn('Mzda')] + [MVCSwagJsonSchemaField(stNumber, 'Mzda', 'Mzda za skutecne odpracovany cas', true, false)] + property Mzda: Extended read FMzda write FMzda; + + [MVCColumn('MzdaVal')] + [MVCSwagJsonSchemaField(stNumber, 'MzdaVal', 'Mzda (valuty) za skutecne odpracovany cas', true, false)] + property MzdaVal: Extended read FMzdaVal write FMzdaVal; + + + [MVCColumn('IDEvidRozpracOperR')] + [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpracOperR', 'ID radku evidence rozpracovanych operaci', false, true)] + property IDEvidRozpracOperR: NullableInt32 read FIDEvidRozpracOperR write FIDEvidRozpracOperR; + + [MVCColumn('IDEvidRozpracOper')] + [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpracOper', 'ID evidence rozpracovanych operaci', false, true)] + property IDEvidRozpracOper: NullableInt32 read FIDEvidRozpracOper write FIDEvidRozpracOper; + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPrPostup')] + TVyrobniOperace = class(THeliosObjekty) + private +// [MVCTableField('ID',[foPrimaryKey])] +// FID: integer; + [MVCTableField('Uzavreno')] + FUzavreno: boolean; + [MVCTableField('Prednastaveno')] + FPrednastaveno: boolean; + [MVCTableField('Predzpracovano')] + FPredzpracovano: boolean; + [MVCTableField('Odvadeci')] + FOdvadeci: boolean; + [MVCTableField('Barcode')] + FBarcode: string; + + [MVCTableField('Priorita')] + FPriorita: integer; + [MVCTableField('Doklad')] + FDoklad: integer; + [MVCTableField('Alt')] + FAlt: Char; + [MVCTableField('IDPrikaz')] + FIDPrikaz: integer; + [MVCTableField('Operace')] + FOperace: string; + [MVCTableField('Nazev')] + FNazev: string; + [MVCTableField('Poznamka')] + FPoznamka: string; + [MVCTableField('PocetKP')] + FPocetKP: integer; + + [MVCTableField('Kusy_zad')] + FKusy_zad: Extended; + [MVCTableField('Kusy_nepotrebne')] + FKusy_nepotrebne: Extended; + [MVCTableField('Kusy_ciste')] + FKusy_ciste: Extended; + [MVCTableField('Kusy_zive')] + FKusy_zive: Extended; + [MVCTableField('Kusy_predOper')] + FKusy_predOper: Extended; + [MVCTableField('Kusy_vKoop')] + FKusy_vKoop: Extended; + [MVCTableField('Kusy_real')] + FKusy_real: Extended; + [MVCTableField('Kusy_odv')] + FKusy_odv: Extended; + [MVCTableField('Kusy_predOperaci')] + FKusy_predOperaci: Extended; + [MVCTableField('Kusy_zmet')] + FKusy_zmet: Extended; + [MVCTableField('Kusy_zmet_oprIO')] + FKusy_zmet_oprIO: Extended; + [MVCTableField('Kusy_zmet_neopr')] + FKusy_zmet_neopr: Extended; + [MVCTableField('Kusy_ztrac')] + FKusy_ztrac: Extended; + + [MVCTableField('infoKusy_zad')] + FinfoKusy_zad: Extended; + [MVCTableField('infoKusy_odv')] + FinfoKusy_odv: Extended; + [MVCTableField('infoKusy_zive')] + FinfoKusy_zive: Extended; + [MVCTableField('infoKusy_zmet')] + FinfoKusy_zmet: Extended; + [MVCTableField('infoKusy_zmet_neopr')] + FinfoKusy_zmet_neopr: Extended; + + [MVCTableField('Dilec')] + FDilec: integer; + [MVCTableField('Typ')] + FTyp: integer; + [MVCTableField('DavkaTPV')] + FDavkaTPV: Extended; + [MVCTableField('NasobekTAC')] + FNasobekTAC: Extended; + [MVCTableField('IDStroje')] + FIDStroje: NullableInt32; + FStrojNazev: NullableString; + FStrojKod: NullableString; + [MVCTableField('IDKooperace')] + FIDKooperace: integer; + [MVCTableField('Pracoviste')] + FPracoviste: integer; + [MVCTableField('PocetLidi')] + FPocetLidi: integer; + [MVCTableField('PocetKusu')] + FPocetKusu: Extended; + [MVCTableField('PocetStroju')] + FPocetStroju: integer; + + [MVCTableField('MeziOperCas')] + FMeziOperCas: Extended; + [MVCTableField('MeziOperCas_Typ')] + FMeziOperCas_Typ: integer; + + [MVCTableField('CasZbyvajiciHod')] + FCasZbyvajiciHod: NullableSingle; + + [MVCTableField('TBC')] + FTBC: Extended; + [MVCTableField('TBC_Typ')] + FTBC_Typ: integer; + [MVCTableField('TBC_Obsl')] + FTBC_Obsl: Extended; + [MVCTableField('TBC_Obsl_Typ')] + FTBC_Obsl_Typ: integer; + [MVCTableField('TBC_KC')] + FTBC_KC: Extended; + + [MVCTableField('TAC')] + FTAC: Extended; + [MVCTableField('TAC_Typ')] + FTAC_Typ: integer; + [MVCTableField('TAC_Obsl')] + FTAC_Obsl: Extended; + [MVCTableField('TAC_Obsl_Typ')] + FTAC_Obsl_Typ: integer; + [MVCTableField('TAC_KC')] + FTAC_KC: Extended; + [MVCTableField('TAC_J')] + FTAC_J: Extended; + [MVCTableField('TAC_J_Typ')] + FTAC_J_Typ: integer; + [MVCTableField('TAC_J_Obsl')] + FTAC_J_Obsl: Extended; + [MVCTableField('TAC_J_Obsl_Typ')] + FTAC_J_Obsl_Typ: integer; + [MVCTableField('TAC_J_KC')] + FTAC_J_KC: Extended; + + [MVCTableField('TEC')] + FTEC: Extended; + [MVCTableField('TEC_Typ')] + FTEC_Typ: integer; + [MVCTableField('TEC_Obsl')] + FTEC_Obsl: Extended; + [MVCTableField('TEC_Obsl_Typ')] + FTEC_Obsl_Typ: integer; + [MVCTableField('TEC_KC')] + FTEC_KC: Extended; + + [MVCTableField('PlanZadani')] + FPlanZadani: NullableTDateTime; + [MVCTableField('PlanUkonceni')] + FPlanUkonceni: NullableTDateTime; + +{ + procedure NastavString(const Index: integer; const Value: string); + procedure NastavInt(const Index: integer; const Value: integer); + procedure NastavSingle(const Index: integer; const Value: Single); + procedure NastavByte(const Index: integer; const Value: byte); +} + + protected + procedure OnAfterLoad; override; + procedure OnAfterInsert; override; + + public +{ + [MVCTableField('ID', [foPrimaryKey, foReadOnly])] + [MVCColumn('ID')] + [MVCSwagJsonSchemaField(stInteger, 'ID', 'ID výrobní operace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID: integer read FID write FID; +} + + [MVCColumn('Priorita')] + [MVCSwagJsonSchemaField(stInteger, 'Priorita', 'Priorita', true, false)] + property Priorita: integer read FPriorita write FPriorita; + + [MVCColumn('Uzavreno')] + [MVCSwagJsonSchemaField(stBoolean, 'Uzavreno', 'Uzavřená operace', true, false)] + property Uzavreno: Boolean read FUzavreno write FUzavreno; + + [MVCColumn('Prednastaveno')] + [MVCSwagJsonSchemaField(stBoolean, 'Prednastaveno', 'Přednastaveno', true, false)] + property Prednastaveno: Boolean read FPrednastaveno write FPrednastaveno; + + [MVCColumn('Predzpracovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Predzpracovano', 'Předzpracováno', true, false)] + property Predzpracovano: Boolean read FPredzpracovano write FPredzpracovano; + + [MVCColumn('Odvadeci')] + [MVCSwagJsonSchemaField(stBoolean, 'Odvadeci', 'Odváděcí operace', true, false)] + property Odvadeci: Boolean read FOdvadeci write FOdvadeci; + + + + [MVCColumn('Doklad')] + [MVCSwagJsonSchemaField(stInteger, 'Doklad', 'Doklad', true, false)] + property Doklad: integer read FDoklad write FDoklad; + + [MVCColumn('Alt')] + [MVCSwagJsonSchemaField(stChar, 'Alt', 'Alternativní operace', true, false, 1, 1)] + property Alt: Char read FAlt write FAlt; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID vyrobniho prikazu', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('Operace')] + [MVCSwagJsonSchemaField(stString, 'Operace', 'Číslo operace', true, false, 0, 4)] + property Operace: string read FOperace write FOperace; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název operace', true, false, 0, 100)] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('Barcode')] + [MVCSwagJsonSchemaField(stString, 'Barcode', 'Ćárový kód operace', true, false, 0, 15)] + property Barcode: string read FBarcode write FBarcode; + + [MVCColumn('PocetKP')] + [MVCSwagJsonSchemaField(stInteger, 'PocetKP', 'Počet kontrolních postupů', true, false)] + property PocetKP: integer read FPocetKP write FPocetKP; + + + [MVCColumn('Kusy_zad')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zad', 'Kusy zadané', true, false)] + property KusyZadane: Extended read FKusy_zad write FKusy_zad; + + [MVCColumn('info_KusyZadane')] + [MVCSwagJsonSchemaField(stNumber, 'info_KusyZadane', '(info) Kusy zadané', true, false)] + property info_KusyZadane: Extended read FinfoKusy_zad write FinfoKusy_zad; + + [MVCColumn('Kusy_nepotrebne')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_nepotrebne', 'Kusy nepotřebné', true, false)] + property Kusy_nepotrebne: Extended read FKusy_nepotrebne write FKusy_nepotrebne; + + [MVCColumn('Kusy_ciste')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_ciste', 'Kusy čisté', true, false)] + property KusyCiste: Extended read FKusy_ciste write FKusy_ciste; + + [MVCColumn('Kusy_zive')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zive', 'Kusy živé', true, false)] + property KusyZive: Extended read FKusy_zive write FKusy_zive; + + [MVCColumn('Kusy_zive')] + [MVCSwagJsonSchemaField(stNumber, 'info_KusyZive', '(info) Kusy živé', true, false)] + property info_KusyZive: Extended read FinfoKusy_zive write FinfoKusy_zive; + + [MVCColumn('Kusy_predOper')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_predOper', 'Kusy před oeprací', true, false)] + property Kusy_predOper: Extended read FKusy_predOper write FKusy_predOper; + + [MVCColumn('Kusy_vKoop')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_vKoop', 'Kusy v kooperaci', true, false)] + property Kusy_vKoop: Extended read FKusy_vKoop write FKusy_vKoop; + + [MVCColumn('Kusy_real')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_real', 'Kusy realizované', true, false)] + property Kusy_real: Extended read FKusy_real write FKusy_real; + + [MVCColumn('Kusy_odv')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_odv', 'Kusy odvedené', true, false)] + property Kusy_odv: Extended read FKusy_odv write FKusy_odv; + + [MVCColumn('_info_Kusy_odv')] + [MVCSwagJsonSchemaField(stNumber, '_info_Kusy_odv', '(info) Kusy odvedené', true, false)] + property info_Kusy_odv: Extended read FinfoKusy_odv write FinfoKusy_odv; + + [MVCColumn('KusyPredOperaci')] + [MVCSwagJsonSchemaField(stNumber, 'KusyPredOperaci', 'Kusy před operací', true, false)] + property KusyPredOperaci: Extended read FKusy_predOper write FKusy_predOper; + + [MVCColumn('Kusy_zmet')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zmet', 'Zmetky opravitelné', true, false)] + property Kusy_zmet: Extended read FKusy_zmet write FKusy_zmet; + + [MVCColumn('Kusy_zmet')] + [MVCSwagJsonSchemaField(stNumber, 'info_Kusy_zmet', '(info) Zmetky opravitelné', true, false)] + property info_Kusy_zmet: Extended read FinfoKusy_zmet write FinfoKusy_zmet; + + [MVCColumn('Kusy_zmet_oprIO')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zmet_oprIO', 'Zmetky IO (interně opravitelné)', true, false)] + property Kusy_zmet_oprIO: Extended read FKusy_zmet_oprIO write FKusy_zmet_oprIO; + + [MVCColumn('Kusy_zmet_neopr')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zmet_neopr', 'Zmetky neopravitelné', true, false)] + property Kusy_zmet_neopr: Extended read FKusy_zmet_neopr write FKusy_zmet_neopr; + + [MVCColumn('_info_Kusy_zmet_neopr')] + [MVCSwagJsonSchemaField(stNumber, '_info_Kusy_zmet_neopr', '(info) Zmetky neopravitelné', true, false)] + property info_Kusy_zmet_neopr: Extended read FinfoKusy_zmet_neopr write FinfoKusy_zmet_neopr; + + [MVCColumn('Kusy_ztrac')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_ztrac', 'Ztracené kusy', true, false)] + property Kusy_ztrac: Extended read FKusy_ztrac write FKusy_ztrac; + + + + [MVCColumn('Dilec')] + [MVCSwagJsonSchemaField(stInteger, 'Dilec', 'ID dílce', true, false)] + property Dilec: integer read FDilec write FDilec; + + [MVCColumn('Typ')] + [MVCSwagJsonSchemaField(stInteger, 'Typ', 'Typ operace (0=Režijní operace/1=Jednicová operace/2=Kooperace)', true, false)] + property Typ: integer read FTyp write FTyp; + + [MVCColumn('DavkaTPV')] + [MVCSwagJsonSchemaField(stNumber, 'DavkaTPV', 'Dávka TPV', true, false)] + property DavkaTPV: Extended read FDavkaTPV write FDavkaTPV; + + [MVCColumn('NasobekTAC')] + [MVCSwagJsonSchemaField(stNumber, 'NasobekTAC', 'Násobek TAC', true, false)] + property NasobekTAC: Extended read FNasobekTAC write FNasobekTAC; + + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroje', 'ID stroje', true, false)] + property IDStroje: NullableInt32 read FIDStroje write FIDStroje; + + [MVCColumn('StrojNazev')] + [MVCSwagJsonSchemaField(stString, 'StrojNazev', 'Název stroje', false, true, 0, 40)] + property StrojNazev: NullableString read FStrojNazev write FStrojNazev; + + [MVCColumn('StrojKod')] + [MVCSwagJsonSchemaField(stString, 'StrojKod', 'Kód stroje', false, true, 0, 40)] + property StrojKod: NullableString read FStrojKod write FStrojKod; + + [MVCColumn('IDKooperace')] + [MVCSwagJsonSchemaField(stInteger, 'IDKooperace', 'ID kooperace', true, false)] + property IDKooperace: integer read FIDKooperace write FIDKooperace; + + [MVCColumn('pracoviste')] + [MVCSwagJsonSchemaField(stInteger, 'pracoviste', 'ID pracoviště', true, false)] + property IDPracoviste: integer read FPracoviste write FPracoviste; + + [MVCColumn('PocetLidi')] + [MVCSwagJsonSchemaField(stInteger, 'PocetLidi', 'Počet lidí', true, false)] + property PocetLidi: integer read FPocetLidi write FPocetLidi; + + [MVCColumn('PocetKusu')] + [MVCSwagJsonSchemaField(stNumber, 'PocetKusu', 'Počet kusů', true, false)] + property PocetKusu: Extended read FPocetKusu write FPocetKusu; + + [MVCColumn('PocetStroju')] + [MVCSwagJsonSchemaField(stInteger, 'PocetStroju', 'Počet strojů', true, false)] + property PocetStroju: integer read FPocetStroju write FPocetStroju; + + + + [MVCColumn('MeziOperCas')] + [MVCSwagJsonSchemaField(stNumber, 'MeziOperCas', 'Mezioperační čas', true, false)] + property MeziOperCas: Extended read FMeziOperCas write FMeziOperCas; + + [MVCColumn('MeziOperCas_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'MeziOperCas_Typ', 'Typ mezioperačního času', true, false)] + property MeziOperCas_Typ: integer read FMeziOperCas_Typ write FMeziOperCas_Typ; + + + [MVCColumn('ZbyvajiciCas_H')] + [MVCSwagJsonSchemaField(stNumber, 'ZbyvajiciCas_H', 'Zbývající čas stroje [hod]', true, true)] + property ZbyvajiciCas_H: NullableSingle read FCasZbyvajiciHod write FCasZbyvajiciHod; + + + + [MVCColumn('TBC')] + [MVCSwagJsonSchemaField(stNumber, 'TBC', 'Přípravný čas strojní', true, false)] + property TBC: Extended read FTBC write FTBC; + + [MVCColumn('TBC_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TBC_Typ', 'Typ strojního přípravného času', true, false)] + property TBC_Typ: integer read FTBC_Typ write FTBC_Typ; + + [MVCColumn('TBC_Obsl')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_Obsl', 'Přípravný čas obsluhy', true, false)] + property TBC_Obsl: Extended read FTBC_Obsl write FTBC_Obsl; + + [MVCColumn('TBC_Obsl_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TBC_Obsl_Typ', 'Typ přípravného času obsluhy', true, false)] + property TBC_Obsl_Typ: integer read FTBC_Obsl_Typ write FTBC_Obsl_Typ; + + [MVCColumn('TBC_KC')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_KC', 'Přípravná mzda obsluhy', true, false)] + property TBC_KC: Extended read FTBC_KC write FTBC_KC; + + [MVCColumn('TAC')] + [MVCSwagJsonSchemaField(stNumber, 'TAC', 'Celkový jednicový čas', true, false)] + property TAC: Extended read FTAC write FTAC; + + [MVCColumn('TAC_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TAC_Typ', 'Typ celkového jednicového času', true, false)] + property TAC_Typ: integer read FTAC_Typ write FTAC_Typ; + + [MVCColumn('TAC_Obsl')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_Obsl', 'Celkový jednicový čas obsluhy', true, false)] + property TAC_Obsl: Extended read FTAC_Obsl write FTAC_Obsl; + + [MVCColumn('TAC_Obsl_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TAC_Obsl_Typ', 'Typ celkového jednicového času obsluhy', true, false)] + property TAC_Obsl_Typ: integer read FTAC_Obsl_Typ write FTAC_Obsl_Typ; + + [MVCColumn('TAC_KC')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_KC', 'Celková jednicová mzda', true, false)] + property TAC_KC: Extended read FTAC_KC write FTAC_KC; + + [MVCColumn('TAC_J')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J', 'Jednicový čas', true, false)] + property TAC_J: Extended read FTAC_J write FTAC_J; + + [MVCColumn('TAC_J_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TAC_J_Typ', 'Typ jednicového času', true, false)] + property TAC_J_Typ: integer read FTAC_J_Typ write FTAC_J_Typ; + + [MVCColumn('TAC_J_Obsl')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J_Obsl', 'Jednicový čas obsluhy', true, false)] + property TAC_J_Obsl: Extended read FTAC_J_Obsl write FTAC_J_Obsl; + + [MVCColumn('TAC_J_Obsl_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TAC_J_Obsl_Typ', 'Typ jednicového času obsluhy', true, false)] + property TAC_J_Obsl_Typ: integer read FTAC_J_Obsl_Typ write FTAC_J_Obsl_Typ; + + [MVCColumn('TAC_J_KC')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J_KC', 'Jednicová mzda', true, false)] + property TAC_J_KC: Extended read FTAC_J_KC write FTAC_J_KC; + + [MVCColumn('TEC')] + [MVCSwagJsonSchemaField(stNumber, 'TEC', 'Ukončovací čas', true, false)] + property TEC: Extended read FTEC write FTEC; + + [MVCColumn('TEC_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TEC_Typ', 'Typ strojního ukončovacího času', true, false)] + property TEC_Typ: integer read FTEC_Typ write FTEC_Typ; + + [MVCColumn('TEC_Obsl')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_Obsl', 'Ukončovací čas obsluhy', true, false)] + property TEC_Obsl: Extended read FTEC_Obsl write FTEC_Obsl; + + [MVCColumn('TEC_Obsl_Typ')] + [MVCSwagJsonSchemaField(stInteger, 'TEC_Obsl_Typ', 'Typ ukončovacího času obsluhy', true, false)] + property TEC_Obsl_Typ: integer read FTEC_Obsl_Typ write FTEC_Obsl_Typ; + + [MVCColumn('TEC_KC')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_KC', 'Ukončovací mzda obsluhy', true, false)] + property TEC_KC: Extended read FTEC_KC write FTEC_KC; + + [MVCColumn('Plan_zadani')] + [MVCSwagJsonSchemaField(stDate, 'Plan_zadani', 'Plánované zahájení', false, true)] + property Plan_zadani: NullableTDateTime read FPlanZadani write FPlanZadani; + + [MVCColumn('Plan_ukonceni')] + [MVCSwagJsonSchemaField(stDate, 'Plan_ukonceni', 'Plánované ukončení', false, true)] + property Plan_ukonceni: NullableTDateTime read FPlanUkonceni write FPlanUkonceni; + + end; + + + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabZakazModif')] + TTPVZakazkovaModifikace = class(THeliosObjekty) + private + FBlokovano: integer; + FRada: string; + FKod: string; + FNazev: NullableString; + FDatumTPV: NullableTDateTime; + FPoznamka: NullableString; + FSchvaleno: boolean; + FDatumSchvaleni: NullableTDateTime; + public + [MVCColumn('Rada')] + [MVCSwagJsonSchemaField(stString, 'Rada', 'Řada', true, false, 0, 10)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Rada: string read FRada write FRada; + + [MVCColumn('Kod')] + [MVCSwagJsonSchemaField(stString, 'Kod', 'Kód', true, false, 0, 20)] + property Kod: string read FKod write FKod; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název', false, true, 1, 100)] + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('DatumTPV')] + [MVCSwagJsonSchemaField(stDate, 'DatumTPV', 'Datum TPV', false, true)] + property DatumTPV: NullableTDateTime read FDatumTPV write FDatumTPV; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('Schvaleno')] + [MVCSwagJsonSchemaField(stBoolean, 'Schvaleno', 'Schváleno', true, false)] + property Schvaleno: boolean read FSchvaleno write FSchvaleno default false; + + [MVCColumn('DatumSchvaleni')] + [MVCSwagJsonSchemaField(stDate, 'DatumSchvaleni', 'Datum schválení', false, true)] + property DatumSchvaleni: NullableTDateTime read FDatumSchvaleni write FDatumSchvaleni; + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabZakazModifDilce')] + TTPVZakazkovaModifikaceDilce = class(THeliosObjekty) + private + FIDZakazModif: integer; + FIDKmenZbozi: integer; + FNazev: NullableString; + FTPVModif: boolean; + FZKalkulModif: boolean; + FPoznamka: NullableString; + FKmenStredisko: NullableString; + FRadaVyrPlanu: NullableString; + FRadaVyrPrikazu: NullableString; + public + [MVCColumn('IDZakazModif')] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazModif', 'Interní ID zakázkové modifikace', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDZakazModif: integer read FIDZakazModif write FIDZakazModif; + + [MVCColumn('IDKmenZbozi')] + [MVCSwagJsonSchemaField(stInteger, 'IDKmenZbozi', 'Interni ID kmenove karty', true, false)] + property IDKmenZbozi: integer read FIDKmenZbozi write FIDKmenZbozi; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název', false, true, 1, 100)] + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('TPVModif')] + [MVCSwagJsonSchemaField(stBoolean, 'TPVModif', 'TPV modifikováno', true, false)] + property TPVModif: boolean read FTPVModif write FTPVModif default false; + + [MVCColumn('ZKalkulModif')] + [MVCSwagJsonSchemaField(stBoolean, 'ZKalkulModif', 'Modifikována kalkulace', true, false)] + property ZKalkulModif: boolean read FZKalkulModif write FZKalkulModif default false; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('KmenoveStredisko')] + [MVCSwagJsonSchemaField(stString, 'KmenoveStredisko', 'Kmenové středisko', false, true, 1, 30)] + property KmenoveStredisko: NullableString read FKmenStredisko write FKmenStredisko; + + [MVCColumn('RadaVyrPlanu')] + [MVCSwagJsonSchemaField(stString, 'RadaVyrPlanu', 'Řada výrobního plánu', false, true, 1, 10)] + property RadaVyrPlanu: NullableString read FRadaVyrPlanu write FRadaVyrPlanu; + + [MVCColumn('RadaVyrPrikazu')] + [MVCSwagJsonSchemaField(stString, 'RadaVyrPrikazu', 'Kmenové středisko', false, true, 1, 10)] + property RadaVyrPrikazu: NullableString read FRadaVyrPrikazu write FRadaVyrPrikazu; + end; + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabVyrCisPrikaz')] + TVyrCisPrikaz = class(THeliosObjekty) + private + FIDPrikaz: integer; + FVyrCislo: string; + FPopis: string; + FDatExpirace: NullableTDateTime; + FPoznamka: NullableString; + FMnozstvi: Extended; + FZmetky: Extended; + FOdvedeno: Extended; + FMnozstviZive: NullableExtended; + protected + procedure OnAfterLoad; override; + public + constructor Create; virtual; + destructor Destroy; override; +{ + [MVCColumn('StavPrikazu')] + [MVCSwagJsonSchemaField(stInteger, 'StavPrikazu', 'Stav vyrobniho prikazu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property StavPrikazu: integer read FStavPrikazu write FStavPrikazu; +} + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID výrobního příkazu', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('VyrCislo')] + [MVCSwagJsonSchemaField(stString, 'VyrCislo', 'Výrobní číslo', true, false, 0, 100)] + property VyrCislo: String read FVyrCislo write FVyrCislo; + + [MVCColumn('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis výrobního čísla', true, false, 0, 100)] + property Popis: String read FPopis write FPopis; + + [MVCColumn('DatExpirace')] + [MVCSwagJsonSchemaField(stDateTime, 'DatExpirace', 'Datum expirace', false, true)] + property DatExpirace: NullableTDateTime read FDatExpirace write FDatExpirace; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, SizeOf(string))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'Množství', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('Zmetky')] + [MVCSwagJsonSchemaField(stNumber, 'Zmetky', 'Zmetky', true, false)] + property Zmetky: Extended read FZmetky write FZmetky; + + [MVCColumn('Odvedeno')] + [MVCSwagJsonSchemaField(stNumber, 'Odvedeno', 'Odvedeno', true, false)] + property Odvedeno: Extended read FOdvedeno write FOdvedeno; + + [MVCColumn('MnozstviZive')] + [MVCSwagJsonSchemaField(stNumber, 'MnozstviZive', 'Množství živé', false, true)] + property MnozstviZive: NullableExtended read FMnozstviZive write FMnozstviZive; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabPrikaz')] + TVyrobniPrikaz = class(THeliosObjekty) + private + FStavPrikazu: integer; + FRada: string; + FCislo: integer; + FIDZakazModif: NullableInt32; + FKodZakazModif: NullableString; + FIDPrikazVyssi: integer; + FIDPrikazRidici: Integer; + FIDTabKmen: integer; + FSZ: string; + FRegCis: string; + FNazev1: string; + FIDZakazka: NullableInt32; + FCisloZakazky: NullableString; + FKsZadane: Extended; + FKsCiste: Extended; + FKsZive: Extended; + FPlanZadani: NullableTDateTime; + FDatZadani: NullableTDateTime; + FPlanUkonceni: NullableTDateTime; + FDatUkonceni: NullableTDateTime; + FEvidRozpracOperStart: NullableTDateTime; + FVyrobniOperace: TObjectList; + FMaterial: TObjectList; + FVyrobniCisla: TObjectList; + FNadrizenePrikazy: TObjectList; + FPodrizenePrikazy: TObjectList; + procedure SetVyrobniOperace (const Value: TObjectList); + procedure SetMaterialPrikazu (const Value: TObjectList); + procedure SetVyrCisPrikazu (const Value: TObjectList); + procedure SetNadrizenePrikazy (const Value: TObjectList); + procedure SetPodrizenePrikazy (const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; + + [MVCColumn('StavPrikazu')] + [MVCSwagJsonSchemaField(stInteger, 'StavPrikazu', 'Stav vyrobniho prikazu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property StavPrikazu: integer read FStavPrikazu write FStavPrikazu; + + [MVCColumn('IDTabKmen')] + [MVCSwagJsonSchemaField(stInteger, 'IDTabKmen', 'Interni ID kmenove karty', true, false)] + property IDTabKmen: integer read FIDTabKmen write FIDTabKmen; + + [MVCColumn('SZ')] + [MVCSwagJsonSchemaField(stString, 'SZ', 'Skupina karet dílce', true, false, 3, 3)] + property SZ: string read FSZ write FSZ; + + [MVCColumn('RegCis')] + [MVCSwagJsonSchemaField(stString, 'RegCis', 'Reg.číslo dílce', true, false, 1, 30)] + property RegCis: string read FRegCis write FRegCis; + + [MVCColumn('Nazev1')] + [MVCSwagJsonSchemaField(stString, 'Nazev1', 'Název 1 dílce', true, false, 1, 100)] + property Nazev1: string read FNazev1 write FNazev1; + + [MVCColumn('IDZakazModif')] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazModif', 'Interní ID zakázkové modifikace', false, true)] + property IDZakazModif: NullableInt32 read FIDZakazModif write FIDZakazModif; + + [MVCColumn('KodZakazModif')] + [MVCSwagJsonSchemaField(stString, 'KodZakazModif', 'Kód zakázkové modifikace', false, true)] + property KodZakazModif: NullableString read FKodZakazModif write FKodZakazModif; + + [MVCColumn('IDZakazka')] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazka', 'Interní ID zakázky', false, true)] + property IDZakazka: NullableInt32 read FIDZakazka write FIDZakazka; + + [MVCColumn('CisloZakazky')] + [MVCSwagJsonSchemaField(stString, 'CisloZakazky', 'Číslo zakázky', false, true)] + property CisloZakazky: NullableString read FCisloZakazky write FCisloZakazky; + + [MVCColumn('Rada')] + [MVCSwagJsonSchemaField(stString, 'Rada', 'Rada vyrobniho prikazu', true, false)] + property Rada: string read FRada write FRada; + + [MVCColumn('Prikaz')] + [MVCSwagJsonSchemaField(stInteger, 'Prikaz', 'Cislo vyrobniho prikazu', true, false)] + property Prikaz: integer read FCislo write FCislo; + + [MVCColumn('Kusy_zad')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zad', 'Kusy zadane', true, false)] + property KusyZadane: Extended read FKsZadane write FKsZadane; + + [MVCColumn('Kusy_ciste')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_ciste', 'Kusy ciste', true, false)] + property KusyCiste: Extended read FKsCiste write FKsCiste; + + [MVCColumn('Kusy_zive')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy_zive', 'Kusy zive', true, false)] + property KusyZive: Extended read FKsZive write FKsZive; + + [MVCColumn('IDPrikazVyssi')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikazVyssi', 'Interni ID vyssiho prikazu', false, true)] + property IDPrikazVyssi: integer read FIDPrikazVyssi write FIDPrikazVyssi; + + [MVCColumn('IDPrikazRidici')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikazRidici', 'Interni ID ridiciho prikazu', false, false)] + property IDPrikazRidici: integer read FIDPrikazRidici write FIDPrikazRidici; + + [MVCColumn('Plan_Zadani')] + [MVCSwagJsonSchemaField(stDateTime, 'PlanZadani', 'Plánované zadání', false, true)] + property PlanZadani: NullableTDateTime read FPlanZadani write FPlanZadani; + + [MVCColumn('zadani')] + [MVCSwagJsonSchemaField(stDateTime, 'zadani', 'Plánované zadání', false, true)] + property DatZadani: NullableTDateTime read FDatZadani write FDatZadani; + + [MVCColumn('Plan_Ukonceni')] + [MVCSwagJsonSchemaField(stDateTime, 'Plan_Ukonceni', 'Plánované zadání', false, true)] + property PlanUkonceni: NullableTDateTime read FPlanUkonceni write FPlanUkonceni; + + [MVCColumn('ukonceni')] + [MVCSwagJsonSchemaField(stDateTime, 'ukonceni', 'Plánované zadání', false, true)] + property DatUkonceni: NullableTDateTime read FDatUkonceni write FDatUkonceni; + + [MVCColumn('EvidRozpracOperStart')] + [MVCSwagJsonSchemaField(stDateTime, 'EvidRozpracOperStart', 'Plánované zadání', false, true)] + property EvidRozpracOperStart: NullableTDateTime read FEvidRozpracOperStart write FEvidRozpracOperStart; + + + [MVCListOf(TVyrobniOperace)] + property VyrobniOperace: TObjectList read FVyrobniOperace write SetVyrobniOperace; + + [MVCListOf(TMaterialPrikazu)] + property Material: TObjectList read FMaterial write SetMaterialPrikazu; + + [MVCListOf(TVyrCisPrikaz)] + property VyrobniCisla: TObjectList read FVyrobniCisla write SetVyrCisPrikazu; + + [MVCListOf(TVyrobaNadrizenePrikazy)] + property NadrizenePrikazy: TObjectList read FNadrizenePrikazy write SetNadrizenePrikazy; + + [MVCListOf(TVyrobaNadrizenePrikazy)] + property PodrizenePrikazy: TObjectList read FPodrizenePrikazy write SetPodrizenePrikazy; + end; + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabEvidRozpracOperR')] + TEvidRozpracOperaceOperace = class(THeliosObjekty) + private + FIDEvidRozpraceOper: integer; + FIDPrikaz: integer; + FNazevDilce: NullableString; + FSkupZboDilce: NullableString; + FRegCisDilce: NullableString; + FDokladPrPostup: integer; + FAltPrPostup: char; + FNazevOperace: NullableString; + FIDSdruzVyrOperaceR: NullableInt32; + FIDVyrCis: NullableInt32; + FTypEvidMnoz: NullableInt16; + FMnoz_odv: NullableExtended; + FSk_cas: NullableExtended; + FSk_cas_T: byte; + FSk_cas_Obsluhy: NullableExtended; + FSk_cas_Obsluhy_T: byte; + FPoznamka: NullableString; + FJeSdruzenaOper: boolean; + protected + procedure OnAfterLoad; override; + public + [MVCColumn('IDEvidRozpraceOper')] + [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpraceOper', 'Interní ID evidence rozpracovaných operací', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDEvidRozpraceOper: integer read FIDEvidRozpraceOper write FIDEvidRozpraceOper; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'Interní ID výrobního příkazu', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('DokladPrPostup')] + [MVCSwagJsonSchemaField(stInteger, 'DokladPrPostup', 'Doklad operace', true, false)] + property DokladPrPostup: integer read FDokladPrPostup write FDokladPrPostup; + + [MVCColumn('AltPrPostup')] + [MVCSwagJsonSchemaField(stChar, 'AltPrPostup', 'Alternativa operace', true, false)] + property AltPrPostup: char read FAltPrPostup write FAltPrPostup; + + [MVCColumn('IDSdruzVyrOperaceR')] + [MVCSwagJsonSchemaField(stInteger, 'IDSdruzVyrOperaceR', 'Interní ID sdružené operace', false, true)] + property IDSdruzVyrOperaceR: NullableInt32 read FIDSdruzVyrOperaceR write FIDSdruzVyrOperaceR; + + [MVCColumn('IDVyrCis')] + [MVCSwagJsonSchemaField(stInteger, 'IDVyrCis', 'Interní ID výrobního čísla daného příkazu', false, true)] + property IDVyrCis: NullableInt32 read FIDVyrCis write FIDVyrCis; + + [MVCColumn('Mnoz_odv')] + [MVCSwagJsonSchemaField(stNumber, 'Mnoz_odv', 'Evidované kusy dobré', false, true)] + property Mnoz_odv: NullableExtended read FMnoz_odv write FMnoz_odv; + + [MVCColumn('Sk_cas')] + [MVCSwagJsonSchemaField(stNumber, 'Sk_cas', 'Evidovaný čas', false, true)] + property Sk_cas: NullableExtended read FSk_cas write FSk_cas; + + [MVCColumn('Sk_cas_T')] + [MVCSwagJsonSchemaField(stInteger, 'Sk_cas_T', 'Typ evidovaného času (0=sec / 1=min / 2=hod)', true, false)] + property Sk_cas_T: byte read FSk_cas_T write FSk_cas_T; + + [MVCColumn('Sk_cas_Obsluhy')] + [MVCSwagJsonSchemaField(stNumber, 'Sk_cas_Obsluhy', 'Evidovaný čas obsluhy', false, true)] + property Sk_cas_Obsluhy: NullableExtended read FSk_cas_Obsluhy write FSk_cas_Obsluhy; + + [MVCColumn('Sk_cas_Obsluhy_T')] + [MVCSwagJsonSchemaField(stInteger, 'Sk_cas_Obsluhy_T', 'Typ evidovaného času obsluhy (0=sec / 1=min / 2=hod)', true, false)] + property Sk_cas_Obsluhy_T: byte read FSk_cas_Obsluhy_T write FSk_cas_Obsluhy_T; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('NazevOperace')] + [MVCSwagJsonSchemaField(stString, 'NazevOperace', 'Název operace (z operací příkazu)', false, true, 0, 100)] + property NazevOperace: NullableString read FNazevOperace write FNazevOperace; + + [MVCColumn('Nazev1Dilce')] + [MVCSwagJsonSchemaField(stString, 'Nazev1Dilce', 'Název vyráběného dílce', false, true, 0, 100)] + property Nazev1Dilce: NullableString read FNazevDilce write FNazevDilce; + + [MVCColumn('SkupZboDilce')] + [MVCSwagJsonSchemaField(stString, 'SkupZboDilce', 'Skupina karet vyráběného dílce', false, true, 0, 3)] + property SkupZboDilce: NullableString read FSkupZboDilce write FSkupZboDilce; + + [MVCColumn('RegCisDilce')] + [MVCSwagJsonSchemaField(stString, 'RegCisDilce', 'Registracni cislo vyráběného dílce', false, true, 0, 30)] + property RegCisDilce: NullableString read FRegCisDilce write FRegCisDilce; + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabEvidRozpracOper')] + TEvidRozpracOperace = class(THeliosObjekty) + private + FDatumPripadu: TDateTime; + FDatumUzavreni: NullableTDateTime; + FAutorUzavreni: NullableString; + FIDZamestnance: NullableInt32; + FCasZahajeni: NullableTDateTime; + FCasUkonceni: NullableTDateTime; + FIDSmeny: NullableInt32; + FIDPracoviste: NullableInt32; + FKodPracoviste: NullableString; + FNazevPracoviste: NullableString; + FIDStroje: NullableInt32; + FKodStroje: NullableString; + FNazevStroje: NullableString; + FKVO: Extended; + FIDEvidRozpracOperProstoje: NullableInt32; + FPoznamka: NullableString; + FStav: NullableInt16; + FCelkovyCas: NullableExtended; + FCelkovyCas_T: byte; + FCelkovyCas_S: Extended; + FCelkovyCas_N: Extended; + FCelkovyCas_H: Extended; + FOperace: TObjectList; + procedure SetOperace (const Value: TObjectList); + protected + procedure OnAfterLoad; override; + public + constructor Create; virtual; + destructor Destroy; override; + + [MVCColumn('DatumPripadu')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumPripadu', 'Datum případu', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property DatumPripadu: TDateTime read FDatumPripadu write FDatumPripadu; + + [MVCColumn('DatumUzavreni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumUzavreni', 'Datum uzavření', false, true)] + property DatumUzavreni: NullableTDateTime read FDatumUzavreni write FDatumUzavreni; + + [MVCColumn('AutorUzavreni')] + [MVCSwagJsonSchemaField(stString, 'AutorUzavreni', 'Autor uzavření', false, true, 0, 128)] + property AutorUzavreni: NullableString read FAutorUzavreni write FAutorUzavreni; + + [MVCColumn('IDZamestnance')] + [MVCSwagJsonSchemaField(stInteger, 'IDZamestnance', 'Interní ID zaměstnance', false, true)] + property IDZamestnance: NullableInt32 read FIDZamestnance write FIDZamestnance; + + [MVCColumn('CasZahajeni')] + [MVCSwagJsonSchemaField(stDateTime, 'CasZahajeni', 'Čas zahájení evidence', false, true)] + property CasZahajeni: NullableTDateTime read FCasZahajeni write FCasZahajeni; + + [MVCColumn('CasUkonceni')] + [MVCSwagJsonSchemaField(stDateTime, 'CasUkonceni', 'Čas ukončení evidence', false, true)] + property CasUkonceni: NullableTDateTime read FCasUkonceni write FCasUkonceni; + + [MVCColumn('IDSmeny')] + [MVCSwagJsonSchemaField(stInteger, 'IDSmeny', 'Interní ID směny', false, true)] + property IDSmeny: NullableInt32 read FIDSmeny write FIDSmeny; + + [MVCColumn('IDPracoviste')] + [MVCSwagJsonSchemaField(stInteger, 'IDPracoviste', 'Interní ID praoviště', false, true)] + property IDPracoviste: NullableInt32 read FIDPracoviste write FIDPracoviste; + + [MVCColumn('KodPracoviste')] + [MVCSwagJsonSchemaField(stString, 'KodPracoviste', 'Kód pracoviště (pokud je v evidenci zadáno)', false, true, 0, 10)] + property KodPracoviste: NullableString read FKodStroje write FKodStroje; + + [MVCColumn('NazevPracoviste')] + [MVCSwagJsonSchemaField(stString, 'NazevPracoviste', 'Název pracoviště (pokud je v evidenci zadáno)', false, true, 0, 40)] + property NazevPracoviste: NullableString read FNazevPracoviste write FNazevPracoviste; + + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroje', 'Interní ID stroje', false, true)] + property IDStroje: NullableInt32 read FIDStroje write FIDStroje; + + [MVCColumn('KodStroje')] + [MVCSwagJsonSchemaField(stString, 'KodStroje', 'Kód stroje (pokud je v evidenci zadán)', false, true, 0, 10)] + property KodStroje: NullableString read FKodStroje write FKodStroje; + + [MVCColumn('NazevStroje')] + [MVCSwagJsonSchemaField(stString, 'NazevStroje', 'Název stroje (pokud je v evidenci zadán)', false, true, 0, 40)] + property NazevStroje: NullableString read FNazevStroje write FNazevStroje; + + [MVCColumn('KVO')] + [MVCSwagJsonSchemaField(stNumber, 'KVO', 'Koeficient vícestrojové obsluhy', true, false)] + property KVO: Extended read FKVO write FKVO; + + [MVCColumn('IDEvidRozpracOperProstoje')] + [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpracOperProstoje', 'Interní ID prostoje evidence rozpracovaných operací', false, true)] + property IDEvidRozpracOperProstoje: NullableInt32 read FIDEvidRozpracOperProstoje write FIDEvidRozpracOperProstoje; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('CelkovyCas')] + [MVCSwagJsonSchemaField(stNumber, 'CelkovyCas', 'Celkový evidovaného čas', false, true)] + property CelkovyCas: NullableExtended read FCelkovyCas write FCelkovyCas; + + [MVCColumn('CelkovyCas_T')] + [MVCSwagJsonSchemaField(stInteger, 'CelkovyCas_T', 'Typ celkového evidovaného času (0=sec / 1=min / 2=hod)', true, false)] + property CelkovyCas_T: byte read FCelkovyCas_T write FCelkovyCas_T; + + [MVCColumn('Stav')] + [MVCSwagJsonSchemaField(stInteger, 'Stav', 'Stav (10=pořízeno, 20=zahájeno, 25=prostoj, 26=prostoj obsluhy, 27=prostoj stroje, 30=ukončeno, 40=uzavřeno', false, true)] + property Stav: NullableInt16 read FStav write FStav; + + [MVCListOf(TEvidRozpracOperaceOperace)] + property Operace: TObjectList read FOperace write SetOperace; + end; + + + + + + [MVCNameCase(ncLowerCase)] + [MVCTable('TabKVazby')] + TTPVKusovnikDilce = class(THeliosObjekty) + private + FIDPrKVazby: Integer; + FIDVyssi: Integer; + FMNF: Extended; + Fmnozstvi: Extended; + FPoradi: Integer; + FIDPrikaz: Integer; + FIDKmenPolozky: Integer; + FSZNizsi: string; + FRCNizsi: string; + FNazev1Nizsi: string; + FMJNizsi: NullableString; + FIDZakazModif: NullableInt32; + public + [MVCColumn('IDKVazby')] + [MVCSwagJsonSchemaField(stInteger, 'IDKVazby', 'ID kusovníkove vazby', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDKVazby: Integer read FIDPrKVazby write FIDPrKVazby; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'IDPrikaz', true, false)] + property IDPrikaz: Integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('Poradi')] + [MVCSwagJsonSchemaField(stInteger, 'Poradi', 'Pořadí v rámci úrovně', true, false)] + property Poradi: Integer read FPoradi write FPoradi; + + [MVCColumn('MNF')] + [MVCSwagJsonSchemaField(stNumber, 'MNF', 'Požadovaný počet finálů', true, false)] + property MNF: Extended read FMNF write FMNF; + + [MVCColumn('Mnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'Mnozstvi', 'Požadované množství na finál', true, false)] + property Mnozstvi: Extended read FMnozstvi write FMnozstvi; + + [MVCColumn('Vyssi')] + [MVCSwagJsonSchemaField(stInteger, 'IDKmenVyssi', 'ID vyšší kmenové karty dílce', true, false)] + property IDKmenVyssi: Integer read FIDVyssi write FIDVyssi; + + [MVCColumn('IDKmenZbozi')] + [MVCSwagJsonSchemaField(stInteger, 'IDKmenNizsi', 'ID kmenové karty dílce/materiálu položky kusovníku', true, false)] + property IDKmenNizsi: Integer read FIDKmenPolozky write FIDKmenPolozky; + + [MVCColumn('SZNizsi')] + [MVCSwagJsonSchemaField(stString, 'SZVyssi', 'SK nižší karty', true, false, 1, 3)] + property SZNizsi: string read FSZNizsi write FSZNizsi; + + [MVCColumn('RCNizsi')] + [MVCSwagJsonSchemaField(stString, 'RCNizsi', 'Reg. číslo nižší karty', true, false, 1, 30)] + property RCNizsi: string read FRCNizsi write FRCNizsi; + + [MVCColumn('Nazev1Nizsi')] + [MVCSwagJsonSchemaField(stString, 'Nazev1Nizsi', 'Název 1 nižší karty', true, false, 0, 100)] + property Nazev1Nizsi: string read FNazev1Nizsi write FNazev1Nizsi; + + [MVCColumn('MJNizsi')] + [MVCSwagJsonSchemaField(stString, 'MJNizsi', 'MJ nižší karty', true, false, 0, 10)] + property MJNizsi: NullableString read FMJNizsi write FMJNizsi; + + [MVCColumn('IDZakazModif')] + [MVCSwagJsonSchemaField(stInteger, 'IDZakazModif', 'Interní ID zakázkové modifikace', false, true)] + property IDZakazModif: NullableInt32 read FIDZakazModif write FIDZakazModif; + end; + + + + + [MVCNameCase(ncLowerCase)] + TTPVPracoviste = class(THeliosObjekty) + private + FPracoviste: string; + FNazev: string; + FStredisko: string; + FBarva: integer; + public + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název pracoviště', true, false, 0, 40)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Nazev: string read FNazev write FNazev; + + [MVCColumn('IDTabStrom')] // nazev v tabulce + [MVCTableField('Stredisko')] // nazev pro API + [MVCSwagJsonSchemaField(stString, 'Stredisko', 'Středisko pracoviště', true, false, 1, 30)] + property Stredisko: string read FStredisko write FStredisko; + + [MVCColumn('Pracoviste')] + [MVCSwagJsonSchemaField(stString, 'Pracoviste', 'Kód pracoviště', true, false, 1, 10)] + property Pracoviste: string read FPracoviste write FPracoviste; + + [MVCColumn('Barva')] + [MVCTableField('Barva')] + [MVCSwagJsonSchemaField(stString, 'Barva', 'Barva pracoviště', false, true)] + property Barva: integer read FBarva write FBarva; + end; + + + + + + [MVCNameCase(ncLowerCase)] + TTPVCiselnikZmen = class(THeliosObjekty) + private + FRada: string; + FCisloZmeny: string; + FNavrh: NullableString; + FOsCislo: NullableInt32; + FPoznamka: NullableString; + FDatum: TDateTime; + FAutorPlatnosti: NullableString; + FDatumNastaveni: NullableTDateTime; + FPlatnost: Boolean; + FPermanentniZmena: Boolean; + FIntPermanentniZmena: Boolean; + FLogins: NullableString; + FRunning: Boolean; + FAutor: string; + FDatPorizeni: TDateTime; + FZmenil: NullableString; + FDatZmeny: NullableTDateTime; + FPlatnostTPV: Boolean; + FBlokDP: Boolean; + FDocasnaPlatnost: Boolean; + procedure SetPlatnostTPV(const Value: Boolean); + procedure SetLogins(const Value: NullableString); + public + [MVCColumn('Rada')] + [MVCSwagJsonSchemaField(stString, 'Rada', 'Řada', true, false, 0, 10)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Rada: string read FRada write FRada; + + [MVCColumn('ciszmeny')] + [MVCSwagJsonSchemaField(stString, 'CisloZmeny', 'Číslo změny', true, false, 0, 15)] + property CisloZmeny: string read FCisloZmeny write FCisloZmeny; + + [MVCColumn('Navrh')] + [MVCSwagJsonSchemaField(stString, 'Navrh', 'Identifikace návrhu změny', false, true, 0, 40)] + property Navrh: NullableString read FNavrh write FNavrh; + + [MVCColumn('os_cislo')] + [MVCSwagJsonSchemaField(stInteger, 'OsCislo', 'ID číslo zodpovědného zaměstnance za změnu', false, true)] + property OsCislo: NullableInt32 read FOsCislo write FOsCislo; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true, 0, 65535)] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('Datum')] + [MVCSwagJsonSchemaField(stDateTime, 'Datum', 'Datum, od kterého změna platí', true, false)] + property Datum: TDateTime read FDatum write FDatum; + + [MVCColumn('AutorPlatnosti')] + [MVCSwagJsonSchemaField(stString, 'AutorPlatnosti', 'Autor platnosti', false, true, 0, 128)] + property AutorPlatnosti: NullableString read FAutorPlatnosti write FAutorPlatnosti; + + [MVCColumn('DatumNastaveni')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumNastaveni', 'Datum a čas zpoplatnění změny', false, true)] + property DatumNastaveni: NullableTDateTime read FDatumNastaveni write FDatumNastaveni; + + [MVCColumn('Logins')] + [MVCSwagJsonSchemaField(stString, 'Logins', 'Logins', false, true, 0, 128)] + property Logins: NullableString read FLogins write SetLogins; + property BlokDP: boolean read FBlokDP write FBlokDP; + + [MVCColumn('Platnost')] + [MVCSwagJsonSchemaField(stBoolean, 'Platnost', 'Příznak platnosti změny', true, false)] + property Platnost: boolean read FPlatnost write SetPlatnostTPV default false; + property PlatnostTPV: boolean read FPlatnostTPV write FPlatnostTPV; + + end; + + + + [MVCNameCase(ncLowerCase)] + TTPVStroj = class(THeliosObjekty) + private + FIDPrac: integer; + FPracoviste: string; + FKod: string; + FNazev: NullableString; + FBlokovano: boolean; + FIDKalendar: NullableInt32; + FAdvKPlan: Boolean; + public + [MVCColumn('Kod')] + [MVCSwagJsonSchemaField(stString, 'Kod', 'Kód stroje', true, false, 0, 10)] + property Kod: string read FKod write FKod; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název stroje', false, true, 0, 40)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Nazev: NullableString read FNazev write FNazev; + + [MVCColumn('IDPrac')] + [MVCSwagJsonSchemaField(stString, 'IDPrac', 'ID pracoviště', true, false)] + property IDPrac: integer read FIDPrac write FIDPrac; + + [MVCColumn('Blokovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Blokovano', 'Stroj je pro použití ve výrobě blokovaný', true, false)] + property Blokovano: boolean read FBlokovano write FBlokovano default false; + + [MVCColumn('IDPlanKalend')] + [MVCSwagJsonSchemaField(stInteger, 'IDKalendar', 'ID plánovacího kalendáře stroje', false, true)] + property IDKalendar: NullableInt32 read FIDKalendar write FIDKalendar; + + [MVCColumn('pracoviste')] + [MVCSwagJsonSchemaField(stString, 'Pracoviste', 'Pracoviště', true, false, 0, 10)] + property pracoviste: string read FPracoviste write FPracoviste; + + [MVCColumn('Konf_ZahrnoutDoKapacPlan')] // nazev ze SELECTu + [MVCSwagJsonSchemaField(stBoolean, 'AdvKPlan', 'Zahrnout do kapacitního plánování', true, false)] + property AdvKPlan: boolean read FAdvKPlan write FAdvKPlan default false; + end; + + + + + [MVCNameCase(ncLowerCase)] + TDataZoneTask = class(THeliosObjekty) + private + FDeviceID: NullableString; + FDZTaskID: integer; + FChybaEvidence: string; + FBarcode: string; + public + [MVCColumn('IdDataZoneTaskID')] + [MVCSwagJsonSchemaField(stInteger, 'DataZoneTaskID', 'ID tasku DataZone', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property DataZoneTaskID: integer read FDZTaskID write FDZTaskID; + + [MVCColumn('PosledniChyba')] + [MVCSwagJsonSchemaField(stInteger, 'TextChybyEvidence', 'Poslední chyba při evidenci', true, false, 0, 255)] + property TextChybyEvidence: string read FChybaEvidence write FChybaEvidence; + + [MVCColumn('DeviceID')] + [MVCSwagJsonSchemaField(stInteger, 'DeviceID', 'ID DataZone zařízení', false, true, 0, 30)] + property DeviceID: NullableString read FDeviceID write FDeviceID; + + [MVCColumn('Barcode')] + [MVCSwagJsonSchemaField(stInteger, 'Barcode', 'Barcode operace', true, false, 0, 30)] + property Barcode: string read FBarcode write FBarcode; + end; + + + + + [MVCNameCase(ncLowerCase)] + TTPVPrednastaveniOperaci = class(THeliosObjekty) + private + FTyp: integer; + FNazev: string; + FIDPracoviste: NullableInt32; + FIDStroje: NullableInt32; + FIDKooperace: NullableInt32; + FTarif: NullableInt32; + + FTBC: NullableExtended; + FTBC_T: byte; + FTBC_Obsluhy: NullableExtended; + FTBC_Obsluhy_T: byte; + FTBC_S: NullableExtended; + FTBC_N: NullableExtended; + FTBC_H: NullableExtended; + + FTEC: NullableExtended; + FTEC_T: byte; + FTEC_S: NullableExtended; + FTEC_N: NullableExtended; + FTEC_H: NullableExtended; + + FTEC_KC: Extended; + + FTAC_J: NullableExtended; + FTAC_J_T: byte; + FTAC_J_S: NullableExtended; + FTAC_J_N: NullableExtended; + FTAC_J_H: NullableExtended; + + FTAC_KC_J: Extended; + + FPoznamka: NullableString; + + FNasobekTAC: Extended; + FKoopMnozstvi: Extended; + FPocetLidi: integer; + FPocetKusu: integer; + FPocetStroju: integer; + + FIDObrazek: NullableInt32; + FZpusobZaplanovani: NullableInt16; + FPlanDavka: NullableExtended; + FMeziOperCas: NullableExtended; + FMeziOperCas_T: byte; + FMeziOperCas_S: NullableExtended; + FMeziOperCas_N: NullableExtended; + FMeziOperCas_H: NullableExtended; + Fvseobecny: boolean; + + public + constructor Create; virtual; + + [MVCColumn('Typ')] + [MVCSwagJsonSchemaField(stInteger, 'Typ', 'Typ operace (0=Režijní operace/1=Jednicová operace/2=Kooperace)', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Typ: integer read FTyp write FTyp; + + [MVCColumn('Nazev')] + [MVCSwagJsonSchemaField(stString, 'Nazev', 'Název operace', true, false, 0, 100)] + property Nazev: string read FNazev write FNazev; + + [MVCColumn('IDpracoviste')] + [MVCSwagJsonSchemaField(stInteger, 'IDpracoviste', 'ID pracoviště', false, true)] + property IDPracoviste: NullableInt32 read FIDPracoviste write FIDPracoviste; + + [MVCColumn('IDStroje')] + [MVCSwagJsonSchemaField(stInteger, 'IDStroje', 'ID stroje', false, true)] + property IDStroje: NullableInt32 read FIDStroje write FIDStroje; + + [MVCColumn('IDKooperace')] + [MVCSwagJsonSchemaField(stInteger, 'IDKooperace', 'ID kooperace', false, true)] + property IDKooperace: NullableInt32 read FIDKooperace write FIDKooperace; + + [MVCColumn('Tarif')] + [MVCSwagJsonSchemaField(stInteger, 'tarif', 'ID tarifu', false, true)] + property Tarif: NullableInt32 read FTarif write FTarif; + + [MVCColumn('TBC')] + [MVCSwagJsonSchemaField(stNumber, 'TBC', 'Přípravný čas strojní', true, false)] + property TBC: NullableExtended read FTBC write FTBC; + + [MVCColumn('TBC_T')] + [MVCSwagJsonSchemaField(stInteger, 'TBC_T', 'Typ přípravného času (0=sec/1=min/2=hod)', true, false)] + property TBC_T: byte read FTBC_T write FTBC_T; + + [MVCColumn('TBC_S')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_S', 'Přípravný čas (sec)', false, true)] + property TBC_S: NullableExtended read FTBC_S write FTBC_S; + + [MVCColumn('TBC_N')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_N', 'Přípravný čas (min)', false, true)] + property TBC_N: NullableExtended read FTBC_N write FTBC_N; + + [MVCColumn('TBC_H')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_H', 'Přípravný čas (hod)', false, true)] + property TBC_H: NullableExtended read FTBC_H write FTBC_H; + + [MVCColumn('TBC_Obsluhy')] + [MVCSwagJsonSchemaField(stNumber, 'TBC_Obsluhy', 'Přípravný čas obsluhy', true, false)] + property TBC_Obsluhy: NullableExtended read FTBC_Obsluhy write FTBC_Obsluhy; + + [MVCColumn('TBC_Obsluhy_T')] + [MVCSwagJsonSchemaField(stInteger, 'TBC_Obsluhy_T', 'Typ přípravného času obsluhy (0=sec/1=min/2=hod)', true, false)] + property TBC_Obsluhy_T: byte read FTBC_Obsluhy_T write FTBC_Obsluhy_T; + + [MVCColumn('TEC')] + [MVCSwagJsonSchemaField(stNumber, 'TEC', 'Ukončovací čas strojní', true, false)] + property TEC: NullableExtended read FTEC write FTEC; + + [MVCColumn('TEC_T')] + [MVCSwagJsonSchemaField(stInteger, 'TEC_T', 'Typ ukončovacího času (0=sec/1=min/2=hod)', true, false)] + property TEC_T: byte read FTEC_T write FTEC_T; + + [MVCColumn('TEC_S')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_S', 'Ukončovací čas (sec)', false, true)] + property TEC_S: NullableExtended read FTEC_S write FTEC_S; + + [MVCColumn('TEC_N')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_N', 'Ukončovací čas (min)', false, true)] + property TEC_N: NullableExtended read FTEC_N write FTEC_N; + + [MVCColumn('TEC_H')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_H', 'Ukončovací čas (hod)', false, true)] + property TEC_H: NullableExtended read FTEC_H write FTEC_H; + + [MVCColumn('TEC_KC')] + [MVCSwagJsonSchemaField(stNumber, 'TEC_KC', 'Ukončovací mzda', true, false)] + property TEC_KC: Extended read FTEC_KC write FTEC_KC; + + [MVCColumn('NasobekTAC')] + [MVCSwagJsonSchemaField(stNumber, 'NasobekTAC', 'Násobek TAC', true, false)] + property NasobekTAC: Extended read FNasobekTAC write FNasobekTAC; + + [MVCColumn('TAC_J')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J', 'Jednicový čas', true, false)] + property TAC_J: NullableExtended read FTAC_J write FTAC_J; + + [MVCColumn('TAC_J_T')] + [MVCSwagJsonSchemaField(stInteger, 'TAC_J_T', 'Typ jednicového času (0=sec/1=min/2=hod)', true, false)] + property TAC_J_T: byte read FTAC_J_T write FTAC_J_T; + + [MVCColumn('TAC_J_S')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J_S', 'Jednicový čas (sec)', false, true)] + property TAC_J_S: NullableExtended read FTAC_J_S write FTAC_J_S; + + [MVCColumn('TAC_J_N')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J_N', 'Jednicový čas (min)', false, true)] + property TAC_J_N: NullableExtended read FTAC_J_N write FTAC_J_N; + + [MVCColumn('TAC_J_H')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_J_H', 'Jednicový čas (hod)', false, true)] + property TAC_J_H: NullableExtended read FTAC_J_H write FTAC_J_H; + + [MVCColumn('TAC_KC_J')] + [MVCSwagJsonSchemaField(stNumber, 'TAC_KC_J', 'Jednicová mzda (jednotková)', true, false)] + property TAC_KC_J: Extended read FTAC_KC_J write FTAC_KC_J; + + [MVCColumn('KoopMnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'KoopMnozstvi', 'Kooperační množství', true, false)] + property KoopMnozstvi: Extended read FKoopMnozstvi write FKoopMnozstvi; + + [MVCColumn('PocetLidi')] + [MVCSwagJsonSchemaField(stInteger, 'PocetLidi', 'Počet lidí', true, false)] + property PocetLidi: integer read FPocetLidi write FPocetLidi; + + [MVCColumn('PocetKusu')] + [MVCSwagJsonSchemaField(stInteger, 'PocetKusu', 'Počet kusů', true, false)] + property PocetKusu: integer read FPocetKusu write FPocetKusu; + + [MVCColumn('PocetStroju')] + [MVCSwagJsonSchemaField(stInteger, 'PocetStroju', 'Počet strojů', true, false)] + property PocetStroju: integer read FPocetStroju write FPocetStroju; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Potvrzený termín dodání', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + end; + + + [MVCNameCase(ncLowerCase)] + TKooperacniObjednavkaPolozka = class(THeliosObjekty) + private + FIDObjednavky: integer; + FPolozka: integer; + FIDPrikaz: integer; + FDokladPrPostup: integer; + FAltPrPostup: char; + FIDkooperace: integer; + FSplneno: boolean; + FUzavreno: Boolean; + FDavkaTPV: Extended; + FKoopMnozstvi: Extended; + FCelkKoopMnozstvi: NullableExtended; + FKusy: extended; + FKusyPrevedene: Extended; + FKusyVKoop: Extended; + FCena: Extended; + FPocetPrepravDavek: Extended; + FPozadTerDod: NullableTDateTime; + FPotvrzTerDod: NullableTDateTime; + FPoznamka: NullableString; + FDatPorizeni: TDatetime; + FAutor: String; + FDatZmeny: NullableTDateTime; + FZmenil: NullableString; + FBarCode: NullableString; + public + constructor Create; virtual; + + [MVCColumn('IDObjednavky')] + [MVCSwagJsonSchemaField(stInteger, 'IDObjednavky', 'Vazba na hlavičku Kooperační objednávky', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDObjednavky: integer read FIDObjednavky write FIDObjednavky; + + [MVCColumn('Polozka')] + [MVCSwagJsonSchemaField(stInteger, 'Polozka', 'Pořadové číslo', true, false)] + property Polozka: integer read FPolozka write FPolozka; + + [MVCColumn('IDPrikaz')] + [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'Vazba na výrobní příkaz', true, false)] + property IDPrikaz: integer read FIDPrikaz write FIDPrikaz; + + [MVCColumn('DokladPrPostup')] + [MVCSwagJsonSchemaField(stInteger, 'DokladPrPostup', 'Doklad PrPostupu', true, false)] + property DokladPrPostup: integer read FDokladPrPostup write FDokladPrPostup; + + [MVCColumn('AltPrPostup')] + [MVCSwagJsonSchemaField(stChar, 'AltPrPostup', 'Alternativa A..Z', true, false)] + property AltPrPostup: char read FAltPrPostup write FAltPrPostup; + + [MVCColumn('IDkooperace')] + [MVCSwagJsonSchemaField(stInteger, 'IDkooperace', 'Vazba na výrobní příkaz', true, false)] + property IDkooperace: integer read FIDkooperace write FIDkooperace; + + [MVCColumn('Splneno')] + [MVCSwagJsonSchemaField(stBoolean, 'Splneno', 'Splněno', true, false)] + property Splneno: boolean read FSplneno write FSplneno; + + [MVCColumn('Uzavreno')] + [MVCSwagJsonSchemaField(stBoolean, 'Uzavreno', 'Uzavřeno', true, false)] + property Uzavreno: boolean read FUzavreno write FUzavreno; + + [MVCColumn('KoopMnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'KoopMnozstvi', 'Kooperační množství', true, false)] + property KoopMnozstvi: Extended read FKoopMnozstvi write FKoopMnozstvi; + + [MVCColumn('DavkaTPV')] + [MVCSwagJsonSchemaField(stNumber, 'DavkaTPV', 'Konstrukční a technologická dávka', true, false)] + property DavkaTPV: Extended read FDavkaTPV write FDavkaTPV; + + [MVCColumn('CelkKoopMnozstvi')] + [MVCSwagJsonSchemaField(stNumber, 'CelkKoopMnozstvi', 'Celkové kooperační množství', false, true)] + property CelkKoopMnozstvi: NullableExtended read FCelkKoopMnozstvi write FCelkKoopMnozstvi; + + [MVCColumn('Kusy')] + [MVCSwagJsonSchemaField(stNumber, 'Kusy', 'Kusy', true, false)] + property Kusy: Extended read FKusy write FKusy; + + [MVCColumn('KusyPrevedene')] + [MVCSwagJsonSchemaField(stNumber, 'KusyPrevedene', 'Kusy převedené', true, false)] + property KusyPrevedene: Extended read FKusyPrevedene write FKusyPrevedene; + + [MVCColumn('KusyVKoop')] + [MVCSwagJsonSchemaField(stNumber, 'KusyVKoop', 'Kusy v kooperaci (tj. zůstatek ještě nepřijatý od kooperanta)', true, false)] + property KusyVKoop: Extended read FKusyVKoop write FKusyVKoop; + + [MVCColumn('Cena')] + [MVCSwagJsonSchemaField(stNumber, 'Cena', 'Cena', true, false)] + property Cena: Extended read FCena write FCena; + + [MVCColumn('PocetPrepravDavek')] + [MVCSwagJsonSchemaField(stNumber, 'PocetPrepravDavek', 'Počet přepravních dávek', true, false)] + property PocetPrepravDavek: Extended read FPocetPrepravDavek write FPocetPrepravDavek; + + [MVCColumn('PozadTerDod')] + [MVCSwagJsonSchemaField(stDateTime, 'PozadTerDod', 'Požadovaný termín dodání', false, true)] + property PozadTerDod: NullableTDateTime read FPozadTerDod write FPozadTerDod; + + [MVCColumn('PotvrzTerDod')] + [MVCSwagJsonSchemaField(stDateTime, 'PotvrzTerDod', 'Potvrzený termín dodání', false, true)] + property PotvrzTerDod: NullableTDateTime read FPotvrzTerDod write FPotvrzTerDod; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Potvrzený termín dodání', false, true, 0, SizeOf(String))] + property Poznamka: NullableString read FPoznamka write FPoznamka; + + [MVCColumn('BarCode')] + [MVCSwagJsonSchemaField(stString, 'BarCode', 'Čárový kód ("B1" + id položky + "B")', true, false, 0, 15)] + property BarCode: NullableString read FBarCode write FBarCode; + end; + + + + + [MVCNameCase(ncLowerCase)] + TKooperacniObjednavka = class(THeliosObjekty) + private + FRealizovano: boolean; + FUzavreno: boolean; + FSplneno: boolean; + FPolSplneny: boolean; + FRada: string; + FCislo: integer; + FIDOrganizace: NullableInt32; + FPozadTermDod: NullableTDateTime; + FPotvrzTermDod: NullableTDateTime; + FObjednavka: NullableString; + FFormaUhrady: NullableString; + FFormaDopravy: NullableString; + FCenaPolozek: Extended; + FCenaPolozekHM: Extended; + FCenaPrepravy: Extended; + FCenaPrepravyHM: Extended; + FMena: string; + FKurz: Extended; + FJednotkaMeny: integer; + FVstupniCena: integer; + FDatumKurzu: NullableTDateTime; + FPolozkyKoopObj: TObjectList; + procedure SetPolozkyKoopObj(const Value: TObjectList); + public + constructor Create; virtual; + destructor Destroy; override; + + [MVCColumn('Realizovano')] + [MVCSwagJsonSchemaField(stBoolean, 'Realizovano', 'Realizováno', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property Realizovano: boolean read FRealizovano write FRealizovano; + + [MVCColumn('Uzavreno')] + [MVCSwagJsonSchemaField(stBoolean, 'Uzavreno', 'Uzavřeno', true, false)] + property Uzavreno: boolean read FUzavreno write FUzavreno; + + [MVCColumn('Splneno')] + [MVCSwagJsonSchemaField(stBoolean, 'Splneno', 'Splněno', true, false)] + property Splneno: boolean read FSplneno write FSplneno; + + [MVCColumn('PolSplneny')] + [MVCSwagJsonSchemaField(stBoolean, 'PolSplneny', 'Položky splněny', true, false)] + property PolSplneny: boolean read FPolSplneny write FPolSplneny; + + [MVCColumn('Rada')] + [MVCSwagJsonSchemaField(stString, 'Rada', 'Řada kooperační objedávky', true, false)] + property Rada: string read FRada write FRada; + + [MVCColumn('Cislo')] + [MVCSwagJsonSchemaField(stInteger, 'Cislo', 'Číslo kooperační objedávky', true, false)] + property Cislo: integer read FCislo write FCislo; + + [MVCColumn('IDOrganizace')] + [MVCSwagJsonSchemaField(stInteger, 'IDOrganizace', 'ID organizace', false, true)] + property IDOrganizace: NullableInt32 read FIDOrganizace write FIDOrganizace; + + [MVCColumn('PozadTermDod')] + [MVCSwagJsonSchemaField(stDateTime, 'PozadTermDod', 'Požadovaný termín dodání', false, true)] + property PozadTermDod: NullableTDateTime read FPozadTermDod write FPozadTermDod; + + [MVCColumn('PotvrzTermDod')] + [MVCSwagJsonSchemaField(stDateTime, 'PotvrzTermDod', 'Potvrzený termín dodání', false, true)] + property PotvrzTermDod: NullableTDateTime read FPotvrzTermDod write FPotvrzTermDod; + + [MVCColumn('Objednavka')] + [MVCSwagJsonSchemaField(stString, 'Objednavka', 'Objednávka', false, true, 0, 20)] + property Objednavka: NullableString read FObjednavka write FObjednavka; + + [MVCColumn('FormaUhrady')] + [MVCSwagJsonSchemaField(stString, 'FormaUhrady', 'Forma úhrady', false, true, 0, 30)] + property FormaUhrady: NullableString read FFormaUhrady write FFormaUhrady; + + [MVCColumn('FormaDopravy')] + [MVCSwagJsonSchemaField(stString, 'FormaDopravy', 'Forma dopravy', false, true, 0, 30)] + property FormaDopravy: NullableString read FFormaDopravy write FFormaDopravy; + + [MVCColumn('CenaPolozek')] + [MVCSwagJsonSchemaField(stNumber, 'CenaPolozek', 'Cena položek', true, false)] + property CenaPolozek: Extended read FCenaPolozek write FCenaPolozek; + + [MVCColumn('CenaPolozekHM')] + [MVCSwagJsonSchemaField(stNumber, 'CenaPolozekHM', 'Cena položek (v hlavní měně)', true, false)] + property CenaPolozekHM: Extended read FCenaPolozekHM write FCenaPolozekHM; + + [MVCColumn('CenaPrepravy')] + [MVCSwagJsonSchemaField(stNumber, 'CenaPrepravy', 'Cena přepravy', true, false)] + property CenaPrepravy: Extended read FCenaPrepravy write FCenaPrepravy; + + [MVCColumn('CenaPrepravyHM')] + [MVCSwagJsonSchemaField(stNumber, 'CenaPrepravyHM', 'Cena přepravy (v hlavní měně)', true, false)] + property CenaPrepravyHM: Extended read FCenaPrepravyHM write FCenaPrepravyHM; + + [MVCColumn('Mena')] + [MVCSwagJsonSchemaField(stString, 'Mena', 'Měna', false, true, 0, 3)] + property Mena: string read FMena write FMena; + + [MVCColumn('Kurz')] + [MVCSwagJsonSchemaField(stNumber, 'Kurz', 'Kurz', true, false)] + property Kurz: Extended read FKurz write FKurz; + + [MVCColumn('DatumKurzu')] + [MVCSwagJsonSchemaField(stDateTime, 'DatumKurzu', 'Datum kurzu', false, true)] + property DatumKurzu: NullableTDateTime read FDatumKurzu write FDatumKurzu; + + [MVCColumn('JednotkaMeny')] + [MVCSwagJsonSchemaField(stInteger, 'JednotkaMeny', 'Jednotka měny', true, false)] + property JednotkaMeny: integer read FJednotkaMeny write FJednotkaMeny; + + [MVCColumn('VstupniCena')] + [MVCSwagJsonSchemaField(stInteger, 'VstupniCena', 'Druh vstupní cenu', true, false)] + property VstupniCena: integer read FVstupniCena write FVstupniCena; + + [MVCListOf(TKooperacniObjednavkaPolozka)] + property Polozky: TObjectList read FPolozkyKoopObj write SetPolozkyKoopObj; + end; + + + + + + [MVCNameCase(ncLowerCase)] + TVyrobniDokumentace = class(THeliosObjekty) + private + FID1: integer; + FVerze: integer; + FArchiv: boolean; + FZdroj: integer; + FZmenaOd: NullableInt32; + FZmenaDo: NullableInt32; + FIndexZmeny: string; + FPopis: string; + FOperace: NullableString; + FOperaceTrim: NullableString; + FJmenoSouboru: string; + FDokument: NullableString; + FTypDokumentu: NullableString; + FPoznamka: NullableString; + FDatPorizeni: TDateTime; + FAutor: string; + FDatZmeny: NullableTDateTime; + FZmenil: NullableString; + procedure SetOperace(const Value: NullableString); + public + [MVCColumn('ID1')] + [MVCSwagJsonSchemaField(stInteger, 'ID1', 'ID1', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property ID1: integer read FID1 write FID1 default 0; + + [MVCColumn('Verze')] + [MVCSwagJsonSchemaField(stInteger, 'Verze', 'Verze', true, false)] + property Verze: integer read FVerze write FVerze; + + [MVCColumn('Archiv')] + [MVCSwagJsonSchemaField(stBoolean, 'Archiv', 'Archivní záznam', true, false)] + property Archiv: boolean read FArchiv write FArchiv default false; + + [MVCColumn('Zdroj')] + [MVCSwagJsonSchemaField(stInteger, 'Zdroj', 'Zdroj (1=standardní TPV, 2=zakázková modifikace, 3=výrobní příkaz)', true, false)] + property Zdroj: integer read FZdroj write FZdroj; + + [MVCColumn('ZmenaOd')] + [MVCSwagJsonSchemaField(stInteger, 'ZmenaOd', 'ID čísleníku změn', true, false)] + property ZmenaOd: NullableInt32 read FZmenaOd write FZmenaOd; + + [MVCColumn('ZmenaDo')] + [MVCSwagJsonSchemaField(stInteger, 'ZmenaDo', 'ID čísleníku změn', true, false)] + property ZmenaDo: NullableInt32 read FZmenaDo write FZmenaDo; + + [MVCColumn('IndexZmeny')] + [MVCSwagJsonSchemaField(stString, 'IndexZmeny', 'Index změny', true, false, 0, 30)] + property IndexZmeny: string read FIndexZmeny write FIndexZmeny; + + [MVCColumn('Operace')] + [MVCSwagJsonSchemaField(stString, 'Operace', 'Operace', false, true, 0, 4)] + property Operace: NullableString read FOperace write SetOperace; + + [MVCColumn('OperaceTrim')] + property OperaceTrim: NullableString read FOperaceTrim; + + [MVCColumn('Popis')] + [MVCSwagJsonSchemaField(stString, 'Popis', 'Popis', true, false, 0, 200)] + property Popis: string read FPopis write FPopis; + + [MVCColumn('JmenoSouboru')] + [MVCSwagJsonSchemaField(stString, 'JmenoSouboru', 'Jméno souboru', true, false, 0, 255)] + property JmenoSouboru: string read FJmenoSouboru write FJmenoSouboru; + + [MVCColumn('Dokument')] + [MVCSwagJsonSchemaField(stString, 'Dokument', 'Obsah (dokumentu)', false, true)] + property Dokument: NullableString read FDokument write FDokument; + + [MVCColumn('TypDokumentu')] + [MVCSwagJsonSchemaField(stString, 'TypDokumentu', 'Typ dokumentu (přípona souboru)', false, true, 0, 20)] + property TypDokumentu: NullableString read FTypDokumentu write FTypDokumentu; + + [MVCColumn('Poznamka')] + [MVCSwagJsonSchemaField(stString, 'Poznamka', 'Poznámka', false, true)] + property Poznamka: NullableString read FPoznamka write FPoznamka; + end; + + + +implementation + +uses + System.SysUtils, System.RegularExpressions; + + + + + + +{ TEvidRozpracOperaceOperace } + + procedure TEvidRozpracOperaceOperace.OnAfterLoad; + begin + FJeSdruzenaOper:= FIDSdruzVyrOperaceR.IsNull; + end; + + + + + +{ TEvidRozpracOperace } + + constructor TEvidRozpracOperace.Create; + begin + inherited; + FOperace:= TObjectList.Create; + end; + + + destructor TEvidRozpracOperace.Destroy; + begin + inherited; + end; + + + procedure TEvidRozpracOperace.OnAfterLoad; + begin + + if not(FDatumUzavreni.IsNull) then + FStav:= -10 + else + if not(FCasUkonceni.IsNull) and (FCasUkonceni.Value); + begin + if (Value<>FOperace) then + begin + FOperace.Free; + FOperace:= Value; + end; + end; + + + + + +{ TVyrCisPrikaz } + constructor TVyrCisPrikaz.Create; + begin + inherited; + FMnozstvi:= 0; + FZmetky:= 0; + FOdvedeno:= 0; + end; + + + destructor TVyrCisPrikaz.Destroy; + begin + inherited; + end; + + + procedure TVyrCisPrikaz.OnAfterLoad; + begin + end; + + + + + +{ TVyrobniPrikaz } + + procedure TVyrobniPrikaz.SetVyrobniOperace (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FVyrobniOperace) then + begin + FVyrobniOperace.Free; + FVyrobniOperace:= Value; + end; + end; + + + procedure TVyrobniPrikaz.SetMaterialPrikazu (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FMaterial) then + begin + FMaterial.Free; + FMaterial:= Value; + end; + end; + + procedure TVyrobniPrikaz.SetVyrCisPrikazu (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FVyrobniCisla) then + begin + FVyrobniCisla.Free; + FVyrobniCisla:= Value; + end; + end; + + procedure TVyrobniPrikaz.SetNadrizenePrikazy (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FNadrizenePrikazy) then + begin + FNadrizenePrikazy.Free; + FNadrizenePrikazy:= Value; + end; + end; + + procedure TVyrobniPrikaz.SetPodrizenePrikazy (const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FPodrizenePrikazy) then + begin + FPodrizenePrikazy.Free; + FPodrizenePrikazy:= Value; + end; + end; + + constructor TVyrobniPrikaz.Create; + begin + inherited; + FVyrobniOperace:= TObjectList.Create; + FMaterial:= TObjectList.Create; + FVyrobniCisla:= TObjectList.Create; + FNadrizenePrikazy:= TObjectList.Create; + FPodrizenePrikazy:= TObjectList.Create; + end; + + + destructor TVyrobniPrikaz.Destroy; + begin + if (FNadrizenePrikazy<>nil) then + FreeAndNil (FNadrizenePrikazy); + if (FPodrizenePrikazy<>nil) then + FreeAndNil (FPodrizenePrikazy); + + inherited; + end; + + +{ + procedure TVyrobniPrikaz.NastavString(const Index: Integer; const Value: string); + begin + case Index of + 1: FRada:= Value; + end; + end; + + procedure TVyrobniPrikaz.NastavInt(const Index: Integer; const Value: integer); + begin + case Index of + 1: FCislo:= Value; + 2: FIDPrikazVyssi:= Value; + 3: FIDPrikazRidici:= Value; + 4: FIDTabKmen:= Value; + 5: FIDZakazka:= Value; + end; + end; + + procedure TVyrobniPrikaz.NastavSingle(const Index: integer; const Value: Single); + begin + case Index of + 1: FKsZadane:= Value; + 2: FKsCiste:= Value; + 3: FKsZive:= Value; + end; + end; + + procedure TVyrobniPrikaz.NastavByte(const Index: integer; const Value: Byte); + begin + case Index of + 1: FStavPrikazu:= Value; + end; + end; +} + + + + + + + + + +{ TMaterialPrikazu } + constructor TMaterialPrikazu.Create; + begin + inherited; + Pozice:= ''; + FixniMnozstvi:= 0; + FMnozstvi:= 1; + FProcZtrat:= 0; + FmnozstviSeZtratou:= 1; + FMnozstviZadane:= 1; + FPrirez:= 1; + FMnoz_nepotrebne:= 0; + FMnoz_skut_realizovane:= 0; + FMnoz_odv:= 0; + FRefMnoz:= 0; + FVydanoRefMnoz:= 0; + FOperace:= ' '; + end; + + + + + function TMaterialPrikazu.ReadPropSingle (index: TMaterialPrikazu_Cols): Extended; + begin + case index of + clMnozNevydane: + begin + if ((FVydanoRefMnoz-FRefMnoz)>-0.0001) then + result:= 0 + else + result:= FMnozstviZadane - FVydanoRefMnoz * FMnozstviZadane / FRefMnoz; + end; + end; + end; + + + + + procedure TMaterialPrikazu.WritePropReadOnlySingle (index: TMaterialPrikazu_Cols; Value: Extended); + begin + case index of + clMnozstviOdvedene: FMnoz_odv:= FMnoz_odv; + clMnozNevydane: FMnozstviNevydane:= FMnozstviNevydane; + end; + end; + + + + + + + + +{ TVyrobniOperace } + + procedure TVyrobniOperace.OnAfterLoad; + begin + Self.FinfoKusy_zad:= Self.FKusy_zad; + Self.FKusy_zive:= 0; + + Self.FKusy_zad:= 0; + Self.FKusy_odv:= 0; + Self.FKusy_zmet:= 0; + Self.FKusy_zmet_oprIO:= 0; + Self.FKusy_zmet_neopr:= 0; + end; + + + procedure TVyrobniOperace.OnAfterInsert; + begin + Self.FinfoKusy_zad:= Self.FKusy_zad; + Self.FKusy_zive:= 0; + end; + + + { + procedure TVyrobniOperace.NastavString(const Index: Integer; const Value: string); + begin + case Index of + 1: FOperace:= Value; + 2: FNazev:= Value; + end; + end; + + + procedure TVyrobniOperace.NastavInt(const Index: Integer; const Value: integer); + begin + case Index of + 1: FIDPrikaz:= Value; + end; + end; + + procedure TVyrobniOperace.NastavSingle(const Index: integer; const Value: Single); + begin + case Index of + 1: FKusy_zad:= Value; + end; + end; + + procedure TVyrobniOperace.NastavByte(const Index: integer; const Value: Byte); + begin + case Index of + 1: FTyp:= Value; + end; + end; +} + + + + + + + +{ TKooperacniObjednavka } + procedure TKooperacniObjednavka.SetPolozkyKoopObj(const Value: System.Generics.Collections.TObjectList); + begin + if (Value<>FPolozkyKoopObj) then + begin + FPolozkyKoopObj.Free; + FPolozkyKoopObj:= Value; + end; + end; + + + + constructor TKooperacniObjednavka.Create; + begin + inherited; + FCenaPolozek:= 0; + FCenaPolozekHM:= 0; + FCenaPrepravy:= 0; + FCenaPrepravyHM:= 0; + FKurz:= 1; + FJednotkaMeny:= 1; + FVstupniCena:= 6; + FRealizovano:= false; + FPolozkyKoopObj:= TObjectList.Create; + end; + + + + destructor TKooperacniObjednavka.Destroy; + begin + inherited; + end; + + + + + + + +{ TKooperacniObjednavkaPolozka } + constructor TKooperacniObjednavkaPolozka.Create; + begin + inherited; + FKoopMnozstvi:= 0; + FDavkaTPV:= 1; + FKoopMnozstvi:= 0; + FKusy:= 0; + FKusyPrevedene:= 0; + FCena:= 0; + FPocetPrepravDavek:= 0; + end; + + + + +{ TVyrobniDokumentace } + procedure TVyrobniDokumentace.SetOperace(const Value: NullableString); + begin + Self.FOperace:= Value; + Self.FOperaceTrim:= Trim(Self.FOperace); + end; + + + + + +{ TTPVCiselnikZmen } + procedure TTPVCiselnikZmen.SetPlatnostTPV(const Value: Boolean); + begin + Self.FPlatnost:= Value; + Self.FPlatnostTPV:= Value; + end; + + + procedure TTPVCiselnikZmen.SetLogins(const Value: NullableString); + begin + Self.FLogins:= Trim(Value); + Self.FBlokDP:= (Self.FLogins=''); + end; + + + + + +{ TTPVPrednastaveniOperaci } + constructor TTPVPrednastaveniOperaci.Create; + begin + inherited; + FKoopMnozstvi:= 0; + FNasobekTAC:= 1; + FPocetLidi:= 1; + FPocetKusu:= 1; + FPocetStroju:= 1; + + FTBC:= 0; + FTBC_T:= 1; + + FTBC_Obsluhy:= 0; + FTBC_Obsluhy_T:= 1; + + FTEC:= 0; + FTEC_T:= 1; + FTEC_S:= 0; + FTEC_N:= 0; + FTEC_H:= 0; + + FTAC_J:= 0; + FTAC_J_T:= 1; + FTAC_J_S:= 0; + FTAC_J_N:= 0; + FTAC_J_H:= 0; + + FTAC_KC_J:= 0; + + FMeziOperCas:= 0; + FMeziOperCas_T:= 1; + + end; + + + + + + + +{ TTPVOperaceDilce } + + constructor TTPVOperaceDilce.Create; + begin + FTyp:= 1; + end; + + + + +{ TVyrobaNadrizenePrikazy } + constructor TVyrobaNadrizenePrikazy.Create; + begin + FKryteMnozstvi:= 0; + end; + + +end. diff --git a/uSvc_Base.pas b/uSvc_Base.pas new file mode 100644 index 0000000..6e6a3f9 --- /dev/null +++ b/uSvc_Base.pas @@ -0,0 +1,847 @@ +ďťżunit uSvc_Base; + +interface + +uses + System.Generics.Collections, + System.SysUtils, + WinApi.ActiveX, + JsonDataObjects, + uCommons, + uDataMod, + uHeoObj_Base; + + +const +{$I globalConsts.inc} + tblPrijataJsonData = '[dbo].[_hdc_ph_PrijataJsonData]'; + +type + +// Typ funkce pro kopĂ­rovĂĄnĂ­ jednoho objektu + TCopyFunction = reference to function(const Source: T): T; + + TServiceBase = class abstract + strict protected + FDM: TdatMod; + public + constructor Create (AdmMain: TdatMod); virtual; + destructor Destroy; virtual; + function GetTabCols (schema: string='dbo'; tabName: string=''; tabAlias: string=''; vratPocitane: Boolean=true; exceptCols: string=''; + limitColCount: Integer=0; inclVarbinMax: boolean=false): string; + function GetTabColsArray (schema: string='dbo'; tabName: string = ''; tabAlias: string=''; vratPocitane: Boolean=true): TArray; + function TabColsArrayRemove (inArray: TArray; const delColName: string): boolean; + function GetTabExtCols (schema: string='dbo'; tabName: string=''; tabAlias: string=''; vratPocitane: Boolean=true): string; + + function sanitizeSQLString (s: string): string; + procedure DeepCopyList(SourceList, DestList: TObjectList; CopyFunc: TCopyFunction); + function SQLTableExists (schema: string=''; tabName: string=''): boolean; + function SQLColumnExists (schema: string=''; tabName: string=''; colName: string=''): boolean; + function SQLGeneralTest (sqlText: string): boolean; + function NewUUID32: string; + + procedure Commit; + procedure Rollback; + procedure StartTransaction; + end; + + TObecnyService = class(TServiceBase) + public + function DoTesty: TJSONObject; + procedure ZapisJsonDoHeliosu (jsonData: string; var respString: string); + procedure ImportTaskuDZ; virtual; + end; + + + +var + verText, verText2: string; + verMoje: Int64; + + +implementation + +uses + System.StrUtils, + System.Classes, + System.RegularExpressions, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + FireDAC.Stan.Consts, + System.JSON.Builders, + System.JSON.Writers, + System.JSON.Types, + Winapi.Windows, + helTabsBIDs; + + + + + + function GetFileVersion2 (sFileName:string): string; + var VerInfoSize: DWORD; + VerInfo: Pointer; + VerValueSize: DWORD; + VerValue: PVSFixedFileInfo; + Dummy: DWORD; + begin + VerInfoSize := GetFileVersionInfoSize (PChar(sFileName), Dummy); + GetMem(VerInfo, VerInfoSize); + GetFileVersionInfo (PChar(sFileName), 0, VerInfoSize, VerInfo); + VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); + with VerValue^ do + begin + Result := IntToStr(dwFileVersionMS shr 16); + Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF); + Result := Result + '.' + IntToStr(dwFileVersionLS shr 16); + Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF); + end; + FreeMem(VerInfo, VerInfoSize); + end; + + + + + +{ TServiceBase } + procedure TServiceBase.Commit; + begin +// FDM.sqlConn.Commit; + end; + + + + destructor TServiceBase.Destroy; + begin + if (FDM<>nil) then + FreeAndNil (FDM); + inherited; + end; + + + + constructor TServiceBase.Create (AdmMain: TdatMod); +// var s: string; + begin + inherited Create; + FDM:= AdmMain; +{ + + with FDM do + try + sqlConn.Params.Clear; + sqlConn.Params.Add(S_FD_ConnParam_Common_DriverID + '=MSSQL'); + sqlConn.Params.Add(S_FD_ConnParam_Common_Server + '=' + datMod.dbServer); + sqlConn.Params.Add(S_FD_ConnParam_Common_Port + '=' + datMod.dbPort.ToString); + sqlConn.Params.Add(S_FD_ConnParam_Common_Database + '=' + datMod.dbName); + sqlConn.Params.Add(S_FD_ConnParam_Common_UserName + '=' + datMod.dbUser); + sqlConn.Params.Add(S_FD_ConnParam_Common_Password + '=' + datMod.dbPwd); + sqlConn.Params.Add(S_FD_ConnParam_Common_OSAuthent + '=No'); + sqlConn.Params.Add(S_FD_ConnParam_Common_MetaDefSchema + '=dbo'); + sqlConn.Params.Add(S_FD_ConnParam_Common_ApplicationName + '=hdcAPIsvc'); +// sqlConn.Open; + except on E:Exception do + end; +} + +// s:= FDM.sqlConn.Params.DelimitedText; + end; + + + + + function TServiceBase.NewUUID32: string; + var GUID: TGUID; + begin + CoCreateGuid(GUID); + SetLength(Result, 32); + StrLFmt(PChar(Result), 32,'%.8x%.4x%.4x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x', + [Guid.D1, Guid.D2, Guid.D3, Guid.D4[0], Guid.D4[1], Guid.D4[2], Guid.D4[3], + Guid.D4[4], Guid.D4[5], Guid.D4[6], Guid.D4[7]]); + end; + + + + + procedure TServiceBase.DeepCopyList(SourceList, DestList: TObjectList; CopyFunc: TCopyFunction); + var i: Integer; + begin + for i := 0 to SourceList.Count - 1 do + begin +// Pro kaĹždĂ˝ objekt v seznamu zavolĂĄme funkci, kterĂĄ vrĂĄtĂ­ jeho kopii + DestList.Add(CopyFunc(SourceList[i])); + end; + end; + + + + function TServiceBase.sanitizeSQLString (s: string): string; + begin + result:= s.Replace(' ', '').Replace(';', '').Replace('--', '').Replace(' OR', '').Trim; + end; + + + + + function TServiceBase.SQLGeneralTest (sqlText: string): Boolean; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= false; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.Connection:= sqlConnX; + lQry.Open(sqlText); + if (lQry.RecordCount>0) then + result:= true; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TServiceBase.SQLColumnExists (schema: string=''; tabName: string=''; colName: string=''): boolean; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= false; + + if (colName='') or (schema.Contains('.')) then + begin + colName:= tabName; + tabName:= schema; + schema:= ''; + end; + + tabName:= tabName.Trim; + if (ContainsText(tabName, '[dbo].')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('[dbo].', ''); + end; + if (ContainsText(tabName, 'dbo.')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('dbo.', ''); + end; + if (schema='') then + schema:= 'dbo'; + schema:= schema.Replace('[', '').Replace(']', ''); + tabName:= tabName.Replace('[', '').Replace(']', ''); + + lSQL:= 'SELECT 1 FROM (SELECT 1 AS A) X WHERE COL_LENGTH(N' + (schema + '.' + tabName).QuotedString + ', N' + colName.QuotedString + ') IS NOT NULL'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + result:= true; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TServiceBase.SQLTableExists (schema: string=''; tabName: string=''): boolean; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= false; + tabName:= tabName.Trim; + if (ContainsText(tabName, '[dbo].')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('[dbo].', ''); + end; + if (ContainsText(tabName, 'dbo.')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('dbo.', ''); + end; + if (schema='') then + schema:= 'dbo'; + schema:= schema.Replace('[', '').Replace(']', ''); + tabName:= tabName.Replace('[', '').Replace(']', ''); + + lSQL:= 'SELECT t.[name] FROM sys.tables t INNER JOIN sys.schemas s ON (s.schema_id=t.schema_id) WHERE s.name=N' + schema.QuotedString; + lSQL:= lSQL + ' AND t.[name]=N' + tabName.QuotedString; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + result:= true; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TServiceBase.TabColsArrayRemove (inArray: TArray; const delColName: string): boolean; + var i: integer; + begin + result:= false; + for i:=0 to Length(inArray) do + if (inArray[i]=delColName) then + begin + Delete(inArray, i, 1); + result:= true; + Break; + end; + end; + + + + + function TServiceBase.GetTabColsArray (schema: string='dbo'; tabName: string = ''; tabAlias: string=''; vratPocitane: Boolean=true): TArray; + var lSQL, cols: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + sqlVer: smallint; + a: TArray; + begin + SetLength(a, 0); + cols:= ''; + + tabName:= tabName.Trim; + if (ContainsText(tabName, '[dbo].')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('[dbo].', ''); + end; + if (ContainsText(tabName, 'dbo.')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('dbo.', ''); + end; + if (schema='') then + schema:= 'dbo'; + schema:= schema.Replace('[', '').Replace(']', ''); + tabName:= tabName.Replace('[', '').Replace(']', ''); + + + if (SQLTableExists(schema, tabName)) then + begin + + lSQL:= 'SELECT SERVERPROPERTY(''ProductMajorVersion'') AS SQLVer'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + sqlVer:= lQry.FieldByName('SQLVer').AsInteger; + if (sqlVer<=13) then + lSQL:= 'STUFF((SELECT ' + IfThen(tabAlias='', '', 'N''' + tabAlias + '.''') + ' + [name]+N'',''' + else + lSQL:= 'STRING_AGG(' + IfThen(tabAlias='', '', 'N''' + tabAlias + '.''') + ' + [name], N'','') AS Cols'; + lSQL:= 'SELECT ' + lSQL + ' FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(schema + '.' + tabname) + ', N''U'')'; + if not(vratPocitane) then + lSQL:= lSQL + ' AND is_computed=0'; + if (sqlVer<=13) then + lSQL:= lSQL + ' FOR XML PATH(''''),TYPE).value(''.'',''varchar(MAX)''),1,0,'''') AS Cols'; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + cols:= lQry.FieldByName('Cols').AsString; + if (RightStr(cols,1)=',') then + cols:= LeftStr(cols, Length(cols)-1); + end; + + a:= SplitString(cols, ','); + + end; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + result:= a; + end; + + + + + function TServiceBase.GetTabCols (schema: string='dbo'; tabName: string = ''; tabAlias: string=''; vratPocitane: Boolean=true; exceptCols: string=''; + limitColCount: Integer=0; inclVarbinMax: boolean=false): string; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + sqlVer: smallint; + colExt: TStringList; + i: Integer; + begin + result:= ''; + + tabName:= tabName.Trim; + if (ContainsText(tabName, '[dbo].')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('[dbo].', ''); + end; + if (ContainsText(tabName, 'dbo.')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('dbo.', ''); + end; + if (schema='') then + schema:= 'dbo'; + schema:= schema.Replace('[', '').Replace(']', ''); + tabName:= tabName.Replace('[', '').Replace(']', ''); + + + + exceptCols:= 'SystemRowVersionExt,' + exceptCols; + if (RightStr(exceptCols,1)=',') then + exceptCols:= LeftStr(exceptCols, Length(exceptCols)-1); + + if (SQLTableExists (schema, tabName)) then + begin + + exceptCols:= exceptCols.Replace(' ',''); + colExt:= TStringList.Create; + if (exceptCols<>'') then + begin + while (exceptCols.Contains(',')) do + begin + colExt.Add(LeftStr(exceptCols, exceptCols.IndexOf(','))); + exceptCols:= MidStr(exceptCols, exceptCols.IndexOf(',')+2, Length(exceptCols)); + end; + if not(exceptCols.Contains(',')) then + colExt.Add(exceptCols); + end; + + + + lSQL:= 'SELECT SERVERPROPERTY(''ProductMajorVersion'') AS SQLVer'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + sqlVer:= lQry.FieldByName('SQLVer').AsInteger; + + lSQL:= 'SELECT [name] FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(schema + '.' + tabname) + ', N''U'')'; + + if not(inclVarbinMax) then + lSQL:= lSQL + ' AND [system_type_id]<>165 AND [max_length]<>-1'; // varbinary(max) + + if (colExt.Count>0) then + begin + lSQL:= lSQL + ' AND [name] NOT IN ('; + for i:=0 to (colExt.Count-1) do + lSQL:= lSQL + 'N' + colExt.Strings[i].QuotedString + ','; + lSQL:= LeftStr(lSQL, Length(lSQL)-1) + ')'; + end; + + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + lQry.First; + + if (limitColCount=0) then + limitColCount:= 999; + i:= 1; + while not(lQry.Eof) and (limitColCount>=i) do + begin + result:= result + IfThen(tabAlias='', '', tabAlias + '.') + lQry.FieldByName('name').AsString + ','; + Inc(i); + lQry.Next; + end; + end; + if (RightStr(result,1)=',') then + result:= LeftStr(result, Length(result)-1); + + +{ + if (sqlVer<=13) then + lSQL:= 'STUFF((SELECT ' + IfThen(tabAlias='', '', 'N''' + tabAlias + '.''') + ' + [name]+N'',''' + else + lSQL:= 'STRING_AGG(' + IfThen(tabAlias='', '', 'N''' + tabAlias + '.''') + ' + [name], N'','') AS Cols'; + + + lSQL:= 'SELECT ' + lSQL + ' FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(schema + '.' + tabname) + ', N''U'')'; + if not(vratPocitane) then + lSQL:= lSQL + ' AND is_computed=0'; + + if (colExt.Count>0) then + begin + lSQL:= lSQL + ' AND [name] NOT IN ('; + for i:=0 to (colExt.Count-1) do + lSQL:= lSQL + 'N' + colExt.Strings[i].QuotedString + ','; + lSQL:= LeftStr(lSQL, Length(lSQL)-1) + ')'; + end; + + if (sqlVer<=13) then + lSQL:= lSQL + ' FOR XML PATH(''''),TYPE).value(''.'',''varchar(MAX)''),1,0,'''') AS Cols'; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + result:= lQry.FieldByName('Cols').AsString; + if (RightStr(result,1)=',') then + result:= LeftStr(result, Length(result)-1); + end; +} + + + end; + except + end; + finally + lQry.Free; + end; + + colExt.Free; + + sqlConnX.Close; + sqlConnX.Free; + end; + + if (result='') or (tabName='') then + result:= '1 AS X'; + + end; + + + + function TServiceBase.GetTabExtCols (schema: string='dbo'; tabName: string = ''; tabAlias: string=''; vratPocitane: Boolean=true): string; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= ''; + + tabName:= tabName.Trim; + if (ContainsText(tabName, '[dbo].')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('[dbo].', ''); + end; + if (ContainsText(tabName, 'dbo.')) then + begin + schema:= 'dbo'; + tabName:= tabName.Replace('dbo.', ''); + end; + if (schema='') then + schema:= 'dbo'; + schema:= schema.Replace('[', '').Replace(']', ''); + tabName:= tabName.Replace('[', '').Replace(']', ''); + + if (RightStr(tabName,4)<>'_EXT') then + tabName:= tabName + '_EXT'; + + + if (SQLTableExists(schema, tabName)) then + begin + lSQL:= 'SELECT STRING_AGG(' + IfThen(tabAlias='', '', 'N''' + tabAlias + '.''') + ' + [name], N'','') AS Cols FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + + QuotedStr(schema + '.' + tabname) + ')'; + if not(vratPocitane) then + lSQL:= lSQL + ' AND is_computed=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + result:= lQry.FieldByName('Cols').AsString; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + if (result='') or (tabName='') then + result:= '1 AS X'; + end; + + + + + procedure TServiceBase.Rollback; + begin +// FDM.sqlConn.Rollback; + end; + + + procedure TServiceBase.StartTransaction; + begin +// FDM.sqlConn.StartTransaction; + end; + + + + + + +{ TObecnyService} + + procedure TObecnyService.ImportTaskuDZ; + begin + + end; + + + + function TObecnyService.DoTesty: TJSONObject; + var status, server, dbname, org: string; + i: integer; + b: TJSONObjectBuilder; + w: TJsonTextWriter; + sB: TStringBuilder; + sW: TStringWriter; + p: TJSONCollectionBuilder.TPairs; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= TJSONObject.Create; + status:= 'NOT OK'; + + +// kontrola verze pluginu + verText:= GetFileVersion2 (GetModuleName(HInstance)); + if Length(verText)=12 then + verText:= LeftStr(verText,9) + '0' + RightStr(verText,3); + verText2:= verText.Replace('.', ''); + if (Length(verText2)=10) then + verText2:= '0' + LeftStr(verText2,1) + '0' + RightStr(verText2, 9); + verMoje:= verText2.ToInt64; + + + dbname:= FDM.sqlConn.Params.Database; + server:= ''; + i:= FDM.sqlConn.Params.IndexOf(S_FD_ConnParam_Common_Server); + if (i>-1) then + server:= FDM.sqlConn.Params.Strings[i]; + + try + try + if not(FDM.sqlConn.Connected) then + FDM.sqlConn.Open; + status:= 'OK'; + except + end; + finally + end; + + + org:= ''; + sqlConnX:= TFDConnection.Create(nil); + lQry:= TFDQuery.Create(nil); + try + try + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry.Connection:= sqlConnX; + lQry.Open('SELECT Nazev FROM ' + tblCOrg + ' WHERE CisloOrg=0'); + org:= lQry.FieldByName('Nazev').AsString; + except + end; + finally + lQry.Free; + end; + sqlConnX.Close; + sqlConnX.Free; + + + sB:= TStringBuilder.Create; + sW:= TStringWriter.Create(sB); + w:= TJsonTextWriter.Create(sW); + w.Formatting:= TJsonFormatting.Indented; + b:= TJSONObjectBuilder.Create(w); +// b.BeginObject.BeginArray('status').BeginObject.Add('status', status).EndObject.EndArray.EndObject; + p:= b.BeginObject.Add('status', status); + if (server<>'') then + p.Add('server', server); + p.Add('db', dbname); + p.Add('ver', verMoje.ToString); + p.Add('nazevOrg', org); + p.EndObject; + result.FromJSON(sB.ToString); +// result.S['out']:= status; + end; + + + + + procedure TObecnyService.ZapisJsonDoHeliosu (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs, guidIdent: string; + guid: TGUID; + objekt, akce: string; + j, t, a, v: JsonDataObjects.TJSONObject; + i, ii, taskDZId, taskId, intTemp, idJSON: integer; + jeOld: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + lSQL2, srcNazev, errMsg: string; + rsrc: TResourceStream; + ms: TMemoryStream; + arrDefs: TStringList; + function LoadStringFromStream (const AStream: TStream): String; + var lenX: Integer; + begin + AStream.Seek(0,0); + lenX:= AStream.Size - AStream.Position; + SetLength(Result, lenX); + if (lenX>0) then + AStream.ReadBuffer(Result[1], lenX); + end; + function MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString; + begin + SetString(Result, PAnsiChar(M.Memory), M.Size); + end; + + begin + idJSON:= 0; + respString:= '['; + + jsonData:= jsonData.Trim; + if (jsonData<>'') then + begin + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + CoCreateGuid(guid); + if (System.SysUtils.CreateGUID(guid)=S_OK) then + guidIdent:= System.SysUtils.GUIDToString(guid) + else + guidIdent:= self.NewUUID32; + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (IdPHIdent, GUIDIdent, JSONData) SELECT 0, CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + '), N' + jsonData.QuotedString; + FDM.sqlConn.ExecSQL(lSQL); + lSQL:= 'SELECT ID FROM ' + tblPrijataJsonData + ' WHERE GUIDIdent=CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + ')'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + begin + idJSON:= lQry.FieldByName('ID').AsInteger; + respString:= 'OK'; + end; + except on E:Exception do + begin + respString:= 'NOT OK'; + raise EServiceException.Create('Chyba zĂĄpisu JSON dat: ' + E.Message); + end; + end; + finally + FreeAndNil(lQry); + end; + + + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + begin + if (j.Contains('akce')) then + begin + akce:= j.S['akce'].Trim; + if (idJSON>0) and (akce<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); + { + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + except on E:Exception do + end; + end; + } + end; + + if (j.Contains('action')) then + begin + akce:= j.S['action'].Trim; + if (idJSON>0) and (akce<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); + end; + + if (j.Contains('object')) then + begin + objekt:= j.S['object'].Trim; + if (idJSON>0) and (objekt<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Objekt=N' + objekt.QuotedString + ' WHERE ID=' + idJSON.ToString); + end; + + end; + finally + j.Free; + end; + + end + else + respString:= 'NOT OK - nemĂĄm data'; + + respString:= '[' +respString + ']'; + + end; + + + +end. diff --git a/uSvc_KmenZbozi.pas b/uSvc_KmenZbozi.pas new file mode 100644 index 0000000..064758c --- /dev/null +++ b/uSvc_KmenZbozi.pas @@ -0,0 +1,455 @@ +unit uSvc_KmenZbozi; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, + uHeoObj_Base; + +const +{$I globalConsts.inc} + + sqlSelKmen = 'ID, SkupZbo, RegCis, Nazev1, Nazev2, Nazev3, Nazev4, MJEvidence, Dilec, Montaz, Naradi, Material, Sluzba, SKP, PLUKod' + + ', KontrolaVyrC, Poznamka, Blokovano, Hmotnost, Vyska, Sirka, Hloubka, Vykres, KmenoveStredisko, CelniNomenklatura, IdSortiment' + + ', IdVarianta, VychoziMnozstvi, BlokovaniEditoru'; + + + selKmenSpec = ''; + +type + TSkupinaZboziService = class(TServiceBase) + public + function GetAll: TObjectList; virtual; + function GetByID (const AID: Integer; params: TDictionary=nil): TSkupinaKaret; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetMeta: TJSONObject; virtual; + end; + + + + + TKmenZboziService = class(TServiceBase) + public + function GetAll: TObjectList; virtual; + function GetByID (const AID: Integer; params: TDictionary=nil): TKmenZbozi; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetMeta: TJSONObject; virtual; + function GetPrepocetMJ (idKmen: integer): TObjectList; virtual; + end; + + + +implementation + +uses + System.StrUtils, + System.Variants, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + Quick.Logger, + MVCFramework.Commons, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + helTabsBIDs; + + + + + + { TSkupinaKaretService } + + function TSkupinaZboziService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSZ) + ' FROM ' + tblSZ + ' WHERE 1=0'; + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TSkupinaZboziService.GetByID (const AID: Integer; params: TDictionary=nil): TSkupinaKaret; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSZ) + ' FROM ' + tblSZ + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL, [AID]); + result:= lQry.AsObject; + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TSkupinaZboziService.GetAll: TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSZ) + ' FROM ' + tblSZ + ' ORDER BY SkupZbo'; + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TSkupinaZboziService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + aoV: TArray; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSZ) + ' FROM ' + tblSZ; + + where:= ''; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + 'ID=' + params.Items['id']; + + if (params.ContainsKey('sz')) then + if (params.Items['sz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'SkupZbo LIKE N' + (params.Items['sz'] + '%').QuotedString; + + if (params.ContainsKey('nazev')) then + if (params.Items['nazev']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Nazev LIKE N' + ('%' + params.Items['nazev'] + '%').QuotedString; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY SkupZbo'; + + + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TKmenZboziService } + + function TKmenZboziService.GetAll: TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + sqlSelKmen + ' FROM ' + tblKZ + ' ORDER BY ID'; + + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL); + result:= lQry.AsObjectList; + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + function TKmenZboziService.GetByID (const AID: Integer; params: TDictionary=nil): TKmenZbozi; +{$IFDEF CUSTOM_CTRL_Rootvin} + const rtnASOLTrideni = '_ASOL_IdentifTrideni'; +{$ENDIF} + var lSQL, extInfoStr: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblKZe)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKZe, '', true, 'ID', 0, false) + ' FROM ' + tblKZe + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create (nil); + lQry.Connection:= sqlConnX; + try + lQry.Open (lSQL, [AID]); + if (lQry.RecordCount>0) then + begin + extInfoStr:= lQry.AsJSONObjectString; +{$IFDEF CUSTOM_CTRL_Rootvin} + if (SQLColumnExists('dbo', tblKZe, rtnASOLTrideni)) then + if not(lQry.FieldByName(rtnASOLTrideni).IsNull) then + begin + if (lQry.FieldByName(rtnASOLTrideni).AsString='1') then + result.TypDilce:= 'surovina'; + if (lQry.FieldByName(rtnASOLTrideni).AsString='2') then + result.TypDilce:= 'polotovar'; + if (lQry.FieldByName(rtnASOLTrideni).AsString='3') then + result.TypDilce:= 'obal'; + end; +{$ENDIF} + end; + finally + lQry.Free; + end; + end; + + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKZ, 'main') + IfThen(selKmenSpec<>'', ',' + selKmenSpec, '') + ' FROM ' + tblKZ + ' main WHERE main.ID=:ID'; + lQry:= TFDQuery.Create (nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + try + lQry.Open (lSQL, [AID]); + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + except on E:Exception do + raise EServiceException.Create ('Chyba nacitani kmenove karty: ' + E.Message); + end; + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TKmenZboziService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg: string; + AID, cnt, rNo: integer; + aoV: TArray; + resList: TObjectList; + resObj: TKmenZbozi; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + resList:= TObjectList.Create; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ID, SkupZbo, RegCis FROM ' + tblKZ; + + where:= ''; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + 'ID=' + params.Items['id']; + + if (params.ContainsKey('sz')) then + if (params.Items['sz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'SkupZbo LIKE N' + (params.Items['sz'] + '%').QuotedString; + + if (params.ContainsKey('sk')) then + if (params.Items['sk']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'SkupZbo LIKE N' + (params.Items['sk'] + '%').QuotedString; + + if (params.ContainsKey('rc')) then + if (params.Items['rc']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'RegCis LIKE N' + (params.Items['rc'] + '%').QuotedString; + + if (params.ContainsKey('cisloZbozi')) then + if (params.Items['cisloZbozi']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'CisloZbozi LIKE N' + (params.Items['cisloZbozi'] + '%').QuotedString; + + if (params.ContainsKey('nazev1')) then + if (params.Items['nazev1']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Nazev1 LIKE N' + ('%' + params.Items['nazev1'] + '%').QuotedString; + + if (params.ContainsKey('barcode')) then + if (params.Items['barcode']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'ID IN (SELECT IDKmenZbo FROM ' + tblBCode + ' WHERE Barcode=N' + params.Items['barcode'].QuotedString + ')'; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY SkupZbo, RegCis'; + + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + resObj:= TKmenZbozi.Create; + resList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + resObj:= self.GetByID (AID); + resList.Add (resObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= resList; + except on E:Exception do + begin + errMsg:= E.Message; + raise EServiceException.Create ('Chyba nacitani kmenove karty: ' + errMsg); + end; + end; + // FreeAndNil(resList); + finally + end; + end + else + raise EServiceException.Create ('Vybranym podminkam neodpovida zadna kmenova karta'); + finally + + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TKmenZboziService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblKZ, '', false) + ' FROM ' + tblKZ + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TKmenZboziService.GetPrepocetMJ (idKmen: integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ID, KodMJ1, KodMJ2, PocetHlavni, PocetOdvozene, DatPorizeni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL, [idKmen]); + result:= lQry.AsObjectList; + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + +end. diff --git a/uSvc_Obecne.pas b/uSvc_Obecne.pas new file mode 100644 index 0000000..118f504 --- /dev/null +++ b/uSvc_Obecne.pas @@ -0,0 +1,883 @@ +ďťżunit uSvc_Obecne; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uCommons, + uDataMod, + uHeoObj_Base, + helTabsBIDs, + uSvc_Base, + MVCFramework.Logger + ; + + +const +{$I globalConsts.inc} + + +type + + TDokumentService = class(TServiceBase) + public + function GetByID (idDok: integer; jenHlavicka: boolean=true): TDokument; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetMeta: TJSONObject; virtual; + function GetDokumStrom: TObjectList; virtual; + end; + + + TPlanKalendarService = class(TServiceBase) + public + function GetByID (idPlanKal: integer=0; polozky: boolean=false; p: TDictionary=nil): TPlanKalendar; virtual; + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + TPolPlanKalendarService = class(TServiceBase) + public + function GetByID (idPolPlanKal: integer): TPolozkaPlanKal; virtual; + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + TAktivitaService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + TUkolAktivityService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + +implementation + +uses + System.DateUtils, + System.StrUtils, + System.RegularExpressions, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + FireDAC.Stan.Consts +//, helTabsBIDs + ; + + + +{ TDokumentService } + + function TDokumentService.GetByID (idDok: integer; jenHlavicka: boolean=true): TDokument; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT TOP(1) d.ID, d.Popis, d.JmenoACesta, CONVERT(bit, CASE WHEN d.Dokument IS NULL THEN 0 ELSE 1 END) AS UlozenoDB, d.VelikostVDB, d.DatPorizeni, d.DatZmeny, d.Autor' + + ', d.Zmenil, d.SledovatHistorii, d.Dokument FROM '+ tblDokum + ' d WHERE d.ID=' + idDok.ToString; + if (jenHlavicka) then + lSQL:= lSQL.Replace(', d.Dokument', ''); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TDokumentService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + iId, v_ident, v_idtab: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + toBase64: boolean; + begin + result:= nil; + + toBase64:= false; + + + lSQL:= 'SELECT d.ID, d.Popis, d.JmenoACesta, CONVERT(bit, CASE WHEN d.Dokument IS NULL THEN 0 ELSE 1 END) AS UlozenoDB, d.VelikostVDB, d.DatPorizeni, d.DatZmeny, d.Autor' + + ', d.Zmenil, d.SledovatHistorii, d.Dokument AS Dokument, d.IDDokumStrom, d.IDDokTyp FROM ' + tblDokum + ' d'; + if (FDM.SQLTableExists(tblDokumE)) then + lSQL:= lSQL + ' LEFT JOIN ' + tblDokumE + ' dex ON (dex.ID=d.ID)'; + + + where:= ''; + + iId:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + iId:= params.Items['id'].ToInteger; + where:= where + 'd.ID=' + params.Items['id']; + end; + + if (params.ContainsKey('pripona')) then + if (params.Items['pripona']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'RIGHT(d.JmenoACesta, ' + params.Items['pripona'].Length.ToString + ')=N' + params.Items['pripona'].QuotedString; + + if (params.ContainsKey('iddokstrom')) then + if (params.Items['iddokstrom']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'd.IDDokumStrom=' + params.Items['iddokstrom']; + + if (params.ContainsKey('iddoktyp')) then + if (params.Items['iddoktyp']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'd.IDDokTyp=' + params.Items['iddoktyp']; + + + if (params.ContainsKey('vazba_ident')) and (params.ContainsKey('vazba_idtab')) then + begin + v_ident:= 0; + if not(TryStrToInt(params.Items['vazba_ident'], v_ident)) then + v_ident:= 0; + + v_idtab:= 0; + if not(TryStrToInt(params.Items['vazba_idtab'], v_idtab)) then + v_idtab:= 0; + + if (v_ident>0) and (v_idtab>iId) then + begin + where:= where + IfThen(where<>'', ' AND ', '') + 'd.ID IN (SELECT IdDok FROM ' + tblDokumVaz + ' WHERE IdentVazby=' + v_ident.ToString + ' AND IdTab=' + v_idtab.ToString + ')'; + end; + end; + + if (params.ContainsKey('prednastaveny')) then + if (params.Items['prednastaveny']='1') then + if (FDM.SQLTableExists(tblDokumE)) then + if (FDM.SQLColumnExists(tblDokumE, '_DokladProAPI')) then + where:= where + IfThen(where<>'', ' AND ', '') + 'dex._DokladProAPI=1'; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY d.ID'; + + + if (params.ContainsKey('jenHlavicka')) then + if (params.Items['jenHlavicka']='1') then + lSQL:= lSQL.Replace(', d.Dokument AS Dokument', ''); + + if (params.ContainsKey('base64')) then + if (params.Items['base64']='1') then + lSQL:= lSQL.Replace('d.Dokument A', 'dbo.ef_EncodeBase64(d.Dokument) A'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + begin + Log.Error ('Chyba načítĂĄnĂ­ dokumentĹŻ: ' + E.Message + CRLF + lSQL, 'SVCObecne_DokumentService'); + raise EServiceException.Create('Chyba načítĂĄnĂ­ dokumentĹŻ: ' + E.Message); + end; + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TDokumentService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= 'SELECT ID, Popis, JmenoACesta, CONVERT(bit, CASE WHEN Dokument IS NULL THEN 0 ELSE 1 END) AS UlozenoDB, VelikostVDB, DatPorizeni, DatZmeny, Autor' + + ', Zmenil, SledovatHistorii, Dokument , IDDokumStrom FROM ' + tblDokum + ' WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + except on E:Exception do + Log.Error ('Chyba načítĂĄnĂ­ metainformace dokumentĹŻ: ' + E.Message + CRLF + lSQL, 'SVCObecne_DokumentService'); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TDokumentService.GetDokumStrom: TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblDokumStrom, '', false, '') + ' FROM ' + tblDokumStrom + ' ORDER BY ID'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + Log.Error ('Chyba načítĂĄnĂ­ stromu dokumentĹŻ: ' + E.Message + CRLF + lSQL, 'SVCObecne_DokumentService'); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + +{ TPlanKalendarService } + function TPolPlanKalendarService.GetByID (idPolPlanKal: integer): TPolozkaPlanKal; + var lSQL: string; + lQry: TFDQuery; + polSrv: TPolPlanKalendarService; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT TOP(1) * FROM '+ tblPlanKalPol + ' WHERE ID=' + idPolPlanKal.ToString; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TPolPlanKalendarService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPlanKalPol, '', false, '') + ' FROM ' + tblPlanKalPol + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TPolPlanKalendarService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, odDatum, doDatum: string; + oznac, idStroj, idKooperace, idVyrPerZdroj: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + datOd, datDo: TDateTime; + AID: integer; + extInfoStr: string; + begin + result:= nil; + + where:= ''; + + AID:= 0; + if (params.ContainsKey('idkalendar')) then + if (params.Items['idkalendar']<>'') then + begin + if not(TryStrToInt(params.Items['idkalendar'], AID)) then + AID:= 0; + where:= where + 'IDPlanKalend=' + AID.ToString; + end; + + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPlanKalPolE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPlanKalPolE, '', true, 'ID') + ' FROM ' + tblPlanKalPolE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblPlanKalPol, '', false, '') + ' FROM ' + tblPlanKalPol; + + { + if (params.ContainsKey('oznaceni')) then + if (params.Items['oznaceni']<>'') then + begin + oznac:= params.Items['oznaceni']; + where:= where + IfThen(where<>'', ' AND ', '') + 'IDPlanKalend=(SELECT ID FROM ' + tblPlanKal + ' WHERE Oznaceni=N' + oznac.QuotedString + ')'; + end; + + if (params.ContainsKey('idstroj')) then + if (params.Items['idstroj']<>'') then + begin + idstroj:= params.Items['idstroj']; + where:= where + IfThen(where<>'', ' AND ', '') + 'IDStroje=' + idstroj + ')'; + end; + + if (params.ContainsKey('idkooperace')) then + if (params.Items['idkooperace']<>'') then + begin + idkooperace:= params.Items['idkooperace']; + where:= where + IfThen(where<>'', ' AND ', '') + 'IDKoop=' + idkooperace + ')'; + end; + + if (params.ContainsKey('idvyrperzdroj')) then + if (params.Items['idvyrperzdroj']<>'') then + begin + idVyrPerZdroj:= params.Items['idvyrperzdroj']; + where:= where + IfThen(where<>'', ' AND ', '') + 'IDVyrPerZdroje=' + idVyrPerZdroj + ')'; + end; +} + + + + odDatum:= ''; + if (params.ContainsKey('oddatum')) then + if (params.Items['oddatum']<>'') then + odDatum:= params.Items['oddatum'].Trim; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -1) + end + else + datOd:= IncDay(Now, -1); + + doDatum:= ''; + if (params.ContainsKey('dodatum')) then + if (params.Items['dodatum']<>'') then + doDatum:= params.Items['dodatum'].Trim; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= IncDay(Now, 365); + end + else + datDo:= IncDay(Now, 365); + + where:= where + IfThen(where<>'', ' AND ', '') + 'Datum>='; + if (datOd<>0) then + where:= where + 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', datOd).QuotedString + ',104)' + else + where:= where + 'DATEADD(day, -1, GETDATE())'; + if (datDo<>0) then + where:= where + IfThen(where<>'', ' AND ', '') + 'Datum<=CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', datDo).QuotedString + ',104)'; + + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY Datum'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ poloĹžek plĂĄnovacĂ­ho kalendáře: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + +{ TPlanKalendarService } + + function TPlanKalendarService.GetByID (idPlanKal: integer=0; polozky: boolean=false; p: TDictionary=nil): TPlanKalendar; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + par: TDictionary; + iIdStroj, iIdKooperace: integer; + polSrv: TPolPlanKalendarService; + lPol: TObjectList; + extInfoStr: string; + begin + result:= nil; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPlanKalE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPlanKalE, '', true, 'ID') + ' FROM ' + tblPlanKalE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL, [idPlanKal]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + +// lSQL:= 'SELECT TOP(1) ' + GetTabCols('', tblPlanKal, '', false, '') + ' FROM '+ tblPlanKal + ' WHERE ID=' + idPlanKal.ToString; + lSQL:= 'SELECT TOP(1) * FROM '+ tblPlanKal + ' WHERE ID=' + idPlanKal.ToString; + + par:= TDictionary.Create; + par.Add('idkalendar', idPlanKal.ToString); + + if (polozky) then + begin + if (p<>nil) then + begin + if (p.ContainsKey('oddatum')) then + if (p.Items['oddatum']<>'') then + par.Add('oddatum', p.Items['oddatum']); + if (p.ContainsKey('dodatum')) then + if (p.Items['dodatum']<>'') then + par.Add('dodatum', p.Items['dodatum']); + end; + polSrv:= TPolPlanKalendarService.Create(self.FDM); + end; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObject; + + if (extInfoStr='') then + result.ExtInfo:= nil; + + if (polozky) then + begin + lPol:= polSrv.GetByParams (par); + result.Polozky:= lPol; + end; + finally + lQry.Free; + par.Free; // parametry + if (polozky) then + begin + polSrv.Free; // service pro polozky plan. kalendare + end; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + function TPlanKalendarService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPlanKal, '', false, strBlokEdit) + ' FROM ' + tblPlanKal + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TPlanKalendarService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + cnt, rNo, iID, iIDStroj, iIdKooperace: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + lPlKals: TObjectList; + plKal: TPlanKalendar; + polozky: boolean; + begin + result:= nil; + + lSQL:= 'SELECT * FROM ' + tblPlanKal; + where:= ''; + + iId:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if not(TryStrToInt(params.Items['id'], iId)) then + iId:= 0; + if (iId<>0) then + where:= 'ID=' + iId.ToString; + + if (params.ContainsKey('oznaceni')) then + if (params.Items['oznaceni']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Oznaceni=N' + params.Items['oznaceni'].QuotedString; + + polozky:= false; + if (params.ContainsKey('polozky')) then + if (params.Items['polozky']='1') then + polozky:= true; + + iIDStroj:= 0; + if (params.ContainsKey('idstroj')) then + if (params.Items['idstroj'].Trim<>'') then + if not(TryStrToInt(params.Items['idstroj'].Trim, iIDStroj)) then + iIDStroj:= 0; + if (iIDStroj<>0) then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPlanKalPol + ' WHERE IDStroje=' + iIDStroj.ToString + ')'; + + iIdKooperace:= 0; + if (params.ContainsKey('idkooperace')) then + if (params.Items['idkooperace'].Trim<>'') then + if not(TryStrToInt(params.Items['idkooperace'].Trim, iIdKooperace)) then + iIdKooperace:= 0; + if (iIdKooperace<>0) then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPlanKalPol + ' WHERE IDKoop=' + iIdKooperace.ToString + ')'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + + + lPlKals:= TObjectList.Create; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + try + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + plKal:= self.GetByID (lQry.FieldByName('ID').AsInteger, polozky); + lPlKals.Add(plKal); + + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + end; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ plĂĄnovacĂ­ch kalendářů: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TUkolAktivityService } + function TUkolAktivityService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblUkoly, '', false, strBlokEdit) + ' FROM ' + tblUkoly + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ meta ĂşdajĹŻ Ăşkolu: ' + E.Message); + end; + finally + lQry.Free; + end; + end; + + + + + function TUkolAktivityService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + iID: integer; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblUkoly, '', false, strBlokEdit) + ' FROM ' + tblUkoly; + where:= ''; + + iId:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + iId:= params.Items['id'].ToInteger; + where:= where + 'ID=' + params.Items['id']; + end; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + + + lSQL:= lSQL + ' ORDER BY ISNULL(TerminZahajeni, ISNULL(DatumZahajeni, DatPorizeni))'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ ĂşkolĹŻ: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + + + +{ TAktivitaService } + function TAktivitaService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPlanKal, '', false, strBlokEdit) + ' FROM ' + tblPlanKal + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ meta ĂşdajĹŻ aktivity: ' + E.Message); + end; + finally + lQry.Free; + end; + end; + + + + + + function TAktivitaService.GetByParams (params: TDictionary): TObjectList; + var lSQL, s, datOdS, datDoS, strTemp, where: string; + datOd, datDo: TDateTime; + noDatum: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + iID: integer; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKJ, '', false, strBlokEdit) + ' FROM ' + tblKJ; + + where:= ''; + + iId:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + iId:= params.Items['id'].ToInteger; + where:= where + 'ID=' + params.Items['id']; + end; + + if (params.ContainsKey('kategorie')) then + begin + s:= params.Items['kategorie'].Trim; + if (s<>'') then + if (datMod.SQLRecordExists('SELECT 1 FROM ' + tblKategKJ + ' WHERE Cislo=N' + s.QuotedString)) then + where:= where + IfThen(where<>'', ' AND ', '') + 'Kategorie=N' + s.QuotedString; + end; + + + + noDatum:= (params.ContainsKey('noDatum')); + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + datOdS:= params.Items['odDatum']; + if (datOdS<>'') then + begin + if (Length(datOdS)=8) then + datOdS:= datOdS + '000000'; + if (Length(datOdS)=10) then + datOdS:= datOdS + '00'; + datOdS:= MidStr(datOdS, 7, 2) + '.' + MidStr(datOdS, 5, 2) + '.' + LeftStr(datOdS, 4) + ' ' + MidStr(datOdS, 9, 2) + ':' + MidStr(datOdS, 11, 2) + ':' + MidStr(datOdS, 13, 2); + if not(TryStrToDateTime(datOdS, datOd)) then + datOd:= IncDay(Now, -1) + end + else + datOd:= IncDay(Now, -1); + + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + datDoS:= params.Items['doDatum']; + if (datDoS<>'') then + begin + if (Length(datDoS)=8) then + datDoS:= datDoS + '235959'; + if (Length(datDoS)=10) then + datDoS:= datDoS + '59'; + datDoS:= MidStr(datDoS, 7, 2) + '.' + MidStr(datDoS, 5, 2) + '.' + LeftStr(datDoS, 4) + ' ' + MidStr(datDoS, 9, 2) + ':' + MidStr(datDoS, 11, 2) + ':' + MidStr(datDoS, 13, 2); + if not(TryStrToDateTime(datDoS, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + strTemp:= ''; + if not(noDatum) then + begin + if (datOdS<>'') then + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)' + else + strTemp:= 'DATEADD(year, -1, GETDATE())'; + + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni>=' + strTemp; + end; + + if not(noDatum) then + if (datDoS<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni<=' + strTemp; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ISNULL(DatumJednaniOd, DatPorizeni)'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ aktivit: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + +end. + diff --git a/uSvc_ObehZbozi.pas b/uSvc_ObehZbozi.pas new file mode 100644 index 0000000..4909e50 --- /dev/null +++ b/uSvc_ObehZbozi.pas @@ -0,0 +1,1134 @@ +unit uSvc_ObehZbozi; + +interface + +{$I GlobalDefs.inc} + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, + helTabsBIDs, + uHeoObj_Base; + +const +{$I globalConsts.inc} + selSpecDZ = 'Realizovano'; + + selSpecVyrCP = '(SELECT Nazev1 FROM ' + tblVyrCS + ' WHERE ID=main.IDVyrCis) AS #VyrCis#'; + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I '_custom/Rootvin/uTabs.inc'} +{$ENDIF} + +type + + TTSerioveCisloStavService = class(TServiceBase) + public + function GetMeta: TJSONObject; + end; + + + TUmisteniService = class(TServiceBase) + public + function GetMeta: TJsonObject; virtual; + function GetByID (AId: integer): TUmisteni; virtual; + end; + + TSerioveCisloPohybOZService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + + + TStavSkladuService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + + TDokladOZService = class(TServiceBase) + public + function GetByID (const AID: integer; sdServer: boolean=false; params: TDictionary=nil): TDokladOZ; virtual; + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetDruhyDokladu (druhpohybu: string): TObjectList; virtual; + end; + + + TPolozkaOZService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByID (const AID: integer; sdServer: boolean=false): TPohybOZ; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + + + +implementation + +uses + System.StrUtils, + System.DateUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + + + + +{ TStavSkladuService } + + function TStavSkladuService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, odDatum, doDatum, strTemp: string; + datOd, datDo: TDateTime; + id: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSS) + ' FROM ' + tblSS; + + where:= ''; + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'ID=' + id.ToString; + end; + + if (params.ContainsKey('idsklad')) then + if (params.Items['idsklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDSklad=N' + params.Items['idsklad'].QuotedString; + + if (params.ContainsKey('blokovane')) then + if (params.Items['blokovane']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Blokovano=1'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY ID'; + + lSQL:= lSQL.Replace('TabStavSkladu.', 'main.'); + + lQry:= TFDQuery.Create(nil); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání dokladu: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TStavSkladuService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblSS) + ' FROM ' + tblSS + ' WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + + + + +{ TTSerioveCisloStavService } + + function TTSerioveCisloStavService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblVyrCS) + ' FROM ' + tblVyrCS + ' WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + + + +{ TDokladOZService } + + function TDokladOZService.GetDruhyDokladu (druhpohybu: string): TObjectList; + var lSQL: string; + i: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblDDZ, '', false) + ' FROM ' + tblDDZ; + + i:= -1; + if not(TryStrToInt(druhpohybu, i)) then + i:= -1; + if (i>-1) then + lSQL:= lSQL + ' WHERE DruhPohybuZbo=' + i.ToString; + + lSQL:= lSQL + ' ORDER BY DruhPohybuZbo, RadaDokladu'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání druhů dokladu: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TDokladOZService.GetByParams (params: TDictionary): TObjectList; + var lSQL, lSQLmin, where, odDatum, doDatum, sklad, strTemp: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + datOd, datDo: TDateTime; + id, iDZ, idPrikaz, cnt, rNo: integer; + jenSeznam, polozky, minimum: Boolean; + d: TDokladOZ; + dList: TObjectList; + noDatum, snZSDServeru: boolean; + radyD, sklady, dpz: string; + p: TDictionary; + begin + result:= nil; + + p:= TDictionary.Create; + radyD:= ''; + dpz:= ''; + + snZSDServeru:= false; + if (params.ContainsKey('sdServer')) then + if (params.Items['sdServer']='1') then + snZSDServeru:= true; + + polozky:= false; + if (params.ContainsKey('polozky')) then + begin + p.Add('polozky', params.Items['polozky']); + if (params.Items['polozky']='1') then + begin + polozky:= true; + jenSeznam:= false; + end; + end; + + minimum:= false; + if (params.ContainsKey('minimum')) then + begin + p.Add('minimum', params.Items['minimum']); + p.Add('minimumDat', params.Items['minimum']); + if (params.Items['minimum']='1') then + minimum:= true; + end; + + jenSeznam:= false; + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + + lSQL:= 'SELECT ID, ParovaciZnak FROM ' + tblDZ; + where:= ''; + + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'ID=' + id.ToString; + end; + + idPrikaz:= 0; + if (params.ContainsKey('idPrikaz')) then + if (params.Items['idPrikaz']<>'') then + if not(TryStrToInt(params.Items['idPrikaz'], idPrikaz)) then + idPrikaz:= 0; + if (idPrikaz>0) then + where:= where + IfThen(where<>'', ' AND ', '') + ' (IDPrikaz=' + idPrikaz.ToString + ' OR EXISTS(SELECT 1 FROM ' + tblPZ + ' p WHERE p.IDDoklad=ID AND p.IDPrikaz=IDPrikaz AND p.TypVyrobnihoDokladu IS NOT NULL))'; + + noDatum:= (params.ContainsKey('noDatum')); + + if (params.ContainsKey('organizace')) then + if (params.Items['organizace']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'CisloOrg=' + params.Items['organizace']; + + if (params.ContainsKey('druhpohybu')) then + if (params.Items['druhpohybu']<>'') then + begin + dpz:= params.Items['druhpohybu']; + where:= where + IfThen(where<>'', ' AND ', '') + 'DruhPohybuZbo=' + dpz; + end; + + if (params.ContainsKey('radadokladu')) then + if (params.Items['radadokladu']<>'') then + begin + radyD:= params.Items['radadokladu']; + radyD:= StrToNQuotedList (radyD); + where:= where + IfThen(where<>'', ' AND ', '') + 'RadaDokladu IN (' + radyD + ')'; + end; + + if (params.ContainsKey('sklad')) then + if (params.Items['sklad']<>'') then + begin + sklady:= params.Items['sklad']; + sklady:= StrToNQuotedList (sklady); + where:= where + IfThen(where<>'', ' AND ', '') + 'IDSklad IN (' + sklady + ')'; + end; + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -1) + end + else + datOd:= IncDay(Now, -1); + + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + doDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + strTemp:= ''; + if not(noDatum) then + begin + if (odDatum<>'') then + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datOd).QuotedString + ',104)' + else + strTemp:= 'DATEADD(day, -1, GETDATE())'; + + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni>=' + strTemp; + end; + + if not(noDatum) then + if (doDatum<>'') then + begin + strTemp:= 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy', datDo).QuotedString + ',104)'; + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni<=' + strTemp; + end; + + + if (params.ContainsKey('')) then + if (params.Items['jenRealizovane']<>'1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'DatRealizace IS NOT NULL'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY ParovaciZnak'; + + lSQL:= lSQL.Replace('TabDokladyZbozi.', 'main.'); + + +{$IFDEF CUSTOM_CTRL_Rootvin} + if (radyD<>'') then + begin + if (dpz='0') and (radyD.Contains('251') or radyD.Contains('261')) then + snZSDServeru:= true; + end; +{$ENDIF} + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + d:= TDokladOZ.Create; + dList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + iDZ:= lQry.FieldByName('ID').AsInteger; + d:= self.GetByID (iDZ, snZSDServeru, p); + dList.Add(d); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= dList; // FDM.sqlQry1.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání dokladu: ' + E.Message); + end; + // FreeAndNil(dList); + finally + end; + end + else + raise EServiceException.Create('Vybraným podmínkám neodpovídá žádný doklad'); + finally + lQry.Close; + FreeAndNil(lQry); + end; + + p.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TDokladOZService.GetByID (const AID: Integer; sdServer: boolean=false; params: TDictionary=nil): TDokladOZ; + var lSQL, extInfoStr, errMsg: string; + minimumDat, polozky: boolean; + p: TDictionary; + ps: TPolozkaOZService; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblDZe)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblDZe, '', true, 'ID') + ' FROM ' + tblDZe + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + minimumDat:= false; + polozky:= false; + + ps:= TPolozkaOZService.Create (self.FDM); + p:= TDictionary.Create; + p.Add ('iddoklad', AID.ToString); + p.Add ('sdServer', IfThen(sdServer, '1', '0')); + p.Add ('minimum', IfThen(minimumDat, '1', '0')); + + if Assigned(params) then + begin + if (params.ContainsKey('minimumDat')) then + if (params.Items['minimumDat']='1') then + minimumDat:= true; + + if (params.ContainsKey('polozky')) then + if (params.Items['polozky']='1') then + polozky:= true; + + if (params.ContainsKey('minimum')) and not(p.ContainsKey('minimum')) then + p.Add ('minimum', params.Items['minimum']); + end; + + + + if (minimumDat) then + lSQL:= 'SELECT ID, DruhPohybuZbo, RadaDokladu, PoradoveCislo, ParovaciZnak, CisloOrg, MistoUrceni, DatPorizeni, DatPorizeniSkut, DatRealizace, Realizovano' + + ', RealizovanoMnoz, PrevodRealizovatMno, DatRealMnoz, Splatnost, CisloZakazky, Autor, Mena, Kurz, DUZP, IDSkladPrevodu, DruhPohybuPrevod' + + ', AVAReferenceID' + IfThen(selSpecDZ<>'', ',' + selSpecDZ, '') + else + lSQL:= 'SELECT ' + GetTabCols('dbo', tblDZ, '', false) + IfThen(selSpecDZ<>'', ',' + selSpecDZ, ''); + + lSQL:= lSQL + ' FROM ' + tblDZ + ' WHERE ID=:ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + if (polozky) then + result.PohybyOZ:= ps.GetByParams (p); + end + else + raise EServiceException.Create('Doklad oběhu zboží s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + p.Free; + ps.Free; + FreeAndNil(lQry); + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TDokladOZService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblDZ, '', false) + ' FROM ' + tblDZ + ' WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + + + +{ TPolozkaOZService } + + function TPolozkaOZService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + id, AID, cnt, rNo: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + pList: TObjectList; + p: TPohybOZ; + sdServer: boolean; + begin + result:= nil; + + p:= TPohybOZ.Create; +// pList:= TObjectList.Create; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ; + + where:= ''; + +// vyrobni cisla polozky z tabulky Gatema_SDScanData + sdServer:= false; + if (params.ContainsKey('sdServer')) then + if (params.Items['sdServer']='1') then + sdServer:= true; + + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + where:= where + 'ID=' + id.ToString; + end; + + if (params.ContainsKey('iddoklad')) then + if (params.Items['iddoklad']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDDoklad=' + params.Items['iddoklad']; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY IDDoklad, Poradi'; + +// lSQL:= lSQL.Replace('TabPohybyZbozi.', 'main.'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + pList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + p:= self.GetByID (AID, sdServer); + pList.Add(p); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= pList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání položky/položek dokladu: ' + E.Message); + end; +// pList.Free; + finally + lQry.Close; + FreeAndNil(lQry); + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TPolozkaOZService.GetByID (const AID: Integer; sdServer: boolean=false): TPohybOZ; + var lSQL, lSQL2, sz, rDokl, dpz, skl, sTemp: string; + p: TDictionary; + pds: TSerioveCisloPohybOZService; + us: TUmisteniService; + u, iTemp: Integer; + lQry, lQry2: TFDQuery; + sqlConnX, sqlConnX2: TFDConnection; + extInfoStr: string; +{$IFDEF CUSTOM_CTRL_Rootvin} + silo: string; + siloInt, idMzdy: integer; +{$ENDIF} + begin + result:= nil; + +{$IFDEF CUSTOM_CTRL_Rootvin} + silo:= ''; +{$ENDIF} + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + + extInfoStr:= ''; + if (SQLTableExists('dbo', tblPZe)) then + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZe, '', true, 'ID') + ' FROM ' + tblPZe + ' WHERE ID=:ID'; + try + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + begin +{$IFDEF CUSTOM_CTRL_Rootvin} + silo:= lQry.FieldByName('_Mouka_Silo').AsString; +{$ENDIF} + extInfoStr:= lQry.AsJSONObjectString; + end; + finally + end; + + end; + + + sz:= ''; + dpz:= ''; + rDokl:= ''; + + try + lSQL:= 'SELECT p.SkupZbo, p.DruhPohybuZbo, d.RadaDokladu FROM ' + tblPZ + ' p INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad) WHERE p.ID=:ID'; + lQry.Open(lSQL, [AID]); + lQry.First; + sz:= lQry.FieldByName('SkupZbo').AsString; + dpz:= lQry.FieldByName('DruhPohybuZbo').AsString; + rDokl:= lQry.FieldByName('RadaDokladu').AsString; + finally + end; + + + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ + ' WHERE ID=:ID'; + + pds:= TSerioveCisloPohybOZService.Create (self.FDM); + us:= TUmisteniService.Create (self.FDM); + p:= TDictionary.Create; + p.Add('idPolozkaOZ', AID.ToString); + + + try + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + u:= 0; + if (lQry.FieldByName('IdUmisteni')<>nil) then + u:= lQry.FieldByName('IdUmisteni').AsInteger; + result:= lQry.AsObject; + +{$IFDEF CUSTOM_CTRL_Rootvin} + lQry2:= TFDQuery.Create(nil); + try + lQry2.FetchOptions.Mode:= fmAll; + lQry2.Connection:= sqlConnX; + + if (sz='101') and (dpz='0') and ((rDokl='251') or (rDokl='261')) then + if (silo='') then + begin + lSQL:= 'SELECT TOP(1) p.IDUmisteni, u.Kod FROM ' + tblPuvodniVC + ' p INNER JOIN ' + tblUmisteni + ' u ON (u.ID=p.IDUmisteni) WHERE p.IDPohybZbozi=:ID'; + lQry2.Open (lSQL, [AID]); + lQry2.First; + u:= lQry2.FieldByName('IDUmisteni').AsInteger; + silo:= lQry2.FieldByName('Kod').AsString; + if (silo<>'') then + begin + TryStrToInt (silo, siloInt); + if (siloInt>0) then + begin + lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPZe + ' WHERE ID=:ID) INSERT ' + tblPZe + ' (ID) SELECT :ID' + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblPZe + ' SET _Mouka_Silo=' + siloInt.ToString + ' WHERE ID=:ID'; + sqlConnX.ExecSQL (lSQL, [AID]); + end; + end; + end; + + lSQL:= 'SELECT IDMzdy FROM ' + tblPMZGenPZ + ' WHERE IDPohybu=:ID'; + lQry2.Open (lSQL, [AID]); + if (lQry2.RecordCount=1) then + result.IDMzdy:= lQry2.FieldByName('IDMzdy').AsInteger; + + finally + lQry2.Close; + FreeAndNil(lQry2); + end; + + + +{$ENDIF} + + + sqlConnX2:= TFDConnection.Create(nil); + lQry2:= TFDQuery.Create (nil); + try + sqlConnX2.ConnectionDefName:= sqlPoolName; + lQry2.Connection:= sqlConnX2; + + +{$IFDEF CUSTOM_CTRL_Rootvin} + if (SQLColumnExists('dbo', tblPZe, '_HDCAPI_PHident')) then + if (SQLGeneralTest('SELECT 1 FROM ' + tblPZe + ' WHERE ID=' + AID.ToString + ' AND _HDCAPI_PHident IS NOT NULL')) then + begin + lSQL:= 'SELECT ob.IdPHIdent, ob.IdPHIdent2 FROM ' + tblPZe + ' pze INNER JOIN ' + tblVyrobaObjednavky + ' ob ON (ob.ID=pze._HDCAPI_PHident) WHERE pze.ID=' + AID.ToString; + try + lQry2.Open(lSQL); + lQry2.First; + Result.PHObjIdent:= lQry2.FieldByName('IdPHIdent').AsInteger; + Result.PHPolIdent:= lQry2.FieldByName('IdPHIdent2').AsInteger; + finally + end; + end; + + sTemp:= ''; + if (SQLColumnExists('dbo', tblPZe, '_Vyroba_PaletList')) then + if (SQLGeneralTest('SELECT 1 FROM ' + tblPZe + ' WHERE ID=' + AID.ToString + ' AND _Vyroba_PaletList IS NOT NULL')) then + begin + lSQL:= 'SELECT _Vyroba_PaletList FROM ' + tblPZe + ' WHERE ID=' + AID.ToString; + try + lQry2.Open(lSQL); + lQry2.First; + sTemp:= lQry2.FieldByName('_Vyroba_PaletList').AsString; + finally + end; + end; + if (sTemp='') then + begin + lSQL:= 'SELECT TOP(1) PaletovyList FROM ' + tblPuvodniVC + ' WHERE IDPohybZbozi=:ID'; + try + lQry2.Open(lSQL, [AID]); + lQry2.First; + sTemp:= lQry2.FieldByName('PaletovyList').AsString; + finally + end; + end; + if (sTemp<>'') then + begin + Result.PaletList:= sTemp; + lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPZe + ' WHERE ID=:ID) INSERT ' + tblPZe + ' (ID) SELECT :ID' + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblPZe + ' SET _Vyroba_PaletList=N' + sTemp.QuotedString + ' WHERE ID=:ID'; + sqlConnX2.ExecSQL (lSQL, [AID]); + end; + + + sTemp:= ''; + if (SQLColumnExists('dbo', tblPZe, '_Vyroba_Sarze')) then + if (SQLGeneralTest('SELECT 1 FROM ' + tblPZe + ' WHERE ID=' + AID.ToString + ' AND _Vyroba_Sarze IS NOT NULL')) then + begin + lSQL:= 'SELECT _Vyroba_Sarze FROM ' + tblPZe + ' WHERE ID=' + AID.ToString; + try + lQry2.Open(lSQL); + lQry2.First; + sTemp:= lQry2.FieldByName('_Vyroba_Sarze').AsString; + finally + end; + end; + if (sTemp='') then + begin + lSQL:= 'SELECT TOP(1) Sarze FROM ' + tblPuvodniVC + ' WHERE IDPohybZbozi=:ID'; + try + lQry2.Open(lSQL, [AID]); + lQry2.First; + sTemp:= lQry2.FieldByName('Sarze').AsString; + finally + end; + end; + if (sTemp<>'') then + begin + Result.Sarze:= sTemp; + lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPZe + ' WHERE ID=:ID) INSERT ' + tblPZe + ' (ID) SELECT :ID' + CRLF; + lSQL:= lSQL + 'UPDATE ' + tblPZe + ' SET _Vyroba_Sarze=N' + sTemp.QuotedString + ' WHERE ID=:ID'; + sqlConnX2.ExecSQL (lSQL, [AID]); + end; +{$ENDIF} + + finally + lQry2.Free; + sqlConnX2.Close; + sqlConnX2.Free; + end; + + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + result.SerialNums:= pds.GetByParams (p); + if (u>0) then + begin + Result.Umisteni:= us.GetByID (u); +{$IFDEF CUSTOM_CTRL_Rootvin} + if (silo<>'') then + begin + TryStrToInt (silo, siloInt); + if (siloInt>0) then + result.Silo:= siloInt; + Result.Umisteni.Kod:= silo; + Result.Umisteni.Nazev:= 'Silo ' + silo; + end; +{$ENDIF} + end; + end + else + raise EServiceException.Create('Položka dokladu oběhu zboží s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + p.Free; + pds.Free; + lQry.Close; + FreeAndNil(lQry); + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TPolozkaOZService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + extInfo: TJSONObject; + extInfoStr: string; + begin + + extInfoStr:= ''; + if (SQLTableExists('dbo', tblPZe)) then + begin + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZe, '', true) + ' FROM ' + tblPZe + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + extInfo:= lQry.MetadataAsJSONObject(); + extInfoStr:= extInfo.ToString; + finally + lQry.Free; + end; + end; + + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblPZ, '', false) + ' FROM ' + tblPZ + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + +{ TUmisteniService } + function TUmisteniService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open('SELECT ' + GetTabCols('dbo', tblUmisteni, '', false) + ' FROM ' + tblUmisteni + ' WHERE 1=0'); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TUmisteniService.GetByID (AID: Integer): TUmisteni; + var lSQL: string; + lQry: TFDQuery; + begin + result:= nil; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lSQL:= 'SELECT ' + GetTabCols('dbo', tblUmisteni, '', false) + ' FROM ' + tblUmisteni + ' WHERE ID=:ID'; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + finally + lQry.Free; + end; + end; + + + + + + + + +{ TSerioveCisloPohybOZService } + + function TSerioveCisloPohybOZService.GetMeta: TJsonObject; + var lSQL, sp, sp2: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sp:= selSpecVyrCP; + sp2:= ''; + if (sp<>'') then + begin + while (ContainsText(sp, '#')) do + begin + sp:= MidStr(sp, sp.IndexOf('#')+1, sp.Length); + sp2:= LeftStr(sp, sp.IndexOf('#')-1) + ','; + if (sp.IndexOf('#')>0) then + sp:= MidStr(sp, sp.IndexOf('#')+1, sp.Length); + end; + if (RightStr(sp2,1)=',') then + sp2:= LeftStr(sp2, sp2.Length-1); + end; + + lSQL:= 'SELECT ' + GetTabCols('dbo', tblVyrCP, '', false) + IfThen(sp<>'', ', ' + sp, '') + ' FROM ' + tblVyrCP + ' WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + + function TSerioveCisloPohybOZService.GetByParams (params: TDictionary): TObjectList; + var lSQL, lSQL2, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + id, idPZ: integer; + s: TSerioveCisloPohybOZ; + sdServer: boolean; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblVyrCP, 'main') + IfThen(selSpecVyrCP<>'', ', ' + selSpecVyrCP.Replace('#', ''), '') + + ', 0 AS ZdrojSD, 0 AS IDDokladGSD FROM ' + tblVyrCP + ' main'; + where:= ''; + + sdServer:= false; + if (params.ContainsKey('sdServer')) then + if (params.Items['sdServer']='1') then + sdServer:= true; + + + id:= 0; + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + id:= params.Items['id'].ToInteger; + + idPZ:= 0; + if (params.ContainsKey('idPolozkaOZ')) then + if (params.Items['idPolozkaOZ']<>'') then + if (params.Items['idPolozkaOZ']<>'0') then + begin + idPZ:= params.Items['idPolozkaOZ'].ToInteger; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPolozkaDokladu=' + idPZ.ToString; + end; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + IfThen(id>0, 'main.ID=' + id.ToString, where); + lSQL:= lSQL + ' ORDER BY main.ID'; + + lSQL:= lSQL.Replace('TabVyrCP.', 'main.'); + if (selSpecVyrCP='') then + lSQL:= lSQL.Replace('main.', ''); + + + +{$IF DEFINED(CUSTOM_CTRL_Rootvin) or DEFINED(CUSTOM_CTRL_GatemaSD)} +// test zda polozky pochazi z SD serveru + if (idPZ>0) or (sdServer) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; +// typ 510=prijemka (potvrzeni/kontrola) + lSQL2:= 'SELECT 1 AS A FROM ' + tblGSDScanData + ' p INNER JOIN ' + tblGSDDoklady + ' h ON (h.Id=p.IDDokladSD) WHERE h.DatGenerovani IS NOT NULL AND h.TypDokladu IN (500,510) AND p.IDPohZbo_New=' + idPZ.ToString; + lSQL2:= lSQL2 + ' ORDER BY p.ID'; + lQry.Open(lSQL2); + if (lQry.RecordCount>0) then + lSQL:= lSQL2.Replace(' 1 AS A ', ' p.ID, p.IDPohZbo_New AS IDPolozkaDokladu, 0 AS IDVyrCis, p.VyrCislo AS VyrCis, p.PopisSarze AS Nazev, p.Mnozstvi, p.MnozstviEvidence AS MnozstviEvid' + + ', p.DatPorizeni AS DatVstup, p.DatumExpirace AS DatExpirace, 1 AS ZdrojSD, h.ID AS IDDokladGSD '); + + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; +{$ENDIF} + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + +end. diff --git a/uSvc_Organizace.pas b/uSvc_Organizace.pas new file mode 100644 index 0000000..fa01a6b --- /dev/null +++ b/uSvc_Organizace.pas @@ -0,0 +1,198 @@ +unit uSvc_Organizace; + +interface + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, + uHeoObj_Base; + +const +{$I globalConsts.inc} + +type + TOrganizaceService = class(TServiceBase) + public + function GetAll: TObjectList; virtual; + function GetByID(const AID: integer): TOrganizace; virtual; + function GetByCislo(const ACislo: integer): TOrganizace; virtual; + function GetByICO(const AICO: string): TObjectList; virtual; + function GetByDIC(const ADIC: string): TObjectList; virtual; + function GetByParams(params: TDictionary): TObjectList; virtual; + function GetMeta: TJSONObject; virtual; + end; + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + helTabsBIDs; + +const + selSloupce = 'SELECT ID, CisloOrg, Nazev, ICO, DIC, Ulice, PopCislo, OrCislo, Misto, PSC, PravniForma, Stav'; + + +{ TOrganizaceService } + + function TOrganizaceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg; + + where:= ''; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + 'ID=' + params.Items['id']; + + if (params.ContainsKey('cislo')) then + if (params.Items['cislo']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'CisloOrg=' + params.Items['cislo']; + + if (params.ContainsKey('ico')) then + if (params.Items['ico']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'ICO LIKE N' + QuotedStr(params.Items['ico'] + '%'); + + if (params.ContainsKey('dic')) then + if (params.Items['dic']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'DIC LIKE N' + QuotedStr(params.Items['dic'] + '%'); + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY CisloOrg'; + + try + try + FDM.sqlQry1.Open(lSQL); + result:= FDM.sqlQry1.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání organizací: ' + E.Message); + end; + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TOrganizaceService.GetAll: TObjectList; + var lSQL: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' ORDER BY CisloOrg'; + try + try + FDM.sqlQry1.Open(lSQL); + result:= FDM.sqlQry1.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítání organizací: ' + E.Message); + end; + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TOrganizaceService.GetByID (const AID: Integer): TOrganizace; + var lSQL: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' WHERE ID=:ID'; + FDM.sqlQry1.Open(lSQL, [AID]); + try + if not(FDM.sqlQry1.EOF) then + result:= FDM.sqlQry1.AsObject + else + raise EServiceException.Create('Organizace s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + FDM.sqlQry1.Close; + end; + end; + + + function TOrganizaceService.GetByCislo (const ACislo: Integer): TOrganizace; + var lSQL: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' WHERE CisloOrg=:Cislo'; + FDM.sqlQry1.Open(lSQL, [ACislo]); + try + if not(FDM.sqlQry1.EOF) then + result:= FDM.sqlQry1.AsObject + else + raise EServiceException.Create('Organizace s číslem ' + ACislo.ToString + ' nebyla nalezena.'); + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TOrganizaceService.GetByICO (const AICO: string): TObjectList; + var lSQL: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' WHERE ICO=:ICO ORDER BY CisloOrg'; + FDM.sqlQry1.Open(lSQL, [AICO]); + try + if not(FDM.sqlQry1.EOF) then + result:= FDM.sqlQry1.AsObjectList + else + raise EServiceException.Create('Organizace s IČO ' + AICO + ' nebyla nalezena.'); + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TOrganizaceService.GetByDIC(const ADIC: string): TObjectList; + var lSQL: string; + begin + result:= nil; + + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' WHERE DIC=:DIC ORDER BY CisloOrg'; + FDM.sqlQry1.Open(lSQL, [ADIC]); + try + if not(FDM.sqlQry1.EOF) then + result:= FDM.sqlQry1.AsObjectList + else + raise EServiceException.Create('Organizace s DIČ ' + ADIC + ' nebyla nalezena.'); + finally + FDM.sqlQry1.Close; + end; + end; + + + + function TOrganizaceService.GetMeta: TJSONObject; + var lSQL: string; + begin + try + lSQL:= selSloupce + ' FROM ' + tblCOrg + ' WHERE 1=0'; + FDM.sqlQry1.Open(lSQL); + Result := FDM.sqlQry1.MetadataAsJSONObject(); + finally + FDM.sqlQry1.Close; + end; + end; + + +end. diff --git a/uSvc_QMS.pas b/uSvc_QMS.pas new file mode 100644 index 0000000..d6d6ac3 --- /dev/null +++ b/uSvc_QMS.pas @@ -0,0 +1,214 @@ +ďťżunit uSvc_QMS; + +interface + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, + uHeoObj_Base; + +const +{$I globalConsts.inc} + +type + TQMSObecneService = class(TServiceBase) + public + function GetCislenikQMS (typ, agenda: integer): TObjectList; virtual; + end; + + + + TQMSUdrzbaStrojuAZarizeniService = class(TServiceBase) + public + function GetAll: TObjectList; virtual; + function GetByID (const AID: integer): TQMSUdrzbaStrojuAZarizeni; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetMeta: TJSONObject; virtual; + function GetByFindParams (SearchTerm: string): TObjectList; + end; + +implementation + +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + helTabsBIDs; + +const + selSloupce = 'SELECT ID, CisloOrg, Nazev, ICO, DIC, Ulice, PopCislo, OrCislo, Misto, PSC, PravniForma, Stav'; + + + + + +{ TQMSObecneService } + function TQMSObecneService.GetCislenikQMS (typ, agenda: integer): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblQMSCis, '', false, '') + ' FROM ' + tblQMSCis; + lSQL:= lSQL + ' WHERE Ciselnik=' + typ.ToString + ' AND IDQMS' + IfThen(agenda<0, ' IS NULL', '=' + agenda.ToString); + lSQL:= lSQL + ' ORDER BY Cislo'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ číselnĂ­ku ĂşdrĹžby stroje: ' + E.Message); + end; + finally + lQry.Free; + end; + end; + + + + + + + +{ TQMSUdrzbaStrojuAZarizeniService } + + function TQMSUdrzbaStrojuAZarizeniService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKJ, '', false, '') + ' FROM ' + tblKJ; + + where:= 'Kategorie IN (SELECT Cislo FROM ' + tblKategKJ + ' WHERE QMSAgenda=1)'; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + ' AND ID=' + params.Items['id']; + + if (params.ContainsKey('utvar')) then + where:= where + IfThen(where<>'', ' AND ', '') + 'Utvar=N' + params.Items['utvar'].QuotedString; + + if (params.ContainsKey('stav')) then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDCis1=(SELECT ID FROM ' + tblQMSCis + ' WHERE Cislo=N' + params.Items['stav'].QuotedString + ' AND Ciselnik=1 AND IDQMS=1)'; + + if (params.ContainsKey('druh')) then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDCis2=(SELECT ID FROM ' + tblQMSCis + ' WHERE Cislo=N' + params.Items['druh'].QuotedString + ' AND Ciselnik=2 AND IDQMS=1)'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY Kategorie, PoradoveCislo'; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ ĂşdrĹžby stroje: ' + E.Message); + end; + finally + lQry.Free; + end; + end; + + + + + function TQMSUdrzbaStrojuAZarizeniService.GetAll: TObjectList; + var lSQL: string; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKJ, '', false, '') + ' FROM ' + tblKJ + ' WHERE Kategorie IN (SELECT Cislo FROM ' + tblKategKJ; + lSQL:= lSQL + ' WHERE QMSAgenda=1) ORDER BY Kategorie, PoradoveCislo'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create('Chyba načítĂĄnĂ­ ĂşdrĹžby stroje: ' + E.Message); + end; + finally + lQry.Free; + end; + end; + + + + + function TQMSUdrzbaStrojuAZarizeniService.GetByID (const AID: Integer): TQMSUdrzbaStrojuAZarizeni; + var lSQL: string; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKJ, '', false, '') + ' FROM ' + tblKJ + ' WHERE Kategorie IN (SELECT Cislo FROM ' + tblKategKJ; + lSQL:= lSQL + ' WHERE QMSAgenda=1) AND ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL, [AID]); + if not(lQry.EOF) then + result:= lQry.AsObject + else + raise EServiceException.Create('ÚdrĹžba stroje s ID ' + AID.ToString + ' nebyla nalezena.'); + finally + lQry.Free; + end; + end; + + + + function TQMSUdrzbaStrojuAZarizeniService.GetByFindParams (SearchTerm: string): TObjectList; + var lSQL: string; + lQry: TFDQuery; + AID: integer; + begin + result:= GetAll; +{ + if not SearchTerm.IsEmpty then + for var i:= Result.Count - 1 downto 0 do + if not Result[I].MovieName.ToUpper.Contains(SearchTerm.ToUpper) then + Result.Delete(I);; +} + end; + + + + function TQMSUdrzbaStrojuAZarizeniService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKJ, '', false, '') + ' FROM ' + tblKJ + ' WHERE 1=0'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + +end. diff --git a/uSvc_Vyroba.pas b/uSvc_Vyroba.pas new file mode 100644 index 0000000..5e3461e --- /dev/null +++ b/uSvc_Vyroba.pas @@ -0,0 +1,4656 @@ +ďťżunit uSvc_Vyroba; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + System.SysUtils, + Winapi.ActiveX, + System.JSON, + JsonDataObjects, + + Quick.Logger, + + uCommons, + uSvc_Base, + uSvc_ObehZbozi, + helTabsBIDs, // nazvy tabulek a BID prehledu + uHeOObj_Base, + uHeoObj_Vyroba, + uHeoObj_QMS; + +const +{$I globalConsts.inc} + +{ + createTabAPIKusovnik = 'CREATE TABLE #apiKusovnik (ID INT IDENTITY(1,1) NOT NULL, Generuj BIT NOT NULL DEFAULT 1, PoKorekciDat BIT NOT NULL DEFAULT 0, IDPrKV INT NOT NULL' + + ', Doklad INT NOT NULL, IDPrikaz INT NOT NULL, Prednastaveno BIT NOT NULL DEFAULT 1, Sklad NVARCHAR(30), VyrStredisko NVARCHAR(30)' + + ', IDPracoviste INT, mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0' + + ', Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0' + + ', Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, MnozstviMax NUMERIC(19,6), PuvodniMnozstviPoz NUMERIC(19,6), MnozstviPoz NUMERIC(19,6) NOT NULL' + + ', PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, IDPohZbo INT, PoznamkaNaDoklad NTEXT, priorita INT NOT NULL DEFAULT 0, vyssi INT NOT NULL, nizsi INT NOT NULL' + + ', SZVyssi NVARCHAR(3), RCVyssi NVARCHAR(30), Nazev1Vyssi NVARCHAR(100), SZNizsi NVARCHAR(3), RCNizsi NVARCHAR(30), Nazev1Nizsi NVARCHAR(100)' + + ', DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, pozice NVARCHAR(100) DEFAULT N'''', Operace NCHAR(4), FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0' + + ', mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0' + + ', Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, Poznamka NTEXT, pom_pomer_A NUMERIC(19,6), pom_pomer_B NUMERIC(19,6), Dodavatel INT' + + ', mnoz_pozadovane AS (CONVERT(numeric(19,6), CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))' + + ')'; +} + + createTabAPIKusovnik = 'CREATE TABLE #apiKusovnik (vyssi INT NULL, IDKmenZbozi INT NOT NULL, uroven INT NOT NULL, poradi INT NOT NULL, IDKVazby INT NULL, mnozstvi NUMERIC(19,6) NOT NULL,' + + ' prirez NUMERIC(19,6) NULL, RezijniMat BIT NOT NULL, VyraditZKalkulace BIT NOT NULL)'; + + errMaterialy = 'Chyba ncteni materialovych pozadavku - '; + errPostupy = 'Chyba nacteni technologickych postupu - '; + + selPrikazSpec = 'zak.CisloZakazky, kz.SkupZbo AS SZ, kz.RegCis, kz.Nazev1, kz.MJEvidence, zmod.Kod AS KodZakazModif'; + + selMaterialSpec = 'kzN.SkupZbo AS SZNizsi, kzN.RegCis AS RCNizsi, kzN.Nazev1 AS Nazev1Nizsi, kzN.MJEvidence AS MJNizsi, kzV.SkupZbo AS SZVyssi, kzV.RegCis AS RCVyssi' + + ', kzV.Nazev1 AS Nazev1Vyssi, kzV.MJEvidence AS MJVyssi'; + + selCisKoopSpec = '(SELECT d.CisloOrg FROM ' + tblCOrg + ' d WHERE d.ID=main.dodavatel) AS Dodavatel, (SELECT m.CisloOrg FROM ' + tblCOrg + ' m WHERE m.ID=main.IDMistoUrceni) AS MistoUrceni'; + + selNazevOperaceEvidROp = '(SELECT TOP(1) Kod FROM ' + tblCisStroj + ' WHERE ID=main.IDStroje) AS KodStroje,' + + '(SELECT TOP(1) Nazev FROM ' + tblCisStroj + ' WHERE ID=main.IDStroje) AS NazevStroje,' + + '(SELECT TOP(1) pracoviste FROM ' + tblCPrac + ' WHERE ID=main.IDPracoviste) AS KodPracoviste,' + + '(SELECT TOP(1) Nazev FROM ' + tblCPrac + ' WHERE ID=main.IDPracoviste) AS NazevPracoviste'; + + selNazevOperaceEvidROpR = '(SELECT TOP(1) Nazev FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup' + + ' AND IDPrikaz=main.IDPrikaz /*AND Priorita=0*/ ) AS NazevOperace, (SELECT TOP(1) k.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' + + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS Nazev1Dilce, (SELECT TOP(1) k.SkupZbo FROM ' + tblPrikaz + ' p INNER JOIN ' + + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS SkupZboDilce, (SELECT TOP(1) k.RegCis FROM ' + tblPrikaz + ' p INNER JOIN ' + + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS RegCisDilce'; + + selOperaceSpec = '(SELECT COUNT(ID) FROM ' + tblKPLHlav + ' WHERE DruhDokladu=5 AND IDOperace=TabPrPostup.ID) AS PocetKP' + + ', TabPrPostup.Kusy_zad AS _info_Kusy_zad, TabPrPostup.Kusy_nepotrebne AS _info_Kusy_nepotrebne, TabPrPostup.Kusy_pozadovane AS _info_Kusy_pozadovane' + + ', TabPrPostup.ProcSplneni AS _info_ProcSplneni, TabPrPostup.Kusy_zive AS _info_Kusy_zive, TabPrPostup.Kusy_odv AS _info_Kusy_odv' + + ', TabPrPostup.Kusy_zmet AS _info_Kusy_zmet, TabPrPostup.Kusy_zmet_opr_IO AS _info_Kusy_zmet_opr_IO, TabPrPostup.Kusy_zmet_neopr AS _info_Kusy_zmet_neopr' + + ', (SELECT s.Nazev FROM ' + tblCisStroj + ' s WHERE s.ID=main.IDStroje) AS StrojNazev, (SELECT s.Kod FROM ' + tblCisStroj + ' s WHERE s.ID=main.IDStroje) AS StrojKod'; + + + selPolKoopObjSpec = ''; + + selVyrCisPrikazSpec = ''; + + selEvidOperace = '(SELECT IDEvidRozpracOper FROM ' + tblRozpracOperR + ' WHERE ID=main.IDEvidRozpracOperR) AS IDEvidRozpracOper' + + ', (SELECT nazev FROM ' + tblPrPost + ' WHERE IDPrikaz=main.IDPrikaz AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup AND IDOdchylkyDo IS NULL) AS NazevOperace'; + + selTPVStroj = 'p.pracoviste'; + + sqlSelKPs = 'SELECT ID, Kategorie, (SELECT k.Popis FROM ' + tblKategKJ + ' k WHERE k.Cislo=Kategorie) AS PopisKategorie, PoradoveCislo, IDKmenZbozi'; + + + sqlSelKPParams = 'SELECT ID, IDKPLHlav, Poradi, TypHodnoty, CASE TypHodnoty WHEN 0 THEN N''Číslo'' WHEN 1 THEN N''Text'' WHEN 2 THEN N''Ano/Ne'' END AS TypHodnotyText' + + ', Popis, HodnotaPozadovanaI, ToleranceDolni, ToleranceHorni, HodnotaNamerena, HodnotaText'; + + + sqlSelKPParamsCis = 'SELECT FROM ' + tblKPCisParamsKontr; + + selEvidRozpOpSpec = ''; + +type + TKooperacniObjednavkaService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer; const polozky: Boolean=false): TKooperacniObjednavka; + end; + + + TKooperacniObjednavkaPolozkaService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer): TKooperacniObjednavkaPolozka; + end; + + + + TVyrobniPrikazSearchParam = record + id: integer; + rada: string; + cisZak: string; + stav: byte; + idZak: Integer; + end; + + + TTPVZakazkoveModifikaceService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + + TTPVZakazkoveModifikaceDilceService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + + TTPVPrednastaveniOperaciService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetAll (params: TDictionary=nil): TObjectList; + function GetByID (const AID: integer=0; params: TDictionary=nil): TTPVPrednastaveniOperaci; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TVyrobaEvidRozpracOperaciService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function RadekGetMeta: TJSONObject; virtual; + function GetByID (const AID: integer; incOper: boolean): TEvidRozpracOperace; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TVyrobaEvidRozpracOperaciOperaceService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil): TEvidRozpracOperaceOperace; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TVyrobaEvidenceOperaciService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByID (const AID: integer; params: TDictionary=nil): TVyrobaEvidovanaOperace; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TVyrobniPrikazService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetByID (const AID: integer; params: TDictionary=nil): TVyrobniPrikaz; + function GetByParams (params: TDictionary): TObjectList; + function GetMeta: TJSONObject; virtual; + function GetDokumentaci (const AID: integer; jenSeznam: boolean=false; oblast: byte=3; operace: string=''; base64: boolean=false): TObjectList; + function GetDokladyOZ (const AID: integer; polozky: Boolean=false): TObjectList; + function GetKusovnik (idVPr: integer; mnozReq: extended; jenPlatne: boolean=true; idKmen: integer = 0): TObjectList; + end; + + + TVyrobaVyrCisPrikazService = class(TServiceBase) + public + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: integer; params: TDictionary=nil): TVyrCisPrikaz; + function GetMeta: TJSONObject; virtual; + end; + + + TMaterialPrikazuService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil; jenPlatne: boolean=true): TObjectList; + function GetByParams (params: TDictionary): TObjectList; + function GetByID (const AID: Integer): TMaterialPrikazu; + function GetByIDVPr (idVPr: integer; jenPlatne: boolean=true): TObjectList; + function GetMeta: TJSONObject; virtual; + function GetMetaKusovniku: TJSONObject; + end; + + + + TTPVKusovnikDilceService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TTPVOperaceDilceService = class(TServiceBase) + public + function GetMeta: TJSONObject; virtual; + function GetByParams (params: TDictionary): TObjectList; + end; + + + + TVyrobniOperaceService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVPr: Boolean=true): TObjectList; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByID (const AID: Integer; params: TDictionary=nil): TVyrobniOperace; virtual; + function GetByIDPrikazu (const AID: Integer): TObjectList; virtual; + function GetKPsByID (const AID: Integer): TObjectList; + function GetByBarCode (const ABarCode: string): TVyrobniOperace; virtual; + function GetMeta: TJSONObject; virtual; + procedure Update (AOperace: TVyrobniOperace); + procedure ZapisDZTasku (jsonData: string; var respString: string); + function GetDZTaskyNeevidovane(odDatum, doDatum: string): TObjectList; + end; + + + + TQMSKontrolniPostupyService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetByID (const AID: integer): TQMSKontrolniPostup; + function GetListByIDPostup(const AID: integer): TObjectList; + function GetMeta: TJSONObject; + function GetParamsByIDHlav (const AID: Integer): TObjectList; + end; + + + TQMSKontrolniPlanService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetByID (const AID: integer): TQMSKontrolniPlan; + function GetMeta: TJSONObject; + function GetByParams (params: TDictionary): TObjectList; virtual; + end; + + + TTPVPracovisteService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetByID (const AID: integer): TTPVPracoviste; + function GetMeta: TJSONObject; + function GetFrontaPrace(const AID: integer): TObjectList; + end; + + + + TTPVStrojService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetMeta: TJSONObject; + function GetByID(const AID: integer): TTPVStroj; + function GetByParams(params: TDictionary): TObjectList; + end; + + + TTPVCisKoopService = class(TServiceBase) + public + function GetAll (params: TDictionary=nil): TObjectList; + function GetMeta: TJSONObject; + function GetByID(const AID: integer): TTPVCisKoop; + function GetByParams(params: TDictionary): TObjectList; + end; + + + TTPVCiselnikZmenService = class(TServiceBase) + public + function GetMeta: TJSONObject; + function GetByID (const AID: Integer): TTPVCiselnikZmen; + function GetByParams(params: TDictionary): TObjectList; + end; + + + +implementation + +uses + System.StrUtils, + System.DateUtils, + System.RegularExpressions, + REST.Json, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + +{ TTPVCisKoopService } + + function TTPVCisKoopService.GetMeta: TJSONObject; + var lSQL: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + + lSQL:= 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') + + ' FROM ' + tblCisKoop + ' main WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + end; + lQry.Free; + sqlConnX.Free; + end; + + + + function TTPVCisKoopService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, ordBy, errMsg: string; + jenSeznam: boolean; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.Rada, main.kod'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') + + ' FROM ' + tblCisKoop + ' main'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + end; + lQry.Free; + sqlConnX.Free; + end; + + + + function TTPVCisKoopService.GetByID (const AID: Integer): TTPVCisKoop; + var lSQL: string; + p: TDictionary; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= 'SELECT main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev' + IfThen(selCisKoopSpec<>'', ', '+ selCisKoopSpec, '') + + ' FROM ' + tblCisKoop + ' main WHERE main.ID=:ID'; + + p:= TDictionary.Create; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + try + if (lQry.RecordCount=1) then + result:= lQry.AsObject + else + raise EServiceException.Create('Kooperace s ID ' + AID.ToString + ' nebyla nalezena.'); + except on E:Exception do + raise EServiceException.Create('Kooperace s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + end; + finally + end; + p.Free; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVCisKoopService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + AID, cnt, rNo: integer; + jenSeznam: boolean; + sqlConnX: TFDConnection; + lQry: TFDQuery; + lVPr: TObjectList; + vpr: TTPVCisKoop; + begin + result:= nil; + + vpr:= TTPVCisKoop.Create; + lVPr:= TObjectList.Create; + + jenSeznam:= false; + ordBy:= 'main.Rada, main.Kod'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT main.ID FROM ' + tblCisKoop + ' main'; + if (jenSeznam) then + lSQL:= lSQL.Replace('main.ID', 'main.ID, main.Rada, main.kod, main.Blokovano, main.Nazev'); + + where:= ''; + + + if (params<>nil) then + begin + if (params.ContainsKey('rada')) then + if (params.Items['rada']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N' + params.Items['rada'].QuotedString; + end; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL:= lSQL.Replace('main.', ''); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + vpr:= self.GetByID (AID); + lVPr.Add(vpr); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= lVpr; + finally + lQry.Free; + end; + end + else + raise EServiceException.Create('Vybranym podminkam neodpovida zadna kooperace'); + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + +{ TKooperacniObjednavkaService } + + function TKooperacniObjednavkaService.GetMeta: TJSONObject; + var lSQL: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblKObj) + ' FROM ' + tblKObj + ' WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result:= lQry.MetadataAsJSONObject(); + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TKooperacniObjednavkaService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + jenSeznam: boolean; + cnt, rNo, pol: integer; + bPol: boolean; + sqlConnX: TFDConnection; + lQry: TFDQuery; + koopObj: TKooperacniObjednavka; + lKoopObj: TObjectList; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ID FROM ' + tblKObj; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'ID=' + params.Items['id']; + + if (params.ContainsKey('rada')) then + if (params.Items['rada']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Rada=N' + params.Items['rada'].QuotedString; + + if (params.ContainsKey('cOrgKoop')) then + if (params.Items['cOrgKoop']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDOrganizace=(SELECT ID FROM ' + tblCOrg + ' WHERE CisloOrg=' + params.Items['cOrgKoop'] + ')'; + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni>=CONVERT(datetime, N' + params.Items['odDatum'].QuotedString + ', 104)'; + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'DatPorizeni<=CONVERT(datetime, N' + params.Items['doDatum'].QuotedString + ', 104)'; + end; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + koopObj:= TKooperacniObjednavka.Create; + lKoopObj:= TObjectList.Create; + + pol:= 0; + if (params<>nil) then + if (params.ContainsKey('polozky')) then + if not(TryStrToInt(params.Items['polozky'], pol)) then + pol:= 0; + bPol:= (pol=1); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + koopObj:= self.GetByID(lQry.FieldByName('ID').AsInteger, bPol); + lKoopObj.Add(koopObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= lKoopObj; + finally + end; + end + else + raise EServiceException.Create('Vybranym podminkam neodpovida zadna kooperacni objednavka'); + finally + end; + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TKooperacniObjednavkaService.GetByID (const AID: Integer; const polozky: boolean=false): TKooperacniObjednavka; + var lSQL, where: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + p: TDictionary; + pols: TObjectList; + koS: TKooperacniObjednavkaPolozkaService; + begin + result:= nil; + + if (polozky) then + begin + p:= TDictionary.Create; + koS:= TKooperacniObjednavkaPolozkaService.Create(self.FDM); + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblKObj, '', true) + ' FROM ' + tblKObj + ' WHERE ID=:ID'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + Result:= lQry.AsObject; + if (polozky) then + begin + p.Add('idobj', AID.ToString); + pols:= koS.GetByParams (p); + Result.Polozky:= pols; + end; + except + end; + finally + end; + + lQry.Free; + sqlConnX.Free; + + if (polozky) then + begin + p.Free; + koS.Free; + end; + + end; + + + + + + +{ TKooperacniObjednavkaPolozkaService } + function TKooperacniObjednavkaPolozkaService.GetMeta: TJSONObject; + var lSQL: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblPKObj, 'main') + IfThen(selPolKoopObjSpec<>'', ',' + selPolKoopObjSpec, '') + ' FROM ' + tblPKObj + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabPolKoopObj.', 'main.'); + if (selPolKoopObjSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + end; + lQry.Free; + sqlConnX.Free; + end; + + + + + function TKooperacniObjednavkaPolozkaService.GetByID (const AID: integer): TKooperacniObjednavkaPolozka; + begin + result:= nil; + + end; + + + + + function TKooperacniObjednavkaPolozkaService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + jenSeznam: boolean; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblPKObj, 'main') + IfThen(selPolKoopObjSpec<>'', ',' + selPolKoopObjSpec, '') + ' FROM ' + tblPKObj + ' main'; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('idobj')) then + if (params.Items['idobj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDObjednavky=' + params.Items['idobj']; + end; + + + lSQL:= lSQL.Replace('TabPolKoopObj.', 'main.'); + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + if (selPolKoopObjSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result := lQry.AsObjectList; + finally + end; + + lQry.Free; + sqlConnX.Free; + end; + + + + + + + + + + +{ TVyrobniPrikazService } + + function TVyrobniPrikazService.GetByID (const AID: integer; params: TDictionary=nil): TVyrobniPrikaz; + var lSQL, strTemp: string; + id, rNum: integer; + p: TDictionary; + debug, stopDebug, operace, material: boolean; + lOper: TObjectList; + opSrv: TVyrobniOperaceService; + + lMaterial: TObjectList; + matSrv: TMaterialPrikazuService; + + lVyrCisla: TObjectList; + vyrCis: TVyrCisPrikaz; + vcSrv: TVyrobaVyrCisPrikazService; + + lNadrizenePrikazy: TObjectList; + lPodrizenePrikazy: TObjectList; + vprSrv: TVyrobniPrikazService; + sqlConnX: TFDConnection; + lQry: TFDQuery; + extInfoStr: string; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPrikazE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrikazE, '', true, 'ID') + ' FROM ' + tblPrikazE + ' WHERE ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + operace:= false; + material:= false; + debug:= false; + stopDebug:= false; + if (params<>nil) then + begin + if (params.ContainsKey('operace')) then + if (params.Items['operace']='1') then + operace:= true; + if (params.ContainsKey('material')) then + if (params.Items['material']='1') then + material:= true; + if (params.ContainsKey('debug')) then + if (params.Items['debug']='1') then + debug:= true; + if (params.ContainsKey('debug')) then + if (params.Items['debug']='0') then + stopDebug:= true; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblVPr, 'main', false) + IfThen(selPrikazSpec<>'', ',' + selPrikazSpec, '') + ' FROM ' + tblVPr + ' main' + + ' INNER JOIN ' + tblKZ + ' kz ON (kz.ID=main.IDTabKmen) LEFT JOIN ' + tblZak + ' zak ON (zak.ID=main.IDZakazka)' + + ' LEFT JOIN ' + tblZakazModif + ' zmod ON (zmod.ID=main.IDZakazModif) WHERE main.ID=:ID'; + if (selPrikazSpec='') then + lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); + + rNum:= 0; + lQry:= TFDQuery.Create(nil); + try + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + rNum:= lQry.RecordCount; + except on E:Exception do + raise EServiceException.Create ('Vyrobni prikaz s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); + end; + finally + lQry.Free; + end; + if (rNum=0) then + begin + sqlConnX.Close; + sqlConnX.Free; + Exit; + end; + + + if (debug) then + begin + if (self.FDM.Logger=nil) then + self.FDM.CreateLogger ('debug.log'); + if (self.FDM.Logger<>nil) then + try + self.FDM.LogInfo (Quick.Logger.TEventType.etDebug, lSQL); + except on E:Exception do + strTemp:= E.Message; + end; + end; + + + p:= TDictionary.Create; + p.Add('idprikaz', AID.ToString); + opSrv:= TVyrobniOperaceService.Create (self.FDM); + matSrv:= TMaterialPrikazuService.Create (self.FDM); + vcSrv:= TVyrobaVyrCisPrikazService.Create (self.FDM); + + +{$IFDEF CUSTOM_CTRL_Rootvin} + if (params.ContainsKey('rtn')) then + p.Add('rtn', params.Items['rtn']); + if (params.ContainsKey('typPrikazu')) then + p.Add('typPrikazu', params.Items['typPrikazu']); + if (params.ContainsKey('nazevOp')) then + p.Add('nazevOp', params.Items['nazevOp']); +{$ENDIF} + + + lQry:= TFDQuery.Create(nil); + try + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + rNum:= lQry.RecordCount; + if (rNum>0) then + begin + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + + lVyrCisla:= vcSrv.GetByParams (p); + try + if (lVyrCisla.Count>0) then + result.VyrobniCisla:= lVyrCisla; + except + end; + + if (operace) then + begin + lOper:= opSrv.GetByParams (p); + try + if (lOper.Count>0) then + result.VyrobniOperace:= lOper; + except + end; + end; + + if (material) then + begin + lMaterial:= matSrv.GetByParams (p); + try + if (lMaterial.Count>0) then + result.Material := lMaterial; + except + end; + end; + + + lSQL:= 'SELECT h.CasZahajeni FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper) WHERE r.IDPrikaz=:ID'; + lSQL:= lSQL + ' AND h.CasZahajeni IS NOT NULL AND h.CasUkonceni IS NULL'; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.Eof) then + result.EvidRozpracOperStart:= lQry.FieldByName('CasZahajeni').AsDateTime; + + + lSQL:= 'SELECT v.ID, v.IDPrikaz, v.IDPrikazVyssi, v.Mnozstvi, v.KryteMnozstvi, v.PoziceKV, pv.IDTabKmen AS IDDilecVyssi, SkupZboV=kv.SkupZbo'; + lSQL:= lSQL + ', RegCisV=kv.RegCis, Nazev1V=kv.Nazev1, v.Autor, v.DatPorizeni, v.Zmenil, v.DatZmeny FROM ' + tblPrikazVazby + ' v INNER JOIN '; + lSQL:= lSQL + tblPrikaz + ' pv ON (pv.ID=v.IDPrikazVyssi) INNER JOIN ' + tblKZ + ' kv ON (kv.ID=pv.IDTabKmen) WHERE v.IDPrikaz=:ID'; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.Eof) then + result.NadrizenePrikazy:= lQry.AsObjectList; + + + lSQL:= 'SELECT v.ID, v.IDPrikaz, v.IDPrikazVyssi, v.Mnozstvi, v.KryteMnozstvi, v.PoziceKV, pn.IDTabKmen AS IDDilecNizsi, SkupZboN=kn.SkupZbo'; + lSQL:= lSQL + ', RegCisN=kn.RegCis, Nazev1N=kn.Nazev1, v.Autor, v.DatPorizeni, v.Zmenil, v.DatZmeny FROM ' + tblPrikazVazby + ' v INNER JOIN '; + lSQL:= lSQL + tblPrikaz + ' pn ON (pn.ID=v.IDPrikaz) INNER JOIN ' + tblKZ + ' kn ON (kn.ID=pn.IDTabKmen) WHERE v.IDPrikazVyssi=:ID'; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.Eof) then + result.PodrizenePrikazy:= lQry.AsObjectList; + + end + end; +// else +// raise EServiceException.Create ('Vyrobni prikaz s ID ' + AID.ToString + ' nebyl nalezen.'); + except on E:Exception do + raise EServiceException.Create ('Vyrobni prikaz s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); + end; + finally + p.Free; + vcSrv.Free; + matSrv.Free; + opSrv.Free; + lQry.Free; + end; + + + if (debug) or (stopDebug) then + begin + self.FDM.Logger.Drain; + Sleep(50); + self.FDM.Logger.Stop; + end; + + sqlConnX.Close; + sqlConnX.Free; + +// strTemp:= TJson.ObjectToJsonString(result); + end; + + + + + function TVyrobniPrikazService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblVPr, 'main') + ' FROM ' + tblVPr + ' main'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + end; + + lQry.Free; + sqlConnX.Free; + end; + + + + + function TVyrobniPrikazService.GetDokladyOZ (const AID: Integer; polozky: Boolean = False): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + cnt, rNo: integer; + r: TObjectList; + d: TDokladOZ; + s: uSvc_ObehZbozi.TDokladOZService; + lDokl: TObjectList; + begin + result:= nil; + s:= uSvc_ObehZbozi.TDokladOZService.Create(self.FDM); + + lSQL:= 'SELECT DISTINCT(d.ID) FROM ' + tblDZ + ' d INNER JOIN ' + tblPZ + ' p ON (p.IDDoklad=d.ID) WHERE d.IDPrikaz=' + AID.ToString; + lSQL:= lSQL + ' OR p.IDPrikaz= ' + AID.ToString + ' GROUP BY d.ID ORDER BY d.DatPorizeni'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + d:= s.GetByID (lQry.FieldByName('ID').AsInteger, false); // s polozkami + lDokl.Add(d); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= lDokl; + finally + lQry.Free; + end; + end + else + raise EServiceException.Create('Vybranym podminkam neodpovida zadny doklad OZ'); + finally + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniPrikazService.GetDokumentaci (const AID: Integer; jenSeznam: Boolean = False; oblast: byte=3; operace: string=''; base64: boolean=false): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + a: TArray; + i: integer; + begin + result:= nil; + + a:= GetTabColsArray('', tblVyrobDokum, 'vd'); + if (jenSeznam) then + TabColsArrayRemove(a, 'vd.Dokument'); + SetLength(a, Length(a)+1); + a[Length(a)-1]:= 'vvd.Operace'; + + lSQL:= 'SELECT ' + string.Join(',', a) + ' FROM ' + tblVyrobDokum + ' vd INNER JOIN ' + tblVazbyVyrobDokum + ' vvd ON (vvd.ID1VyrDokum=vd.ID1)'; + lSQL:= lSQL + ' WHERE vd.zmenaDo IS NULL AND vd.Archiv=0 AND vvd.Oblast=' + oblast.ToString + ' AND vvd.RecID=' + AID.ToString; + lSQL:= lSQL + ' AND (vvd.RecID2 IS NULL OR vvd.RecID2=0)'; + if (operace<>'') then + lSQL:= lSQL + ' AND LTRIM(RTRIM(vvd.Operace))=N' + operace.QuotedString; + lSQL:= lSQL + ' ORDER BY vd.ID'; + + if (base64) then + lSQL:= lSQL.Replace('vd.Dokument', 'dbo.ef_EncodeBase64(vd.Dokument) AS Dokument'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniPrikazService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + jenSeznam: boolean; + operace, material, spustene: boolean; + id, AID, iRet, cnt, rNo: integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + retObj: TVyrobniPrikaz; + lsRetObj: TObjectList; + locParams: TDictionary; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + locParams:= TDictionary.Create; + + + lSQL:= 'SELECT main.ID FROM ' + tblVPr + ' main' + + ' INNER JOIN ' + tblKZ + ' kz ON (kz.ID=main.IDTabKmen) LEFT JOIN ' + tblZak + ' zak ON (zak.ID=main.IDZakazka)'; + + where:= ''; + + id:= 0; + if (params<>nil) then + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + begin + id:= params.Items['id'].ToInteger; + + if (params.ContainsKey('jenId')) then + begin + if (params.Items['jenId']<>'') then + if (params.Items['jenId']='1') then + begin + lSQL:= 'SELECT main.ID FROM ' + tblVPr + ' main' + + ' INNER JOIN ' + tblKZ + ' kz ON (kz.ID=main.IDTabKmen) LEFT JOIN ' + tblZak + ' zak ON (zak.ID=main.IDZakazka)'; + where:= 'main.ID IN (SELECT IDPrikazVyssi FROM ' + tblPrikazVazby + ' WHERE IDPrikaz=' + id.ToString + ')'; + end + end + else + where:= where + 'main.ID=' + id.ToString; + end; + + spustene:= false; + if (params<>nil) then + begin + if (params.ContainsKey('spustene')) then + if (params.Items['spustene']='1') then + spustene:= true; + + if (params.ContainsKey('idDilce')) then + if (params.Items['idDilce']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'kz.ID=' + params.Items['idDilce']; + + if (params.ContainsKey('rada')) then + if (params.Items['rada']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=N' + params.Items['rada'].QuotedString; + + if (params.ContainsKey('prikaz')) then + if (params.Items['prikaz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Prikaz=' + params.Items['prikaz']; + + if (params.ContainsKey('cisloZakazky')) then + if (params.Items['cisloZakazky']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'zak.CisloZakazky=N' + params.Items['cisloZakazky'].QuotedString; + + if (params.ContainsKey('idZakazky')) then + if (params.Items['idZakazky']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazka=' + params.Items['idZakazky']; +{ + if (params.ContainsKey('idZakazModif')) then + begin + if (params.Items['idZakazModif']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif=' + params.Items['idZakazModif'] + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif IS NULL'; + end + else + begin + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif IS NULL'; + end; +} + + if (params.ContainsKey('stav')) then + if (params.Items['stav']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.StavPrikazu=' + params.Items['stav']; + + if (params.ContainsKey('skDilce')) then + if (params.Items['skDilce']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'kz.SkupZbo=N' + params.Items['skDilce'].QuotedString; + end; + + if (spustene) then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS (SELECT 1 FROM ' + tblPrPost + ' pp INNER JOIN ' + tblRozpracOperR + + ' r ON (r.DokladPrPostup=pp.Doklad AND r.AltPrPostup=pp.Alt AND r.IDPrikaz=pp.IDPrikaz)' + + ' INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper)' + + ' WHERE pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=main.ID AND h.DatumUzavreni IS NULL)'; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); + if (selPrikazSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + + operace:= false; + material:= false; + + if (params<>nil) then + begin + if (params.ContainsKey('operace')) then + if (params.Items['operace']='1') then + begin + operace:= true; + locParams.Add ('operace', '1'); + end; + + if (params.ContainsKey('material')) then + if (params.Items['material']='1') then + begin + material:= true; + locParams.Add ('material', '1'); + end; + + + if (params.ContainsKey('debug')) then + if (params.Items['debug']='1') then + locParams.Add ('debug', '1'); + end; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + try + retObj:= TVyrobniPrikaz.Create; + lsRetObj:= TObjectList.Create; + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retObj:= self.GetByID (AID, locParams); + lsRetObj.Add (retObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= lsRetObj; + finally + end; + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniPrikazService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblVPr, 'main') + IfThen(selPrikazSpec<>'', ',' + selPrikazSpec, '') + ' FROM ' + tblVPr + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); + if (selPrikazSpec='') then + lSQL:= lSQL.Replace('main.', ''); + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + function TVyrobniPrikazService.GetKusovnik (idVPr: Integer; mnozReq: Extended; jenPlatne: Boolean = True; idKmen: Integer = 0): TObjectList; + var lSQL, lSQL2, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + idModif: integer; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + idModif:= 0; + if (idVPr>0) and (idKmen=0) then + begin + lSQL:= 'SELECT IDTabKmen, IDZakazModif FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + idKmen:= lQry.FieldByName('IDTabKmen').AsInteger; + idModif:= lQry.FieldByName('IDZakazModif').AsInteger; + except on E:Exception do + raise EServiceException.Create (errMaterialy + E.Message); + end; + lQry.Free; + end; + + +// nacti kusovnik z TPV pro pozadovany pocet ks + if ((idKmen>0)) and (mnozReq>=0) then + begin + lSQL:= 'SET NOCOUNT ON' + CRLF + 'DECLARE @dat DATETIME=GETDATE()' + CRLF + + 'IF OBJECT_ID(N''tempdb..#apiKusovnik'', N''U'') IS NOT NULL DROP TABLE #apiKusovnik' + CRLF + createTabAPIKusovnik + CRLF + + 'INSERT INTO #apiKusovnik EXEC dbo.hp_generujKusovnik @IDFinal=' + idKmen.ToString + ', @MNF=' + mnozReq.ToString + ', @datum=@dat, @Can_raise=0' + CRLF + + ', @IDZakazModif=' + IfThen(idModif=0, 'NULL', idModif.ToString); + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.ExecSQL(lSQL); + lQry.ExecSQL('DELETE FROM #apiKusovnik WHERE uroven=0'); + lSQL:= 'ALTER TABLE #apiKusovnik ADD SZNizsi NVARCHAR(3)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD RCNizsi NVARCHAR(30)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD Nazev1Nizsi NVARCHAR(100)' + CRLF +// + 'ALTER TABLE #apiKusovnik ADD SZVyssi NVARCHAR(3)' + CRLF +// + 'ALTER TABLE #apiKusovnik ADD RCVyssi NVARCHAR(30)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD IDPrikaz INT' + CRLF + + 'ALTER TABLE #apiKusovnik ADD MJNizsi NVARCHAR(10)' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN prirez' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN RezijniMat' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN VyraditZKalkulace' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN uroven'; + lQry.ExecSQL(lSQL); + lSQL:= 'MERGE #apiKusovnik AS T USING ' + tblKZ + ' AS S ON (S.ID=T.IDKmenZbozi) WHEN MATCHED AND T.IDKmenZbozi IS NOT NULL THEN UPDATE SET T.SZNizsi=S.SkupZbo' + + ', T.RCNizsi=S.RegCis, T.Nazev1Nizsi=S.Nazev1, T.MJNizsi=S.MJEvidence, T.IDPrikaz=' + idVPr.ToString + ';'; + lQry.ExecSQL(lSQL); + lQry.ExecSQL(lSQL); + lQry.Open('SELECT * FROM #apiKusovnik'); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + lQry.Free; + end + else + raise Exception.Create('Kusovnik nelze vygenerovat, nemam ID kmenove karty nebo je mnozstvi mensi nez 0.'); + + sqlConnX.Free; + end; + + + + + + + +{ TVyrobaEvidenceOperaciService} + + function TVyrobaEvidenceOperaciService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, ordBy: string; + cnt, rNo, AID: integer; + retObj: TVyrobaEvidovanaOperace; + lsRetObj: TObjectList; + jenPosledni: boolean; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= nil; + + jenPosledni:= false; + where:= ''; + + lSQL:= 'SELECT ID FROM ' + tblPMZ; + + + ordBy:= 'ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + + + if (params.ContainsKey('idPrikaz')) then + if (params.Items['idPrikaz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDPrikaz=' + params.Items['idPrikaz']; + + if (params.ContainsKey('kooperace')) then + if (params.Items['kooperace']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'TypMzdy=2'; + if not(where.Contains('TypMzdy')) then + where:= where + IfThen(where<>'', ' AND ', '') + 'TypMzdy<>2'; + + + + if (params.ContainsKey('jenPosledni')) then + if (params.Items['jenPosledni']='1') then + begin + lSQL:= lSQL.Replace('CT ID F', 'CT TOP(1) ID F'); + ordBy:= 'DatPorizeni DESC'; + end; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + if (ordBy<>'') then + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + + if (where<>'') then // poustej to jen s nejakou podminkou, jinak se z toho zblaznis + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + try + retObj:= TVyrobaEvidovanaOperace.Create; + lsRetObj:= TObjectList.Create; + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retObj:= self.GetByID (AID); + lsRetObj.Add (retObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= lsRetObj; + finally + end; + finally + lQry.Free; + sqlConnX.Free; + end; + end; + + end; + + + + + + + function TVyrobaEvidenceOperaciService.GetByID (const AID: integer; params: TDictionary=nil): TVyrobaEvidovanaOperace; + var lSQL: string; + p: TDictionary; + sqlConnX: TFDConnection; + lQry: TFDQuery; + extInfoStr: string; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPMZE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPMZE, '', true, 'ID') + ' FROM ' + tblPMZE + ' WHERE ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblPMZ, 'main') + IfThen(selEvidOperace<>'', ',' + selEvidOperace, '') + ' FROM ' + tblPMZ + ' main WHERE main.ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + end + else + raise EServiceException.Create('Evidence vyrobni operace s ID ' + AID.ToString + ' nebyla nalezena.'); + except on E:Exception do + raise EServiceException.Create('Evidence vyrobni operace s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TVyrobaEvidenceOperaciService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblPMZ, 'main') + ' FROM ' + tblPMZ + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabPrikazMzdyAZmetky.', 'main.'); + if (selPrikazSpec='') then + lSQL:= lSQL.Replace('main.', ''); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + end; + + lQry.Free; + sqlConnX.Free; + end; + + + + + + +{ TMaterialPrikazuService } + + function TMaterialPrikazuService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main', false) + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main ' + + ' INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) INNER JOIN ' + tblKZ + ' kzV ON (kzV.ID=main.vyssi) ' + + IfThen(jenPlatne, ' WHERE main.IDOdchylkyDo IS NULL', ''); + + lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + end; + + lQry.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TMaterialPrikazuService.GetByID (const AID: Integer): TMaterialPrikazu; + var lSQL: string; + p: TDictionary; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main', false) + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main ' + + ' INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) INNER JOIN ' + tblKZ + ' kzV ON (kzV.ID=main.vyssi) ' + + ' WHERE main.ID=:ID AND main.IDOdchylkyDo IS NULL'; + lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + + p:= TDictionary.Create; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + try + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + +{$IFDEF CUSTOM_CTRL_Rootvin} + var typDilce: string; + var lQry2: TFDQuery; + typDilce:= ''; + if (SQLColumnExists('dbo', tblKZe, '_ASOL_IdentifTrideni')) then + begin + lQry2:= TFDQuery.Create(nil); + try + try + lQry2.Connection:= sqlConnX; + lSQL:= 'SELECT _ASOL_IdentifTrideni AS TypDilce FROM ' + tblKZe + ' WHERE ID=:ID'; + lQry2.Open(lSQL, [lQry.FieldByName('nizsi').AsInteger]); + if (lQry2.RecordCount=1) then + typDilce:= lQry2.FieldByName('TypDilce').AsString; + lQry2.Close; + except + end; + finally + FreeAndNil (lQry2); + end; + + if (typDilce='1') then + typDilce:= 'surovina' + else + if (typDilce='2') then + typDilce:= 'polotovar' + else + if (typDilce='3') then + typDilce:= 'obal' + else + typDilce:= ''; + end; + if (typDilce<>'') then + result.typDilce:= typDilce; +{$ENDIF} + + end + else + raise EServiceException.Create('MateriĂĄlovĂ˝ poĹždavek s ID ' + AID.ToString + ' nebyl nalezen.'); + except on E:Exception do + raise EServiceException.Create('MateriĂĄlovĂ˝ poĹžadavek s ID ' + AID.ToString + ' nebyl nalezen - ' + E.Message); + end; + finally + p.Free; + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TMaterialPrikazuService.GetMetaKusovniku: TJSONObject; + var lSQL: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + lSQL:= 'IF OBJECT_ID(N''tempdb..#apiKusovnik'', N''U'') IS NOT NULL DROP TABLE #apiKusovnik' + CRLF; + lSQL:= lSQL + createTabAPIKusovnik + CRLF; + lSQL:= 'ALTER TABLE #apiKusovnik ADD SZNizsi NVARCHAR(3)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD RCNizsi NVARCHAR(30)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD Nazev1Nizsi NVARCHAR(100)' + CRLF + + 'ALTER TABLE #apiKusovnik ADD IDPrikaz INT' + CRLF + + 'ALTER TABLE #apiKusovnik ADD MJNizsi NVARCHAR(10)' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN prirez' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN RezijniMat' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN VyraditZKalkulace' + CRLF + + 'ALTER TABLE #apiKusovnik DROP COLUMN uroven'; + lSQL:= lSQL + 'SELECT * FROM #apiKusovnik WHERE 1=0'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + lQry.First; + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TMaterialPrikazuService.GetByParams (params: TDictionary): TObjectList; + var lSQL, lSQL2, where, errMsg, ordBy: string; + AID, cnt, rNo: integer; + retObj: TMaterialPrikazu; + lsRetObj: TObjectList; + jenSeznam, vcNeplatnychMat: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + jenPlatne: Boolean; + idPrikaz: integer; + nazevOp: string; +{$IFDEF CUSTOM_CTRL_Rootvin} + typPrikazu: integer; +{$ENDIF} + + begin + result:= nil; + + idPrikaz:= 0; + nazevOp:= ''; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT main.ID FROM ' + tblPrKVazby + ' main' + + ' INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) INNER JOIN ' + tblKZ + ' kzV ON (kzV.ID=main.vyssi)' + + ' INNER JOIN ' + tblVPr + ' vpr ON (vpr.ID=main.IDPrikaz)' + + ' LEFT JOIN ' + tblPrPost + ' pp ON (pp.IDPrikaz=main.IDPrikaz AND pp.Doklad=dbo.hf_GetPrPDokladForPrKV(main.ID) AND pp.Prednastaveno=1 AND pp.IDOdchylkyDo IS NULL)'; + + where:= ''; + + + +{$IFDEF CUSTOM_CTRL_Rootvin} + typPrikazu:= 0; + if (params.ContainsKey('typPrikazu')) then + TryStrToInt(params.Items['typPrikazu'], typPrikazu); + if (params.ContainsKey('nazevOp')) then + if (params.Items['nazevOp']<>'') then + nazevOp:= params.Items['nazevOp']; +{$ENDIF} + + + jenPlatne:= true; + + if (params<>nil) then + begin + if (params.ContainsKey('jenplatne')) then + if (params.Items['jenplatne']='0') then + jenPlatne:= false; + if (jenPlatne) then + where:= 'main.IDOdchylkyDo IS NULL'; + + + if (nazevOp<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'pp.Nazev LIKE N''%' + nazevOp + '%'''; + + + if (params.ContainsKey('stavPrikazu')) then + if (params.Items['stavPrikazu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'vpr.StavPrikazu=' + params.Items['stavPrikazu']; + + if (params.ContainsKey('skMat')) then + if (params.Items['skMat']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'kzN.SkupZbo=N' + params.Items['skMat'].QuotedString; + + if (params.ContainsKey('rcMat')) then + if (params.Items['rcMat']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'kzN.RegCis=N' + params.Items['rcMat'].QuotedString; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('idprikaz')) then + if (params.Items['idprikaz']<>'') then + begin + idPrikaz:= params.Items['idprikaz'].ToInteger; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz=' + idPrikaz.ToString; + end; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + if (selMaterialSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + lsRetObj:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retObj:= self.GetByID (AID); + lsRetObj.Add(retObj); + if not(lQry.Active) then + lQry.Open; + Inc (rNo); + end; + Result:= lsRetObj; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani materialovych pozadavku: ' + E.Message); + end; + end; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TMaterialPrikazuService.GetByIDVPr (idVPr: integer; jenPlatne: boolean=true): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main') + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main' + + ' INNER JOIN ' + tblKZ + ' kzV ON (main.vyssi=kzV.ID) INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi)'; + lSQL:= lSQL + IfThen(jenPlatne, ' WHERE main.IDOdchylkyDo IS NULL', ''); + lSQL:= lSQL + IfThen(lSQL.Contains('WHERE'), ' AND ', ' WHERE') + ' main.IDPrikaz=:ID'; + lSQL:= lSQL.Replace('TabPrKVazby.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [idVPr]); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errMaterialy + E.Message); + end; + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TMaterialPrikazuService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblPrKVazby, 'main') + IfThen(selMaterialSpec<>'', ',' + selMaterialSpec, '') + ' FROM ' + tblPrKVazby + ' main' + + ' INNER JOIN ' + tblKZ + ' kzV ON (main.vyssi=kzV.ID) INNER JOIN ' + tblKZ + ' kzN ON (kzN.ID=main.nizsi) WHERE 1=0'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + +{ TVyrobaVyrCisPrikazService } + + function TVyrobaVyrCisPrikazService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblPrikazVC, 'main') + IfThen(selVyrCisPrikazSpec<>'', ',' + selVyrCisPrikazSpec, '') + ' FROM ' + tblPrikazVC + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabVyrCisPrikaz.', 'main.'); + if (selVyrCisPrikazSpec='') then + lSQL:= lSQL.Replace('main.', ''); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + end; + + lQry.Free; + sqlConnX.Free; + end; + + + + + function TVyrobaVyrCisPrikazService.GetByID (const AID: integer; params: TDictionary=nil): TVyrCisPrikaz; + var lSQL, extInfoStr: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrikazVC, 'main') + IfThen(selVyrCisPrikazSpec<>'', ',' + selVyrCisPrikazSpec, '') + ' FROM ' + tblPrikazVC + ' main WHERE main.ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open (lSQL, [AID]); + Result := lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobaVyrCisPrikazService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, ordBy: string; + AID, cnt, rNo: integer; + retObj: TVyrCisPrikaz; + lsRetObj: TObjectList; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + ordBy:= 'main.ID'; + if (params<>nil) then + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + + + lSQL:= 'SELECT main.ID FROM ' + tblPrikazVC + ' main'; + + where:= ''; + if (params<>nil) then + if (params.ContainsKey('idprikaz')) then + if (params.Items['idprikaz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz=' + params.Items['idprikaz']; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + lsRetObj:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retObj:= self.GetByID (AID); + lsRetObj.Add (retObj); + if not(lQry.Active) then + lQry.Open; + Inc (rNo); + end; + Result:= lsRetObj; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani vyrobnich prikazu: ' + E.Message); + end; + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TVyrobniOperaceService } + + function TVyrobniOperaceService.GetAll (params: TDictionary=nil; jenPlatne: boolean=true; jenZiveVpr: boolean=true): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + IfThen(selOperaceSpec<>'', ',' + selOperaceSpec, '') + ' FROM ' + tblPrPost + + ' main WHERE main.IDOdchylkyDo IS NULL'; + if (jenZiveVPr) then + lSQL:= lSQL + ' AND main.IDPrikaz IN (SELECT ID FROM ' + tblVPr + ' WHERE StavPrikazu<=40)'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + if (selOperaceSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + lQry.First; + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errPostupy + E.Message); + end; + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniOperaceService.GetByID (const AID: Integer; params: TDictionary=nil): TVyrobniOperace; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + extInfoStr: string; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPrPostE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrPostE, '', true, 'ID') + ' FROM ' + tblPrPostE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + IfThen(selOperaceSpec<>'', ',' + selOperaceSpec, '') + ' FROM ' + tblPrPost + + ' main WHERE main.IDOdchylkyDo IS NULL AND main.ID=:ID'; + + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + if (selOperaceSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + lQry.First; + try + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= extInfoStr; + + except on E:Exception do + raise EServiceException.Create('Vyrobni operace s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniOperaceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + IfThen(selOperaceSpec<>'', ',' + selOperaceSpec, '') + ' FROM ' + tblPrPost + ' main'; + + where:= 'main.IDOdchylkyDo IS NULL'; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('idprikaz')) then + if (params.Items['idprikaz']<>'') then + if (params.Items['idprikaz']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz=' + params.Items['idprikaz']; + + if (params.ContainsKey('stavprikazu')) then + if (params.Items['stavprikazu']<>'') then + if (params.Items['stavprikazu']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz IN (SELECT ID FROM dbo.TabPrikaz WHERE StavPrikazu=' + params.Items['stavprikazu'] + ')'; + + if (params.ContainsKey('idstroj')) then + if (params.Items['idstroj']<>'') then + if (params.Items['idstroj']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDStroje=' + params.Items['idstroj']; + + if (params.ContainsKey('operace')) then + if (params.Items['operace']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'LTRIM(RTRIM(main.Operace))=N' + params.Items['operace'].QuotedString; + + if (params.ContainsKey('radaprikazu')) then + if (params.Items['radaprikazu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz IN (SELECT ID FROM ' + tblVPr + ' WHERE Rada=N' + + params.Items['radaprikazu'].QuotedString + ' AND StavPrikazu<=40)'; + if (params.ContainsKey('barcode')) then + if (params.Items['barcode']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.BarCode=N' + params.Items['barcode'].QuotedString; + + if (params.ContainsKey('jenKoop')) then + if (params.Items['jenKoop']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.typ=2'; + + if (params.ContainsKey('jenZiveVPr')) then + if (params.Items['jenZiveVPr']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrikaz IN (SELECT ID FROM ' + tblPrikaz + ' WHERE StavPrikazu IN (20,30,40))'; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + if (selOperaceSpec='') then + lSQL:= lSQL.Replace('main.', '').Replace('main WHE', ' WHE'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errPostupy + E.Message); + end; + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + function TVyrobniOperaceService.GetKPsByID (const AID: Integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + begin + result:= nil; + + lSQL:= sqlSelKPs + ' FROM ' + tblKPLHlav + ' WHERE IDOperace=:ID -- AND Kategorie IN (SELECT Cislo FROM ' + tblKategKJ + ' WHERE QMSAgenda=12)'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL, [AID]); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + end; + + + + function TVyrobniOperaceService.GetByIDPrikazu (const AID: Integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE main.IDOdchylkyDo IS NULL AND main.IDPrikaz=:ID'; + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniOperaceService.GetByBarCode (const ABarCode: string): TVyrobniOperace; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE main.IDOdchylkyDo IS NULL AND main.BarCode=:BC'; // + ABarCode.QuotedString; + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [ABarCode]); + lQry.First; + if not(lQry.EOF) then + result:= lQry.AsObject + else + raise EServiceException.Create('VĂ˝robnĂ­ operace s čárovĂ˝m kĂłdem ' + ABarCode + ' nebyla nalezena.'); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TVyrobniOperaceService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabPrPostup.', 'main.'); + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + procedure TVyrobniOperaceService.ZapisDZTasku (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs, xxx: string; + j, t, a, v, xx, st: JsonDataObjects.TJSONObject; + subs: TJSONArray; + i, ii, taskDZId, taskId, intTemp: integer; + ksOdv: Extended; + jeOld: boolean; + sqlConnX: TFDConnection; + lQry, lQry2: TFDQuery; + begin + respString:= '['; + if (jsonData<>'') then + begin + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + if (FDM.SQLTableExists(tblPrijataJsonData)) then + begin + lQry:= TFDQuery.Create(nil); + try + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (Blokovano, JSONData) SELECT 1, N' + jsonData.QuotedString; + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.ExecSQL(lSQL); + finally + lQry.Free; + end; + end; + + + if (FDM.SQLTableExists(tblDZTasky)) and (FDM.SQLTableExists(tblDZSubtasky)) then + begin + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + if (j.Contains('tasks')) then + begin + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + jeOld:= false; + + strTmp:= j['tasks'].Items[i].S['startedAt']; + if (strTmp<>'') then + strTmp:= MidStr(strTmp, 9, 2) + '.' + MidStr(strTmp, 6, 2) + '.' + LeftStr(strTmp, 4) + ' ' + MidStr(strTmp, 12, 8); + + strTmp2:= j['tasks'].Items[i].S['finishedAt']; + if (strTmp2<>'') then + strTmp2:= MidStr(strTmp2, 9, 2) + '.' + MidStr(strTmp2, 6, 2) + '.' + LeftStr(strTmp2, 4) + ' ' + MidStr(strTmp2, 12, 8); + + intTemp:= 0; + lSQL:= 'SELECT COUNT(ID) AS Cnt FROM ' + tblDZTasky + ' WHERE IdDataZoneTaskID=' + taskDZId.ToString; + lQry:= TFDQuery.Create(nil); + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + + lQry.Open(lSQL); + try + if (lQry.RecordCount>0) then + intTemp:= lQry.FieldByName('Cnt').AsInteger; + finally + lQry.Close; + end; + + if (intTemp=1) then + jeOld:= true; + + lSQL:= 'IF OBJECT_ID(N' + tblDZTasky.QuotedString + ', N''U'') IS NOT NULL' + CRLF + + 'IF NOT EXISTS (SELECT 1 FROM ' + tblDZTasky + ' WHERE IdDataZoneTaskID=' + taskDZId.ToString + ')' + CRLF + + 'INSERT ' + tblDZTasky + ' (IdDataZoneTaskID, Kooperace, DeviceID, Obsah, StatusText, DatumStart, DatumKonec, Zamestnanec, KodPracoviste, BarCode)'; + lSQL:= lSQL + ' SELECT ' + taskDZId.ToString + ', ' + t.B['kooperace'].ToString(false) + ', N'+ IfThen(t.S['machine']='', 'ULL', t.S['machine'].QuotedString); + lSQL:= lSQL + ', CONVERT(varchar(max), N' + taskStr.QuotedString + ')' + ', N' + t.S['status'].QuotedString; + lSQL:= lSQL + ', ' + IfThen(strTmp<>'',' CONVERT(datetime, N' + strTmp.QuotedString + ', 104)', 'NULL'); + lSQL:= lSQL + ', ' + IfThen(strTmp2<>'',' CONVERT(datetime, N' + strTmp2.QuotedString + ', 104)', 'NULL'); + lSQL:= lSQL + ', ' + IfThen(t.Contains('worker'), t['worker'].S['number'], 'NULL'); + lSQL:= lSQL + ', ' + IfThen(t.Contains('workplaceCode'), 'N' + t.S['workplaceCode'].QuotedString, 'NULL'); + + xxx:= ''; + if (t.Types['code']=jdtString) then + xxx:= t.S['code'] + else + if (t.Types['code']=jdtObject) then + xxx:= ''; + lSQL:= lSQL + ', ' + IfThen(xxx<>'', xxx.QuotedString, 'NULL'); + sqlConnX.ExecSQL(lSQL); + + if (taskStr.Contains('"kooperace":true')) then + sqlConnX.ExecSQL('UPDATE ' + tblDZTasky + ' SET Kooperace=1 WHERE IdDataZoneTaskID=' + taskDZId.ToString); + + intTemp:= 0; + lSQL:= 'SELECT COUNT(ID) AS Cnt FROM ' + tblDZTasky + ' WHERE IdDataZoneTaskID=' + taskDZId.ToString; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + intTemp:= lQry.FieldByName('Cnt').AsInteger; + lQry.Close; + + if (intTemp=0) or (intTemp=1) then + begin + taskId:= 0; + lSQL:= 'SELECT ID FROM ' + tblDZTasky + ' WHERE IdDataZoneTaskID=' + taskDZId.ToString; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + taskId:= lQry.FieldByName('ID').AsInteger; + lQry.Close; + + if (taskId>0) then + begin + if (t.Contains('code')) then + begin + code:= ''; + if (t.Types['code']=jdtString) then + code:= t.S['code'] + else + if (t.Types['code']=jdtObject) then + code:= ''; + // code:= t.S['code']; + if (code<>'') then + begin + lSQL:= 'UPDATE t SET t.IDPrikaz=p.IDPrikaz, t.IDPrPostup=p.ID, t.DokladPrP=p.Doklad, t.AltPrP=p.Alt FROM ' + tblDZTasky + ' t' + + ', ' + tblPrPost + ' p WHERE p.IDOdchylkyDo IS NULL AND p.BarCode=N' + code.QuotedString + ' AND t.ID=' + taskId.ToString + CRLF + +'IF (@@ROWCOUNT=0) UPDATE ' + tblDZTasky + ' SET PosledniChyba=N''Podle barcode nebyla dohledana operace'' WHERE ID=' + taskId.ToString; + // FDM.sqlConn.ExecSQL(lSQL); + end; + end; + + if (t.Contains('values')) then + begin + v:= t.O['values']; + if (v<>nil) then + begin + lSQL:= 'UPDATE ' + tblDZTasky + ' SET kusy_odv=' + v.F['kusy_odv'].ToString + ', Kusy_zmet_opr=' + IfThen(v.Contains('kusy_zmet'), v.F['kusy_zmet'].ToString, '0') + + ', Kusy_zmet_neopr=' + IfThen(v.Contains('kusy_zmet_neopr'), v.F['kusy_zmet_neopr'].ToString, '0') + ' WHERE ID=' + taskId.ToString; + // FDM.sqlConn.ExecSQL(lSQL); + end; + end; + + + if (t.Contains('subtask')) then + if not(t['subtask'].IsNull) then + begin + subs:= t['subtask'].ArrayValue; + for ii:=0 to subs.Count-1 do + begin + a:= subs.Items[ii].ObjectValue; + code:= a['code']; + + strTmp:= j['tasks'].Items[i].S['startedAt']; + if (strTmp<>'') then + strTmp:= MidStr(strTmp, 9, 2) + '.' + MidStr(strTmp, 6, 2) + '.' + LeftStr(strTmp, 4) + ' ' + MidStr(strTmp, 12, 8); + + strTmp2:= j['tasks'].Items[i].S['finishedAt']; + if (strTmp2<>'') then + strTmp2:= MidStr(strTmp2, 9, 2) + '.' + MidStr(strTmp2, 6, 2) + '.' + LeftStr(strTmp2, 4) + ' ' + MidStr(strTmp2, 12, 8); + + ksOdv:= 0; + if (a.Contains('values')) then + if (a['values'].ObjectValue.Contains('kusy_odv')) then + ksOdv:= a['values']['kusy_odv'].FloatValue; + + if (code<>'') then + begin + lSQL:= 'IF OBJECT_ID(N' + tblDZSubtasky.QuotedString + ', N''U'') IS NOT NULL' + CRLF + + 'IF NOT EXISTS(SELECT 1 FROM ' + tblDZSubtasky + ' WHERE BarcodeOperace=N' + code.QuotedString + ' AND IdDataZoneTaskID=' + taskDZId.ToString + ')' + CRLF + + 'INSERT ' + tblDZSubtasky + ' (IDTask, IdDataZoneTaskID, DatumStart, DatumKonec, Kusy_odv, BarcodeOperace) SELECT ' + taskId.ToString + + ', ' + taskDZId.ToString + ', ' + IfThen(strTmp<>'',' CONVERT(datetime, N' + strTmp.QuotedString + ', 104)', 'NULL') + + ', ' + IfThen(strTmp2<>'',' CONVERT(datetime, N' + strTmp2.QuotedString + ', 104)', 'NULL') + ', ' + ksOdv.ToString + ', N' + code.QuotedString; + sqlConnX.ExecSQL(lSQL); + end; + end; + end; + end; + respString:= respString + '{"id":"' + taskDZId.ToString + '", "resp":"' + IfThen(jeOld, 'OLD', 'NEW') + '"}'; + end; + except on E:Exception do + respString:= respString + '{"id":"' + taskDZId.ToString + '", "resp":"NOT OK", "errMsg": "' + E.Message + '"}'; + end; + end; + end; + finally + respString:= respString + ']'; + j.Free; + end; + end; + + if (lQry<>nil) then + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + + end; + end; + + + + + + function TVyrobniOperaceService.GetDZTaskyNeevidovane (odDatum, doDatum: string): TObjectList; + var lSQL: string; + datOd, datDo: TDateTime; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ID, IdDataZoneTaskID, DeviceID, PosledniChyba, Barcode FROM ' + tblDZTasky + ' WHERE (LTRIM(RTRIM(ISNULL(PosledniChyba,N'''')))<>N'''' OR DatZpracovani IS NULL)'; + + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -1) + end + else + datOd:= IncDay(Now, -1); + + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + + lSQL:= lSQL + ' AND DatPorizeni>='; + if (odDatum<>'') then + lSQL:= lSQL + 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', datOd).QuotedString + ',104)' + else + lSQL:= lSQL + 'DATEADD(day, -1, GETDATE())'; + if (doDatum<>'') then + lSQL:= lSQL + ' AND DatPorizeni<=CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', datDo).QuotedString + ',104)'; + + + lSQL:= lSQL + ' ORDER BY ID'; + lSQL:= lSQL.Replace('--', '').Replace(';', ''); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + lQry.First; + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + procedure TVyrobniOperaceService.Update (AOperace: TVyrobniOperace); + var lSQL: string; + updCmd: TFDCustomCommand; + begin +// AOperace.CheckUpdate; +{ + updCmd:= FDM.sqlUpdate.Commands[arUpdate]; + TFireDACUtils.ObjectToParameters(updCmd.Params, AOperace, 'NEW_'); + updCmd.ParamByName('OLD_ID').AsInteger := AOperace.ID; + updCmd.Execute; + if (updCmd.RowsAffected<>1) then + raise Exception.Create('Article not found'); +} + end; + + + + + + +{ TTPVPracovisteService } + + function TTPVPracovisteService.GetByID (const AID: integer): TTPVPracoviste; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblCPrac, 'main') + ' FROM ' + tblCPrac + ' main WHERE main.ID=:ID'; + lSQL:= lSQL.Replace('TabCPrac.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TTPVPracovisteService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblCPrac, 'main') + ' FROM ' + tblCPrac + ' main'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL:= lSQL.Replace('TabCPrac.', 'main.'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TTPVPracovisteService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + + lSQL:= 'SELECT ' + GetTabCols('', tblCPrac, 'main') + ' FROM ' + tblCPrac + ' main WHERE 1=0'; + lSQL:= lSQL.Replace('TabCPrac.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVPracovisteService.GetFrontaPrace (const AID: Integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + selOperaceSpec + ' FROM ' + tblPrPost + ' main WHERE main.Pracoviste=:ID AND main.IDOdchylkyDo IS NULL' + + ' AND main.Splneno=0 ORDER BY main.ID'; + lSQL:= lSQL.Replace('TabCPrac.', 'main.'); + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create(errPostupy + E.Message); + end; + lQry.Free; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + + + +{ TTPVStroj } + function TTPVStrojService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + + lSQL:= 'SELECT ' + GetTabCols('', tblCisStroj, 'main') + IfThen(selTPVStroj<>'', ',' + selTPVStroj, '') + ' FROM ' + tblCisStroj + ' main'; + lSQL:= lSQL.Replace('TabCisStroju.', 'main.'); + lSQL:= lSQL + ' INNER JOIN ' + tblCPrac + ' p ON (p.ID=main.IDPrac)'; + + lSQL:= lSQL + ' WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TTPVStrojService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.Kod, p.pracoviste'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblCisStroj, 'main') + IfThen(selTPVStroj<>'', ',' + selTPVStroj, '') + ' FROM ' + tblCisStroj + ' main'; + lSQL:= lSQL.Replace('TabCisStroju.', 'main.'); + lSQL:= lSQL + ' INNER JOIN ' + tblCPrac + ' p ON (p.ID=main.IDPrac)'; + + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVStrojService.GetByID (const AID: integer): TTPVStroj; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblCisStroj, 'main') + IfThen(selTPVStroj<>'', ',' + selTPVStroj, '') + ' FROM ' + tblCisStroj + ' main WHERE main.ID=:ID'; + lSQL:= lSQL.Replace('TabCisStroju.', 'main.'); + lSQL:= lSQL + ' INNER JOIN ' + tblCPrac + ' p ON (p.ID=main.IDPrac)'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVStrojService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.Kod, p.pracoviste'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblCisStroj, 'main') + IfThen(selTPVStroj<>'', ',' + selTPVStroj, '') + ' FROM ' + tblCisStroj + ' main'; + lSQL:= lSQL.Replace('TabCisStroju.', 'main.'); + lSQL:= lSQL + ' INNER JOIN ' + tblCPrac + ' p ON (p.ID=main.IDPrac)'; + + where:= ''; + + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('idprac')) then + if (params.Items['idprac']<>'') then + if (params.Items['idprac']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrac=' + params.Items['idprac']; + + if (params.ContainsKey('prac')) then + if (params.Items['prac']<>'') then + if (params.Items['prac']<>'0') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPrac=' + params.Items['prac']; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + +{ TQMSKontrolniPostupyService } + + function TQMSKontrolniPostupyService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= sqlSelKPs + ' FROM ' + tblKPLHlav + ' WHERE Kategorie IN (SELECT Cislo FROM ' + tblKategKJ + ' WHERE QMSAgenda=12)'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TQMSKontrolniPostupyService.GetByID (const AID: Integer): TQMSKontrolniPostup; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= sqlSelKPs + ' FROM ' + tblKPLHlav + ' WHERE ID=:ID'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TQMSKontrolniPostupyService.GetListByIDPostup (const AID: Integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= sqlSelKPs + ' FROM ' + tblKPLHlav + ' WHERE IDOperace=:ID ORDER BY PoradoveCislo'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TQMSKontrolniPostupyService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= sqlSelKPParams + ' FROM ' + tblKPLParams + ' WHERE (1=0)'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TQMSKontrolniPostupyService.GetParamsByIDHlav (const AID: Integer): TObjectList; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= sqlSelKPParams + ' FROM ' + tblKPLParams + ' WHERE IDKPLHlav=:ID ORDER BY Poradi'; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + +{ TVyrobaEvidRozpracOperaciOperaceService } + + function TVyrobaEvidRozpracOperaciOperaceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, extInfoStr: string; + AID, cnt, rNo: Integer; + lQry: TFDQuery; + sqlConnX: TFDConnection; + retOp: TEvidRozpracOperaceOperace; + lsRetOp: TObjectList; + incOper: boolean; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ID FROM ' + tblRozpracOperR; + + where:= ''; + + incOper:= true; + + if (params<>nil) then + begin + if (params.ContainsKey('vcetneOper')) then + if (params.Items['vcetneOper']='0') then + incOper:= false; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'ID=' + params.Items['id']; + + if (params.ContainsKey('idEvodROp')) then + if (params.Items['idEvodROp']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'IDEvidRozpracOper=' + params.Items['idEvodROp']; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ID'; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + lsRetOp:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + retOp:= self.GetByID (AID, incOper); + lsRetOp.Add(retOp); + if not(lQry.Active) then + lQry.Open; + Inc (rNo); + end; + Result:= lsRetOp; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani operaci Evidence rozpracovanych operaci: ' + E.Message); + end; + finally + lQry.Free; + sqlConnX.Free; + end; + + end; + + + + function TVyrobaEvidRozpracOperaciOperaceService.GetByID (const AID: integer; incOper: boolean; params: TDictionary=nil): TEvidRozpracOperaceOperace; + var lSQL, extInfoStr: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + if (AID>0) then + begin + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblRozpracOperRE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblRozpracOperRE, '', true, 'ID') + ' FROM ' + tblRozpracOperRE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObject; + finally + lQry.Free; + end; + end; + + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOperR, 'main') + IfThen(selNazevOperaceEvidROpR<>'', ',' + selNazevOperaceEvidROpR, ''); + lSQL:= lSQL + ' FROM ' + tblRozpracOperR + ' main WHERE main.ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + finally + lQry.Free; + end; + + sqlConnX.Free; + end; + + end; + + + + function TVyrobaEvidRozpracOperaciOperaceService.GetMeta; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOperR, '') + ' FROM ' + tblRozpracOperR + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + +{ TVyrobaEvidRozpracOperaciService } + + function TVyrobaEvidRozpracOperaciService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, customSel, datum, odDatum, doDatum: string; + AID, cnt, rNo: integer; + d, datOd, datDo: TDateTime; + incOper: boolean; + resList: TObjectList; + resObj: TEvidRozpracOperace; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + customSel:= ''; + where:= ''; + + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOper, 'main') + IfThen(selEvidRozpOpSpec<>'', ',' + selEvidRozpOpSpec, ''); + lSQL:= lSQL + IfThen(customSel<>'', ',' + customSel, '') + ' FROM ' + tblRozpracOper + ' main'; + + + incOper:= true; + odDatum:= ''; + doDatum:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('vcetneOper')) then + if (params.Items['vcetneOper']='0') then + incOper:= false; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('idPrikaz')) then + if (params.Items['idPrikaz']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT IDEvidRozpracOper FROM ' + tblRozpracOperR + ' WHERE IDPrikaz=' + params.Items['idPrikaz'] + ')'; + + if (params.ContainsKey('idStroj')) then + if (params.Items['idStroj']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDStroje=' + params.Items['idStroj']; + + if (params.ContainsKey('idPrac')) then + if (params.Items['idPrac']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDPracoviste=' + params.Items['idPrac']; + + if (params.ContainsKey('stav')) then + if (params.Items['stav']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Stav=' + params.Items['stav']; + + if (params.ContainsKey('idZam')) then + if (params.Items['idZam']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZamestnance=' + params.Items['idZam']; + + if (params.ContainsKey('cisZam')) then + if (params.Items['cisZam']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZamestnance=(SELECT ID FROM ' + tblCisZam + ' WHERE Cislo=' + params.Items['cisZam'] + ')'; + + + if (params.ContainsKey('datumPripadu')) then + if (params.Items['datumPripadu']<>'') then + begin + datum:= params.Items['datumPripadu']; + if (datum<>'') then + begin + if (Length(datum)=8) then + datum:= datum + '000000'; + if (Length(datum)=10) then + datum:= datum + '00'; + datum:= MidStr(datum, 7, 2) + '.' + MidStr(datum, 5, 2) + '.' + LeftStr(datum, 4) + ' ' + MidStr(datum, 9, 2) + ':' + MidStr(datum, 11, 2) + ':' + MidStr(datum, 13, 2); + if not(TryStrToDateTime(datum, d)) then + d:= Now; + end + else + d:= Now; + + where:= where + IfThen(where<>'', ' AND ', '') + 'dbo.hf_TruncDate(main.DatumPripadu)='; + if (datum<>'') then + where:= where + 'dbo.hf_TruncDate(CONVERT(datetime, N' + (FormatDateTime('dd.mm.yyyy', d) + ' 00:00:00').QuotedString + ',104))' + // else + // where:= where + 'DATEADD(day, -3, dbo.hf_TruncDate(GETDATE()))'; + end; + + + if (params.ContainsKey('odDatum')) then + if (params.Items['odDatum']<>'') then + odDatum:= params.Items['odDatum']; + if (odDatum<>'') then + begin + if (Length(odDatum)=8) then + odDatum:= odDatum + '000000'; + if (Length(odDatum)=10) then + odDatum:= odDatum + '00'; + odDatum:= MidStr(odDatum, 7, 2) + '.' + MidStr(odDatum, 5, 2) + '.' + LeftStr(odDatum, 4) + ' ' + MidStr(odDatum, 9, 2) + ':' + MidStr(odDatum, 11, 2) + ':' + MidStr(odDatum, 13, 2); + if not(TryStrToDateTime(odDatum, datOd)) then + datOd:= IncDay(Now, -3) + end + else + datOd:= IncDay(Now, -3); + + if (params.ContainsKey('doDatum')) then + if (params.Items['doDatum']<>'') then + doDatum:= params.Items['doDatum']; + if (doDatum<>'') then + begin + if (Length(doDatum)=8) then + doDatum:= doDatum + '235959'; + if (Length(doDatum)=10) then + doDatum:= doDatum + '59'; + doDatum:= MidStr(doDatum, 7, 2) + '.' + MidStr(doDatum, 5, 2) + '.' + LeftStr(doDatum, 4) + ' ' + MidStr(doDatum, 9, 2) + ':' + MidStr(doDatum, 11, 2) + ':' + MidStr(doDatum, 13, 2); + if not(TryStrToDateTime(doDatum, datDo)) then + datDo:= Now + end + else + datDo:= Now; + end; + + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatumPripadu>='; + if (odDatum<>'') then + where:= where + 'CONVERT(datetime, N' + (FormatDateTime('dd.mm.yyyy', datOd) + ' 00:00:00').QuotedString + ',104)' + else + where:= where + 'DATEADD(day, -3, dbo.hf_TruncDate(GETDATE()))'; + if (doDatum<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.DatumPripadu<=CONVERT(datetime, N' + (FormatDateTime('dd.mm.yyyy', datDo) + ' 23:59:59').QuotedString + ',104)'; + + + +{$IFDEF CUSTOM_CTRL_INCOSystems} + if (params.ContainsKey('datazoneId')) and (SQLTableExists ('dbo', tblRozpracOperE)) then + if (SQLColumnExists(tblRozpracOperE, '_PHIdent')) then + if (params.Items['datazoneId']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=(SELECT ID FROM ' + tblRozpracOperE + ' WHERE _PHIdent=' + params.Items['datazoneId'] + ')'; +{$ENDIF} + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.DatumPripadu, main.CasZahajeni'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + + cnt:= lQry.RecordCount; + resList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + resObj:= self.GetByID (AID, incOper); + resList.Add (resObj); + Inc (rNo); + end; + result:= resList; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani Evidence rozpracovanych operaci: ' + E.Message); + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + function TVyrobaEvidRozpracOperaciService.GetByID (const AID: integer; incOper: boolean): TEvidRozpracOperace; + var lSQL, extInfoStr: string; + p: TDictionary; + lOper: TObjectList; + opSrv: TVyrobaEvidRozpracOperaciOperaceService; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + if (AID>0) then + begin + lQry:= TFDQuery.Create(nil); + try + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + try + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblRozpracOperE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblRozpracOperE, '', true, 'ID') + ' FROM ' + tblRozpracOperE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObject; + finally + lQry.Close; + end; + end; + + p:= TDictionary.Create; + p.Add('idEvodROp', AID.ToString); + opSrv:= TVyrobaEvidRozpracOperaciOperaceService.Create (self.FDM); + + try + lQry.Connection:= sqlConnX; + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOper, 'main') + IfThen(selNazevOperaceEvidROp<>'', ',' + selNazevOperaceEvidROp, ''); + lSQL:= lSQL + ' FROM ' + tblRozpracOper + ' main WHERE main.ID=:ID'; + lQry.Open(lSQL, [AID]); + lQry.First; + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + if (incOper) then + begin + lOper:= opSrv.GetByParams (p); + Result.Operace:= lOper; + end; + p.Free; + end + else + begin + p.Free; + raise EServiceException.Create('Evidence rozpracovanĂ˝ch operacĂ­ s ID ' + AID.ToString + ' nebyla nalezena.'); + end; + finally + end; + except on E:Exception do + raise EServiceException.Create('Evidence rozpracovanĂ˝ch operacĂ­ s ID ' + AID.ToString + ' nebyla nalezena - ' + E.Message); + end; + finally + lQry.Free; + if (sqlConnX<>nil) then + sqlConnX.Free; + if (opSrv<>nil) then + opSrv.Free; + end; + end; + + end; + + + + function TVyrobaEvidRozpracOperaciService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOper, '') + ' FROM ' + tblRozpracOper + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TVyrobaEvidRozpracOperaciService.RadekGetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblRozpracOperR, '') + ' FROM ' + tblRozpracOperR + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + + + +{ TTPVCiselnikZmenService } + function TTPVCiselnikZmenService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; +// sqlConnX: TFDConnection; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblCZmen, '') + ' FROM ' + tblCZmen + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + function TTPVCiselnikZmenService.GetByID (const AID: integer): TTPVCiselnikZmen; + var p: TDictionary; + i: TObjectList; + begin + result:= nil; + + if (AID>0) then + begin + i:= TObjectList.Create(); + p:= TDictionary.Create; + p.Add('id', AID.ToString); + i:= self.GetByParams(p); + if (i.Count>0) then + result:= i[0]; + p.Free; + i.Free; + end; + end; + + + + function TTPVCiselnikZmenService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, datum: string; + d: TDateTime; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblCZmen, 'main') + ' FROM ' + tblCZmen + ' main'; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('rada')) then + if (params.Items['rada']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada=' + params.Items['rada'].QuotedString; + + if (params.ContainsKey('jenPlatne')) then + if (params.Items['jenPlatne']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.PlatnostTPV=1'; + + + if (params.ContainsKey('datum')) then + if (params.Items['datum']<>'') then + begin + datum:= params.Items['datum']; + if (datum<>'') then + begin + if (Length(datum)=8) then + datum:= datum + '000000'; + if (Length(datum)=10) then + datum:= datum + '00'; + datum:= MidStr(datum, 7, 2) + '.' + MidStr(datum, 5, 2) + '.' + LeftStr(datum, 4) + ' ' + MidStr(datum, 9, 2) + ':' + MidStr(datum, 11, 2) + ':' + MidStr(datum, 13, 2); + if not(TryStrToDateTime(datum, d)) then + d:= IncDay(Now, -1) + end + else + d:= IncDay(Now, -1); + + lSQL:= lSQL + ' AND main.Datum>='; + if (datum<>'') then + lSQL:= lSQL + 'CONVERT(datetime, N' + FormatDateTime('dd.mm.yyyy hh:nn:ss', d).QuotedString + ',104)' + else + lSQL:= lSQL + 'DATEADD(day, -1, GETDATE())'; + end; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.Rada, main.ciszmeny'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + +{ TTPVPrednastaveniOperaciService } + function TTPVPrednastaveniOperaciService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblPredna, '') + ' FROM ' + tblPredna + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + function TTPVPrednastaveniOperaciService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, where, errMsg, ordBy: string; + locParams: TDictionary; + AID, cnt, rNo: integer; + jenSeznam: boolean; + resList: TObjectList; + resObj: TTPVPrednastaveniOperaci; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= TObjectList.Create; + + locParams:= TDictionary.Create; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('minimumDat')) then + if (params.Items['minimumDat']='1') then + jenSeznam:= true; + if (jenSeznam) then + locParams.Add ('minimumDat', '1'); + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblPredna, 'main') + ' FROM ' + tblPredna + ' main'; + + where:= ''; + + if (params<>nil) then + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + resList:= TObjectList.Create; + resObj:= TTPVPrednastaveniOperaci.Create; + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + resObj:= self.GetByID (AID, locParams); + resList.Add (resObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result.AddRange (resList); // FDM.sqlQry1.AsObjectList; + resList.Free; + resObj.Free; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani seznamu Prednastaveni pro operace postupu: ' + E.Message); + end; + end; +// result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + locParams.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVPrednastaveniOperaciService.GetByID (const AID: Integer = 0; params: TDictionary=nil): TTPVPrednastaveniOperaci; + var lSQL, where, extInfoStr, erMsg: string; + minimumDat: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblPrednaE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblPrednaE, '', true, 'ID') + ' FROM ' + tblPrednaE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObject; + finally + lQry.Free; + end; + end; + + minimumDat:= true; + if (params<>nil) then + begin + if (params.ContainsKey('minimumDat')) then + if (params.Items['minimumDat']='0') then + minimumDat:= false; + end; + + if (minimumDat) then + lSQL:= 'SELECT ID, Typ, nazev, idPracoviste, idStroje, IDKooperace, Poznamka FROM ' + tblPredna + ' main' + else + lSQL:= 'SELECT ' + GetTabCols('', tblPredna, 'main') + ' FROM ' + tblPredna + ' main'; + + where:= ''; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=:ID'; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + if (extInfoStr<>'') then + Result.ExtInfo:= extInfoStr; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + function TTPVPrednastaveniOperaciService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where, errMsg, ordBy: string; +{$IFDEF CUSTOM_CTRL_INCOSystems} + cislo: string; +{$ENDIF} + locParams: TDictionary; + cnt, rNo, AID: integer; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + resList: TObjectList; + resObj: TTPVPrednastaveniOperaci; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + locParams:= TDictionary.Create; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= 'main.' + params.Items['ordBy']; + + if (params.ContainsKey('minimumDat')) then + if (params.Items['minimumDat']<>'') then + locParams.Add ('minimumDat', params.Items['minimumDat']); + + if (jenSeznam) then + locParams.Add ('seznam', ''); + end; + + + lSQL:= 'SELECT main.ID FROM ' + tblPredna + ' main'; + where:= ''; + + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + +{$IFDEF CUSTOM_CTRL_INCOSystems} + if (params.ContainsKey('cislo')) then + if (params.Items['cislo']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID IN (SELECT ID FROM ' + tblPrednaE + + ' WHERE _CisloOperace IS NOT NULL AND TRIM(_CisloOperace)=N' + params.Items['cislo'].QuotedString + ')'; +{$ENDIF} + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + try + resList:= TObjectList.Create; + try + rNo:= 1; + lQry.First; + while (rNo<=cnt) do // nouzove reseni, lQry se po nacteni GetbyID sama uzavre !! + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + resObj:= self.GetByID (AID, locParams); + resList.Add (resObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= resList; + except on E:Exception do + begin + errMsg:= E.Message; + raise EServiceException.Create('Chyba nacitani Prednastaveni pro operace postupu: ' + errMsg); + end; + end; + // FreeAndNil(resList); + finally + end; + end + else + raise EServiceException.Create('Vybranym podminkam neodpovida zadne Prednastaveni pro operace postupu'); + finally + lQry.Free; + end; + + locParams.Free; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + +{ TTPVZakazkoveModifikaceService } + + function TTPVZakazkoveModifikaceService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + begin + lSQL:= 'SELECT ' + GetTabCols('', tblZakazModif, '') + ' FROM ' + tblZakazModif + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + try + lQry.Open(lSQL); + Result := lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + + + + function TTPVZakazkoveModifikaceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblZakazModif, 'main') + ' FROM ' + tblZakazModif + ' main'; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open (lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TTPVZakazkoveModifikaceServiceDilce } + + function TTPVZakazkoveModifikaceDilceService.GetMeta: TJsonObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('', tblZakazModifDilce, '') + ' FROM ' + tblZakazModifDilce + ' WHERE (1=0)'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVZakazkoveModifikaceDilceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + resList: TObjectList; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblZakazModifDilce, 'main') + ' FROM ' + tblZakazModifDilce + ' main'; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + end; + + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TTPVOperaceDilceService } + + function TTPVOperaceDilceService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('', tblPrPost, 'main') + ' FROM ' + tblPrPost + ' main WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVOperaceDilceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblPostup, 'main') + ' FROM ' + tblPostup + ' main'; + + where:= ''; + + if (params<>nil) then + begin + if (params.ContainsKey('zmenaDo')) then + begin + if (params.Items['zmenaDo']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ZmenaDo=' + params.Items['zmenaDo'] + else + where:= 'ZmenaDo IS NULL'; + end + else + where:= 'ZmenaDo IS NULL'; + + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('dilec')) then + if (params.Items['dilec']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.vyssi=' + params.Items['dilec']; + + if (params.ContainsKey('idZakazModif')) then + if (params.Items['idZakazModif']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif=' + params.Items['idZakazModif']; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + +{ TTPVKusovnikDilceService } + + function TTPVKusovnikDilceService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('', tblKVaz, 'main') + ' FROM ' + tblKVaz + ' main WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TTPVKusovnikDilceService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT ' + GetTabCols('', tblKVaz, 'main') + ' FROM ' + tblKVaz + ' main'; + + where:= ''; + + + if (params<>nil) then + begin + if (params.ContainsKey('zmenaDo')) then + begin + if (params.Items['zmenaDo']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ZmenaDo=' + params.Items['zmenaDo'] + else + where:= 'ZmenaDo IS NULL'; + end + else + where:= 'ZmenaDo IS NULL'; + + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('dilec')) then + if (params.Items['dilec']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.vyssi=' + params.Items['dilec']; + + if (params.ContainsKey('idZakazModif')) then + begin + if (params.Items['idZakazModif']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif=' + params.Items['idZakazModif'] + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif IS NULL'; + end + else + where:= where + IfThen(where<>'', ' AND ', '') + 'main.IDZakazModif IS NULL'; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + + + +{ TQMSKontrolniPlanService } + + function TQMSKontrolniPlanService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lSQL:= 'SELECT ' + GetTabCols('', tblKJ, 'main') + ' FROM ' + tblKVaz + ' main WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TQMSKontrolniPlanService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + AID, cnt, rNo: integer; + resList: TObjectList; + resObj: TQMSKontrolniPlan; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + lSQL:= 'SELECT main.ID FROM ' + tblKPLHlav + ' main'; + + where:= 'main.Kategorie IN (SELECT Cislo FROM ' + tblKategKJ + ' WHERE QMSAgenda=12)' ; + + + if (params<>nil) then + begin + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.ID=' + params.Items['id']; + + if (params.ContainsKey('kategorie')) then + if (params.Items['kategorie']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'main.kategorie=N' + params.Items['kategorie'].QuotedString; + end; + + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.ID'; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL); + cnt:= lQry.RecordCount; + if (cnt>0) then + begin + resList:= TObjectList.Create; + try + lQry.First; + rNo:= 1; + while (rNo<=cnt) do + begin + lQry.RecNo:= rNo; + AID:= lQry.FieldByName('ID').AsInteger; + resObj:= self.GetByID (AID); + resList.Add (resObj); + if not(lQry.Active) then + lQry.Open; + Inc(rNo); + end; + result:= resList; + except on E:Exception do + raise EServiceException.Create('Chyba nacitani Evidence rozpracovanych operaci: ' + E.Message); + end; + end; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TQMSKontrolniPlanService.GetAll (params: TDictionary=nil): TObjectList; + var lSQL, errMsg, ordBy: string; + jenSeznam: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + jenSeznam:= false; + ordBy:= 'main.ID'; + + if (params<>nil) then + begin + if (params.ContainsKey('seznam')) then + if (params.Items['seznam']='1') then + jenSeznam:= true; + + if (params.ContainsKey('ordBy')) then + if (params.Items['ordBy']<>'') then + ordBy:= params.Items['ordBy']; + end; + + + lSQL:= 'SELECT ' + GetTabCols('', tblKPLHlav, 'main') + ' FROM ' + tblKPLHlav + ' main'; + lSQL:= lSQL + ' ORDER BY ' + ordBy; + lSQL:= lSQL.Replace('TabKPLHlav.', 'main.'); + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + lQry:= TFDQuery.Create(nil); + try + lQry.FetchOptions.Mode:= fmAll; + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + + + function TQMSKontrolniPlanService.GetByID (const AID: Integer): TQMSKontrolniPlan; + var lSQL, where, extInfoStr: string; + lQry: TFDQuery; + sqlConnX: TFDConnection; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblKPLHlavE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblKPLHlavE, '', true, 'ID') + ' FROM ' + tblKPLHlavE + ' WHERE ID=:ID'; + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObject; + finally + lQry.Free; + end; + end; + + + + lSQL:= 'SELECT ' + GetTabCols('', tblKPLHlav, 'main') + ' FROM ' + tblKPLHlav + ' main WHERE main.ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.FetchOptions.Mode:= fmAll; + lQry.Open(lSQL, [AID]); + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + finally + lQry.Free; + end; + + sqlConnX.Close; + sqlConnX.Free; + end; + + + +end. diff --git a/uSvc_Zamestnanci.pas b/uSvc_Zamestnanci.pas new file mode 100644 index 0000000..43287f0 --- /dev/null +++ b/uSvc_Zamestnanci.pas @@ -0,0 +1,257 @@ +unit uSvc_Zamestnanci; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.Generics.Collections, + System.SysUtils, + JsonDataObjects, + uCommons, + uDataMod, + uHeoObj_Base, + uSvc_Base; + +const + selZamest = 'ID, Cislo, Prijmeni, Jmeno, TitulPred, TitulZa, Stredisko, NakladovyOkruh, Zakazka'; + selZamestSpec = '(SELECT _DataZone_KodCipu FROM TabCisZam_EXT WHERE ID=main.ID) AS KodCipu'; + +type + + TZamestnanciService = class(TServiceBase) + public + function GetAll: TObjectList; + function GetByID (const AID: Integer): TZamestnanec; virtual; + function GetByParams (params: TDictionary): TObjectList; virtual; + function GetByOsCislo (const AOsCislo: Integer): TZamestnanec; virtual; + function GetMeta: TJSONObject; virtual; + end; + + + + + +implementation + +uses + System.StrUtils, + System.RegularExpressions, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons, + FireDAC.Stan.Consts, + helTabsBIDs; + + + +{ TZamestnanciService } + + function TZamestnanciService.GetAll: TObjectList; + var lSQL: string; + lQry: TFDQuery; + e: boolean; + begin + e:= false; + if (SQLTableExists ('dbo', tblCZamE)) then + if (SQLColumnExists('dbo', tblCZamE, '_DataZone_KodCipu')) then + e:= true; + + lSQL:= 'SELECT ' + selZamest; + if (e) then + lSQL:= lSQL + IfThen(selZamestSpec<>'', ', ' + selZamestSpec, ''); + lSQL:= lSQL + ' FROM ' + tblCZam + ' ORDER BY ID'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + result:= lQry.AsObjectList; + finally + lQry.Free; + end; + end; + + + + + function TZamestnanciService.GetByParams (params: TDictionary): TObjectList; + var lSQL, where: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + e, e1: boolean; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + + e1:= false; + e:= SQLTableExists('dbo', tblCisZamE); + if (e) then + e1:= SQLColumnExists(tblCisZamE, '_DataZone_KodCipu'); + + lSQL:= 'SELECT ' + GetTabCols('', tblCZam, 'main') + IfThen(selZamestSpec<>'', ', ' + selZamestSpec, '') + ' FROM ' + tblCZam + ' main'; + + where:= ''; + + if (params.ContainsKey('id')) then + if (params.Items['id']<>'') then + if (params.Items['id']<>'0') then + where:= where + 'ID=' + params.Items['id']; + + if (params.ContainsKey('cislo')) then + if (params.Items['cislo']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Cislo=' + params.Items['cislo']; + + if (params.ContainsKey('prijm')) then + if (params.Items['prijm']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Prijmeni LIKE N' + (params.Items['prijm'] + '%').QuotedString; + + if (e) and (e1) and (params.ContainsKey('kodCipu')) then + if (params.Items['kodCipu']<>'') then + where:= where + IfThen(where<>'', ' AND ', '') + 'EXISTS(SELECT 1 FROM ' + tblCZamE + ' WHERE ID=main.ID AND _DataZone_KodCipu=N' + (params.Items['kodCipu']).QuotedString + ')'; + + if (params.ContainsKey('veStavu')) then + if (params.Items['veStavu']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'Id IN (SELECT mk.ZamestnanecID FROM ' + tblZamMzd + ' mk INNER JOIN ' + tblMzdObd + ' o ON (o.ID=mk.IdObdobi)' + + ' WHERE mk.StavES=0 AND o.Rok=DATEPART(year, GETDATE()) AND o.Mesic=DATEPART(month, GETDATE()))'; + + if (where<>'') then + lSQL:= lSQL + ' WHERE ' + where; + lSQL:= lSQL + ' ORDER BY main.Cislo'; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + try + lQry.Open(lSQL); + result:= lQry.AsObjectList; + except on E:Exception do + raise EServiceException.Create ('Chyba načítání zaměstnanců: ' + E.Message); + end; + finally + end; + + lQry.Free; + sqlConnX.Free; + + end; + + + + function TZamestnanciService.GetByID (const AID: Integer): TZamestnanec; + var lSQL: string; + extInfoStr: string; + sqlConnX: TFDConnection; + lQry: TFDQuery; + begin + result:= nil; + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + extInfoStr:= ''; + if (SQLTableExists ('dbo', tblCZamE)) then + begin + lSQL:= 'SELECT ' + GetTabCols ('dbo', tblCZamE, '', true, 'ID') + ' FROM ' + tblCZamE + ' WHERE ID=:ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if (lQry.RecordCount>0) then + extInfoStr:= lQry.AsJSONObjectString; + finally + lQry.Free; + end; + end; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL, [AID]); + if not(lQry.EOF) then + begin + result:= lQry.AsObject; + if (extInfoStr<>'') then + result.ExtInfo:= ExtInfoStr; + end + else + raise EServiceException.Create ('Zaměstnanec s ID ' + AID.ToString + ' nebyl nalezen.'); + finally + end; + + lQry.Free; + sqlConnX.Free; + + end; + + + + + function TZamestnanciService.GetByOsCislo (const AOsCislo: Integer): TZamestnanec; + var lSQL: string; + lQry: TFDQuery; + e: boolean; + begin + result:= nil; + + e:= false; + if (SQLTableExists ('dbo', tblCZamE)) then + if (SQLColumnExists('dbo', tblCZamE, '_DataZone_KodCipu')) then + e:= true; + + lSQL:= 'SELECT ' + selZamest; + if (e) then + lSQL:= lSQL + IfThen(selZamestSpec<>'', ', ' + selZamestSpec, ''); + lSQL:= lSQL + ' FROM ' + tblCZam + ' WHERE Cislo=:OsCislo'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL, [AOsCislo]); + try + if not(lQry.EOF) then + result:= lQry.AsObject + else + raise EServiceException.Create ('Zaměstnanec s os.č. ' + AOsCislo.ToString + ' nebyl nalezen.'); + finally + lQry.Free; + end; + end; + + + + + function TZamestnanciService.GetMeta: TJSONObject; + var lSQL: string; + lQry: TFDQuery; + e: boolean; + begin + e:= false; + if (SQLTableExists ('dbo', tblCZamE)) then + if (SQLColumnExists('dbo', tblCZamE, '_DataZone_KodCipu')) then + e:= true; + + lSQL:= 'SELECT ' + selZamest; + if (e) then + lSQL:= lSQL + IfThen(selZamestSpec<>'', ', ' + selZamestSpec, ''); + lSQL:= lSQL + ' FROM ' + tblCZam + ' WHERE 1=0'; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= FDM.sqlConn; + lQry.Open(lSQL); + try + result:= lQry.MetadataAsJSONObject(); + finally + lQry.Free; + end; + end; + + +end. diff --git a/uWebMod.dfm b/uWebMod.dfm new file mode 100644 index 0000000..632294b --- /dev/null +++ b/uWebMod.dfm @@ -0,0 +1,12 @@ +object WebModule1: TWebModule1 + OnCreate = WebModuleCreate + OnDestroy = WebModuleDestroy + Actions = < + item + Default = True + Name = 'DefaultHandler' + PathInfo = '/' + end> + Height = 230 + Width = 415 +end diff --git a/uWebMod.pas b/uWebMod.pas new file mode 100644 index 0000000..448a26d --- /dev/null +++ b/uWebMod.pas @@ -0,0 +1,320 @@ +unit uWebMod; + +interface +{$I 'GlobalDefs.inc'} + +uses + System.SysUtils, + System.Classes, + System.Generics.Collections, + Web.HTTPApp, + MVCFramework, + MVCFramework.Commons, + MVCFramework.Controllers.Register, + MVCFramework.Middleware.Redirect +//{$IF DEFINED(CUSTOM_CTRL_INCOSystems)} ,uCtrlCustom {$ENDIF} +//{$IF DEFINED(CUSTOM_CTRL_GatemaSD)} ,uCtrlCustomSDG {$ENDIF} + +{$IF DEFINED(CUSTOM_CTRL_Rootvin) + OR DEFINED(CUSTOM_CTRL_INCOSystems) + OR DEFINED(CUSTOM_CTRL_EMPolar) + OR DEFINED(CUSTOM_CTRL_Gornicky)} + ,uCtrlCustom + {$UNDEF CUSTOM_CTRL_GatemaSD} +{$ENDIF} + ; + +const CRLF = #13#10; + +type + TWebModule1 = class(TWebModule) + procedure WebModuleCreate(Sender: TObject); + procedure WebModuleDestroy(Sender: TObject); + private + FEngine: TMVCEngine; + public + Port: integer; + end; + + THDCDZJWTAuthentication = class(TInterfacedObject, IMVCAuthenticationHandler) + protected + procedure OnRequest(const AContext: TWebContext; const ControllerQualifiedClassName: string; + const ActionName: string; var AuthenticationRequired: Boolean); + procedure OnAuthentication(const AContext: TWebContext; const UserName: string; const Password: string; + UserRoles: TList; var IsValid: Boolean; const SessionData: TSessionData); + procedure OnAuthorization(const AContext: TWebContext; UserRoles: TList; + const ControllerQualifiedClassName: string; const ActionName: string; + var IsAuthorized: Boolean); + end; + + + + +var + WebModuleClass: TComponentClass = TWebModule1; + jeLoginMod: boolean; + dataZoneKlic: string; + +implementation + +{ %CLASSGROUP 'Vcl.Controls.TControl' } + +uses MVCFramework.Middleware.CORS, + MVCFramework.Middleware.Compression, + MVCFramework.Middleware.StaticFiles, + +{$IF DEFINED(SEC_ACCESS) or DEFINED(SWAGGER)} + MVCFramework.Middleware.JWT, +{$ENDIF} + +{$IFDEF SEC_ACCESS} + MVCFramework.JWT, +{$ENDIF} + MVCFramework.Middleware.Swagger, + MVCFramework.Swagger.Commons, + uWinService, + uCtrlBase, + uCtrlZamestnanci, + uCtrlObehZbozi, + uCtrlKmenZbozi, + uCtrlVyroba, + uCtrlObecne, + uCtrlOrganizace, + uCtrlQMS, + uDataMod +{$IF DEFINED(CUSTOM_CTRL_GatemaSD)} + , uCtrlCustomSDG +{$ENDIF} + ; + +{$R *.dfm} + + + + +// TODO: JWT autentifikaci + procedure THDCDZJWTAuthentication.OnAuthentication (const AContext: TWebContext; const UserName: string; const Password: string; + UserRoles: TList; var IsValid: Boolean; const SessionData: TSessionData); + begin + IsValid := (not UserName.IsEmpty) and UserName.Equals(Password); // hey!, this is just a demo!!! + if IsValid then + begin + if UserName = 'user_raise_exception' then + begin + raise EMVCException.Create(500, 1024, 'This is a custom exception raised in "TAuthenticationSample.OnAuthentication"'); + end; + + if UserName = 'user1' then + begin + UserRoles.Add('role1'); + end; + if UserName = 'user2' then + begin + UserRoles.Add('role2'); + end; + if UserName = 'user3' then // all the roles + begin + UserRoles.Add('role1'); + UserRoles.Add('role2'); + end; + + // You can add custom data to the logged user + SessionData.AddOrSetValue('customkey1', 'customvalue1'); + SessionData.AddOrSetValue('customkey2', 'customvalue2'); + + end + else + begin + UserRoles.Clear; + end; + end; + + + procedure THDCDZJWTAuthentication.OnAuthorization (const AContext: TWebContext; UserRoles: TList; + const ControllerQualifiedClassName: string; const ActionName: string; var IsAuthorized: Boolean); + begin + IsAuthorized := False; + if ActionName = 'Logout' then + IsAuthorized := True; // you can always call logout + if ActionName = 'OnlyRole2' then + IsAuthorized := UserRoles.Contains('role2'); + if ActionName = 'OnlyRole1' then + IsAuthorized := UserRoles.Contains('role1'); + if ActionName = 'OnlyRole1EmittingJSON' then + IsAuthorized := UserRoles.Contains('role1'); + end; + + + procedure THDCDZJWTAuthentication.OnRequest (const AContext: TWebContext; const ControllerQualifiedClassName: string; + const ActionName: string; var AuthenticationRequired: Boolean); + begin + AuthenticationRequired := ControllerQualifiedClassName = 'AppControllerU.TAdminController'; + end; + + + + + + + +procedure TWebModule1.WebModuleCreate (Sender: TObject); + var LSwagInfo: TMVCSwaggerInfo; + LClaimsSetup: TJWTClaimsSetup; + swagP: TMVCTransferProtocolSchemes; + begin + +// FEngine := TMVCEngine.Create(self); + FEngine := TMVCEngine.Create(self, + procedure(AConfig: TMVCConfig) + begin +// AConfig[TMVCConfigKey.SessionTimeout] := '0'; // session cookie + AConfig[TMVCConfigKey.LoadSystemControllers]:= 'false'; + AConfig[TMVCConfigKey.ExposeServerSignature] := 'false'; + AConfig[TMVCConfigKey.ExposeXPoweredBy] := 'false'; + AConfig[TMVCConfigKey.DefaultContentType]:= TMVCMediaType.APPLICATION_JSON; + end + ); + + +{$IFDEF SEC_ACCESS} +// if (jeLoginMod) then + +{ + FEngine.AddMiddleware(TMVCBasicAuthenticationMiddleware.Create( + TMVCDefaultAuthenticationHandler.New + .SetOnAuthentication( + procedure(const AUserName, APassword: string; AUserRoles: TList; var IsValid: Boolean; const ASessionData: TDictionary) + var lSQL, u, p: string; + i: integer; + begin + // IsValid:= AUserName.Equals('dmvc') and APassword.Equals('123'); + IsValid:= false; + if (uDataMod.datMod.sqlConn.Connected) then + begin + i:= 0; + u:= AUserName.Replace(' ', '').Replace(';', '').Replace('--', '').Replace(' OR', '').Trim; // sanitizace pro SQL + p:= APassword.Replace(' ', '').Replace(';', '').Replace('--', '').Replace(' OR', '').Trim; // sanitizace pro SQL + lSQL:= 'DECLARE @id INT; SET @id=ISNULL( (SELECT ID FROM dbo.hdc_DataZone_APIUsers WHERE LoginName=N' + QuotedStr(u); + lSQL:= lSQL + ' AND Aktivni=1 AND HashPwd=HASHBYTES(''SHA2_512'', N' + QuotedStr(p) + ')), 0); SELECT @id AS ID' + CRLF; + uDataMod.datMod.sqlQry1.Open(lSQL); + if (uDataMod.datMod.sqlQry1.RecordCount>0) then + i:= uDataMod.datMod.sqlQry1.FieldByName('ID').AsInteger; + IsValid:= (i>0); + end; + end + ) + )); +} + +{$ENDIF} + + +//{$IFDEF SWAGGER_ON} + swagP:= [psHTTP, psHTTPS]; + if (uWinService.jeSSL) then + swagP:= [psHTTPS]; + + + LSwagInfo.Title:= 'HDC API - dokumentace'; + LSwagInfo.Version:= 'v1'; + LSwagInfo.Description:= 'Swagger dokumentace konektoru HDC API'; + LSwagInfo.ContactName:= 'HD Consulting s.r.o. Strakonice'; + LSwagInfo.ContactEmail:= 'info@hdconsulting.cz'; + LSwagInfo.ContactUrl:= 'https://www.hdconsulting.cz/#footer'; + + FEngine.AddMiddleware (TMVCSwaggerMiddleware.Create (FEngine, LSwagInfo, '/api/swagger.json', + 'Method for authentication using JSON Web Token (JWT)', false, '', '', '', swagP)); + + FEngine.AddMiddleware (TMVCStaticFilesMiddleware.Create ( + '/swagger', // StaticFilesPath + '.\hdcdzapi-swagger', // DocumentRoot + 'index.html' // IndexDocument - Before it was named fallbackresource + )); +//{$ENDIF} + + FEngine.AddMiddleware (TCORSMiddleware.Create( + '*', // TMVCCORSDefaults.ALLOWS_ORIGIN_URL, + false, // TMVCCORSDefaults.ALLOWS_CREDENTIALS + '*, Content-Security-Policy, Location, Authorization', // TMVCCORSDefaults.EXPOSE_HEADERS, + 'Content-Type, origin, Accept', //TMVCCORSDefaults.ALLOWS_HEADERS + 'POST,GET,OPTIONS') + ); // HTTP Cross-Origin Resource Sharing + FEngine.AddMiddleware (TMVCCompressionMiddleware.Create(256)); + FEngine.AddMiddleware (TMVCRedirectMiddleware.Create(['/'], '/swagger')); + + + FEngine.AddController (TObecnyController); + FEngine.AddController (TAktivitaController); + FEngine.AddController (TUkolAktivityController); +// FEngine.AddController (TRedirectController); + + FEngine.AddController (TZamestnanciController); + FEngine.AddController (TOrganizaceController); + FEngine.AddController (TDokumentController); + FEngine.AddController (TPlanKalendarController); + + FEngine.AddController (TSkupinaZboziController); + FEngine.AddController (TKmenZboziController); + FEngine.AddController (TStavSkladuController); + FEngine.AddController (TDokladOZController); + FEngine.AddController (TPolozkaOZController); + + FEngine.AddController (TTPVKusovnikDilceController); + FEngine.AddController (TTPVOperaceDilceController); + FEngine.AddController (TTPVPracovisteController); + FEngine.AddController (TTPVStrojController); + FEngine.AddController (TTPVCisKooperaciController); + FEngine.AddController (TTPVCiselnikZmenController); + FEngine.AddController (TTPVPrednastaveniOperaciController); + FEngine.AddController (TTPVZakazkoveModifikaceController); + FEngine.AddController (TTPVZakazkoveModifikaceDilceController); + + FEngine.AddController (TVyrobniPrikazController); + FEngine.AddController (TMaterialPrikazuController); + FEngine.AddController (TVyrobniOperaceController); + + FEngine.AddController (TVyrobaEvidRozpracOperaceController); + FEngine.AddController (TVyrobaEvidenceOperaciController); + + FEngine.AddController (TQMSUdrzbaStrojuAZarizeniController); + FEngine.AddController (TQMSObecneController); + FEngine.AddController (TQMSKontrolniPlanController); + FEngine.AddController (TQMSKontrolniPostupyController); + + FEngine.AddController (TKooperacniObjednavkaController); + + +// pokud mam povoleno SD Gatema, nesmim mit povoleno Rootvin !!! +{$IFDEF CUSTOM_CTRL_Rootvin} + FEngine.AddController(TRTNController); +// {$I '_custom/Rootvin/uWebModCustom.inc'} + {$UNDEF CUSTOM_CTRL_GatemaSD} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_INCOSystems} + {$I '_custom/INCOSystems/uWebModCustom.inc'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_GatemaSD} + {$I '_custom/GatemaSD/uWebModCustomSDG.inc'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I '_custom/Gornicky/uWebModCustom.inc'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I '_custom/EMPolar/uWebModCustom.inc'} +{$ENDIF} + + end; + + + + procedure TWebModule1.WebModuleDestroy (Sender: TObject); + begin + if (FEngine<>nil) then + FEngine.Free; + end; + +end. diff --git a/uWinService.dfm b/uWinService.dfm new file mode 100644 index 0000000..191da1b --- /dev/null +++ b/uWinService.dfm @@ -0,0 +1,28 @@ +object HDCDZApiService: THDCDZApiService + OnCreate = ServiceCreate + DisplayName = 'HDC DataZone API Server' + ErrorSeverity = esCritical + AfterInstall = ServiceAfterInstall + BeforeUninstall = ServiceBeforeUninstall + AfterUninstall = ServiceAfterUninstall + OnContinue = ServiceContinue + OnExecute = ServiceExecute + OnPause = ServicePause + OnStart = ServiceStart + OnStop = ServiceStop + Height = 149 + Width = 250 + object sslHandler: TIdServerIOHandlerSSLOpenSSL + SSLOptions.Method = sslvTLSv1_2 + SSLOptions.SSLVersions = [sslvTLSv1_2] + SSLOptions.Mode = sslmServer + SSLOptions.VerifyMode = [] + SSLOptions.VerifyDepth = 0 + Left = 164 + Top = 14 + end + object FDQuery1: TFDQuery + Left = 26 + Top = 14 + end +end diff --git a/uWinService.pas b/uWinService.pas new file mode 100644 index 0000000..fa60571 --- /dev/null +++ b/uWinService.pas @@ -0,0 +1,2797 @@ +unit uWinService; + +interface +{$I 'globalDefs.inc'} + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, + Vcl.Dialogs, Winapi.ShellAPI, Winapi.ActiveX, IdHTTPWebBrokerBridge, Xml.XmlIntf, Xml.xmldom, Xml.XMLDoc, JsonDataObjects, + System.IOUtils, System.SyncObjs, IdBaseComponent, IdComponent, IdServerIOHandler, IdSSL, IdHTTP, IdURI, + IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, + FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, + FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, + FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, + Neslib.Xml, Neslib.Xml.IO, Neslib.Xml.Types, +{$IFDEF OMNIThreadLib} + OtlParallel, OtlCommon, OtlTask, OtlTaskControl, OtlEventMonitor, OtlSync, OtlComm, +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/usesTop.inc} +{$ENDIF} + flcCipher, Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files; + + +const +{$I globalConsts.inc} + + SrvNameConst = 'HDCDZApiService'; + SrvDispNameConst = 'HDC DataZone API Server'; + + eKey2 = '9!81Aq#cU:MCntb6'; + sName = 'DBName'; + eKey1 = 'qe*cX!8k@4WA!gQ5'; + defsFName = 'hdcDZAPIdefs'; + sSSL = 'SSL'; + sServer = 'DBServer'; + sEncConn = 'DBEncConn'; + pwd1 = 'L~4'; + sPortS = 'DBPort'; + pwd2 = 'Qe!r'; + sDZTasksIntZapisHeO = 'DZTasksIntervalZapisHeO'; + sDzKlic = 'DataZoneKey'; + sSSLCert = 'SSLCertFile'; + sHeoPath = 'IniPath'; + sUser = 'DBUser'; + iVect2 = '3r!9q$'; + sPwd = 'DBPwd'; + sLCh = 'licCheck'; + sHeoLic = 'HEOLicence'; + sDZTasksDownURL = 'DZTasksDownloadURL'; + sSSLKey = 'SSLKeyFile'; + iVect1 = 's4W*ERr9'; + sDZTaskIntZapisTypCas = 'DZTaskZapisIntervalTypCas'; + sPort = 'APIPort'; + sCfgComp = 'confComp'; + sHeliosStoreURL = 'HeliosStoreURL'; + sLoginMod = 'JWTAuthMod'; + sDZTasksIntDown = 'DZTasksIntervalDownload'; + cfgFName = 'hdcDZAPIcfg.dat'; + tblHDCDZApiKonfig = '[dbo].[_hdc_DataZone_konfig]'; + + tblPrijataJsonData = '[dbo].[_hdc_ph_PrijataJsonData]'; +{$IFDEF CUSTOM_CTRL_Rootvin} + tblOperaceStartStop = '[dbo].[_TabVyroba_OperaceStartStop]'; +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/consts.inc} +{$ENDIF} + + + uqLicMutex = '{77567050-19D8-45EB-B32A-B431079E45AD}'; + MY_MSG_SERVICE_CONTROL = 1; + + WM_FREE_THREAD1 = WM_APP + 1; + WM_FREE_THREAD2 = WM_APP + 2; + WM_FREE_THREAD3 = WM_APP + 3; + + OPENSSL_LIBS: array of string = ['libeay32.dll', 'ssleay32.dll']; + + licReq = '' + + '' + + ' ' + + ' ' + + ' LicenseString' + + ' HDCDZApi' + + ' ' + + ' ' + + ''; + + + + + + type + TSSLEventHandlers = class + procedure OnGetSSLPassword(var APassword: {$IF CompilerVersion < 27}AnsiString{$ELSE}string{$ENDIF}); + procedure OnQuerySSLPort(APort: Word; var VUseSSL: boolean); + end; + + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/types.inc} +{$ENDIF} + + + THeoZpracujJSONThread = class(TThread) + private + FLock: TCriticalSection; + FRunning: boolean; + protected + procedure Execute; override; + public + constructor Create (AOnTerminate: TNotifyEvent); + destructor Destroy; override; + procedure ThreadTerminate; + end; + + + + + THeoZapisDZTasksThread = class(TThread) + private + FLock: TCriticalSection; + FRunning: boolean; + protected + procedure Execute; override; + public + constructor Create (AOnTerminate: TNotifyEvent); + destructor Destroy; override; + procedure ThreadTerminate; + end; + + + + TDownDZTasksThread = class(TThread) + private + FLock: TCriticalSection; + fPausedEvent: TEvent; + protected + procedure Execute; override; + public + constructor Create (AOnTerminate: TNotifyEvent); + destructor Destroy; override; + procedure ThreadTerminate; + end; + + + + TKontrolaLicThread = class(TThread) + private + FLock: TCriticalSection; + FHeliosLic: string; + FLicJeOK: boolean; + FLicInfo: boolean; + fPausedEvent: TEvent; + FMainThreadHandle: NativeUInt; + protected + procedure Execute; override; + public + constructor Create (AOnTerminate: TNotifyEvent; heoLic: string); + destructor Destroy; override; + procedure ThreadTerminate; + property LicenceJeOK: boolean read FLicJeOK; + property MainThreadHandle: NativeUInt read FMainThreadHandle write FMainThreadHandle; + end; + + + + THDCDZApiService = class(TService) + sslHandler: TIdServerIOHandlerSSLOpenSSL; + FDQuery1: TFDQuery; + procedure ServiceCreate (Sender: TObject); + procedure ServiceExecute (Sender: TService); + procedure ServiceStart (Sender: TService; var Started: Boolean); + procedure ServiceStop (Sender: TService; var Stopped: Boolean); + procedure ServiceAfterInstall (Sender: TService); + procedure ServiceAfterUninstall (Sender: TService); + procedure ServicePause (Sender: TService; var Paused: Boolean); + procedure ServiceContinue (Sender: TService; var Continued: Boolean); + procedure ServiceBeforeUninstall(Sender: TService); + private + FServiceNum: integer; + fServer: TIdHTTPWebBrokerBridge; + downThr: TDownDZTasksThread; + licThr: TKontrolaLicThread; + zapisDZTasksThr: THeoZapisDZTasksThread; + zpracJsonThr: THeoZpracujJSONThread; +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainPrivs.inc} +{$ENDIF} + +{$IFDEF OMNIThreadLib} + tskLicKontrola: IOmniTaskControl; + tskZapisDZTasks: IOmniTaskControl; + tskZpracujJSON: IOmniTaskControl; + cancelToken: IOmniCancellationToken; +{$ENDIF} + fZastavAPI: boolean; + + procedure GetServiceName; + procedure GetServiceDisplayName; + +// fSSLPassword: TSSLEventHandlers; + function CheckOPENSSLLibs (var useHeoPath: boolean): boolean; + function Decrypt (const AStr: string): RawByteString; + function ReturnDecrypted (const AStr: string): string; + function Encrypt (const AStr: string): RawByteString; + function ReturnEncrypted(const AStr: string): string; + function ReadConfig (var errMsg: string): boolean; + + procedure ThreadTerminated (Sender: TObject); +{$IFDEF OMNIThreadLib} + procedure ZpracujOmniZpravy (const task: IOmniTaskControl; const msg: TOmniMessage); + procedure UkonciVse; + procedure OmniZpracujJSON (const task: IOmniTask); + procedure TaskTerminated (const task: IOmniTaskControl); +{$ENDIF} + procedure SQLKontroly; + procedure SQLDefinice; + public + FGlobLicJeOK: Boolean; + FUninstallMode: Boolean; + function GetServiceController: TServiceController; override; + constructor Create (AOwner: TComponent); override; + destructor Destroy; override; + end; + + + TServiceControlMessage = record + lic: Boolean; + // Zde můžete přidat další údaje, které chcete poslat + end; + + + function ShutdownBlockReasonDestroy(hWnd: HWND): Bool; stdcall; external user32; + + + + +var + HDCDZApiService: THDCDZApiService; + UninstallMode: boolean; + verText: string; + testLicTimeout, downDZTasksTimeout: Integer; + DZTaksZapisTypCas: integer; + licMutex, licMutexSvc: TMutex; + sslPwds: TSSLEventHandlers; + eServDLL: boolean; + eServPath: string; + Logger: TLogFileProvider; + logItem: TLogItem; + +{$IFDEF OMNIThreadLib} + omniMonitor: TOmniEventMonitor; +{$ENDIF} + + dbgStep: integer; + + heoZapisDZTasks: TCriticalSection; + tblDZTExistuje: boolean; // existuje tabulka dbo._hdc_DataZone_Tasky ??? + mamTabPrijataData: boolean; // existuje tabulka dbo._hdc_ph_PrijataJsonData ??? + + cfgXML: XML.XmlIntf.IXMLDocument; + n1: XML.XmlIntf.IXMLNode; + fName, sslCertFile, sslKeyFile: string; + apiPort: integer; + webAuth, urlDZTaskyDown: string; + + dbName, dbServer, dbUser, dbPwd, heoLic, apiLic, dataZoneKlic, heoPath, sslLibPath: string; + dbPort, intGetDZTasks: integer; + intProcessDZTasksSec: integer; + jeSSL, jeLoginMod: boolean; + + rbsTemp: RawByteString; + + sqlDefinice: TArray; + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/vars.inc} +{$ENDIF} + + + + + +implementation +uses + System.StrUtils, System.Win.Registry, System.Variants, IdContext, System.Generics.Collections, System.DateUtils, + Web.WebReq, System.Hash, MVCFramework.Commons, MVCFramework.Logger, +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/uses.inc} +{$ENDIF} + helTabsBIDs, + uWebMod, uDataMod; +{$R *.DFM} + + + procedure TSSLEventHandlers.OnGetSSLPassword (var APassword: {$IF CompilerVersion < 27}AnsiString{$ELSE}string{$ENDIF}); + begin + APassword := ''; + end; + + procedure TSSLEventHandlers.OnQuerySSLPort(APort: Word; var VUseSSL: boolean); + begin + VUseSSL := true; + end; + + + + + + function GetLinkerTimestamp: TDateTime; + begin + result:= PImageNtHeaders(HInstance + Cardinal(PImageDosHeader(HInstance)^._lfanew))^.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta; + end; + + + + function GetFileVersion2 (sFileName:string): string; + var VerInfoSize: DWORD; + VerInfo: Pointer; + VerValueSize: DWORD; + VerValue: PVSFixedFileInfo; + Dummy: DWORD; + begin + VerInfoSize := GetFileVersionInfoSize (PChar(sFileName), Dummy); + GetMem(VerInfo, VerInfoSize); + GetFileVersionInfo(PChar(sFileName), 0, VerInfoSize, VerInfo); + VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); + with VerValue^ do + begin + Result := IntToStr(dwFileVersionMS shr 16); + Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF); + Result := Result + '.' + IntToStr(dwFileVersionLS shr 16); + Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF); + end; + FreeMem(VerInfo, VerInfoSize); + end; + + + + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/impl.inc} +{$ENDIF} + + + + + constructor THeoZpracujJSONThread.Create (AOnTerminate: TNotifyEvent); + begin + inherited Create (false); // Create thread without suspending it + FLock:= TCriticalSection.Create; + FRunning:= false; +// OnTerminate:= AOnTerminate; +// FreeOnTerminate:= true; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + + destructor THeoZpracujJSONThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread ZpracujJSON...'); +{$ENDIF} + FRunning:= false; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + procedure THeoZpracujJSONThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + + procedure THeoZpracujJSONThread.Execute; + var lSQL, errMsg: string; + lLoop, lLoopMax, idTask, cnt, koefProCas: Integer; + logRun: Int64; + Msg: TMsg; + mamTabPrijataData, firstRun, inProg, canCont: boolean; + lQry, lQry2: TFDQuery; + sqlConnX: TFDConnection; + begin + lLoop:= 0; + idTask:= 0; + logRun:= 0; + + firstRun:= true; + inProg:= false; + canCont:= false; + + FRunning:= false; + if not(datMod.SQLTableExists(tblPrijataJsonData)) then + Exit; + + mamTabPrijataData:= datMod.SQLTableExists(tblPrijataJsonData); + + datMod.qryZpracPrijataData.Connection:= datMod.sqlConn; + + FRunning:= true; + + koefProCas:= 0; // default vteriny + case DZTaksZapisTypCas of + 0: koefProCas:= 1; + 1: koefProCas:= 60; + 2: koefProCas:= 3600; + end; + lLoopMax:= koefProCas * intProcessDZTasksSec; + + + try + while not(Terminated) or not(FRunning) do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + begin + Terminate; + FRunning:= false; + end; + + PeekMessage(&Msg, 0, 0, 0, PM_NOREMOVE); + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak dle intervalu z konfigurace, prednastaveno je 120 sek + begin + firstRun:= false; + + try + if not(inProg) then // nebezi uz ? + begin + +{$IFDEF CUSTOM_CTRL_Rootvin} + if (1=1) then +{$ELSE} + if (mamTabPrijataData) then +{$ENDIF} + begin + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + sqlConnX.Open; + + if (sqlConnX.Connected) then + begin + lSQL:= 'SELECT d.ID FROM ' + tblPrijataJsonData + ' d WHERE d.Blokovano=0 AND d.DatZpracovani IS NULL'; + lSQL:= lSQL + ' AND ISNULL(d.PosledniChyba,N'''')=N'''''; + lSQL:= lSQL + ' AND d.Blokovano=0 '; // AND ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE LogText=N''Zpracovani API json'' AND IntValue=d.ID), 0)<4'; + lSQL:= lSQL + ' ORDER BY d.ID'; + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lQry.Open(lSQL); + lQry.First; + + inProg:= true; + + while not(lQry.EOF) do + begin + idTask:= lQry.FieldByName('ID').asInteger; + canCont:= true; + + lQry2:= TFDQuery.Create(nil); + lQry2.Connection:= sqlConnX; + lQry2.Open('SELECT COUNT(ID) AS Pocet FROM dbo._hdc_ph_Log WHERE IntValue=' + idTask.ToString + ' AND LogText LIKE N''%Zpracova%'''); + lQry2.First; + cnt:= lQry2.FieldByName('Pocet').AsInteger; + FreeAndNil(lQry2); + if (cnt>3) then + canCont:= false; + + + if (canCont) then + begin + + sqlConnX.ExecSQL('INSERT dbo._hdc_ph_Log (IntValue, LogText) SELECT ' + idTask.ToString + ', N''Zpracovani API json'''); + datMod.LogInfo (Quick.Logger.etInfo, 'Zpracovani prijatych JSON dat - idTask ' + idTask.ToString); + +// LogInfo(Quick.Logger.etError, 'Zpracovani PrijataJSONData ID ' + idTask.ToString); + try + sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=1 WHERE ID=' + idTask.ToString); + lSQL:= ''; +{$IFDEF DEBUG} + Write ('Zpracovani prijateho JSON id ' + idTask.ToString); +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + lSQL:= 'IF OBJECT_ID(N''dbo.ep_Vyroba_Doklady_Micharna'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_Vyroba_Doklady_Micharna @idJson=' + idTask.ToString + CRLF; +{$ELSE} + lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_HDCDZApi_ZpracujPrijataData'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_HDCDZApi_ZpracujPrijataData @idJson=' + idTask.ToString; +{$ENDIF} + sqlConnX.ExecSQL(lSQL); + sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=NULL WHERE ID=' + idTask.ToString); + +{$IFDEF DEBUG} + Writeln(' - OK'); +{$ENDIF} + + except on E:Exception do + begin + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; +{$IFDEF DEBUG} + WriteLn ('Chyba zpracovani prijateho JSON id ' + idTask.ToString + ' >> ' + errMsg); +{$ENDIF} + sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idTask.ToString); +{$IFDEF CUSTOM_CTRL_Rootvin} + datMod.LogInfo (Quick.Logger.etError, 'Chyba evidence start/stop operace PrijataJSONData ID ' + idTask.ToString + ' : ' + errMsg); +{$ELSE} + datMod.LogInfo(Quick.Logger.etError, 'Chyba zpracovani PrijataJSONData ID ' + idTask.ToString + ' : ' + errMsg); +{$ENDIF} + end; + end; + sqlConnX.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Blokovano=0 WHERE ID=' + idTask.ToString); + end; + lQry.Next; + end; + finally + lQry.Close; + FreeAndNil (lQry); + end; + + inProg:= false; + end; // sql Connected + sqlConnX.Close; + FreeAndNil (sqlConnX); + + end; + end; + + except on E:Exception do + begin + inProg:= false; + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + if (mamTabPrijataData) then + datMod.LogInfo (Quick.Logger.etError, 'Chyba zpracovani prijatych JSON dat ID ' + idTask.ToString + ' : ' + errMsg); + end; + end; + + + lLoop:= 0; + end; + Inc (lLoop); + Sleep (998); + end; + finally + end; + end; + + + + + + + + constructor THeoZapisDZTasksThread.Create (AOnTerminate: TNotifyEvent); + begin + inherited Create (false); + FLock:= TCriticalSection.Create; + FRunning:= false; +// OnTerminate:= AOnTerminate; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + procedure THeoZapisDZTasksThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + destructor THeoZapisDZTasksThread.Destroy; + begin +{$IFDEF DEBUG} + WriteLn('Ukoncuji thread ZapisDZTasks...'); +{$ENDIF} + FRunning:= false; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + + +{$IFDEF OMNIThreadLib} + procedure THDCDZApiService.OmniZpracujJSON (const task: IOmniTask); + var lSQL, errMsg: string; + i, idTask, typTasku, idMzdy, lLoop, zapsano: integer; + jeKoop: boolean; + lQry, lQry2: TFDQuery; + canCont, firstRun: boolean; + Msg: TMsg; + begin + while not(task.Terminated) do + begin + if (task.CancellationToken.IsSignalled) then + task.Terminate; + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); + Sleep(5000); + task.Terminate; + end; + end; +{$ENDIF} + + + + + procedure THeoZapisDZTasksThread.Execute; + var lSQL, errMsg: string; + i, idTask, typTasku, idMzdy, lLoop, zapsano: integer; + jeKoop: boolean; + lQry, lQry2: TFDQuery; + sqlConnX, sqlConnX2: TFDConnection; + canCont, firstRun: boolean; + Msg: TMsg; + begin + + firstRun:= true; + + canCont:= true; + i:= 0; + lLoop:= 1; + + + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= sqlConnX; + lSQL:= 'DECLARE @i INT=0' + CRLF + 'IF OBJECT_ID(N' + tblDZTasky.Replace('[','').Replace(']','').QuotedString + ', N''U'') IS NOT NULL SET @i=1' + CRLF + 'SELECT @i AS TabTest'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + i:= lQry.FieldByName('TabTest').AsInteger + else + canCont:= false; + if (i=0) then + canCont:= false; + finally + lQry.Free; + end; + + idTask:= 0; + + if (canCont) then + begin + try + while not (Terminated) do + begin + + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + Terminate; + + PeekMessage(&Msg, 0, 0, 0, PM_NOREMOVE); + +// LogInfo(Quick.Logger.etInfo, 'Pokus o evidenci nezapsaných DZ Tasků / lLoop ' + lLoop.ToString); + if (lLoop>2*60) or (firstRun) then // zapis kazde 2 minuty + begin + + sqlConnX2:= TFDConnection.Create(nil); + sqlConnX2.ConnectionDefName:= sqlPoolName; + +// FLock.Enter; + if (firstRun) then + firstRun:= false; + + try + lQry:= TFDQuery.Create(nil); + lQry.Connection:= sqlConnX; + + lQry2:= TFDQuery.Create(nil); + lQry2.Connection:= sqlConnX2; + + + lSQL:= 'SELECT ID, Kooperace, Typ FROM ' + tblDZTasky + ' WHERE Nezpracovavat=0 AND DatZpracovani IS NULL AND DATEDIFF(day, DatPorizeni, GETDATE())<4 ORDER BY ID'; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + datMod.LogInfo (Quick.Logger.etInfo, 'Pokus o evidenci nezapsanych DZ Tasku, pocet ' + lQry.RecordCount.ToString); + lQry.First; + + zapsano:= 0; + + while not(lQry.Eof) do + begin + idMzdy:= 0; + idTask:= lQry.FieldByName('ID').AsInteger; + typTasku:= lQry.FieldByName('Typ').AsInteger; + jeKoop:= lQry.FieldByName('Kooperace').AsBoolean; + + if (typTasku>0) then // nedefinovane prijate JSON maji typTasku=0 + begin + if (jeKoop) then + begin // vytvoreni kooperacni objednavky (pro Koramex) + +{$IFDEF CUSTOM_CTRL_Koramex} + lSQL:= 'IF OBJECT_ID(N''dbo.ep_HDC_DataZone_Vyroba_VytvorKoopObjednavku'', N''P'') IS NOT NULL EXEC dbo.ep_HDC_DataZone_Vyroba_VytvorKoopObjednavku @idTask=' + idTask.ToString; + try + sqlConnX.ExecSQL(lSQL); + except on E:Exception do + sqlConnX.ExecSQL('UPDATE ' + tblDZTasky + ' SET PosledniChyba=N' + QuotedStr('Chyba vytvareni koopObj: ' + E.Message) + ' WHERE ID=' + idTask.ToString); + end; +{$ENDIF} + end + else + begin + lSQL:= 'DECLARE @errMsg NVARCHAR(500)=N'''', @idMzdy INT, @idVPr INT, @dokl INT, @alt NCHAR(1), @datStart DATETIME, @datKonec DATETIME, @ksOdv NUMERIC(19,6), @ksZmet NUMERIC(19,6)' + + ', @ksZmetNeopr NUMERIC(19,6), @idZ INT, @cisZ INT, @idPrac INT, @bc NVARCHAR(20), @i INT=' + idTask.ToString + CRLF + + 'SELECT @idVPr=IDPrikaz, @dokl=DokladPrP, @alt=AltPrP, @datStart=DatumStart, @datKonec=DatumKonec, @ksOdv=kusy_odv, @ksZmet=Kusy_zmet_opr, @ksZmetNeopr=Kusy_zmet_neopr' + + ', @idZ=ZamestnanecID, @cisZ=Zamestnanec, @idPrac=IDPracoviste, @bc=BarCode FROM ' + tblDZTasky + ' WHERE ID=@i' + CRLF + + 'IF (ISNULL(@bc,N'''')<>N'''') AND (@idVPr IS NULL OR @dokl IS NULL)' + CRLF + + ' SELECT TOP(1) @idVPr=IDPrikaz, @dokl=Doklad, @alt=Alt, @idPrac=pracoviste FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND BarCode=@bc' + CRLF + + 'IF (@idZ IS NULL) AND (@cisZ IS NOT NULL) SELECT @idZ=ID FROM ' + tblCZam + ' WHERE Cislo=@cisZ' + CRLF + 'BEGIN TRY' + CRLF + + 'EXEC @idMzdy=dbo.hp_EvidenceOperace @IDPrikaz=@idVPr, @Doklad=@dokl, @Alt=@alt, @Datum=@datStart, @Kusy_odv=@ksOdv, @kusy_zmet_opr=@ksZmet, @kusy_zmet_neopr=@ksZmetNeopr' + + ', @DatumZahajeniOp=@datStart, @DatumUkonceniOp=@datKonec, @IDZam=@idZ, @IDPracoviste=@idPrac, @Stav=1' + CRLF + 'END TRY' + CRLF + 'BEGIN CATCH' + CRLF + + 'SET @errMsg=ERROR_MESSAGE()' + CRLF + 'END CATCH' + CRLF + 'SELECT ISNULL(@idMzdy,0) AS IDMzdy, @errMsg AS ErrMsg'; + // LogInfo(Quick.Logger.etInfo, CRLF + lSQL + CRLF); + + try + lQry2.Open(lSQL); + if (lQry2.RecordCount=1) then + begin + idMzdy:= lQry2.FieldByName('IDMzdy').AsInteger; + errMsg:= lQry2.FieldByName('ErrMsg').AsString; + end + else + begin + errMsg:= 'Evidence mzdy se nezdařila, zkuste ji zaevidovat rucne'; + idMzdy:= 0; + end; + lQry2.Close; + if (idMzdy=0) then + begin + sqlConnX2.ExecSQL('UPDATE ' + tblDZTasky + ' SET NovyZaznam=0, PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idTask.ToString); + if (errMsg.Contains('2000735')) then + sqlConnX2.ExecSQL('UPDATE ' + tblDZTasky + ' SET PosledniChyba=N''(2000735) ID/barcode neodpovídá výrobní operaci'', DatZpracovani=GETDATE() WHERE ID=' + idTask.ToString); + if (errMsg.Contains('2000742')) then + sqlConnX2.ExecSQL('UPDATE ' + tblDZTasky + ' SET PosledniChyba=N''(2000742) Není zadán zaměstnanec'', DatZpracovani=GETDATE() WHERE ID=' + idTask.ToString); + end + else + begin + Inc(zapsano); + sqlConnX2.ExecSQL('UPDATE ' + tblDZTasky + ' SET NovyZaznam=0, IDMzdy=' + idMzdy.ToString + ', PosledniChyba=N'''', DatZpracovani=GETDATE() WHERE ID=' + idTask.ToString); + end; + except on E:Exception do + begin + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + sqlConnX2.ExecSQL('UPDATE ' + tblDZTasky + ' SET NovyZaznam=0, PosledniChyba=N' + errMsg.QuotedString + ' WHERE ID=' + idTask.ToString); + + datMod.LogInfo (Quick.Logger.etError, 'Chyba evidence DataZone tasku ID ' + idTask.ToString + ' : ' + E.Message); + end; + end; + end; + end; // typTasku>0 + + lQry.Next; // dalsi task + end; + + if (zapsano>0) then + datMod.LogInfo (Quick.Logger.etInfo, 'Evidence DataZone tasku ID ' + idTask.ToString + ' - zapsano ' + zapsano.ToString + ' operaci'); + + + lQry.Free; + lQry2.Free; + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba evidence DataZone tasku ID ' + idTask.ToString + ' : ' + E.Message); + end; + end; + // FLock.Leave; + lLoop:= 0; + + sqlConnX2.Close; + sqlConnX2.Free; + + end; + Inc(lLoop); + Sleep(1000); + end; + finally + end; + end; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + + + + + constructor TKontrolaLicThread.Create (AOnTerminate: TNotifyEvent; heoLic: string); + begin + inherited Create (false); + FLock:= TCriticalSection.Create; + FreeOnTerminate:= false; +// OnTerminate:= AOnTerminate; + FHeliosLic:= heoLic; + FLicJeOK:= false; + end; + + + procedure TKontrolaLicThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + destructor TKontrolaLicThread.Destroy; + begin +{$IFDEF DEBUG} + WriteLn('Ukoncuji thread KontrolaLic...'); +{$ENDIF} + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + + procedure TKontrolaLicThread.Execute; + var req, resp, licReqL, kodResp: string; + reqBody: TStream; + i: integer; + intLoop: integer; + hc: TIdHTTP; + Msg: TMsg; + zkontrolovatLic: boolean; + pocetKontrol: integer; + ho: byte; + begin + + licReqL:= ''; + FLicInfo:= false; + i:= -1; + + intLoop:= 1; + + zkontrolovatLic:= true; + pocetKontrol:= 0; + + while not (Terminated) do + begin + + PeekMessage(&Msg, 0, 0, 0, PM_NOREMOVE); + +// kontrola licence kazdy den v 9 hodin + ho:= HourOf(Now); + if not(zkontrolovatLic) and (ho=9) and (pocetKontrol=0) then + zkontrolovatLic:= true; + if (ho<>9) then + pocetKontrol:= 0; + + + if (zkontrolovatLic) then + begin + hc:= TIdHTTP.Create(nil); + try + try + hc.Request.Accept:= 'application/soap+xml'; + hc.HTTPOptions:= hc.HTTPOptions + [hoKeepOrigProtocol] + [hoNoProtocolErrorException]; + hc.Request.ContentType:= 'application/soap+xml; charset=utf-8'; +{$IFDEF DEBUG} + datMod.LogInfo (Quick.Logger.etInfo, 'Dotaz na licenci...'); +{$ENDIF} + licReqL:= licReq.Replace('LicenseString', FHeliosLic); + reqBody:= TStringStream.Create(licReqL, TEncoding.UTF8); + resp:= hc.Post(webAuth, reqBody); +{$IFDEF DEBUG} + datMod.LogInfo(Quick.Logger.etInfo, 'Mam data o licenci...'); +{$ENDIF} + if (resp.Contains('')) then + begin + kodResp:= Trim(MidStr(resp, Pos('', resp)+27, 6)); + if (kodResp<>'') then + if not(TryStrToInt('$'+kodResp, i)) then + i:= -1; + end + else + begin + FLicJeOK:= false; + datMod.LogInfo (Quick.Logger.etError, 'Chyba kontroly licence - HDCDZApi zrejme neni licencovano'); + i:= -1; + end; + zkontrolovatLic:= false; + Inc(pocetKontrol); + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba kontroly licence: ' + E.Message); // + licReqL; + i:= -1; + end; + end; + + if (i=-1) and (datMod.chL) then + Terminate; + + datMod.LogInfo (Quick.Logger.etInfo, 'Lic RespCode - ' + i.ToString); + + FLicJeOK:= (i>0); + if not(datMod.chL) then + FLicJeOK:= true; + + if not(FLicJeOK) then + begin +// zkus vytvorit mutex signalizujici neplatnou licenci, na to nepotrebujes zadna Win bezpecnostni prava + licMutex:= TMutex.Create(nil, True, uqLicMutex); + end; + + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba kontroly licence (2): ' + E.Message + CRLF + licReqL); + Terminate; + end; + end; + hc.Free; + intLoop:= 0; + end; + + Sleep(999); + Inc(intLoop); + end; + +{$IFDEF DEBUG} + Writeln('Sluzba kontroly licence ukoncena'); +{$ENDIF} + + end; + + + + + constructor TDownDZTasksThread.Create (AOnTerminate: TNotifyEvent); + begin + inherited Create (false); + FLock:= TCriticalSection.Create; +// OnTerminate:= AOnTerminate; + FreeOnTerminate:= false; + end; + + + procedure TDownDZTasksThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + destructor TDownDZTasksThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread DownDZTasks...'); +{$ENDIF} + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + + procedure TDownDZTasksThread.Execute; + var lSQL, jsonData, strTmp, strTmp2: string; + hc: TIdHTTP; + j: TJSONObject; + i: integer; + intLoop: integer; + sqlConnX: TFDConnection; + begin + intLoop:= 1; + + while not Terminated do + begin + if (intLoop>=intGetDZTasks*60*999) then + begin + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + + hc:= TIdHTTP.Create(nil); + try + hc.Request.BasicAuthentication := False; + hc.Request.CustomHeaders.Clear; + hc.Request.CustomHeaders.Values['DataZoneKey']:= dataZoneKlic; + jsonData:= hc.Get(urlDZTaskyDown); + + if (jsonData<>'') then + begin + j:= TJsonObject.Parse(jsonData) as TJsonObject; + if (j<>nil) then + begin +{ +logItem.EventType:= etInfo; +logItem.EventDate:= now; +logItem.Msg:= 'Start downloading DZ tasks...'; +Logger.WriteLog(logItem); +} + + i:= 0; + while not(Terminated) and (i<=j['tasks'].Count-1) do + begin + strTmp:= j['tasks'].Items[i].S['startedAt']; + if (strTmp<>'') then + strTmp:= MidStr(strTmp, 9, 2) + '.' + MidStr(strTmp, 6, 2) + '.' + LeftStr(strTmp, 4) + ' ' + MidStr(strTmp, 12, 8); + + strTmp2:= j['tasks'].Items[i].S['finishedAt']; + if (strTmp2<>'') then + strTmp2:= MidStr(strTmp2, 9, 2) + '.' + MidStr(strTmp2, 6, 2) + '.' + LeftStr(strTmp2, 4) + ' ' + MidStr(strTmp2, 12, 8); + + lSQL:= 'IF OBJECT_ID(N''dbo._hdc_DataZone_Tasky'', N''U'') IS NOT NULL' + CRLF + + 'IF NOT EXISTS (SELECT 1 FROM ' + tblDZTasky + ' WHERE IdDataZoneTaskID=' + j['tasks'].Items[i].S['id'] + ')' + CRLF + + 'INSERT ' + tblDZTasky + ' (IdDataZoneTaskID, Kooperace, DeviceID, Obsah, StatusText, DatumStart, DatumKonec)' + + ' SELECT ' + j['tasks'].Items[i].S['id'] + ', ' + j['tasks'].Items[i].BoolValue.ToString(false) + + ', N'+ IfThen(j['tasks'].Items[i].S['machine']='', 'ULL', j['tasks'].Items[i].S['machine'].QuotedString) + ', CONVERT(varchar(max), N' + jsonData.QuotedString + ')' + + ', N' + j['tasks'].Items[i].S['status'].QuotedString + ', ' + IfThen(strTmp<>'',' CONVERT(datetime, N' + strTmp.QuotedString + ', 104)', 'NULL') + + ', ' + IfThen(strTmp2<>'',' CONVERT(datetime, N' + strTmp2.QuotedString + ', 104)', 'NULL'); + sqlConnX.ExecSQL(lSQL); + i:= i+1; + end; + end; + end; + except on E:Exception do + datMod.LogInfo (Quick.Logger.etError, 'Chyba nacitani DataZone tasku: ' + E.Message); + end; + hc.Free; + intLoop:= 0; + + sqlConnX.Close; + sqlConnX.Free; + + end; + + Sleep(1000); + Inc(intLoop); + end; + +{$IFDEF DEBUG} + Writeln('Sluzba zapisu DataZone tasku ukoncena'); +{$ENDIF} + + end; + + + + + + + procedure ServiceController (CtrlCode: DWord); stdcall; + begin + HDCDZApiService.Controller(CtrlCode); + end; + + + + + function THDCDZApiService.Encrypt (const AStr: string): RawByteString; + begin + result:= flcCipher.Encrypt(ctRC4, cmECB, cpNone, 256, RawByteString(eKey1+eKey2), RawByteString(AStr), iVect1+iVect2); + end; + + + + function THDCDZApiService.ReturnEncrypted (const AStr: string): string; + function String2Hex(const Buffer: AnsiString): string; + begin + SetLength(Result, Length(Buffer) * 2); + BinToHex(PAnsiChar(Buffer), PChar(Result), Length(Buffer)); + end; + begin + result:= ''; + if (AStr<>'') then + result:= String2Hex(Encrypt(AStr)); + end; + + + + function THDCDZApiService.Decrypt (const AStr: string): RawByteString; + begin + result:= flcCipher.Decrypt(ctRC4, cmECB, cpNone, 256, RawByteString(eKey1+eKey2), RawByteString(AStr), iVect1+iVect2); + end; + + + + function THDCDZApiService.ReturnDecrypted (const AStr: string): string; + var i: integer; + sText, AStrTemp, sVal, sVal2: string; + sTemp: RawByteString; + y, x: integer; + function Hex2String(const Buffer: string): AnsiString; + begin + SetLength(Result, Length(Buffer) div 2); + HexToBin(PChar(Buffer), PAnsiChar(Result), Length(Result)); + end; + begin + result:= ''; + sTemp:= ''; + AStrTemp:= AStr.Trim; + i:= (Length(AStrTemp) div 2); + for i:=0 to (Length(AStr) div 2)-1 do + begin + if (Length(AStrTemp)>1) then + begin + sVal:= LeftStr(AStrTemp, 2); + AStrTemp:= MidStr(AStrTemp, 3, 65535); + if (AStrTemp.Length>1) then + begin + sVal2:= LeftStr(AStrTemp, 2); + if not(TryStrToInt('$' + sVal2, x)) then + x:= -1; + end; + if (x>-1) then + begin +// sVal:= Copy(AStr, (i*2)+1, 2); + y:= StrToInt('$' + sVal); + sTemp:= sTemp + AnsiChar(y); + end; + end; + end; + if (sTemp<>'') then + result:= Decrypt(sTemp); + end; + + + + + function THDCDZApiService.GetServiceController: TServiceController; + begin + result:= ServiceController; + end; + + + + + procedure THDCDZApiService.ServiceCreate (Sender: TObject); + var r: TRegistry; + k, vn, imgPath: string; + openRes: boolean; + i: integer; + canCont: boolean; + begin + + + if (UninstallMode) then + begin + k:= '\SOFTWARE\HDConsultingCZ'; + r:= TRegistry.Create (KEY_READ or KEY_WRITE); + try + i:= 1; + canCont:= true; + r.RootKey:= HKEY_LOCAL_MACHINE; + if (r.KeyExists(k)) then + if (r.OpenKey(k, false)) then + begin + while (canCont) and (i<21) do + begin + vn:= SrvNameConst + i.ToString; + if (r.ValueExists(vn)) then + begin + imgPath:= r.ReadString(vn); + if (imgPath=ParamStr(0)) then + canCont:= false + else + Inc(i); + end + else + Inc(i); + end; + FServiceNum:= i; + end; + r.CloseKey; + finally + r.Free; + end + end + else + begin +// if not(Application.Installing) then +// begin + k:= '\SOFTWARE\HDConsultingCZ'; + r:= TRegistry.Create (KEY_READ or KEY_WRITE); + try + r.RootKey:= HKEY_LOCAL_MACHINE; + + if (r.OpenKey(k, true)) then + begin + FServiceNum:= 1; + canCont:= true; + while (canCont) and (FServiceNum<21) do + begin + if not(r.ValueExists(SrvNameConst + FServiceNum.ToString)) then + canCont:= false + else + Inc(FServiceNum); + end; + end; + r.CloseKey; + finally + r.Free; + end; + end; + + GetServiceName; + GetServiceDisplayName; + + if (WebRequestHandler<>nil) then + WebRequestHandler.WebModuleClass:= WebModuleClass; +// end; + end; + + + + + procedure THDCDZApiService.ServiceAfterInstall (Sender: TService); + var r: TRegistry; + k, imgPath: string; + begin + + k:= '\SOFTWARE\HDConsultingCZ'; + r:= TRegistry.Create (KEY_READ or KEY_WRITE); + try + r.RootKey:= HKEY_LOCAL_MACHINE; + if (r.OpenKey(k, true)) then + r.WriteString(Self.Name, ParamStr(0)); + r.CloseKey; + finally + r.Free; + end; + + + k:= '\SYSTEM\CurrentControlSet\Services\' + Self.Name; + r:= TRegistry.Create(KEY_READ or KEY_WRITE); + try + r.RootKey := HKEY_LOCAL_MACHINE; + if r.OpenKey(k, true) then + begin + r.WriteString('Description', 'HDC-DataZone API komunikator'); + imgPath:= ParamStr(0) + ' /name "' + Self.Name + '"'; + r.WriteString('ImagePath', imgPath); + r.CloseKey; + end; + finally + r.Free; + end; + + + k:= '\SYSTEM\CurrentControlSet\Services\Eventlog\Application\' + Self.Name; + r:= TRegistry.Create(KEY_READ or KEY_WRITE); + try + r.RootKey:= HKEY_LOCAL_MACHINE; + if r.OpenKey(k, True) then + begin + r.WriteString('EventMessageFile', ParamStr(0)); + r.WriteInteger('TypesSupported', 7); + r.CloseKey; + end; + finally + r.Free; + end; + end; + + + + + procedure THDCDZApiService.ServiceAfterUninstall (Sender: TService); + var r: TRegistry; + k: string; + begin + k:= '\SYSTEM\CurrentControlSet\Services\Eventlog\Application\' + Self.Name; + r:= TRegistry.Create(KEY_READ or KEY_WRITE); + try + r.RootKey := HKEY_LOCAL_MACHINE; + if r.KeyExists(k) then + r.DeleteKey(k); + finally + r.Free; + end; + + k:= '\SOFTWARE\HDConsultingCZ'; + r:= TRegistry.Create (KEY_READ or KEY_WRITE); + try + r.RootKey:= HKEY_LOCAL_MACHINE; + if (r.KeyExists(k)) then + if (r.OpenKey(k, false)) then + if (r.ValueExists(Self.Name)) then + r.DeleteValue(Self.Name); + r.CloseKey; + finally + r.Free; + end; + + end; + + + + + procedure THDCDZApiService.ServiceBeforeUninstall (Sender: TService); + var r: TRegistry; + k, vn, ip: string; + i: integer; + canCont: Boolean; + begin + k:= '\SOFTWARE\HDConsultingCZ'; + r:= TRegistry.Create (KEY_READ or KEY_WRITE); + try + i:= 1; + canCont:= true; + r.RootKey:= HKEY_LOCAL_MACHINE; + if (r.KeyExists(k)) then + if (r.OpenKey(k, false)) then + begin + while (canCont) and (i<21) do + begin + vn:= SrvNameConst + i.ToString; + if (r.ValueExists(vn)) then + begin + ip:= r.ReadString(vn); + if (ip=ParamStr(0)) then + canCont:= false + else + Inc(i); + end + else + Inc(i); + end; + FServiceNum:= i; + GetServiceName; + GetServiceDisplayName; + end; + r.CloseKey; + finally + r.Free; + end; + + end; + + + + + procedure THDCDZApiService.ServiceContinue (Sender: TService; var Continued: Boolean); + begin + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainSvcCont.inc} +{$ENDIF} + + if (zapisDZTasksThr<>nil) then + if (zapisDZTasksThr.Suspended) then + zapisDZTasksThr.Resume; + + if (downThr<>nil) then + if (downThr.Suspended) then + downThr.Resume; + + if (licThr<>nil) then + if (licThr.Suspended) then + licThr.Resume; + + Continued:= true; + end; + + + + +{$IFDEF OMNIThreadLib} + procedure THDCDZApiService.TaskTerminated (const task: IOmniTaskControl); + var exitCode: integer; + begin + exitCode:= task.ExitCode; + Self.Stop; + end; +{$ENDIF} + + + + + procedure THDCDZApiService.ServiceExecute (Sender: TService); + var aktTimeoutLic, aktZapisDZTasks: integer; + s: Boolean; + msg: TMsg; + m: TMessage; + Started: boolean; + i, licRetry: integer; + licMutexErr: Integer; + begin + +// PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE); { Create message queue } + + if Application.DelayInitialize then + Application.Initialize; + Started:= True; + + + fZastavAPI:= false; + + + FGlobLicJeOK:= true; + while (not Terminated) and not(fZastavAPI) do + begin + + + licMutexErr:= 0; +// zkus vytvorit mutex, na to nepotrebujes zadna bezpecnostni prava + licMutexSvc:= TMutex.Create(nil, True, uqLicMutex); +// byl vytvoren ? + licMutexErr:= GetLastError; +// pokud mutex uz existuje, je to indikace chyby licence, tak sluzbu zastav + if (licMutexErr <> ERROR_SUCCESS) then + FGlobLicJeOK:= false + else + if (Assigned(licMutexSvc)) then + FreeAndNil(licMutexSvc); + + + + if (Assigned(ServiceThread)) then + ServiceThread.ProcessRequests (false); + TThread.Sleep(998); + + if (licThr<>nil) then + if not(licThr.Started) then + begin + licThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby testu licence'); + end; + + + if (zapisDZTasksThr<>nil) then + if not(zapisDZTasksThr.Started) then + begin + zapisDZTasksThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby zapisu DataZone tasku'); + end; + + + if not(FGlobLicJeOK) then + begin + datMod.LogInfo (Quick.Logger.etCritical, 'Chybna Helios licence'); + self.ServiceStop (Sender, s); + end; + + + if (zpracJsonThr<>nil) then + if not(zpracJsonThr.Started) then + begin + zpracJsonThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby zpracovani JSON zprav - pocet ' + datMod.SQLGetString('SELECT COUNT(ID) FROM ' + tblPrijataJsonData + ' WHERE DatZpracovani IS NULL')); + end; + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainSvcExec.inc} +{$ENDIF} + + end; + + + if Assigned(licMutexSvc) then + FreeAndNil(licMutexSvc); + if Assigned(licMutex) then + FreeAndNil(licMutex); + + end; + + + + + procedure THDCDZApiService.ServicePause (Sender: TService; var Paused: Boolean); + begin + if (zapisDZTasksThr<>nil) then + if not(zapisDZTasksThr.Suspended) then + zapisDZTasksThr.Suspend; + + if (downThr<>nil) then + if not(downThr.Suspended) then + downThr.Suspend; + + if (licThr<>nil) then + if not(licThr.Suspended) then + licThr.Suspend; + + if (zpracJsonThr<>nil) then + if not(zpracJsonThr.Suspended) then + zpracJsonThr.Suspend; + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainSvcPause.inc} +{$ENDIF} + + Paused:= True; + end; + + + + + procedure THDCDZApiService.GetServiceDisplayName; + var ServiceDisplayName : String; + begin +// if not FindCmdLineSwitch('display', ServiceDisplayName) then +// raise Exception.Create('Prosim specifikujte zobrazovany nazev sluzby pomoci parametru /display'); +// DisplayName:= ServiceDisplayName; + if FindCmdLineSwitch('display', ServiceDisplayName) then + begin + DisplayName:= ServiceDisplayName.Trim; + if (DisplayName='') then + raise Exception.Create('Prosim specifikujte zobrazovany nazev sluzby pomoci parametru /display'); + end + else + DisplayName:= SrvDispNameConst + ' (' + IntToStr(FServiceNum) + ')'; + end; + + + + + procedure THDCDZApiService.GetServiceName; + var ServiceName : String; + begin +// if not FindCmdLineSwitch('name', ServiceName) then +// raise Exception.Create('Prosim specifikujte nazev sluzby pomoci parametru /name'); +// Name:= ServiceName.Trim; + + if (FindCmdLineSwitch('name', ServiceName)) then + begin + Name:= ServiceName.Trim; + if (Name='') then + raise Exception.Create('Prosim specifikujte nazev sluzby pomoci parametru /name'); + end + else + Name:= SrvNameConst + IntToStr(FServiceNum); + end; + + + + + function THDCDZApiService.ReadConfig (var errMsg: string): boolean; + var xN1: TXmlNode; + i: integer; + s, sTemp: string; + fs: TFileStream; + attribs: IXMLNodeList; + begin + result:= true; + + eServPath:= ''; + try + eServPath:= TDirectory.GetParent(ExtractFilePath(ParamStr(0))); + if (DirectoryExists(TPath.Combine(eServPath, 'eServer'))) then + eServPath:= TPath.Combine(eServPath, 'eServer') + else + eServPath:= ''; + except + end; + + fName:= ExtractFilePath(ParamStr(0)) + cfgFName; + datMod.LogInfo (Quick.Logger.etInfo, 'Konfiguracni soubor: ' + fName); + + jeSSL:= false; + jeLoginMod:= false; + dataZoneKlic:= ''; + heoLic:= ''; + heoPath:= ''; + sslLibPath:= ''; + datMod.chL:= true; + datMod.cfgComp:= ''; + + try + CoInitialize(nil); + if (FileExists(fName)) then + begin + try + fs:= TFileStream.Create(fName, fmOpenRead); + if (fs.Size>0) then + begin + SetLength(s, fs.Size); + fs.Read(s[Low(s)], fs.Size); + s:= ReplaceStr(s, #0, ''); + end; + finally + fs.Free; + end; + + try + + try + if (LeftStr(s, 2)='7D') then + s:= ReturnDecrypted(s); + s:= s.Replace(#13#10,''); + + if (LeftStr(s, 2)='nil) then + begin + n1:= cfgXML.DocumentElement; + if (n1.NodeName='config') then + begin + attribs:= n1.AttributeNodes; + + i:= attribs.IndexOf(sCfgComp); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + datMod.cfgComp:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sPort); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + sTemp:= attribs.Get(i).NodeValue; + apiPort:= sTemp.ToInteger; + end; + + i:= attribs.IndexOf(sServer); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + datMod.dbServer:= attribs.Get(i).NodeValue; +{$IFDEF DEBUG} +Writeln('Server: ' + datMod.dbServer); +{$ENDIF} + i:= attribs.IndexOf(sPortS); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + sTemp:= attribs.Get(i).NodeValue; + datMod.dbPort:= sTemp.ToInteger; + end; + + i:= attribs.IndexOf(sName); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + datMod.dbName:= attribs.Get(i).NodeValue; +{$IFDEF DEBUG} +Writeln('DB: ' + datMod.dbName); +{$ENDIF} + i:= attribs.IndexOf(sUser); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + datMod.dbUser:= ReturnDecrypted(attribs.Get(i).NodeValue); + + i:= attribs.IndexOf(sPwd); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + datMod.dbPwd:= ReturnDecrypted(attribs.Get(i).NodeValue); + + + i:= attribs.IndexOf(sEncConn); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + if (attribs.Get(i).NodeValue='1') then + datMod.dbEncConn:= true; + + + i:= attribs.IndexOf(sSSL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + if (attribs.Get(i).NodeValue='1') then + jeSSL:= true; + + i:= attribs.IndexOf(sLCh); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + if (attribs.Get(i).NodeValue='0') then + datMod.chL:= false; + + i:= attribs.IndexOf(sLoginMod); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + if (attribs.Get(i).NodeValue='1') then + jeLoginMod:= true; + + i:= attribs.IndexOf(sSSLCert); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + sslCertFile:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sSSLKey); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + sslKeyFile:= attribs.Get(i).NodeValue; + + + + i:= attribs.IndexOf(sDzKlic); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + dataZoneKlic:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTasksDownURL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + urlDZTaskyDown:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sHeoLic); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + heoLic:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sHeoPath); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + heoPath:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sHeliosStoreURL); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + webAuth:= attribs.Get(i).NodeValue; + + i:= attribs.IndexOf(sDZTasksIntDown); + if (i>-1) then + if (attribs.Get(i).NodeValue<>null) then + begin + intGetDZTasks:= attribs.Get(i).NodeValue; + intGetDZTasks:= Abs(intGetDZTasks); // pocet minut intervalu stahovani dat tasku DataZone + end; + + + i:= attribs.IndexOf(sDZTaskIntZapisTypCas); + if (i>-1) then + if not VarIsNull(attribs.Get(i).NodeValue) then + DZTaksZapisTypCas:= attribs.Get(i).NodeValue; // 0=sek / 1=min / 2=hod + + i:= attribs.IndexOf(sDZTasksIntZapisHeO); + if (i>-1) then + if not VarIsNull(attribs.Get(i).NodeValue) then + begin + intProcessDZTasksSec:= attribs.Get(i).NodeValue; + intProcessDZTasksSec:= Abs(intProcessDZTasksSec); // pocet sekund/minut/hodin intervalu stahovani dat tasku DataZone (viz typ casu DZTaksZapisTypCas) + end; + + + + end; + end; + end + else + begin + datMod.LogInfo (Quick.Logger.etError, 'Nemam obsah konfiguracniho XML'); + result:= false; + Exit; + end; + + s:= 'Konfigurace - HTTP/S API port ' + apiPort.ToString + ' / SSL ' + IfThen(jeSSL, 'ano', 'ne') + ' / SQL server ' + datMod.dbServer + IfThen(datMod.dbPort<>1433, ':' + datMod.dbPort.ToString, ''); + s:= s + ' / databaze ' + datMod.dbName + ' / SQL conn Encrypted ' + IfThen(datMod.dbEncConn, 'ano', 'ne'); +{$IFDEF CUSTOM_CTRL_Rootvin} + s:= s + ' / custom ROOTVIN'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Kdynium} + s:= s + ' / custom KDYNIUM'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Koramex} + s:= s + ' / custom KORAMEX'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + s:= s + ' / custom INCOSystems'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + s:= s + ' / custom Gornicky'; +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, s); + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba konfigurace: ' + E.Message); + result:= false; + end; + end; + except on E:Exception do + begin + datMod.LogInfo (Quick.Logger.etError, 'Chyba konfigurace: ' + E.Message); + result:= false; + end; + end; + end + else + begin + datMod.LogInfo (Quick.Logger.etError, 'Nelze najit konfiguracni soubor (' + cfgFName + ')'); + result:= false; + end; + finally + begin + if (cfgXML<>nil) then + cfgXML:= nil; + CoUninitialize; + end; + end; + +{$IFDEF DEBUG} + datMod.chL:= false; +{$ENDIF} + + uWebMod.jeLoginMod:= jeLoginMod; + uWebMod.dataZoneKlic:= dataZoneKlic; + + + +{$IFDEF DEBUG} +{$IFDEF CUSTOM_CTRL_Kdynium} + if (datMod.dbName<>'Kdynium') then + begin + errMsg:= ' - Chybna DB: custom Kdynium x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + if (datMod.dbName<>'Rootvin') then + begin + errMsg:= ' - Chybna DB: custom Rootvin x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + if (datMod.dbName<>'INCOSystems') then + begin + errMsg:= ' - Chybna DB: custom INCOSystems x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + if (datMod.dbName<>'Gornicky') then + begin + errMsg:= ' - Chybna DB: custom Gornicky x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_GornickyGrp} + if (datMod.dbName<>'GornickyGrp') then + begin + errMsg:= ' - Chybna DB: custom GornickyGrp x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$ELSE} + if (datMod.dbServer<>'') then + begin + datMod.ConnectServer; + if not(datMod.sqlConn.Connected) then + datMod.sqlConn.Open; + sTemp:= datMod.SQLGetString ('SELECT ICO FROM ' + tblCOrg + ' WHERE CisloOrg=0', datMod.sqlConn); + if (sTemp<>'') then + begin +{$IFDEF CUSTOM_CTRL_Kdynium} + if (sTemp<>'45357293') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + if (sTemp<>'48950670') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_INCOSystems} + if (sTemp<>'02964538') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Gornicky} + if (sTemp<>'26069733') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_GornickyGrp} + if (sTemp<>'03526895') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} + end; + end; +{$ENDIF} + + + end; + + + + + function THDCDZApiService.CheckOPENSSLLibs (var useHeoPath: boolean): boolean; + const eServPathX = 'eServer\openssl\64'; + var f, lOpenSSLLib, s: string; + heoOK: boolean; + begin + result:= true; + heoOK:= true; + + eServPath:= ''; +{ + useHeoPath:= true; + if (heoPath<>'') then + for lOpenSSLLib in OPENSSL_LIBS do + begin + s:= heoPath + PathDelim + 'eServer' + PathDelim + eServPathX + PathDelim + lOpenSSLLib; + if not(FileExists(s)) then + begin + useHeoPath:= false; + heoOK:= false; + sslLibPath:= ''; + end + else + sslLibPath:= ExcludeTrailingPathDelimiter (s); + + + s:= heoPath + PathDelim + eServPathX + PathDelim + lOpenSSLLib; + if not(heoOK) then + begin + if not(FileExists(s)) then + begin + useHeoPath:= false; + heoOK:= false; + sslLibPath:= ''; + end + else + if (sslLibPath='') then + sslLibPath:= ExcludeTrailingPathDelimiter (s); + end; + + end + else + heoOK:= false; +} + +{ + if not(heoOK) and (sslLibPath='') then + begin +} + result:= true; + f:= ExtractFilePath (ParamStr(0)); + sslLibPath:= f; + +// Just a check for + for lOpenSSLLib in OPENSSL_LIBS do + begin + if (eServPath<>'') then + begin + if not(FileExists(TPath.Combine(eServPath, lOpenSSLLib))) then + result:= false; + end + else + if not(FileExists(f + lOpenSSLLib)) then + result:= false; + end; + + if (sslLibPath='') then + for lOpenSSLLib in OPENSSL_LIBS do + begin + if (FileExists(f + lOpenSSLLib)) then + sslLibPath:= ExcludeTrailingPathDelimiter (f) + else + sslLibPath:= ''; + end; +{ + end; +} + + if (sslLibPath<>'') then + result:= true; + end; + + + + + procedure sslOnConnect(var AContext: TIdContext); + begin + TIdSSLIOHandlerSocketOpenSSL (AContext.Connection).PassThrough:= false; + end; + + + + + + procedure THDCDZApiService.SQLDefinice; + var lSQL, lSQL2, lSQLX, srcNazev, trgName, errMsg, errMsg2: string; + objectNazev, sqlDefDB, sqlDefPlg, hash1, hash2: string; + rs: TResourceStream; + ms: TMemoryStream; + arrDefs: TStringList; + i, iTemp: integer; + canCont, canCont2: boolean; + function LoadStringFromStream (const AStream: TStream): String; + var lenX: Integer; + begin + AStream.Seek(0,0); + lenX:= AStream.Size - AStream.Position; + SetLength(Result, lenX); + if (lenX>0) then + AStream.ReadBuffer(Result[1], lenX); + end; + function MemoryStreamToAnsiString (const M: TMemoryStream): AnsiString; + begin + SetString(Result, PAnsiChar(M.Memory), M.Size); + end; + begin + arrDefs:= TStringList.Create; +// arrDefs.Add('tbl_hdc_DataZone_konfig'); + arrDefs.Add('tbl_hdc_ph_log'); + arrDefs.Add('trg_hdc_ph_Log_D'); + arrDefs.Add('tbl_hdc_ph_PrijataJsonData'); + arrDefs.Add('trg_hdc_ph_PrijataJsonData_D'); + arrDefs.Add('ef_EncodeBase64'); +{$IFNDEF CUSTOM_CTRL_FILES} +// arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} +// arrDefs.Add('tbl_hdc_ph_Log'); + arrDefs.Add('ep_hdcdzapi_GetKusovnik'); + arrDefs.Add('col_TabDokladyZbozi_EXT'); + arrDefs.Add('col_TabStavSkladu_EXT'); + arrDefs.Add('col_TabVazbyPrikazu_EXT'); + arrDefs.Add('col_TabPrPostup_EXT'); + arrDefs.Add('col_TabPohybyZbozi_EXT'); + arrDefs.Add('col_TabEvidRozpracOperR_EXT'); + arrDefs.Add('col_TabKmenZbozi_EXT'); + arrDefs.Add('ef_GetDatumASmenu'); + arrDefs.Add('tbl_hdc_PZ_PuvodniVC'); + arrDefs.Add('tbl_TabVyrobaTestoVyroba'); + arrDefs.Add('tbl_TabVyrobaObjednavky'); + arrDefs.Add('tbl_TabVyrobaOperaceStartStop'); + arrDefs.Add('tbl_TabVyrobaOperaceStartStopVydej'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); + arrDefs.Add('ep_Vyroba_DoplnSkladProVydejDleDokladu'); + arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); + arrDefs.Add('ep_Vyroba_GenVydejZeMzdy'); + arrDefs.Add('ep_Vyroba_Doklady_Micharna'); + + arrDefs.Add('ep_P03_HDC1'); + arrDefs.Add('ep_P03'); + arrDefs.Add('ep_P01_HDC1'); +// arrDefs.Add('ep_P01_HDCDZApi1'); + arrDefs.Add('ep_P01'); + arrDefs.Add('ep_V03_HDC1'); + arrDefs.Add('ep_V03'); +// arrDefs.Add(''); + + arrDefs.Add('trg__TabPohybyZbozi_HDC_D'); + arrDefs.Add('trg__TabPohybyZbozi_HDC_IU'); + arrDefs.Add('trg__hdc_PZ_PuvodniVC_D'); + arrDefs.Add('trg__TabVyrCisPrikaz_HDC_D'); + arrDefs.Add('trg__TabVyrobaOperaceStartStop_D'); +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_INCOSystems} +// arrDefs.Add('incosystems_spec_Clear'); + iTemp:= arrDefs.IndexOf('ep_HDCDZApi_ZpracujPrijataData'); + if (iTemp>-1) then + arrDefs.Delete(iTemp); + + arrDefs.Add('col_TabPredna_EXT'); + arrDefs.Add('col_TabKmenZbozi_EXT'); + arrDefs.Add('col_TabPrPostup_EXT'); + arrDefs.Add('col_TabEvidRozpracOper_EXT'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); + arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); + arrDefs.Add('ep_Vyroba_GenVydejZeMzdy'); + arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Gornicky} + iTemp:= arrDefs.IndexOf('ep_HDCDZApi_ZpracujPrijataData'); + if (iTemp>-1) then + arrDefs.Delete(iTemp); + {$I '_custom/Gornicky/sqlDefs.inc'} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Metalcasting} + arrDefs.Add('col_TabDokumenty_DokladProAPI'); +{$ENDIF} + + errMsg:= 'Nacitani SQL definici...'; + datMod.LogInfo (Quick.Logger.etInfo, errMsg); +{$IFDEF DEBUG} + WriteLn (errMsg); +{$ENDIF} + + for i:=0 to arrDefs.Count-1 do + begin + srcNazev:= arrDefs.Strings[i]; + canCont:= true; + +{ + if (srcNazev.ToLower='ep_P01') then + canCont:= false; + if (srcNazev.ToLower='ep_P03') then + canCont:= false; +} + + if (canCont) then + begin + ms:= TMemoryStream.Create; + try + rs:= TResourceStream.Create(HInstance, srcNazev, RT_RCDATA); // RT_RCDATA = MakeIntResource(10); + ms.CopyFrom(rs, rs.Size); + + lSQL:= MemoryStreamToAnsiString(ms); + objectNazev:= LeftStr(lSQL, lSQL.IndexOf(Chr(13))).Replace('-- ', ''); + + + if (srcNazev.StartsWith('ep_', true)) or (srcNazev.StartsWith('ef_', true)) or (srcNazev.StartsWith('trg_')) then + begin + canCont:= false; + hash1:= ''; + hash2:= ''; + + if (srcNazev.StartsWith('trg_')) then + lSQLX:= 'SELECT m.definition FROM ' + datMod.dbName + '.sys.triggers t INNER JOIN ' + datMod.dbName + '.sys.objects o on t.object_id = o.object_id' + + ' INNER JOIN ' + datMod.dbName + '.sys.sql_modules m on m.object_id = o.object_id WHERE t.name=N' + objectNazev.Replace('dbo.','').QuotedString + else + lSQLX:= 'SELECT OBJECT_DEFINITION(OBJECT_ID(N' + (datMod.dbName + '.' + objectNazev).QuotedString + '))'; + sqlDefDB:= datMod.SQLGetString (lSQLX); + if (sqlDefDB<>'') then + begin + // sqlDefDB:= sqlDefDB.Replace('/*' + plgHDCRTN_Name + '*/', ''); + hash1:= THashMD5.GetHashString(sqlDefDB); + sqlDefPlg:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length); + if (sqlDefPlg.StartsWith(CRLF)) then + sqlDefPlg:= MidStr(sqlDefPlg, 3, sqlDefPlg.Length); + if (sqlDefPlg.EndsWith(CRLF)) then + sqlDefPlg:= LeftStr(sqlDefPlg, sqlDefPlg.Length-2); + hash2:= THashMD5.GetHashString (sqlDefPlg); + if (hash1<>hash2) then + canCont:= true; + end + else + canCont:= true; + end; + + if not(canCont) then + Continue; + + + if (srcNazev.StartsWith('ep_')) then + begin + datMod.sqlConn.ExecSQL('DROP PROCEDURE IF EXISTS dbo.' + srcNazev); + datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani procedury: ' + srcNazev); + end; + + if (srcNazev.StartsWith('ef_')) then + begin + datMod.sqlConn.ExecSQL('DROP FUNCTION IF EXISTS dbo.' + srcNazev); + datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani funkce: ' + srcNazev); + end; + + if (srcNazev.StartsWith('tbl_')) then + begin + lSQL:= lSQL.Trim; + datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani tabulky: ' + srcNazev); + end; + + if (srcNazev.StartsWith('trg_')) then + begin + if (lSQL.StartsWith('-- ')) then + lSQL:= MidStr(lSQL, lSQL.IndexOf(Chr(13))+3, lSQL.Length); + trgName:= LeftStr(lSQL, lSQL.IndexOf(' ON dbo.')); + trgName:= trgName.Replace ('CREATE TRIGGER ', ''); + datMod.sqlConn.ExecSQL ('DROP TRIGGER IF EXISTS ' + trgName); + datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani triggeru: ' + trgName); + end; + + + try + if (lSQL<>'') then + datMod.sqlConn.ExecSQL(lSQL); + except on E:Exception do + begin + errMsg2:= E.Message; + errMsg:= 'Nezdarilo se nacteni definice: ' + srcNazev + ' >> ' + errMsg2; + datMod.LogInfo (Quick.Logger.etCritical, errMsg); +{$IFDEF DEBUG} + WriteLn (errMsg); +{$ENDIF} + end; + end; + finally + ms.Free; + if (rs<>nil) then + rs.Free; + end; + Sleep(200); + end; + end; + arrDefs.Free; + + errMsg:= 'SQL definice nacteny'; + datMod.LogInfo (Quick.Logger.etInfo, errMsg); +{$IFDEF DEBUG} + WriteLn (errMsg); +{$ENDIF} + end; + + + + + procedure THDCDZApiService.SQLKontroly; + var lSQL: string; + lQry: TFDQuery; + cfgDat, canCont: boolean; + begin +// CoInitialize(nil); + SQLDefinice; + + lQry:= TFDQuery.Create(nil); + lQry.Connection:= datMod.sqlConn; + lSQL:= 'SELECT 1 AS X FROM sys.tables t INNER JOIN sys.schemas s ON (s.schema_id=t.schema_id) WHERE s.[name]=''dbo'' AND t.[name]=N''_hdc_DataZone_Tasky'''; + lQry.Open(lSQL); + try + tblDZTExistuje:= (lQry.RecordCount>0); + finally + lQry.Free; + end; + +// CoUninitialize; + end; + + + + +{$IFDEF OMNIThreadLib} + procedure THDCDZApiService.ZpracujOmniZpravy (const task: IOmniTaskControl; const msg: TOmniMessage); + var lSQL: string; + begin + lSQL:= 'MsgId ' + msg.MsgID.ToString; + + end; +{$ENDIF} + + + + + + constructor THDCDZApiService.Create (AOwner: TComponent); + begin + inherited; +{$IFDEF OMNIThreadLib} + tskLicKontrola:= nil; + tskZapisDZTasks:= nil; + tskZpracujJSON:= nil; +{$ENDIF} + end; + + + + + destructor THDCDZApiService.Destroy; + begin +{$IFDEF OMNIThreadLib} + if (Assigned(tskLicKontrola)) then + begin + tskLicKontrola.Terminate; + tskLicKontrola:= nil; + end; + + if (Assigned(tskZpracujJSON)) then + begin + tskZpracujJSON.Terminate; + tskZpracujJSON:= nil; + end; + + if (Assigned(tskZapisDZTasks)) then + begin + tskZapisDZTasks.Terminate; + tskZapisDZTasks:= nil; + end; +{$ENDIF} + inherited; + end; + + + + + procedure THDCDZApiService.ServiceStart (Sender: TService; var Started: Boolean); + var lSQL, s, url, libP, errMsg: string; + sTemp: string; + bResp: boolean; + iCanStart, useHeoSSL: boolean; + h: NativeUInt; + begin + +// globalni promenne MVCFrameworku + IsMultiThread:= true; + UseConsoleLogger:= false; +// When MVCSerializeNulls = True empty nullables and nil are serialized as json null. +// When MVCSerializeNulls = False empty nullables and nil are not serialized at all. + MVCSerializeNulls:= true; + + + FDManager.Open; + CoInitialize(nil); // COM technologie (ODBC) potrebuje inicializaci ActiveX + + + dbgStep:= -1; + fZastavAPI:= false; + +{$IFDEF OMNIThreadLib} + omniMonitor:= TOmniEventMonitor.Create(nil); + omniMonitor.OnTaskMessage:= ZpracujOmniZpravy; +{$ENDIF} + + iCanStart:= true; +// testLicTimeout:= 60 + random(300); // test licence min 1 min, max kazdych 5 min + intGetDZTasks:= 0; // defaultne stahuj tasky kazdych x minut, default 0, nastavuje se v konfiguraku + + + logItem:= TLogItem.Create; + + eServDLL:= false; + eServPath:= ''; + + apiPort:= 8080; + tblDZTExistuje:= false; + mamTabPrijataData:= false; + FGlobLicJeOK:= false; + + + bResp:= ReadConfig (sTemp); + if (bResp=false) then + begin +{$IFDEF DEBUG} + WriteLn('Sluzba nebude spustena, chyba konfigurace' + IfThen(sTemp<>'', sTemp, '???')); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etCritical, 'Sluzba nebude spustena, chyba konfigurace' + IfThen(sTemp<>'', sTemp, '???')); + Started:= false; + ServiceStop (Sender, bResp); + Exit; + end; + + + + verText:= StringReplace(GetFileVersion2(GetModuleName(HInstance)),'.','',[rfReplaceAll]); + verText:= '0300' + MidStr(verText,3,8); + if Length(verText)=11 then + verText:= LeftStr(verText,8) + '0' + RightStr(verText,3); +// LogInfo(Quick.Logger.etInfo, 'Verze: ' + verText); + datMod.LogInfo (Quick.Logger.etInfo, 'Computername: ' + GetEnvironmentVariable('COMPUTERNAME') + ' / Verze: ' + verText + ' / DMVCFramework: ' + DMVCFRAMEWORK_VERSION + + ' / kompilace: ' + FormatDateTime('dd.mm.yyyy hh:nn', TTimeZone.Local.ToLocalTime(GetLinkerTimestamp))); + + if (datMod.cfgComp='') or (datMod.cfgComp<>GetEnvironmentVariable('COMPUTERNAME')) then + begin +{$IFDEF DEBUG} + WriteLn('!! KONFIGURACNI SOUBOR NENI URCEN PRO TENTO POCITAC !!'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, '!! KONFIGURACNI SOUBOR NENI URCEN PRO TENTO POCITAC !!'); + iCanStart:= false; + end; + + + if (datMod.chL) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby kontroly licence...'); + licThr:= TKontrolaLicThread.Create(ThreadTerminated, heoLic); + licThr.MainThreadHandle:= GetCurrentThread; + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end + else + begin +{$IFDEF DEBUG} + WriteLn('Kontrola licence je v DEBUG modu VYPNUTA.'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, 'Kontrola licence je vypnuta...'); + end; + + +{$IFDEF DEBUG} + WriteLn('HTTP/S API port: ' + apiPort.ToString + IfThen(jeSSL, ' (SSL)', '') + IfThen(jeLoginMod, ' - login mód', '')); + WriteLn('Verze: ' + verText + ' / DMVCFramework: ' + DMVCFRAMEWORK_VERSION + ' / kompilace: ' + FormatDateTime('dd.mm.yyyy hh:nn', TTimeZone.Local.ToLocalTime(GetLinkerTimestamp))); +{$ENDIF} + + fServer:= TIdHTTPWebBrokerBridge.Create(nil); +// fServer.OnParseAuthentication := TMVCParseAuthentication.OnParseAuthentication; + sslPwds:= nil; + fServer.DefaultPort:= apiPort; + + if (jeSSL) then + begin + sslPwds:= TSSLEventHandlers.Create; + + sslHandler.OnGetPassword:= sslPwds.OnGetSSLPassword; + sslHandler.SSLOptions.CertFile:= sslCertFile; + sslHandler.SSLOptions.RootCertFile:= ''; + sslHandler.SSLOptions.KeyFile:= sslKeyFile; +// sslHandler.SSLOptions.Mode:= sslmServer; +// sslHandler.SSLOptions.SSLVersions:= [sslvTLSv1_2, sslvTLSv1_2]; +// sslHandler.SSLOptions.Method:= sslvTLSv1_2; +// sslHandler.SSLOptions.VerifyMode := []; +// sslHandler.SSLOptions.VerifyDepth:= 0; + + fServer.IOHandler:= sslHandler; +{$IF CompilerVersion >= 33} + fServer.OnQuerySSLPort := sslPwds.OnQuerySSLPort; +{$ENDIF} + + useHeoSSL:= false; + if not(CheckOPENSSLLibs (useHeoSSL)) then + begin +{$IFDEF DEBUG} + WriteLn('Nenalezeny pozadovane knihovny OpenSSL'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etCritical, 'Nenalezeny pozadovane knihovny OpenSSL (libeay32.dll / ssleay32.dll)'); + iCanStart:= false; + end; + +{ + libP:= ''; + if (useHeoSSL) and (heoPath<>'') and (iCanStart) then + begin + libP:= ExcludeTrailingPathDelimiter(heoPath) + PathDelim + 'eServer\eServer\openssl\64'; + IdOpenSSLSetLibPath (libP); + end; + + if (heoPath<>'') and (iCanStart) and (sslLibPath<>'') then + begin + useHeoSSL:= true; + libP:= ExtractFilePath (ExcludeTrailingPathDelimiter (sslLibPath)); + IdOpenSSLSetLibPath (libP); + end; +} + libP:= ExtractFilePath(ParamStr(0)); + IdSSLOpenSSLHeaders.IdOpenSSLSetLibPath (libP); + + + if (libP<>'') then + datMod.LogInfo (Quick.Logger.etInfo, 'SSL knihovny (libeay32.dll / ssleay32.dll) z adresare: ' + libP); + + end; + + + if ((datMod.dbServer='') or (datMod.dbName='')) and (iCanStart) then + begin + datMod.LogInfo (Quick.Logger.etCritical, 'Chyba spousteni: neni zadan server nebo jmeno databaze. Sluzba nebude spustena.'); + iCanStart:= false; + end; + + if not(datMod.sqlConn.Connected) and (iCanStart) then + try + datMod.LogInfo (Quick.Logger.etInfo, 'Pripojuji se do databaze...'); +{$IFDEF DEBUG} +WriteLn('Pripojuji se do databaze...'); +{$ENDIF} + datMod.ConnectServer; + if not(datMod.sqlConn.Connected) then + datMod.sqlConn.Open; + + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + datMod.LogInfo (Quick.Logger.etInfo, 'Spojeni pooled: ' + IfThen(datMod.sqlConn.Params.Pooled, 'ano', 'ne')); + +{$IFDEF DEBUG} +WriteLn('OK'); +WriteLn('Spojeni pooled: ' + IfThen(datMod.sqlConn.Params.Pooled, 'ano', 'ne')); +url:= 'http' + IfThen(jeSSL, 's', '') + '://localhost:' + apiPort.ToString + '/swagger'; +ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); +{$ENDIF} + + except on E:Exception do + begin + errMsg:= E.Message; + if (errMsg.Contains('ogin failed for us')) or (errMsg.Contains('ogin failed')) then + begin + datMod.LogInfo (Quick.Logger.etInfo, FDManager.FindConnection(sqlPoolName).Params.Text); +// datMod.LogInfo (Quick.Logger.etCritical, 'user: ' + datMod.dbUser + ' / pwd: ' + datMod.dbPwd); +// errMsg:= errMsg + ' (zadane pwd: ' + datMod.dbPwd + ' )'; + end; + datMod.LogInfo (Quick.Logger.etCritical, 'Chyba spousteni: ' + errMsg + IfThen(dbgStep=0, '', ' - dbgStep ' + dbgStep.ToString)); + dbgStep:= 0; + iCanStart:= false; + end; + end; + + + if not(iCanStart) and (dbgStep=0) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'FireDAC pool se nezdaril, zkousim bez nej...'); + try + datMod.ConnectServer; + if not(datMod.sqlConn.Connected) then + datMod.sqlConn.Open; + + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + datMod.LogInfo (Quick.Logger.etInfo, 'Connection pooled: ' + IfThen(datMod.sqlConn.Params.Pooled, 'ano', 'ne')); + + {$IFDEF DEBUG} + WriteLn('OK'); + url:= 'http' + IfThen(jeSSL, 's', '') + '://localhost:' + apiPort.ToString + '/swagger'; + ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); + {$ENDIF} + + except on E:Exception do + begin + errMsg:= E.Message; + if (errMsg.Contains('ogin failed for us')) or (errMsg.Contains('ogin failed')) then + begin + datMod.LogInfo (Quick.Logger.etInfo, FDManager.FindConnection(sqlPoolName).Params.Text); +// datMod.LogInfo (Quick.Logger.etCritical, 'user: ' + datMod.dbUser + ' / pwd: ' + datMod.dbPwd); +// errMsg:= errMsg + ' (zadane pwd: ' + datMod.dbPwd + ' )'; + end; + datMod.LogInfo (Quick.Logger.etCritical, 'Chyba spousteni: ' + errMsg + IfThen(dbgStep=0, '', ' - dbgStep ' + dbgStep.ToString)); + dbgStep:= 0; + iCanStart:= false; + end; + end; + end; + + + + if (datMod.sqlConn.Connected) and (iCanStart) then + begin + try + fServer.Active:= true; + SQLKontroly; + + mamTabPrijataData:= datMod.SQLTableExists(tblPrijataJsonData); + if (mamTabPrijataData) then + begin +{$IFDEF OMNIThreadLib} + tskZpracujJSON:= CreateTask (OmniZpracujJSON, 'HDCDZApi-OmniZpracujJSON').SetParameter('delay', 2); + tskZpracujJSON.CancelWith (cancelToken); + tskZpracujJSON.Enforced (false); // kdyz je task terminovan driv nez nastartuje, vubec ho nespoustej + tskZpracujJSON.OnTerminated ( + procedure + begin + WriteLn('Konec sluzby zpracovani prijatych JSON zprav... OK'); + tskZpracujJSON:= nil; + end); + tskZpracujJSON.Run; +{$ENDIF} + case DZTaksZapisTypCas of + 0: sTemp:= 'sek'; + 1: sTemp:= 'min'; + 2: sTemp:= 'hod'; + end; + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainSvcStart.inc} +{$ENDIF} + + + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby zpracovani prijatych JSON zprav (interval ' + intProcessDZTasksSec.ToString + ' ' + sTemp + ')'); + zpracJsonThr:= THeoZpracujJSONThread.Create (ThreadTerminated); + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); +{$IFDEF DEBUG} +// WriteLn('Start sluzby zpracovani prijatych JSON zprav - pocet ' + datMod.SQLGetString('SELECT COUNT(ID) FROM ' + tblPrijataJsonData + ' WHERE DatZpracovani IS NULL') + '... OK'); + WriteLn('Start sluzby zpracovani prijatych JSON zprav...'); +{$ENDIF} + end; + + if (intGetDZTasks>0) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby stahovani dat tasku DataZone (interval ' + intGetDZTasks.ToString + ' min)'); + downThr:= TDownDZTasksThread.Create (ThreadTerminated); + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); +{$IFDEF DEBUG} + WriteLn(' OK'); +{$ENDIF} + end; + + tblDZTExistuje:= datMod.SQLTableExists(tblDZTasky); + if (tblDZTExistuje) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby evidence DataZone tasku...'); + zapisDZTasksThr:= THeoZapisDZTasksThread.Create (ThreadTerminated); + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end; + + + except on E:Exception do + begin + if (fServer<>nil) then + fServer.Free; + datMod.LogInfo (Quick.Logger.etCritical, 'Chyba spousteni: ' + E.Message + IfThen(dbgStep=0, '', ' - dbgStep ' + dbgStep.ToString)); + iCanStart:= false; + end; + end; + end; + + if not(iCanStart) then + begin + Started:= false; + ServiceStop (Sender, bResp); + datMod.LogInfo (Quick.Logger.etCritical, 'Sluzba NEBYLA spustena.'); + end + else + Started:= true; + + end; + + + + + procedure THDCDZApiService.ThreadTerminated (Sender: TObject); + begin + if (Sender is TThread) then + (Sender as TThread).ForceQueue(nil, Sender.Free); + end; + + + + + procedure THDCDZApiService.ServiceStop (Sender: TService; var Stopped: Boolean); + + begin + + datMod.LogInfo (Quick.Logger.etInfo, 'Zastavuji hlavni sluzbu...'); + +{$IFDEF OMNIThreadLib} + if (omniMonitor<>nil) then + omniMonitor.Free; + if (tskZpracujJSON<>nil) then + tskZpracujJSON.Terminate (2000); + if (tskLicKontrola<>nil) then + tskLicKontrola.Terminate (2000); + if (tskZapisDZTasks<>nil) then + tskZapisDZTasks.Terminate (2000); +{$ENDIF} + +{$IFDEF OMNIThreadLib} + if (Assigned(tskLicKontrola)) then + begin + tskLicKontrola.Terminate; + tskLicKontrola:= nil; + end; + + if (Assigned(tskZpracujJSON)) then + begin + tskZpracujJSON.Terminate; + tskZpracujJSON:= nil; + end; + + if (Assigned(tskZapisDZTasks)) then + begin + tskZapisDZTasks.Terminate; + tskZapisDZTasks:= nil; + end; +{$ENDIF} + + + if Assigned(zapisDZTasksThr) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu evidence DataZone tasku...'); + try + zapisDZTasksThr.ThreadTerminate; + FreeAndNil (zapisDZTasksThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; +// CoUninitialize; +// FDManager.Close; + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end; + + + + if Assigned(zpracJsonThr) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu zpracovani JSON zprav...'); + try + zpracJsonThr.ThreadTerminate; + FreeAndNil(zpracJsonThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end; + + +{$IFDEF CUSTOM_CTRL_Gornicky} + {$I ./_custom/Gornicky/winSvc/mainSvcStop.inc} +{$ENDIF} + + + if Assigned(licThr) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu kontroly licence...'); + try + licThr.ThreadTerminate; + FreeAndNil(licThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end; + + + + + if Assigned(downThr) then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu stahovani dat tasku DataZone...'); + try + downThr.ThreadTerminate; + FreeAndNil(downThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, 'OK'); + end; + + + + + if (Assigned(sslPwds)) then + sslPwds.Free; + + if (Assigned(fServer)) then + fServer.Free; + + if (datMod.sqlConn.Connected) then + datMod.sqlConn.Close; + if (FDManager.Active) then + FDManager.Close; + + datMod.LogInfo (Quick.Logger.etInfo, 'Sluzba ' + Sender.Name + ' zastavena.'); + + if (Assigned(logItem)) then + logItem.Free; + + if (Assigned(Logger)) then + Logger.Stop; + + Stopped:= true; + + end; + + + + initialization + CoInitialize(nil); + + + finalization + CoUninitialize; + + + +end.