Files
Kdynium-plgKdynium/frmVstupDat.pas
2025-05-21 21:19:51 +02:00

487 lines
13 KiB
ObjectPascal
Raw Blame History

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.