1203 lines
44 KiB
ObjectPascal
1203 lines
44 KiB
ObjectPascal
unit frmOrder2;
|
|
|
|
interface
|
|
|
|
uses
|
|
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Types, System.Classes, Vcl.Graphics,
|
|
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, System.ImageList, Vcl.ImgList, Vcl.StdCtrls, Vcl.Buttons,
|
|
Vcl.ComCtrls, ddPlugin_TLB, TBPackageU, Vcl.WinXPickers, Vcl.Mask, RxToolEdit, Vcl.NumberBox, Vcl.Grids, VirtualTrees,
|
|
NxGridView6, NxColumns6, NxControls6, NxCustomGrid6, NxVirtualGrid6, NxGrid6, NxEdit6, MemTableDataEh, Data.DB,
|
|
DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh, DBAxisGridsEh, DBGridEh, MemTableEh, EhLibMTE,
|
|
System.MaskUtils, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
|
|
IdSMTP, IdBaseComponent, IdMessage, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
|
|
IdAttachment, IdAttachmentFile, IdAttachmentMemory, datModObj;
|
|
|
|
type
|
|
TWideStringHelper = record helper for WideString
|
|
function QuotedString: string; overload;
|
|
end;
|
|
|
|
TMaskedTextHelper = record helper for TMaskedText
|
|
function QuotedString: string; overload;
|
|
function Replace(oldStr, newStr: string): string; overload;
|
|
end;
|
|
|
|
TVisColumn = record
|
|
index: integer;
|
|
koeficient: Single;
|
|
end;
|
|
|
|
TSortiment = record
|
|
nazev, k1, poleDodav: string;
|
|
dodavatel: integer;
|
|
poradiSort: Single;
|
|
typSort: byte;
|
|
end;
|
|
|
|
TformOrder2 = class(TForm)
|
|
gbDodavatel: TGroupBox;
|
|
gbPolozky: TGroupBox;
|
|
Label1: TLabel;
|
|
dtZavoz: TDateTimePicker;
|
|
btnOK: TButton;
|
|
Label2: TLabel;
|
|
lblDodAdresa: TLabel;
|
|
lblDodMisto: TLabel;
|
|
cbxSortiment: TComboBox;
|
|
Label3: TLabel;
|
|
edtCisloObj: TNumberBox;
|
|
Label4: TLabel;
|
|
btnTisk: TButton;
|
|
btnPoslat: TButton;
|
|
btnRozbalit: TButton;
|
|
btnSbalit: TButton;
|
|
btnZavrit: TButton;
|
|
Panel1: TPanel;
|
|
Panel2: TPanel;
|
|
edtNumEditor: TNxEdit6;
|
|
vTab: TMemTableEh;
|
|
ds: TDataSource;
|
|
polGrd: TDBGridEh;
|
|
vTabPoradiSort: TSingleField;
|
|
vTabK1: TStringField;
|
|
vTabK2: TStringField;
|
|
vTabSortiment: TStringField;
|
|
vTabIDZboSklad: TIntegerField;
|
|
vTabRegCis: TStringField;
|
|
vTabNazev: TStringField;
|
|
vTabRano: TFloatField;
|
|
vTabPoledne: TFloatField;
|
|
vTabStavSkladu: TFloatField;
|
|
vTabDoporuceno: TFloatField;
|
|
vTabPriorita: TIntegerField;
|
|
vTabCisloZbozi: TStringField;
|
|
cbxDodavatel: TComboBox;
|
|
lblDodICO: TLabel;
|
|
lblDodDIC: TLabel;
|
|
vTabIDKZ: TIntegerField;
|
|
vTabSkupZbo: TStringField;
|
|
vTabDodavatel: TIntegerField;
|
|
vTabJenRano: TSmallintField;
|
|
vTabMinimum: TFloatField;
|
|
vTabDelitelnost: TFloatField;
|
|
btnVynulovat: TButton;
|
|
lblInfo: TLabel;
|
|
vTabPoradi: TSingleField;
|
|
gbSortiment: TGroupBox;
|
|
vTabK1K2: TStringField;
|
|
vTabPoradiSortNazev: TStringField;
|
|
btnNovaPolozka: TSpeedButton;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure cbxSortimentChange(Sender: TObject);
|
|
procedure edtNumEditorClick(Sender: TObject);
|
|
procedure btnRozbalitClick(Sender: TObject);
|
|
procedure btnSbalitClick(Sender: TObject);
|
|
procedure btnOKClick(Sender: TObject);
|
|
procedure cbxDodavatelChange(Sender: TObject);
|
|
procedure polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure btnZavritClick(Sender: TObject);
|
|
procedure btnTiskClick(Sender: TObject);
|
|
procedure vTabRanoValidate(Sender: TField);
|
|
procedure vTabPoledneValidate(Sender: TField);
|
|
procedure dtZavozChange(Sender: TObject);
|
|
procedure FormResize(Sender: TObject);
|
|
procedure btnVynulovatClick(Sender: TObject);
|
|
procedure vTabAfterPost(DataSet: TDataSet);
|
|
procedure vTabAfterDelete(DataSet: TDataSet);
|
|
procedure btnPoslatClick(Sender: TObject);
|
|
procedure polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string);
|
|
procedure btnNovaPolozkaClick(Sender: TObject);
|
|
private
|
|
cOrg: integer;
|
|
visCols: TArray<TVisColumn>;
|
|
function ZjistiBranchID: Integer;
|
|
procedure NactiKarty;
|
|
public
|
|
Helios: IHelios;
|
|
jeTest: boolean;
|
|
oznacKOdeslani: boolean;
|
|
end;
|
|
|
|
var
|
|
formOrder2: TformOrder2;
|
|
sortim: TArray<TSortiment>;
|
|
dmObj: TdmObj;
|
|
cOrgs: TArray<Integer>;
|
|
cOrgDod: integer;
|
|
// poradCislo: integer;
|
|
branchID, idDZ, idObd, idBidVydObjHDC, idTiskForm, idTiskFormVydObjHDC, idMailProfile: integer;
|
|
tabExtOrdInfo, cisloDokl, rDokl: string;
|
|
smtpProfil: boolean;
|
|
delkaPoradCisla: byte;
|
|
arrIdSS: TArray<Integer>;
|
|
|
|
implementation
|
|
uses System.StrUtils, System.DateUtils, helUtils;
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
{$IF CompilerVersion>=34} // Sydney a vys
|
|
{$ENDIF}
|
|
|
|
function TWideStringHelper.QuotedString: string;
|
|
begin
|
|
Result:= string(Self).QuotedString;
|
|
end;
|
|
|
|
function TMaskedTextHelper.QuotedString: string;
|
|
var s: string;
|
|
begin
|
|
s:= Self;
|
|
Result:= s.QuotedString;
|
|
end;
|
|
|
|
function TmaskedTextHelper.Replace(oldStr: string; newStr: string): string;
|
|
var s: string;
|
|
begin
|
|
s:= Self;
|
|
Result:= s.Replace(oldStr, newStr);
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function TformOrder2.ZjistiBranchID: Integer;
|
|
var s: string;
|
|
begin
|
|
result:= -1;
|
|
s:= Helios.Sklad;
|
|
if (LeftStr(s, 3)='005') then
|
|
result:= RightStr(s, 1).ToInteger;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnNovaPolozkaClick(Sender: TObject);
|
|
var oVar: OleVariant;
|
|
idSS, idKZ: integer;
|
|
lSQL, k1, k2: string;
|
|
poradiSort, poradiSort2: Single;
|
|
begin
|
|
lSQL:= 'TabStavSkladu.Blokovano=0';
|
|
if (Length(arrIdSS)>0) then
|
|
lSQL:= lSQL + ' AND TabStavSkladu.ID NOT IN (' + helUtils.ArrayToString(arrIdSS, ',') + ')';
|
|
if Helios.Prenos(bidSS, 'TabStavSkladu.ID', oVar, lSQL, 'Přidejte kartu na objednávku', true) then
|
|
begin
|
|
idSS:= VarToStr(oVar).ToInteger;
|
|
idKZ:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDKmenZbozi FROM ' + tblSS + ' WHERE ID=' + idSS.ToString);
|
|
vTab.Append;
|
|
vTab.FieldByName('IDZboSklad').AsInteger:= idSS;
|
|
vTab.FieldByName('IDKZ').AsInteger:= idKZ;
|
|
vTab.FieldByName('Rano').AsInteger:= 0;
|
|
vTab.FieldByName('Poledne').AsInteger:= 0;
|
|
vTab.FieldByName('Doporuceno').AsInteger:= 0;
|
|
|
|
lSQL:= 'SELECT k.SkupZbo, k.RegCis, k.Nazev1, k.CisloZbozi, ISNULL(ke._delitelnost,1) AS delitelnost, ISNULL(ke._poradivsortimentu,999) AS PoradiVSort, ISNULL(ke._priorita,3) AS priorita';
|
|
lSQL:= lSQL + ', ISNULL(ke._zavoz,1) AS zavoz, ISNULL(so.K1,N'''')+ISNULL(so.K2,N'''') AS K1K2, ISNULL(so.K1,N'''') AS K1, ISNULL(so.K2,N'''') AS K2, ISNULL(k.Aktualni_Dodavatel,-1) AS dodavatel';
|
|
lSQL:= lSQL + ', ISNULL(so.Nazev,N'''') AS SortNazev FROM ' + tblKZ + ' k LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) LEFT JOIN ' + tblSortim;
|
|
lSQL:= lSQL + ' so ON (so.ID=k.IDSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID) WHERE k.ID=' + idKZ.ToString;
|
|
with Helios.OpenSQL(lSQL) do
|
|
begin
|
|
k1:= VarToStr(FieldByNameValues('K1'));
|
|
k2:= VarToStr(FieldByNameValues('K2'));
|
|
|
|
vTab.FieldByName('PoradiSort').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle;
|
|
vTab.FieldByName('K1').AsString:= k1;
|
|
vTab.FieldByName('K2').AsString:= k2;
|
|
vTab.FieldByName('K1K2').AsString:= k1+k2;
|
|
vTab.FieldByName('Priorita').AsInteger:= VarToStr(FieldByNameValues('priorita')).ToInteger;
|
|
vTab.FieldByName('Dodavatel').AsInteger:= VarToStr(FieldByNameValues('dodavatel')).ToInteger;
|
|
if (VarToStr(FieldByNameValues('zavoz'))='1') then
|
|
vTab.FieldByName('JenRano').AsInteger:= 1
|
|
else
|
|
vTab.FieldByName('JenRano').AsInteger:= 0;
|
|
|
|
|
|
lSQL:= 'SELECT s.ID, s.Nazev, s.K1, ISNULL(s.K2,N'''') AS K2, ISNULL(se.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) AS Poradi FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE se._Objednavky_Zobrazit=1';
|
|
lSQL:= lSQL + ' AND s.K1=N' + k1.QuotedString; // + ' AND s.K2 IS NOT NULL';
|
|
lSQL:= lSQL + ' ORDER BY ISNULL(se.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(se._priorita, 999)), K1, ISNULL(s.K2, N'''')';
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
poradiSort2:= VarToStr(FieldByNameValues('Poradi')).ToSingle;
|
|
vTab.FieldByName('PoradiSortNazev').AsString:= ((poradiSort*1000.0)+poradiSort2).ToString.Replace(',', '.') + ' ' + VarToStr(FieldByNameValues('SortNazev'));
|
|
end;
|
|
|
|
vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('SortNazev'));
|
|
vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo'));
|
|
vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
|
|
vTab.FieldByName('Nazev').AsString:= VarToStr(FieldByNameValues('Nazev1'));
|
|
vTab.FieldByName('StavSkladu').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ISNULL((SELECT Mnozstvi FROM ' + tblSS + ' WHERE ID=' + idSS.ToString + '),0)');
|
|
end;
|
|
vTab.Post;
|
|
vTab.Refresh;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnOKClick(Sender: TObject);
|
|
var oldRec, idHlava, idHlava2: integer;
|
|
lSQL, spojeniKontaktu, popisKontaktu, idSS, sz, rc: string;
|
|
tiskOK, kontaktNalezen: boolean;
|
|
begin
|
|
cisloDokl:= '';
|
|
|
|
if (vTab.RecordCount>0) then
|
|
begin
|
|
|
|
// dmObj.ZapisObjednavky(vTab, cOrgDod, edtCisloObj.ValueInt, dtZavoz);
|
|
|
|
spojeniKontaktu:= '';
|
|
popisKontaktu:= '';
|
|
kontaktNalezen:= false;
|
|
|
|
if not(smtpProfil) then
|
|
Helios.Error(#1'Nemáte přednastavený emailový profil pro odeslání přes SMTP'#1)
|
|
else
|
|
begin
|
|
with Helios.OpenSQL('EXEC dbo.hp_GetKontaktProKosAOrg @IDKOs=NULL, @CisOrg=' + cOrgDod.ToString + ', @Druh=6') do
|
|
if (RecordCount>0) then
|
|
begin
|
|
First;
|
|
while not(EOF) and not(kontaktNalezen) do
|
|
begin
|
|
popisKontaktu:= VarToStr(FieldValues(0)); // @Popis
|
|
spojeniKontaktu:= VarToStr(FieldValues(1)); // @Spojeni
|
|
if (spojeniKontaktu<>'') or (popisKontaktu='Objednávky') then
|
|
kontaktNalezen:= true;
|
|
Next;
|
|
end;
|
|
end;
|
|
|
|
if not(kontaktNalezen) then
|
|
Helios.Error(#1'U dodavatele není kontakt typu email s popisem "Objednávky"'#1 + CRLF + 'Email nebude automatem odeslán.');
|
|
end;
|
|
|
|
lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabObjednavkaH WHERE Autor=SUSER_SNAME()' + CRLF;
|
|
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaR'') IS NOT NULL AND OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabObjednavkaR WHERE';
|
|
lSQL:= lSQL + ' IDHlava NOT IN (SELECT ID FROM dbo._temp_TabObjednavkaH)' + CRLF;
|
|
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT * FROM dbo._temp_TabObjednavkaH)' + CRLF + ' DROP TABLE dbo._temp_TabObjednavkaH' + CRLF;
|
|
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaR'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT * FROM dbo._temp_TabObjednavkaR)' + CRLF + ' DROP TABLE dbo._temp_TabObjednavkaR';
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjednavkaH'') IS NOT NULL' + CRLF + ' DROP TABLE #TabObjednavkaH' + CRLF;
|
|
lSQL:= lSQL + 'CREATE TABLE #TabObjednavkaH (ID INT IDENTITY(1,1) NOT NULL, CisloOrg INT NOT NULL, Sklad NVARCHAR(30), Datum DATETIME, EmailCil NVARCHAR(80) NOT NULL DEFAULT N''''';
|
|
lSQL:= lSQL + ', Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())';
|
|
if (jeTest) then
|
|
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO');
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
idHlava:= 0;
|
|
lSQL:= 'INSERT #TabObjednavkaH (CisloOrg, Sklad, Datum, EmailCil)' + CRLF + ' SELECT ISNULL(TRY_PARSE(N' + cOrgDod.ToString.Replace(';', '').Replace('-','').Replace(' ', '').QuotedString;
|
|
lSQL:= lSQL + ' AS INT), 0), N' + Helios.Sklad.QuotedString + ', CONVERT(datetime, N' + FormatDateTime('d.m.yyyy', dtZavoz.Date).QuotedString + ', 104), N' + spojeniKontaktu.QuotedString;
|
|
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
|
|
if (jeTest) then
|
|
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO');
|
|
with Helios.OpenSQL(lSQL) do
|
|
idHlava:= VarToStr(FieldValues(0)).ToInteger;
|
|
|
|
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjednavkaR'') IS NOT NULL' + CRLF + ' DROP TABLE #TabObjednavkaR' + CRLF;
|
|
lSQL:= lSQL + 'CREATE TABLE #TabObjednavkaR (ID INT IDENTITY(1,1) NOT NULL, IDHlava INT NOT NULL, IDZboSklad INT NOT NULL, Rano NUMERIC(15,4) NOT NULL DEFAULT 0.0, PoradiObj NUMERIC(10,2) DEFAULT 999';
|
|
lSQL:= lSQL + ', Poledne NUMERIC(15,4) NOT NULL DEFAULT 0.0, Doporuceno NUMERIC(15,4) NOT NULL DEFAULT 0.0, SkupZbo NVARCHAR(3), RegCis NVARCHAR(30), Sklad NVARCHAR(30), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())';
|
|
if (jeTest) then
|
|
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO');
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
lSQL:= 'INSERT dbo._HDC_TabAplikace (TypDokladu, IDSklad) VALUES (1, N' + Helios.Sklad.QuotedString + '); SELECT SCOPE_IDENTITY()';
|
|
idHlava2:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
|
|
|
|
oldRec:= vTab.RecNo;
|
|
vTab.DisableControls;
|
|
vTab.First;
|
|
while not(vTab.Eof) do
|
|
begin
|
|
if (vTab.FieldByName('Rano').AsSingle>0) or (vTab.FieldByName('Poledne').AsSingle>0) then
|
|
begin
|
|
idSS:= IfThen(vTab.FieldByName('IDZboSklad').AsString='', '0', vTab.FieldByName('IDZboSklad').AsString);
|
|
sz:= vTab.FieldByName('SkupZbo').AsString;
|
|
rc:= vTab.FieldByName('RegCis').AsString;
|
|
|
|
lSQL:= 'INSERT dbo._HDC_TabAplikaceR (IDHlava, TypDokladu, IDSklad, IDZboSklad, CisloZbozi, Rano, Poledne) SELECT ' + idHlava2.ToString + ', 1, N' + Helios.Sklad.QuotedString;
|
|
lSQL:= lSQL + ', ' + idSS + ', N' + (sz+rc).QuotedString + ', ' + vTab.FieldByName('Rano').AsSingle.ToString + ', ' + vTab.FieldByName('Poledne').AsSingle.ToString;
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
lSQL:= 'INSERT #TabObjednavkaR (IDHlava, IDZboSklad, Rano, Poledne, Doporuceno, Sklad, PoradiObj, SkupZbo, RegCis)' + CRLF + ' SELECT ' + idHlava.ToString + ', ' + idSS + ', ';
|
|
lSQL:= lSQL + vTab.FieldByName('Rano').AsSingle.ToString.Replace(',','.') + ', ' + vTab.FieldByName('Poledne').AsSingle.ToString.Replace(',','.');
|
|
lSQL:= lSQL + ', ' + vTab.FieldByName('Doporuceno').AsSingle.ToString.Replace(',','.') + ', N' + Helios.Sklad.QuotedString + ', ' + vTab.FieldByName('Poradi').AsString.Replace(',', '.');
|
|
lSQL:= lSQL + ', N' + sz.QuotedString + ', N' + rc.QuotedString;
|
|
if (jeTest) then
|
|
lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO');
|
|
Helios.ExecSQL(lSQL);
|
|
end;
|
|
vTab.Next;
|
|
end;
|
|
vTab.RecNo:= oldRec;
|
|
vTab.EnableControls;
|
|
|
|
idDZ:= 0;
|
|
if not(jeTest) then
|
|
begin
|
|
helUtils.waitStart(self, 'Zápis vydané objednávky...', 0, 0);
|
|
try
|
|
lSQL:= 'DECLARE @i INT; IF OBJECT_ID(N''dbo.ep_HDC_App_Objednavka'', N''P'') IS NOT NULL EXEC dbo.ep_HDC_App_Objednavka @idDZ=@i OUT, @Sklad=N' + Helios.Sklad.QuotedString + CRLF + 'SELECT @i';
|
|
with Helios.OpenSQL(lSQL) do
|
|
idDZ:= VarToStr(FieldValues(0)).ToInteger;
|
|
if (idDZ>0) and (oznacKOdeslani) then
|
|
begin
|
|
Helios.ExecSQL('IF NOT EXISTS(SELECT ID FROM ' + tblDZe + ' WHERE ID=' + idDZ.ToString + ') INSERT ' + tblDZe + ' (ID) SELECT ' + idDZ.ToString);
|
|
Helios.ExecSQL('UPDATE ' + tblDZe+ ' SET _VydObj_OdeslatNaMail=1 WHERE ID=' + idDZ.ToString);
|
|
// Helios.Info(#1'Objednávka byla označena k odeslání emailem dodavateli.'#1);
|
|
end;
|
|
except
|
|
end;
|
|
helUtils.waitEnd;
|
|
end;
|
|
cisloDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDZ.ToString);
|
|
idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TiskovyForm FROM ' + tblDDZ + ' WHERE ID=' + idDZ.ToString);
|
|
end;
|
|
|
|
|
|
lSQL:= '';
|
|
if (Sender.ToString='TButton') then
|
|
lSQL:= (Sender as TButton).Name;
|
|
|
|
if (lSQL='btnOK') then
|
|
Close;
|
|
if (lSQL='btnTisk') or (lSQL='btnPoslat') then
|
|
begin
|
|
tiskOK:= false;
|
|
Helios.Info(#1'Objednávka byla uložena - č. ' + cisloDokl + #1);
|
|
if (lSQL='btnTisk') then
|
|
if (idBidVydObjHDC>0) then
|
|
tiskOK:= Helios.PrintForm3(idBidVydObjHDC, idTiskFormVydObjHDC, 'ID=' + idDZ.ToString)
|
|
else
|
|
tiskOK:= Helios.PrintForm2(11, 'ID=' + idDZ.ToString);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnPoslatClick(Sender: TObject);
|
|
var popisKontaktu, spojeniKontaktu: string;
|
|
kontaktNalezen: Boolean;
|
|
begin
|
|
if (cOrgDod<0) then
|
|
begin
|
|
Helios.Error(#1'Není vybrán dodavatel'#1);
|
|
Exit;
|
|
end;
|
|
|
|
if not(smtpProfil) then
|
|
Helios.Error(#1'Nemáte přednastavený emailový profil pro odeslání přes SMTP'#1)
|
|
else
|
|
begin
|
|
spojeniKontaktu:= '';
|
|
popisKontaktu:= '';
|
|
kontaktNalezen:= false;
|
|
|
|
with Helios.OpenSQL('EXEC dbo.hp_GetKontaktProKosAOrg @IDKOs=NULL, @CisOrg=' + cOrgDod.ToString + ', @Druh=6') do
|
|
if (RecordCount>0) then
|
|
begin
|
|
First;
|
|
while not(EOF) and not(kontaktNalezen) do
|
|
begin
|
|
popisKontaktu:= VarToStr(FieldValues(0)); // @Popis
|
|
spojeniKontaktu:= VarToStr(FieldValues(1)); // @Spojeni
|
|
if (spojeniKontaktu<>'') or (popisKontaktu='Objednávky') then
|
|
kontaktNalezen:= true;
|
|
Next;
|
|
end;
|
|
end;
|
|
|
|
if not(kontaktNalezen) then
|
|
Helios.Error(#1'U dodavatele není kontakt typu email s popisem "Objednávky"'#1 + CRLF + 'Email nebude automatem odeslán.')
|
|
else
|
|
begin
|
|
btnOKClick(Sender);
|
|
if (idDZ>0) then
|
|
begin
|
|
Helios.ExecSQL('IF NOT EXISTS(SELECT ID FROM ' + tblDZe + ' WHERE ID=' + idDZ.ToString + ') INSERT ' + tblDZe + ' (ID) SELECT ' + idDZ.ToString);
|
|
Helios.ExecSQL('UPDATE ' + tblDZe+ ' SET _VydObj_OdeslatNaMail=1 WHERE ID=' + idDZ.ToString);
|
|
Helios.Info(#1'Objednávka byla označena k odeslání emailem dodavateli.'#1);
|
|
Close;
|
|
end
|
|
else
|
|
Helios.Error(#1'Chyba, objednávku se v rámci odeslání nepodařilo uložit. Zkuste to znovu.'#1)
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnRozbalitClick(Sender: TObject);
|
|
begin
|
|
polGrd.DataGrouping.ActiveGroupLevels[0].ExpandNodes;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnSbalitClick(Sender: TObject);
|
|
begin
|
|
polGrd.DataGrouping.ActiveGroupLevels[0].CollapseNodes;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnTiskClick(Sender: TObject);
|
|
var lSQL: string;
|
|
i: integer;
|
|
begin
|
|
{
|
|
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjTiskH'') IS NOT NULL DROP TABLE #TabObjTiskH' + CRLF + 'CREATE TABLE #TabObjTiskH (ID INT IDENTITY(1,1) NOT NULL';
|
|
lSQL:= lSQL + ', CisloOrg INT NOT NULL, Sklad NVARCHAR(30), Datum DATETIME)' + CRLF;
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
lSQL:= 'INSERT #TabObjTiskH (CisloOrg, Sklad, Datum) SELECT ISNULL(TRY_PARSE(N' + cOrgDod.ToString.Replace(';', '').Replace('-','').Replace(' ', '').QuotedString;
|
|
lSQL:= lSQL + ' AS INT), 0), N' + Helios.Sklad.QuotedString + ', CONVERT(datetime, N' + FormatDateTime('d.m.yyyy', dtZavoz.Date).QuotedString + ', 104)';
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjTiskR'') IS NOT NULL DROP TABLE #TabObjTiskR' + CRLF + 'CREATE TABLE #TabObjTiskR (ID INT IDENTITY(1,1) NOT NULL';
|
|
lSQL:= lSQL + ', SkupZbo NVARCHAR(3), RegCis NVARCHAR(30), Nazev1 NVARCHAR(100), Rano NUMERIC(15,3) DEFAULT 0.0, Poledne NUMERIC(15,3) DEFAULT 0.0)' + CRLF;
|
|
Helios.ExecSQL(lSQL);
|
|
|
|
vTab.DisableControls;
|
|
vTab.First;
|
|
while not(vTab.Eof) do
|
|
begin
|
|
lSQL:= 'INSERT #TabObjTiskR (SkupZbo, RegCis, Nazev1, Rano, Poledne) SELECT N' + vTab.FieldByName('SkupZbo').AsString.QuotedString + ', N';
|
|
lSQL:= lSQL + vTab.FieldByName('RegCis').AsString.QuotedString + ', N' + vTab.FieldByName('Nazev').AsString.QuotedString + ', ';
|
|
lSQL:= lSQL + vTab.FieldByName('Rano').AsString.Replace(',', '.') + ', ' + vTab.FieldByName('Poledne').AsString.Replace(',', '.');
|
|
Helios.ExecSQL(lSQL);
|
|
vTab.Next;
|
|
end;
|
|
|
|
// Helios.PrintForm(12);
|
|
|
|
vTab.EnableControls;
|
|
}
|
|
btnOKClick(Sender);
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnVynulovatClick(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
if (vTab.RecordCount>0) then
|
|
if (Helios.YesNo('!! POZOR !! Toto je ' + #1 + 'nevratná akce' + #1 + ' !!', false)) then
|
|
if (Helios.YesNo('?? Opravdu vynulovat ' + #1 + 'všechna' + #1 + ' nabízená množství ??', false)) then
|
|
begin
|
|
i:= vTab.RecNo;
|
|
vTab.DisableControls;
|
|
vTab.First;
|
|
while not(vTab.Eof) do
|
|
begin
|
|
vTab.Edit;
|
|
vTab.FieldByName('Rano').AsInteger:= 0;
|
|
vTab.FieldByName('Poledne').AsInteger:= 0;
|
|
vTab.Post;
|
|
vTab.Next;
|
|
end;
|
|
vTab.EnableControls;
|
|
vTab.RecNo:= i;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.btnZavritClick(Sender: TObject);
|
|
begin
|
|
if (Helios.YesNo('Ukončit bez uložení objednávky ?', false)) then
|
|
Close;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.NactiKarty;
|
|
var lSQL, sort, k1, k2, cZbo, flt: string;
|
|
idSort, idx, idxSS: integer;
|
|
poradiSort, poradiSort2: Single;
|
|
mnR, mnP: Single;
|
|
extOrdInfo: boolean;
|
|
begin
|
|
if (cbxSortiment.ItemIndex>-1) and (cbxDodavatel.ItemIndex>-1) and (dtZavoz.DateTime>Now) then
|
|
begin
|
|
idx:= cbxSortiment.ItemIndex;
|
|
k1:= sortim[idx].k1;
|
|
poradiSort:= 1; // sortim[idx].poradiSort;
|
|
|
|
lSQL:= 'SELECT s.ID, s.Nazev, s.K1, ISNULL(s.K2,N'''') AS K2, ISNULL(se.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(se._priorita, 999)) AS Poradi FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE se._Objednavky_Zobrazit=1';
|
|
lSQL:= lSQL + ' AND s.K1=N' + k1.QuotedString; // + ' AND s.K2 IS NOT NULL';
|
|
lSQL:= lSQL + ' ORDER BY ISNULL(se.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(se._priorita, 999)), K1, ISNULL(s.K2, N'''')';
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
if not(vTab.Active) then
|
|
vTab.Open;
|
|
|
|
tabExtOrdInfo:= '';
|
|
lSQL:= 'SET NOCOUNT ON' + CRLF +'DECLARE @dt DATETIME, @tabName NVARCHAR(30)=N''''' + CRLF + ' SET @dt=CONVERT(datetime, N';
|
|
lSQL:= lSQL + FormatDateTime('d.m.yyyy', dtZavoz.DateTime).QuotedString + ', 104)' + CRLF;
|
|
lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_HDC_App_Objednavka_GenerujTabulkyProObjednavku'', N''P'') IS NOT NULL' + CRLF;
|
|
lSQL:= lSQL + ' EXEC dbo.ep_HDC_App_Objednavka_GenerujTabulkyProObjednavku @Dodavatel=' + cOrgDod.ToString;
|
|
lSQL:= lSQL + ', @DatumDodani=@dt, @RadaDokladu1=N' + ('7' + branchID.ToString + '0').QuotedString + ', @RadaDokladu2=N';
|
|
lSQL:= lSQL + ('7' + branchID.ToString + '1').QuotedString + ', @Sklad=N' + Helios.Sklad.QuotedString + ', @TypSortimentu=';
|
|
lSQL:= lSQL + sortim[cbxSortiment.ItemIndex].typSort.ToString + ', @BranchID=' + branchID.ToString + ', @SortimentK1=N' +k1.QuotedString;
|
|
lSQL:= lSQL + ', @TabName=@tabName OUT' + CRLF + 'SELECT @tabName';
|
|
with Helios.OpenSQL(lSQL) do
|
|
tabExtOrdInfo:= VarToStr(FieldValues(0));
|
|
|
|
flt:= 'K1=''' + k1 + '''';
|
|
vTab.Filter:= flt;
|
|
vTab.Filtered:= true;
|
|
|
|
|
|
extOrdInfo:= false;
|
|
lSQL:= 'SELECT CASE WHEN OBJECT_ID(N'+ tabExtOrdInfo.QuotedString + ', N''U'') IS NOT NULL THEN 1 ELSE 0 END';
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (VarToStr(FieldValues(0))='1') then
|
|
extOrdInfo:= true;
|
|
|
|
|
|
First;
|
|
while not(EOF) do
|
|
begin
|
|
idSort:= VarToStr(FieldByNameValues('ID')).ToInteger;
|
|
sort:= VarToStr(FieldByNameValues('Nazev'));
|
|
// k1:= VarToStr(FieldByNameValues('K1'));
|
|
k2:= VarToStr(FieldByNameValues('K2'));
|
|
poradiSort2:= VarToStr(FieldByNameValues('Poradi')).ToSingle;
|
|
|
|
lSQL:= 'SELECT ISNULL(s.ID,0) AS idSS, k.ID AS idKZ, k.SkupZbo, k.RegCis, k.Nazev1, ISNULL(s.Mnozstvi,0) AS MnSkladem, k.CisloZbozi';
|
|
lSQL:= lSQL + ', ISNULL(ke._priorita,0) AS Priorita, ISNULL(k.Aktualni_Dodavatel,-1) AS AktDod, ISNULL(ke._zavoz,0) AS Zavoz, ';
|
|
lSQL:= lSQL + 'k.Minimum_Dodavatel, ISNULL(ke._delitelnost,0) AS Delitelnost, ';
|
|
if (extOrdInfo) then
|
|
lSQL:= lSQL + 'ISNULL(eo.Navrh,0)'
|
|
else
|
|
lSQL:= lSQL + '0';
|
|
lSQL:= lSQL + ' AS Doporuceno, ISNULL(ke.';
|
|
// case branchID of
|
|
// 1: lSQL:= lSQL + '_PoradiSortiment_Klas1';
|
|
// 2: lSQL:= lSQL + '_PoradiSortiment_MozVod';
|
|
// 3: lSQL:= lSQL + '_PoradiSortiment_MozPi';
|
|
// else
|
|
lSQL:= lSQL + '_poradivsortimentu';
|
|
// end;
|
|
|
|
lSQL:= lSQL + ', ISNULL(ke._poradivsortimentu, 999)) AS PoradiVSort FROM ' + tblKZ + ' k LEFT JOIN ' + tblSS + ' s ON (s.IDKmenZbozi=k.ID AND s.IDSklad=N';
|
|
lSQL:= lSQL + Helios.Sklad.QuotedString + ') INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)';
|
|
if (extOrdInfo) then
|
|
lSQL:= lSQL + ' LEFT JOIN ' + tabExtOrdInfo + ' eo ON (eo.SkupZbo=k.SkupZbo AND eo.RegCis=k.RegCis)';
|
|
lSQL:= lSQL + ' WHERE k.IDSortiment=' + idSort.ToString + ' ORDER BY ISNULL(ke.';
|
|
// case branchID of
|
|
// 1: lSQL:= lSQL + '_PoradiSortiment_Klas1';
|
|
// 2: lSQL:= lSQL + '_PoradiSortiment_MozVod';
|
|
// 3: lSQL:= lSQL + '_PoradiSortiment_MozPi';
|
|
// else
|
|
lSQL:= lSQL + '_poradivsortimentu';
|
|
// end;
|
|
lSQL:= lSQL + ', ISNULL(ke._poradivsortimentu, 999))';
|
|
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
First;
|
|
while not(EOF) do
|
|
begin
|
|
cZbo:= VarToStr(FieldByNameValues('CisloZbozi'));
|
|
if not(vTab.Locate('CisloZbozi', cZbo, [])) then
|
|
begin
|
|
vTab.Append;
|
|
vTab.FieldByName('Sortiment').AsString:= sort;
|
|
vTab.FieldByName('PoradiSort').AsSingle:= poradiSort;
|
|
vTab.FieldByName('K1').AsString:= k1;
|
|
vTab.FieldByName('K2').AsString:= k2;
|
|
vTab.FieldByName('K1K2').AsString:= k1+k2;
|
|
vTab.FieldByName('PoradiSortNazev').AsString:= ((poradiSort*1000.0)+poradiSort2).ToString.Replace(',', '.') + ' ' + sort;
|
|
vTab.FieldByName('IDZboSklad').AsInteger:= VarToStr(FieldByNameValues('idSS')).ToInteger;
|
|
vTab.FieldByName('IDKZ').AsInteger:= VarToStr(FieldByNameValues('idKZ')).ToInteger;
|
|
vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo'));
|
|
vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
|
|
vTab.FieldByName('Nazev').AsString:= VarToStr(FieldByNameValues('Nazev1'));
|
|
vTab.FieldByName('CisloZbozi').AsString:= cZbo;
|
|
vTab.FieldByName('Priorita').AsInteger:= VarToStr(FieldByNameValues('Priorita')).ToInteger;
|
|
vTab.FieldByName('Poradi').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle;
|
|
vTab.FieldByName('StavSkladu').AsFloat:= VarToStr(FieldByNameValues('MnSkladem')).ToExtended;
|
|
vTab.FieldByName('Doporuceno').AsFloat:= VarToStr(FieldByNameValues('Doporuceno')).ToExtended;
|
|
vTab.FieldByName('Rano').AsFloat:= VarToStr(FieldByNameValues('Doporuceno')).ToExtended;
|
|
vTab.FieldByName('Poledne').AsFloat:= 0;
|
|
vTab.FieldByName('Dodavatel').AsInteger:= VarToStr(FieldByNameValues('AktDod')).ToInteger;
|
|
vTab.FieldByName('JenRano').AsInteger:= VarToStr(FieldByNameValues('Zavoz')).ToInteger;
|
|
vTab.FieldByName('Minimum').AsFloat:= VarToStr(FieldByNameValues('Minimum_Dodavatel')).ToExtended;
|
|
vTab.FieldByName('Delitelnost').AsFloat:= VarToStr(FieldByNameValues('Delitelnost')).ToExtended;
|
|
vTab.Post;
|
|
end;
|
|
Next;
|
|
end;
|
|
end;
|
|
Next;
|
|
end;
|
|
|
|
flt:= 'K1=''' + k1 + '''';
|
|
if (cOrgDod>-1) then
|
|
flt:= flt + ' AND Dodavatel=' + cOrgDod.ToString;
|
|
vTab.Filter:= flt;
|
|
vTab.Filtered:= true;
|
|
|
|
end;
|
|
|
|
vTab.SortByFields('PoradiSortNazev,Poradi,SkupZbo,RegCis');
|
|
|
|
helUtils.waitEnd;
|
|
|
|
polGrd.Options:= polGrd.Options + [dgEditing];
|
|
if not(vTab.Active) then
|
|
polGrd.Options:= polGrd.Options - [dgEditing]
|
|
else
|
|
if (vTab.RecordCount=0) then
|
|
polGrd.Options:= polGrd.Options - [dgEditing];
|
|
|
|
if (k1='001') then
|
|
vTab.Locate('K1;K2', VarArrayOf(['001','']), []);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string);
|
|
var s, s2: string;
|
|
i: integer;
|
|
errReverse: boolean;
|
|
begin
|
|
errReverse:= false;
|
|
s2:= '(123)';
|
|
s2:= ReverseString(s2);
|
|
if (s2.EndsWith('(')) then
|
|
errReverse:= true;
|
|
|
|
s:= GroupRowText.Replace('PoradiSortNazev: ', '');
|
|
if (s.IndexOf(' ')>-1) then
|
|
s:= MidStr(s, s.IndexOf(' ')+1, s.Length).Trim;
|
|
if (s.EndsWith(')')) then
|
|
begin
|
|
s:= ReverseString(s);
|
|
if (errReverse) then
|
|
i:= s.IndexOf('(')
|
|
else
|
|
i:= s.IndexOf(')');
|
|
if (i>-1) then
|
|
s:= MidStr(s, i+2, s.Length);
|
|
s:= ReverseString(s).Trim;
|
|
end;
|
|
s2:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) KatAllTecky FROM ' + tblSortim + ' WHERE Nazev=N' + s.QuotedString);
|
|
GroupRowText:= IfThen(s2<>'', s2 + ' ', '') + s;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
var i, i2: integer;
|
|
lSQL: string;
|
|
begin
|
|
if (Key=Ord('p')) or (Key=Ord('P')) then
|
|
begin
|
|
i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger;
|
|
if (i>0) then
|
|
begin
|
|
lSQL:= 'TabPohybyZbozi.IDZboSklad=(SELECT ID FROM ' + tblSS + ' WHERE IDKmenZbozi=' + i.ToString + ' AND IDSklad=N' + Helios.Sklad.QuotedString + ')';
|
|
Helios.OpenBrowse(66, lSQL);
|
|
end;
|
|
end;
|
|
|
|
if (Key=Ord('o')) or (Key=Ord('O')) then
|
|
begin
|
|
i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger;
|
|
i2:= 0;
|
|
with Helios.OpenSQL('SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_HDC_StareProdeje_Pol''') do
|
|
if (RecordCount=1) then
|
|
i2:= VarToStr(FieldValues(0)).ToInteger;
|
|
|
|
if (i2>0) then
|
|
begin
|
|
lSQL:= 'hvw_HDC_StareProdeje_Pol.IDSklad=N' + Helios.Sklad.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.SkupZbo=N';
|
|
lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('SkupZbo').AsString.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.RegCis=N';
|
|
lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('RegCis').AsString.QuotedString;
|
|
lSQL:= lSQL + ' AND hvw_HDC_StareProdeje_Pol.DruhPohybuZbo IN (2,4)';
|
|
Helios.OpenBrowse(i2, lSQL);
|
|
end;
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.vTabAfterDelete(DataSet: TDataSet);
|
|
begin
|
|
btnVynulovat.Enabled:= (DataSet.RecordCount>0);
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.vTabAfterPost(DataSet: TDataSet);
|
|
var maxPoz: integer;
|
|
begin
|
|
btnVynulovat.Enabled:= (DataSet.RecordCount>0);
|
|
SetLength(arrIdSS, Length(arrIdSS)+1);
|
|
maxPoz:= Length(arrIdSS)-1;
|
|
arrIdSS[maxPoz]:= DataSet.FieldByName('IDZboSklad').AsInteger;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.vTabPoledneValidate(Sender: TField);
|
|
var canCont: Boolean;
|
|
mv, mm: Single;
|
|
begin
|
|
canCont:= true;
|
|
mv:= TField(Sender).AsFloat;
|
|
mm:= TField(Sender).DataSet.FieldByName('Minimum').AsSingle;
|
|
|
|
if (TField(Sender).AsInteger<>0) and (TField(Sender).DataSet.FieldByName('JenRano').AsInteger=1) then
|
|
begin
|
|
TField(Sender).DataSet.Cancel;
|
|
Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1);
|
|
canCont:= false;
|
|
end;
|
|
|
|
if (canCont) and (TField(Sender).AsInteger<0) then
|
|
begin
|
|
canCont:= false;
|
|
Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1);
|
|
end;
|
|
|
|
if (canCont) and (mv<mm) then
|
|
begin
|
|
canCont:= false;
|
|
Helios.Error(#1'Minimální množství je ' + FormatFloat('#,##0.###', mm) + #1);
|
|
end;
|
|
|
|
if not(canCont) then
|
|
TField(Sender).DataSet.Cancel;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.vTabRanoValidate(Sender: TField);
|
|
var canCont: Boolean;
|
|
mv, mm: Single;
|
|
begin
|
|
canCont:= true;
|
|
mv:= TField(Sender).AsFloat;
|
|
mm:= TField(Sender).DataSet.FieldByName('Minimum').AsSingle;
|
|
|
|
if (TField(Sender).AsInteger<0) then
|
|
begin
|
|
canCont:= false;
|
|
Helios.Error(#1'Lze zadávat jen kladná čísla.'#1);
|
|
end;
|
|
|
|
if (canCont) and (mv<mm) then
|
|
begin
|
|
canCont:= false;
|
|
Helios.Error(#1'Minimální množství je ' + FormatFloat('#,##0.###', mm) + #1);
|
|
end;
|
|
|
|
if not(canCont) then
|
|
TField(Sender).DataSet.Cancel;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.cbxSortimentChange(Sender: TObject);
|
|
var lSQL: string;
|
|
idx: integer;
|
|
begin
|
|
lblDodAdresa.Caption:='';
|
|
lblDodMisto.Caption:= '';
|
|
|
|
idx:= cbxSortiment.ItemIndex;
|
|
|
|
cbxDodavatel.Items.Clear;
|
|
lSQL:= 'SELECT CisloOrg, Nazev, UliceSCisly, Misto, ICO, DIC FROM ' + tblCOrg + ' c INNER JOIN ' + tblCOrgE + ' ce ON (ce.ID=c.ID) WHERE ce.';
|
|
lSQL:= lSQL + sortim[idx].poleDodav + '=1';
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
SetLength(cOrgs, RecordCount);
|
|
First;
|
|
idx:= 0;
|
|
while not(EOF) do
|
|
begin
|
|
cbxDodavatel.Items.Add(VarToStr(FieldValues(1)));
|
|
cOrgs[idx]:= VarToStr(FieldValues(0)).ToInteger;
|
|
Inc(idx);
|
|
Next;
|
|
end;
|
|
end;
|
|
|
|
if (cbxDodavatel.Items.Count=1) then
|
|
helUtils.waitStart(nil, 'Načítám historická data...', 0, 0);
|
|
|
|
cbxDodavatel.ItemIndex:= helUtils.IfThenInt(cbxDodavatel.Items.Count=1, 0, -1);
|
|
polGrd.Enabled:= (cbxDodavatel.ItemIndex>-1);
|
|
|
|
{
|
|
polGrd.Options:= polGrd.Options + [dgEditing];
|
|
if not(vTab.Active) then
|
|
polGrd.Options:= polGrd.Options - [dgEditing]
|
|
else
|
|
if (vTab.RecordCount=0) then
|
|
polGrd.Options:= polGrd.Options - [dgEditing];
|
|
}
|
|
cbxDodavatelChange(Sender);
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.dtZavozChange(Sender: TObject);
|
|
var lSQL, podm: string;
|
|
begin
|
|
idObd:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblObd + ' WHERE DatumOd_Y=' + dtZavoz.DateTime.GetYear.ToString);
|
|
|
|
lSQL:= 'SELECT DelkaPorCis FROM ' + tblObd + ' WHERE ID=' + idObd.ToString;
|
|
delkaPoradCisla:= helUtils.getHeliosIntVal(Helios, 6, lSQL);
|
|
|
|
podm:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + idObd.ToString;
|
|
lSQL:= 'SELECT def.PosledniPC FROM ' + tblDDZ + ' d INNER JOIN ' + tblDDZdef + ' def ON (def.IDDruhDZ=d.ID) WHERE d.DruhPohybuZbo=6 AND def.IDObdobi=' + idObd.ToString;
|
|
lSQL:= lSQL + ' AND d.RadaDokladu=N' + rDokl.QuotedString;
|
|
|
|
lSQL:= 'DECLARE @ppc INT, @d INT, @i INT' + CRLF + 'SET @ppc=ISNULL( (' + lSQL + '), 1)' + CRLF + 'SET @d=(DATEPART(year, GETDATE())-2000) * 10000' + CRLF;
|
|
lSQL:= lSQL + 'IF (@ppc=@d) SET @ppc=@ppc+1' + CRLF;
|
|
lSQL:= lSQL + 'EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=@ppc, @Kam=999999, @Where=N' + podm.QuotedString + ', @Returnem=1';
|
|
lSQL:= lSQL + CRLF + 'SELECT @i';
|
|
cisloDokl:= helUtils.getHeliosStrVal(Helios, (YearOf(now)-2000).ToString + StringOfChar('0', delkaPoradCisla-2-1) + '1', lSQL);
|
|
|
|
edtCisloObj.ValueInt:= cisloDokl.ToInteger;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.cbxDodavatelChange(Sender: TObject);
|
|
var lSQL: string;
|
|
begin
|
|
|
|
if (cbxDodavatel.ItemIndex>0) then
|
|
helUtils.waitStart(nil, 'Načítám historická data...', 0, 0);
|
|
|
|
lblDodAdresa.Caption:= '';
|
|
lblDodMisto.Caption:= '';
|
|
lblDodICO.Caption:= '';
|
|
lblDodDIC.Caption:= '';
|
|
gbDodavatel.Caption:= ' Dodavatel ';
|
|
if (cbxDodavatel.ItemIndex=-1) then
|
|
cOrgDod:= -1
|
|
else
|
|
cOrgDod:= cOrgs[cbxDodavatel.ItemIndex];
|
|
lSQL:= 'SELECT Nazev, UliceSCisly, Misto, PSC, ICO, DIC FROM ' + tblCOrg + ' WHERE CisloOrg=' + cOrgDod.ToString;
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
lblDodAdresa.Caption:= VarToStr(FieldValues(1));
|
|
lblDodMisto.Caption:= VarToStr(FieldValues(3)) + ' ' + VarToStr(FieldValues(2));
|
|
lblDodICO.Caption:= 'IČ ' + VarToStr(FieldValues(4));
|
|
lblDodDIC.Caption:= 'DIČ ' + VarToStr(FieldValues(5));
|
|
gbDodavatel.Caption:= ' Dodavatel: č.org. ' + cOrgDod.ToString + ' ';
|
|
NactiKarty;
|
|
end
|
|
else
|
|
begin
|
|
vTab.Filter:= 'K1=''999''';
|
|
vTab.Filtered:= true;
|
|
end;
|
|
polGrd.Enabled:= (cOrgDod>-1);
|
|
if (polGrd.Enabled) then
|
|
polGrd.DataSource.DataSet.First;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.edtNumEditorClick(Sender: TObject);
|
|
begin
|
|
edtNumEditor.Visible:= true;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
if (vTab.Active) then
|
|
vTab.Close;
|
|
if (tabExtOrdInfo<>'') and not(jeTest) then
|
|
Helios.ExecSQL('IF OBJECT_ID(N' + tabExtOrdInfo.QuotedString + ', N''U'') IS NOT NULL DROP TABLE ' + tabExtOrdInfo);
|
|
Action:= caFree;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.FormResize(Sender: TObject);
|
|
var i, ii, w: integer;
|
|
begin
|
|
|
|
for i:=0 to polGrd.Columns.Count-1 do
|
|
begin
|
|
for ii:=0 to Length(visCols)-1 do
|
|
if (visCols[ii].index=i) and (polGrd.Columns.Items[i].Visible) then
|
|
polGrd.Columns[i].Width:= Trunc(visCols[ii].koeficient * polGrd.Width);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure TformOrder2.FormShow(Sender: TObject);
|
|
var rHeight, i, ii: integer;
|
|
lSQL, podm: string;
|
|
m: TMonitor;
|
|
begin
|
|
UseLatestCommonDialogs:= true;
|
|
{
|
|
self.Top:= 0;
|
|
self.Left:= 0;
|
|
self.Height:= Screen.WorkAreaHeight-25;
|
|
self.Width:= Screen.WorkAreaWidth;
|
|
}
|
|
edtNumEditor.Height:= polGrd.RowHeight+2;
|
|
|
|
rDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) RadaDokladu FROM ' + tblDDZ + ' WHERE DruhPohybuZbo=6 AND StredNaklad=N' + Helios.Sklad.QuotedString);
|
|
if (rDokl='') then
|
|
begin
|
|
Helios.Error(#1'Chyba zjišťování řady dokladu VydObj'#1 + CRLF + '(nelze dohledat podle nákl.střediska)');
|
|
Close;
|
|
end;
|
|
|
|
idObd:= Helios.Obdobi;
|
|
dtZavoz.DateTime:= IncDay(Now, 1);
|
|
dtZavozChange(Sender);
|
|
|
|
lblInfo.Caption:= 'w: ' + Screen.WorkAreaWidth.ToString + ' / h: ' + Screen.WorkAreaHeight.ToString;
|
|
|
|
smtpProfil:= false;
|
|
idMailProfile:= 0;
|
|
with Helios.OpenSQL('SELECT ID FROM ' + tblUziv + ' WHERE EMailIDProfilu IS NOT NULL AND LoginName=SUSER_SNAME()') do
|
|
if (RecordCount=1) then
|
|
idMailProfile:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT EMailIDProfilu FROM ' + tblUziv + ' WHERE EMailIDProfilu IS NOT NULL AND LoginName=SUSER_SNAME()');
|
|
if (idMailProfile>0) then
|
|
with Helios.OpenSQL('SELECT ID FROM ' + tblMailProfil + ' WHERE ID=' + idMailProfile.ToString + ' AND TypRozhrani=2') do
|
|
if (RecordCount=1) then
|
|
smtpProfil:= true;
|
|
|
|
idBidVydObjHDC:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_DokladyZbozi''');
|
|
idTiskFormVydObjHDC:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev=N''Objednávka pekárna'' AND Aktivni=1 AND Skupina=' + idBidVydObjHDC.ToString);
|
|
|
|
ii:= 0;
|
|
SetLength(visCols, polGrd.VisibleColumns.Count);
|
|
for i:=0 to polGrd.Columns.Count-1 do
|
|
if (polGrd.Columns.Items[i].Visible) then
|
|
begin
|
|
visCols[ii].index:= i;
|
|
visCols[ii].koeficient:= RoundToEx(polGrd.Columns.Items[i].Width / polGrd.Width, -5);
|
|
Inc(ii);
|
|
end;
|
|
|
|
|
|
{
|
|
podm:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + idObd.ToString;
|
|
lSQL:= 'SELECT def.PosledniPC FROM ' + tblDDZ + ' d INNER JOIN ' + tblDDZdef + ' def ON (def.IDDruhDZ=d.ID) WHERE d.DruhPohybuZbo=6 AND def.IDObdobi=' + idObd.ToString;
|
|
lSQL:= lSQL + ' AND d.RadaDokladu=N' + rDokl.QuotedString;
|
|
|
|
lSQL:= 'DECLARE @ppc INT, @i INT' + CRLF + 'SET @ppc=ISNULL( (' + lSQL + '), 1)' + CRLF;
|
|
lSQL:= lSQL + 'EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=@ppc, @Kam=999999, @Where=N' + podm.QuotedString + ', @Returnem=1; SELECT @i';
|
|
cisloDokl:= helUtils.getHeliosStrVal(Helios, '0', lSQL);
|
|
|
|
edtCisloObj.ValueInt:= cisloDokl.ToInteger;
|
|
}
|
|
|
|
|
|
{
|
|
rDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) RadaDokladu FROM ' + tblDDZ + ' WHERE DruhPohybuZbo=6 AND StredNaklad=N' + Helios.Sklad.QuotedString);
|
|
if (rDokl='') then
|
|
begin
|
|
Helios.Error(#1'Chyba zjišťování řady dokladu VydObj'#1 + CRLF + '(nelze dohledat podle nákl.střediska)');
|
|
Close;
|
|
end;
|
|
|
|
lSQL:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + Helios.Obdobi.ToString;
|
|
lSQL:= 'DECLARE @i INT; EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=0, @Kam=999999, @Where=N' + lSQL.QuotedString + ', @Returnem=1; SELECT @i';
|
|
poradCislo:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
|
|
}
|
|
|
|
{
|
|
grd.RowCount:= 2;
|
|
grd.FixedRows:= 1;
|
|
|
|
rHeight:= grd.Canvas.TextHeight('Áý');
|
|
grd.DefaultRowHeight:= grd.Font.Size + 18;
|
|
|
|
// grd.RowHeights[1]:= grd.Canvas.TextHeight('Akce') + 4;
|
|
grd.Cells[0, 0]:= 'Akce';
|
|
grd.Cells[1, 0]:= 'Číslo';
|
|
grd.Cells[2, 0]:= 'Název';
|
|
grd.Cells[3, 0]:= 'Doporučeno';
|
|
grd.Cells[4, 0]:= 'Ráno';
|
|
grd.Cells[5, 0]:= 'Poledne';
|
|
}
|
|
|
|
branchID:= ZjistiBranchID;
|
|
cOrgDod:= -1;
|
|
|
|
lblDodAdresa.Caption:= '';
|
|
lblDodMisto.Caption:= '';
|
|
lblDodICO.Caption:= '';
|
|
lblDodDIC.Caption:= '';
|
|
|
|
cbxSortiment.Items.Clear;
|
|
|
|
lSQL:= 'SELECT DISTINCT(s.K1), ISNULL(e.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(e._priorita, 999)) AS PoradiSort FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1';
|
|
lSQL:= lSQL + ' AND ISNULL(e.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', 0)>0 GROUP BY s.K1, ISNULL(e.';
|
|
case branchID of
|
|
1: lSQL:= lSQL + '_PoradiObj_Klas1';
|
|
2: lSQL:= lSQL + '_PoradiObj_MozPi';
|
|
3: lSQL:= lSQL + '_PoradiObj_MozVod';
|
|
else
|
|
lSQL:= lSQL + '_priorita';
|
|
end;
|
|
lSQL:= lSQL + ', ISNULL(e._priorita, 999))';
|
|
|
|
|
|
lSQL:= 'SELECT DISTINCT(s.K1) FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1';
|
|
lSQL:= lSQL + ' GROUP BY s.K1';
|
|
|
|
with Helios.OpenSQL(lSQL) do
|
|
if (RecordCount>0) then
|
|
begin
|
|
SetLength(sortim, RecordCount);
|
|
i:= 0;
|
|
First;
|
|
while not(EOF) do
|
|
begin
|
|
cbxSortiment.Items.Add(helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString));
|
|
|
|
sortim[i].k1:= VarToStr(FieldValues(0));
|
|
// sortim[i].poradiSort:= VarToStr(FieldValues(1)).ToSingle;
|
|
sortim[i].nazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString);
|
|
|
|
sortim[i].poleDodav:= '';
|
|
sortim[i].typSort:= 255;
|
|
|
|
if (sortim[i].k1='001') then
|
|
begin
|
|
sortim[i].typSort:= 0;
|
|
sortim[i].poleDodav:= '_dodpek';
|
|
end;
|
|
|
|
if (sortim[i].k1='003') then
|
|
begin
|
|
sortim[i].typSort:= 1;
|
|
sortim[i].poleDodav:= '_dodlah';
|
|
end;
|
|
|
|
if (sortim[i].k1='004') then
|
|
begin
|
|
sortim[i].typSort:= 2;
|
|
sortim[i].poleDodav:= '_dodvelko';
|
|
end;
|
|
|
|
Inc(i);
|
|
Next;
|
|
end;
|
|
cbxSortiment.ItemIndex:= 0;
|
|
cbxSortimentChange(Sender);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
end.
|