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)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.