487 lines
13 KiB
ObjectPascal
487 lines
13 KiB
ObjectPascal
unit frmVstupDat;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls,
|
||
Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, RzEdit, AdvTouchKeyboard, Vcl.ExtCtrls, IdHTTP, ddPlugin_TLB;
|
||
|
||
const
|
||
KLF_ACTIVATE = $00000001;
|
||
KLF_SETFORPROCESS = $00000100;
|
||
idScale = '5d370286e1780';
|
||
urlAPI = 'https://pd7wk7ht2l.execute-api.eu-central-1.amazonaws.com/alpha/scale';
|
||
|
||
type
|
||
TformVstupDat = class(TForm)
|
||
pnlCalc: TPanel;
|
||
tKeyb: TAdvTouchKeyboard;
|
||
edtVyroba: TRzNumericEdit;
|
||
edtExpedice: TRzNumericEdit;
|
||
btnOK: TButton;
|
||
btnStorno: TButton;
|
||
Label1: TLabel;
|
||
Label2: TLabel;
|
||
Label3: TLabel;
|
||
lblSkladem: TLabel;
|
||
lblNazev: TLabel;
|
||
Label4: TLabel;
|
||
edtUmisteni: TRzEdit;
|
||
Label5: TLabel;
|
||
edtHmotnost: TRzNumericEdit;
|
||
lblMDZ: TLabel;
|
||
btnDok: TButton;
|
||
btnVahaAPI: TButton;
|
||
procedure FormShow(Sender: TObject);
|
||
procedure edtVyrobaClick(Sender: TObject);
|
||
procedure edtExpediceClick(Sender: TObject);
|
||
procedure tKeybKeyClick(Sender: TObject; Index: Integer);
|
||
procedure tKeybKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure btnOKClick(Sender: TObject);
|
||
procedure btnStornoClick(Sender: TObject);
|
||
procedure btnCalcCloseClick(Sender: TObject);
|
||
procedure FormActivate(Sender: TObject);
|
||
procedure edtVyrobaEnter(Sender: TObject);
|
||
procedure edtExpediceEnter(Sender: TObject);
|
||
procedure edtUmisteniClick(Sender: TObject);
|
||
procedure edtHmotnostClick(Sender: TObject);
|
||
procedure btnDokClick(Sender: TObject);
|
||
procedure btnVahaAPIClick(Sender: TObject);
|
||
private
|
||
public
|
||
Helios: IHelios;
|
||
idKZ: Integer;
|
||
jeMDZ: boolean;
|
||
mnVyroba: Extended;
|
||
mnExpedice: Extended;
|
||
mnZmet: Extended;
|
||
hmot: Extended;
|
||
umisteni: string;
|
||
rekl: boolean;
|
||
fokus: byte;
|
||
end;
|
||
|
||
var
|
||
lSQL: string;
|
||
formVstupDat: TformVstupDat;
|
||
ctrl: byte;
|
||
numPadVal, skladem: extended;
|
||
exitKeyb: Boolean;
|
||
layName: array[0..KL_NAMELENGTH+1] of Char;
|
||
http: TIdCustomHTTP;
|
||
|
||
implementation
|
||
|
||
uses System.StrUtils, System.JSON, helUtils;
|
||
|
||
{$R *.dfm}
|
||
|
||
procedure TformVstupDat.btnCalcCloseClick(Sender: TObject);
|
||
begin
|
||
pnlCalc.Enabled:= false;
|
||
case ctrl of
|
||
1: edtUmisteni.SetFocus;
|
||
2: btnOK.SetFocus;
|
||
end;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.btnDokClick(Sender: TObject);
|
||
begin
|
||
if (idKZ>0) then
|
||
Helios.OpenBrowse(bidDok, 'TabDokumenty.ID IN (SELECT IDDok FROM ' + tblDokumVaz + ' WHERE IdentVazby=8 AND IDTab=' + idKZ.ToString + ')');
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.btnOKClick(Sender: TObject);
|
||
var lSQL: string;
|
||
begin
|
||
edtUmisteni.Text:= Trim(edtUmisteni.Text);
|
||
umisteni:= edtUmisteni.Text;
|
||
mnVyroba:= edtVyroba.Value;
|
||
mnExpedice:= edtExpedice.Value;
|
||
hmot:= edtHmotnost.Value;
|
||
|
||
if (mnVyroba-mnExpedice>0) and (umisteni='') then
|
||
begin
|
||
Helios.Error(#1'Nen<65> zad<61>no um<75>st<73>n<EFBFBD> na sklad !!'#1);
|
||
edtUmisteni.SetFocus;
|
||
end
|
||
else
|
||
begin
|
||
mnZmet:= 0;
|
||
if (mnExpedice=0) then
|
||
Helios.Info(#1'! Nen<65> zad<61>no MNO<4E>STV<54> K EXPEDICI !'#1);
|
||
if ((mnVyroba+skladem)<mnExpedice) then
|
||
begin
|
||
Helios.Error(#1'Nem<65><6D>ete expedovat v<>c ne<6E> m<>te z v<>roby a skladem.'#1);
|
||
edtExpedice.SetFocus;
|
||
end
|
||
else
|
||
begin
|
||
if (hmot>0) and (idKZ>0) then
|
||
begin
|
||
lSQL:= 'UPDATE ' + tblKZ + ' SET Hmotnost=' + StringReplace(hmot.ToString, ',', '.', [rfReplaceAll]) + ' WHERE ID=' + idKZ.ToString;
|
||
lSQL:= lSQL + ' AND Hmotnost<>' + StringReplace(hmot.ToString, ',', '.', [rfReplaceAll]);
|
||
Helios.ExecSQL(lSQL);
|
||
end;
|
||
ModalResult:= mrOk;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.btnStornoClick(Sender: TObject);
|
||
begin
|
||
ModalResult:= mrCancel;
|
||
end;
|
||
|
||
|
||
|
||
|
||
// 4x faster than dateutils version
|
||
function UNIXTimeToDateTimeFAST(UnixTime: LongWord): TDateTime;
|
||
begin
|
||
result:= (UnixTime/86400) + 25569;
|
||
end;
|
||
|
||
|
||
|
||
|
||
procedure TformVstupDat.btnVahaAPIClick(Sender: TObject);
|
||
var lSQL, data, datStamp, datX, datHmot: string;
|
||
hm: Extended;
|
||
JObj: TJSONObject;
|
||
dat: TDateTime;
|
||
begin
|
||
hm:= 0;
|
||
http:= TIdHTTP.Create(nil);
|
||
try
|
||
try
|
||
data:= http.Get(urlAPI + '/' + idScale);
|
||
if (data<>'') then
|
||
begin
|
||
JObj:= TJSONObject.ParseJSONValue(TEncoding.Default.GetBytes(data),0) as TJSONObject;
|
||
// datStamp:= JObj.Get('timestamp').JsonValue.Value;
|
||
// if (Length(datStamp)=13) then
|
||
// datStamp:= LeftStr(datStamp, 10);
|
||
// dat:= UNIXTimeToDateTimeFAST(StrToInt64(datStamp));
|
||
// dat:= UnixToDateTime(StrToInt64(datStamp));
|
||
datHmot:= JObj.Get('weight').JsonValue.Value; // v gramech
|
||
hm:= 0;
|
||
if not(TryStrToFloat(datHmot,hm)) then
|
||
hm:= 0;
|
||
hm:= hm/1000;
|
||
end;
|
||
except on E:Exception do
|
||
Helios.Error('Chyba na<6E><61>t<EFBFBD>n<EFBFBD> hmotnosti: ' + CRLF + #1 + E.Message + #1);
|
||
end;
|
||
finally
|
||
if Assigned(JObj) then
|
||
JObj.Free;
|
||
http.Free;
|
||
end;
|
||
edtHmotnost.Value:= hm;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtExpediceClick(Sender: TObject);
|
||
begin
|
||
edtVyroba.Color:= $f0f0f0;
|
||
edtUmisteni.Color:= $f0f0f0;
|
||
edtExpedice.Color:= clWebSalmon;
|
||
edtHmotnost.Color:= $f0f0f0;
|
||
if (jeMDZ) then
|
||
edtHmotnost.Color:= $33dfff;
|
||
pnlCalc.Enabled:= true;
|
||
ctrl:= 2;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtExpediceEnter(Sender: TObject);
|
||
begin
|
||
edtExpediceClick(Sender);
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtHmotnostClick(Sender: TObject);
|
||
begin
|
||
edtVyroba.Color:= $f0f0f0;
|
||
edtUmisteni.Color:= $f0f0f0;
|
||
edtExpedice.Color:= $f0f0f0;
|
||
edtHmotnost.Color:= clWebSalmon;
|
||
ctrl:= 3;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtUmisteniClick(Sender: TObject);
|
||
begin
|
||
edtVyroba.Color:= $f0f0f0;
|
||
edtUmisteni.Color:= clWebSalmon;
|
||
edtUmisteni.SetFocus;
|
||
edtExpedice.Color:= $f0f0f0;
|
||
edtHmotnost.Color:= $f0f0f0;
|
||
if (jeMDZ) then
|
||
edtHmotnost.Color:= $33dfff;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtVyrobaClick(Sender: TObject);
|
||
begin
|
||
edtVyroba.Color:= clWebSalmon;
|
||
edtVyroba.SetFocus;
|
||
edtUmisteni.Color:= $f0f0f0;
|
||
edtExpedice.Color:= $f0f0f0;
|
||
edtHmotnost.Color:= $f0f0f0;
|
||
if (jeMDZ) then
|
||
edtHmotnost.Color:= $33dfff;
|
||
pnlCalc.Enabled:= true;
|
||
ctrl:= 1;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.edtVyrobaEnter(Sender: TObject);
|
||
begin
|
||
edtVyrobaClick(Sender);
|
||
end;
|
||
|
||
|
||
|
||
|
||
procedure TformVstupDat.FormActivate(Sender: TObject);
|
||
begin
|
||
edtVyrobaClick(Sender);
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.FormClose(Sender: TObject; var Action: TCloseAction);
|
||
begin
|
||
if (layName[0]<>'') then
|
||
LoadKeyboardLayout(@layName, KLF_ACTIVATE or KLF_SETFORPROCESS);
|
||
Action:= caFree;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.FormShow(Sender: TObject);
|
||
var m, m2: extended;
|
||
s: integer;
|
||
lSQL: string;
|
||
begin
|
||
tKeyb.Width:= 430;
|
||
tKeyb.Height:= 395;
|
||
pnlCalc.Enabled:= false;
|
||
edtVyroba.Value:= mnVyroba;
|
||
edtExpedice.Color:= clOlive;
|
||
edtExpedice.Value:= mnExpedice;
|
||
edtHmotnost.Value:= hmot;
|
||
|
||
lblMDZ.Visible:= false;
|
||
edtUmisteni.Color:= $f0f0f0;
|
||
edtExpedice.Color:= $f0f0f0;
|
||
edtHmotnost.Color:= $f0f0f0;
|
||
|
||
if (rekl) then
|
||
lblMDZ.Caption:= 'REKLAMACE';
|
||
|
||
if (jeMDZ) or (rekl) then
|
||
begin
|
||
edtHmotnost.Color:= $33dfff;
|
||
lblMDZ.Visible:= true;
|
||
end;
|
||
|
||
if (idKZ>0) then
|
||
begin
|
||
lblNazev.Caption:= Trim(helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString));
|
||
edtUmisteni.Text:= umisteni;
|
||
s:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblSS + ' WHERE IDSklad=N''100'' AND IDKmenZbozi=' + idKZ.ToString);
|
||
if (s>0) then
|
||
begin
|
||
m:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ISNULL( (SELECT Mnozstvi FROM ' + tblSS + ' WHERE ID=' + s.ToString + '), 0)');
|
||
{
|
||
lSQL:= 'SELECT ISNULL( (SELECT SUM(Mnozstvi) FROM ' + tblPZ + ' WHERE SkutecneDatReal IS NULL AND DatPorizeni>=CONVERT(datetime,N''1.3.2019 00:00:01'',104)';
|
||
lSQL:= lSQL + ' AND DruhPohybuZbo IN (2,4) AND IDZboSklad=' + s.ToString + '), 0)';
|
||
}
|
||
// lSQL:= 'SELECT ISNULL( (SELECT MnozstviExp FROM dbo.hvw_StavSkladuProExpedici WHERE ID=' + s.ToString + '), 0)';
|
||
// m2:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
|
||
// skladem:= m-m2;
|
||
lSQL:= 'SELECT ISNULL( (SELECT MnozstviExp FROM dbo.hvw_StavSkladuProExpedici WHERE ID=' + s.ToString + '), 0)';
|
||
skladem:= helUtils.getHeliosFloatVal(Helios, 0, lSQL);
|
||
lblSkladem.Caption:= FormatFloat('#,##0', skladem);
|
||
end;
|
||
|
||
lSQL:= 'SELECT Hmotnost FROM ' + tblKZ + ' WHERE Hmotnost>0 AND ID=' + idKZ.ToString;
|
||
with Helios.OpenSQL(lSQL) do
|
||
if (RecordCount>0) then
|
||
edtHmotnost.Value:= StrToFloat(VarToStr(FieldValues(0)));
|
||
|
||
with Helios.OpenSQL('SELECT COUNT(*) FROM ' + tblDokumVaz + ' WHERE IdentVazby=8 AND IDTab=' + idKZ.ToString) do
|
||
btnDok.Visible:= (RecordCount>0);
|
||
end;
|
||
|
||
if GetKeyboardLayoutName(@layName) then
|
||
LoadKeyboardLayout('00020409', KLF_ACTIVATE or KLF_SETFORPROCESS);
|
||
|
||
http:= TIdHTTP.Create(nil);
|
||
try
|
||
try
|
||
http.Get(urlAPI + '/' + idScale, [404]);
|
||
except
|
||
btnVahaAPI.Visible:= false;
|
||
end;
|
||
finally
|
||
http.Free;
|
||
end;
|
||
btnVahaAPI.Visible:= false;
|
||
|
||
case fokus of
|
||
1: edtVyrobaClick(Sender);
|
||
2: edtUmisteniClick(Sender);
|
||
3: edtExpediceClick(Sender);
|
||
4: edtHmotnostClick(Sender);
|
||
end;
|
||
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.tKeybKeyClick(Sender: TObject; Index: Integer);
|
||
var i: integer;
|
||
lSQL, sql1, sql2: string;
|
||
desMisto, prepDesM: Boolean;
|
||
begin
|
||
prepDesM:= true;
|
||
if (Index<15) then
|
||
begin
|
||
if (Index=9) then
|
||
begin
|
||
case ctrl of
|
||
1: edtVyroba.Value:= 0;
|
||
2: edtExpedice.Value:= 0;
|
||
3: edtHmotnost.Value:= 0;
|
||
end;
|
||
end;
|
||
|
||
i:= -1;
|
||
case Index of
|
||
0: i:= 7;
|
||
1: i:= 8;
|
||
2: i:= 9;
|
||
3: i:= 4;
|
||
4: i:= 5;
|
||
5: i:= 6;
|
||
6: i:= 1;
|
||
7: i:= 2;
|
||
8: i:= 3;
|
||
// 9: edtNumVal.Value:= 0;
|
||
10: i:= 0;
|
||
11: begin
|
||
i:= 100;
|
||
prepDesM:= false;
|
||
desMisto:= true;
|
||
end;
|
||
end;
|
||
if (i>=0) then
|
||
begin
|
||
case ctrl of
|
||
1: begin
|
||
if (edtVyroba.Value=0) then
|
||
edtVyroba.IntValue:= i
|
||
else
|
||
edtVyroba.IntValue:= StrToInt(Trim(StringReplace(StringReplace(edtVyroba.Text,#160,'',[rfReplaceAll]),' ','',[rfReplaceAll])) + IntToStr(i));
|
||
edtVyroba.SelStart:= Length(edtVyroba.Text);
|
||
end;
|
||
2: begin
|
||
if (edtExpedice.Value=0) then
|
||
edtExpedice.IntValue:= i
|
||
else
|
||
edtExpedice.IntValue:= StrToInt(Trim(StringReplace(StringReplace(edtExpedice.Text,#160,'',[rfReplaceAll]),' ','',[rfReplaceAll])) + IntToStr(i));
|
||
edtExpedice.SelStart:= Length(edtExpedice.Text);
|
||
end;
|
||
3: begin
|
||
if (prepDesM) then
|
||
desMisto:= Pos(',', edtHmotnost.Text)>0;
|
||
if (edtHmotnost.Value=0) then
|
||
begin
|
||
if (i<100) and (desMisto=false) then
|
||
edtHmotnost.IntValue:= i
|
||
else
|
||
if (i<100) then
|
||
edtHmotnost.Text:= edtHmotnost.Text + IntToStr(i)
|
||
else
|
||
edtHmotnost.Text:= '0,';
|
||
end
|
||
else
|
||
begin
|
||
if (desMisto) then
|
||
begin
|
||
if (i=100) and (Pos(',', edtHmotnost.Text)=0) then
|
||
{
|
||
begin
|
||
edtHmotnost.Value:= StrToFloat(Trim(StringReplace(StringReplace(edtHmotnost.Text,#160,'',[rfReplaceAll]),' ','',[rfReplaceAll])) + ',' + IntToStr(i));
|
||
desMisto:= false;
|
||
end
|
||
else
|
||
}
|
||
edtHmotnost.Text:= edtHmotnost.Text + ',';
|
||
if (i<100) then
|
||
edtHmotnost.Text:= edtHmotnost.Text + IntToStr(i);
|
||
end
|
||
else
|
||
edtHmotnost.Value:= StrToFloat(Trim(StringReplace(StringReplace(edtHmotnost.Text,#160,'',[rfReplaceAll]),' ','',[rfReplaceAll])) + IntToStr(i));
|
||
end;
|
||
edtHmotnost.SelStart:= Length(edtHmotnost.Text);
|
||
end;
|
||
end;
|
||
end;
|
||
end
|
||
else
|
||
begin
|
||
{
|
||
case ctrl of
|
||
1: if (t1-t2)<10 then
|
||
edtVyroba.Value:= 0;
|
||
2: if (t1-t2)<10 then
|
||
edtExpedice.Value:= 0;
|
||
end;
|
||
}
|
||
end;
|
||
end;
|
||
|
||
|
||
|
||
procedure TformVstupDat.tKeybKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
var i: integer;
|
||
begin
|
||
{
|
||
case Key of
|
||
13: i:= 11;
|
||
46: i:= 9;
|
||
48: i:= 10; // 0
|
||
49: i:= 6;
|
||
50: i:= 7;
|
||
51: i:= 8;
|
||
52: i:= 3;
|
||
53: i:= 4;
|
||
54: i:= 5;
|
||
55: i:= 0;
|
||
56: i:= 1;
|
||
57: i:= 9;
|
||
end;
|
||
tKeybKeyClick(Sender, i);
|
||
}
|
||
end;
|
||
|
||
end.
|