Files
HDCApi/uSvc_ObehZbozi.pas
2026-03-03 16:18:27 +01:00

1131 lines
30 KiB
ObjectPascal
Raw Blame History

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<string, string>): TObjectList<TSerioveCisloPohybOZ>; virtual;
end;
TStavSkladuService = class(TServiceBase)
public
function GetMeta: TJSONObject; virtual;
function GetByParams (params: TDictionary<string, string>): TObjectList<TStavSkladu>; virtual;
end;
TDokladOZService = class(TServiceBase)
public
function GetByID (const AID: integer; sdServer: boolean=false; params: TDictionary<string, string>=nil): TDokladOZ; virtual;
function GetMeta: TJSONObject; virtual;
function GetByParams (params: TDictionary<string, string>): TObjectList<TDokladOZ>; virtual;
function GetDruhyDokladu (druhpohybu: string): TObjectList<TDruhDokZbo>; virtual;
end;
TPolozkaOZService = class(TServiceBase)
public
function GetMeta: TJSONObject; virtual;
function GetByID (const AID: integer; sdServer: boolean=false): TPohybOZ; virtual;
function GetByParams (params: TDictionary<string, string>): TObjectList<TPohybOZ>; 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<string, string>): TObjectList<TStavSkladu>;
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<TStavSkladu>;
except on E:Exception do
raise EServiceException.Create('Chyba na<6E><61>t<EFBFBD>n<EFBFBD> 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<TDruhDokZbo>;
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<TDruhDokZbo>;
except on E:Exception do
raise EServiceException.Create('Chyba na<6E><61>t<EFBFBD>n<EFBFBD> druh<75> dokladu: ' + E.Message);
end;
finally
lQry.Free;
end;
sqlConnX.Close;
sqlConnX.Free;
end;
function TDokladOZService.GetByParams (params: TDictionary<string, string>): TObjectList<TDokladOZ>;
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<TDokladOZ>;
noDatum, snZSDServeru: boolean;
radyD, sklady, dpz: string;
p: TDictionary<string, string>;
begin
result:= nil;
p:= TDictionary<string, string>.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('jenRealizovane')) then
if (params.Items['jenRealizovane']='1') then
where:= where + IfThen(where<>'', ' AND ', '') + 'DatRealizace IS NOT NULL';
if (params.ContainsKey('jenReal')) then
if (params.Items['jenReal']='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<TDokladOZ>.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<TDokladOZ>;
except on E:Exception do
raise EServiceException.Create('Chyba na<6E><61>t<EFBFBD>n<EFBFBD> dokladu: ' + E.Message);
end;
// FreeAndNil(dList);
finally
end;
end
else
raise EServiceException.Create('Vybran<61>m podm<64>nk<6E>m neodpov<6F>d<EFBFBD> <20><>dn<64> 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<string, string>=nil): TDokladOZ;
var lSQL, extInfoStr, errMsg: string;
minimumDat, polozky: boolean;
p: TDictionary<string, string>;
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.AsJSONObject;
finally
lQry.Free;
end;
end;
minimumDat:= false;
polozky:= false;
ps:= TPolozkaOZService.Create (self.FDM);
p:= TDictionary<string, string>.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<TDokladOZ>;
if (extInfoStr<>'') then
result.ExtInfo:= ExtInfoStr;
if (polozky) then
result.PohybyOZ:= ps.GetByParams (p);
end
else
raise EServiceException.Create('Doklad ob<6F>hu zbo<62><6F> 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<string, string>): TObjectList<TPohybOZ>;
var lSQL, where: string;
id, AID, cnt, rNo: integer;
lQry: TFDQuery;
sqlConnX: TFDConnection;
pList: TObjectList<TPohybOZ>;
p: TPohybOZ;
sdServer: boolean;
begin
result:= nil;
p:= TPohybOZ.Create;
// pList:= TObjectList<TPohybOZ>.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<TPohybOZ>.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<6E><61>t<EFBFBD>n<EFBFBD> polo<6C>ky/polo<6C>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<string, string>;
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.AsJSONObject;
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<string, string>.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<TPohybOZ>;
{$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<6C>ka dokladu ob<6F>hu zbo<62><6F> 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<TUmisteni>;
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<string, string>): TObjectList<TSerioveCisloPohybOZ>;
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.', '');
sqlConnX:= TFDConnection.Create(nil);
sqlConnX.ConnectionDefName:= sqlPoolName;
lQry:= TFDQuery.Create(nil);
{$IF DEFINED(CUSTOM_CTRL_Rootvin) or DEFINED(CUSTOM_CTRL_GatemaSD)}
// test zda polozky pochazi z SD serveru
if (idPZ>0) or (sdServer) then
begin
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 ', ' 1000000000+p.ID AS 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
end;
end;
{$ENDIF}
try
lQry.FetchOptions.Mode:= fmAll;
lQry.Connection:= sqlConnX;
lQry.Open(lSQL);
result:= lQry.AsObjectList<TSerioveCisloPohybOZ>;
finally
lQry.Free;
end;
sqlConnX.Close;
sqlConnX.Free;
end;
end.