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í zadáno umístìní na sklad !!'#1);
|
|
edtUmisteni.SetFocus;
|
|
end
|
|
else
|
|
begin
|
|
mnZmet:= 0;
|
|
if (mnExpedice=0) then
|
|
Helios.Info(#1'! Není zadáno MNO�STVÍ K EXPEDICI !'#1);
|
|
if ((mnVyroba+skladem)<mnExpedice) then
|
|
begin
|
|
Helios.Error(#1'Nemùžete expedovat víc než 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èítání 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.
|