Files
Polanskych-plgPolanskych/datModObj.pas
2025-09-05 12:22:48 +02:00

179 lines
5.0 KiB
ObjectPascal

unit datModObj;
interface
uses
System.SysUtils, System.Classes, MemTableDataEh, Data.DB, MemTableEh, ddPlugin_TLB, Vcl.ComCtrls;
const
CRLF = #13#10;
type
TdmObj = class(TDataModule)
vTabObj: TMemTableEh;
dsObj: TDataSource;
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;
vTabIDKZ: TIntegerField;
vTabSkupZbo: TStringField;
vTabDodavatel: TIntegerField;
vTabJenRano: TSmallintField;
vTabMinimum: TFloatField;
vTabDelitelnost: TFloatField;
vTabPoradi: TSingleField;
vTabK1K2: TStringField;
vTabPoradiSortNazev: TStringField;
procedure vTabRanoValidate(Sender: TField);
procedure vTabPoledneValidate(Sender: TField);
procedure vTabAfterPost(DataSet: TDataSet);
procedure vTabAfterDelete(DataSet: TDataSet);
private
public
Helios: IHelios;
procedure ZapisObjednavky(tbl: TMemTableEh; cOrgDod, cisloObj: integer; dt: TDatetimePicker);
end;
var
dmObj: TdmObj;
implementation
uses System.Variants, frmOrder2, frmOrder21024, frmOrder21366;
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
procedure TdmObj.ZapisObjednavky(tbl: TMemTableEh; cOrgDod, cisloObj: integer; dt: TDatetimePicker);
var lSQL: string;
idH, i: integer;
begin
if (tbl.RecordCount>0) then
begin
idH:= 0;
lSQL:= 'INSERT dbo._HDC_Objednavky (CisloOrg, IDSklad, CisloObj, DatPozadavek) SELECT ISNULL(TRY_PARSE(N' + cOrgDod.ToString.Replace(';', '').Replace('-','').Replace(' ', '').QuotedString;
lSQL:= lSQL + ' AS INT), 0), N' + Helios.Sklad.QuotedString + ', ' + cisloObj.ToString + ', CONVERT(datetime, N' + FormatDateTime('d.m.yyyy', dt.Date).QuotedString + ', 104)' + CRLF;
lSQL:= lSQL + 'SELECT SCOPE_IDENTITY()';
with Helios.OpenSQL(lSQL) do
idH:= VarToStr(FieldValues(0)).ToInteger;
tbl.DisableControls;
i:= tbl.RecNo;
tbl.First;
while not(tbl.Eof) do
begin
if (tbl.FieldByName('Rano').AsSingle>0) or (tbl.FieldByName('Poledne').AsSingle>0) then
begin
lSQL:= 'INSERT dbo._HDC_ObjednavkyR (IDHlava, IDZboSklad, MnRano, MnPoledne) SELECT ' + idH.ToString + ', ' + tbl.FieldByName('IDZboSklad').AsString;
lSQL:= lSQL + ', ' + tbl.FieldByName('Rano').AsSingle.ToString + ', ' + tbl.FieldByName('Poledne').AsSingle.ToString;
Helios.ExecSQL(lSQL);
end;
tbl.Next;
end;
tbl.RecNo:= i;
tbl.EnableControls;
end;
end;
procedure TdmObj.vTabAfterDelete(DataSet: TDataSet);
begin
if (formOrder2.Visible) then
formOrder2.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
if (formOrder21024.Visible) then
formOrder21024.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
if (formOrder21366.Visible) then
formOrder21366.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
end;
procedure TdmObj.vTabAfterPost(DataSet: TDataSet);
begin
if (formOrder2.Visible) then
formOrder2.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
if (formOrder21024.Visible) then
formOrder21024.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
if (formOrder21366.Visible) then
formOrder21366.btnVynulovat.Enabled:= (DataSet.RecordCount>0);
end;
procedure TdmObj.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 TdmObj.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;
end.