406 lines
15 KiB
ObjectPascal
406 lines
15 KiB
ObjectPascal
unit OrderMst;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||
wItem,
|
||
FireDAC.Stan.Intf,
|
||
FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,
|
||
FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,
|
||
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
|
||
FireDAC.Phys.PGDef, FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.PG,
|
||
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
|
||
|
||
type
|
||
TOrderMst = class(TwItem)
|
||
private
|
||
{ Private declarations }
|
||
FOrdNum: string;
|
||
FOrdDate: string;
|
||
FCustName: string;
|
||
FConnPerson: string;
|
||
FDeliveryDate: string;
|
||
FWarehouse: string;
|
||
FQty: string;
|
||
FUnitt: string;
|
||
FUnitPrice: string;
|
||
FAmount: string;
|
||
FDescriptions: string;
|
||
FProcStatus: string;
|
||
FScheDate: string;
|
||
FProcDesc: string;
|
||
FProcName: string;
|
||
|
||
FProcCost: string;
|
||
FOutInfo: string;
|
||
FOutDate: string;
|
||
FTaxDate: string;
|
||
FInAmoDate: string;
|
||
|
||
FqSubList: TList;
|
||
protected
|
||
{ Protected declarations }
|
||
public
|
||
{ Public declarations }
|
||
property qSubList: TList read FqSubList write FqSubList;
|
||
|
||
constructor Create(AOwner: TObject);// override;
|
||
destructor Destroy; override;
|
||
class function xAddSqlMark(velStr: string): string;
|
||
class function xGetStrSqlOrderToSubList(AQuery: TFDQuery; cust, status, stDate, enDate: string): TList;
|
||
class function LoadFromQuery(AQuery: TFDQuery): TList;
|
||
class function xGetObjsProdScheOrderList(AQuery: TFDQuery; scheStatus, stDate, enDate: string): TList;
|
||
class function LoadFromSingleQuery(AQuery: TFDQuery): TList;
|
||
function xGetObjsSubOrderList(AQuery: TFDQuery): TList;
|
||
function LoadFromQueryToSubOrder(AQuery: TFDQuery): TList;
|
||
|
||
class function xGetOrderMstLastNumber(AQuery: TFDQuery; column: string): string;
|
||
class function LoadFromStringsQuery(AQuery: TFDQuery; column: string): TStrings;
|
||
published
|
||
{ Published declarations }
|
||
property OrdNum: string read FOrdNum write FOrdNum;
|
||
property OrdDate: string read FOrdDate write FOrdDate;
|
||
property CustName: string read FCustName write FCustName;
|
||
property ConnPerson: string read FConnPerson write FConnPerson;
|
||
property DeliveryDate: string read FDeliveryDate write FDeliveryDate;
|
||
property Warehouse: string read FWarehouse write FWarehouse;
|
||
property Qty: string read FQty write FQty;
|
||
property Unitt: string read FUnitt write FUnitt;
|
||
property UnitPrice: string read FUnitPrice write FUnitPrice;
|
||
property Amount: string read FAmount write FAmount;
|
||
property Descriptions: string read FDescriptions write FDescriptions;
|
||
property ProcStatus: string read FProcStatus write FProcStatus;
|
||
property ScheDate: string read FScheDate write FScheDate;
|
||
property ProcDesc: string read FProcDesc write FProcDesc;
|
||
property ProcName: string read FProcName write FProcName;
|
||
|
||
property ProcCost: string read FProcCost write FProcCost;
|
||
property OutInfo: string read FOutInfo write FOutInfo;
|
||
property OutDate: string read FOutDate write FOutDate;
|
||
property TaxDate: string read FTaxDate write FTaxDate;
|
||
property InAmoDate: string read FInAmoDate write FInAmoDate;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
SubOrder;
|
||
|
||
{ TOrderMst }
|
||
|
||
constructor TOrderMst.Create(AOwner: TObject);
|
||
begin
|
||
FqSubList := TList.Create;
|
||
end;
|
||
|
||
destructor TOrderMst.Destroy;
|
||
var
|
||
i: Integer;
|
||
tmpObj: TObject;
|
||
begin
|
||
if FqSubList <> nil then begin
|
||
i := 0;
|
||
while i < FqSubList.Count do begin
|
||
tmpObj := FqSubList.Items[i];
|
||
if tmpObj <> nil then tmpObj.Free;
|
||
tmpObj := nil;
|
||
FqSubList.Delete(i);
|
||
end;
|
||
FqSubList.Free; FqSubList:=nil;
|
||
end;
|
||
|
||
inherited;
|
||
end;
|
||
|
||
class function TOrderMst.LoadFromQuery(AQuery: TFDQuery): TList;
|
||
var
|
||
i, idx, nidx: Integer;
|
||
valName, fieName, obidVal: string;
|
||
curOrd, tmpOrd: TOrderMst;
|
||
curSub: TSubOrder;
|
||
begin
|
||
Result := TList.Create;
|
||
|
||
AQuery.First;
|
||
//<2F>ߺ<EFBFBD> <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3>..
|
||
nidx := -1;
|
||
for i := 0 to AQuery.FieldCount-1 do begin
|
||
fieName := AQuery.Fields[i].FieldName;
|
||
if Pos('_1',fieName) > 0 then begin
|
||
nidx := i;
|
||
Break;
|
||
end;
|
||
end;
|
||
|
||
AQuery.First;
|
||
while not AQuery.Eof do begin
|
||
obidVal := AQuery.FieldByName('OBID').AsString;
|
||
//<2F>ߺ<EFBFBD> <20><>ü ã<><C3A3>..
|
||
idx := -1;
|
||
for i := 0 to Result.Count - 1 do begin
|
||
tmpOrd := TOrderMst(Result[i]);
|
||
if SameText(obidVal, tmpOrd.OBID) then begin
|
||
idx := i;
|
||
Break;
|
||
end;
|
||
end;
|
||
|
||
if idx = -1 then begin
|
||
curOrd := TOrderMst.Create(nil);
|
||
for i := 0 to nidx-1 do begin
|
||
fieName := AQuery.Fields[i].FieldName;
|
||
valName := AQuery.Fields[i].AsString;
|
||
if SameText(fieName, 'OBID') then curOrd.OBID := valName
|
||
else if SameText(fieName, 'Name') then curOrd.Name := valName
|
||
else if SameText(fieName, 'wClassName') then curOrd.wClassName := valName
|
||
else if SameText(fieName, 'CreateDate') then curOrd.CreateDate := valName
|
||
else if SameText(fieName, 'CreateTime') then curOrd.CreateTime := valName
|
||
else if SameText(fieName, 'CreatorID') then curOrd.CreatorID := valName
|
||
else if SameText(fieName, 'IsValid') then curOrd.IsValid := valName
|
||
else if SameText(fieName, 'LcStatus') then curOrd.LcStatus := valName
|
||
|
||
else if SameText(fieName, 'OrdNum') then curOrd.OrdNum := valName
|
||
else if SameText(fieName, 'OrdDate') then curOrd.OrdDate := valName
|
||
else if SameText(fieName, 'CustName') then curOrd.CustName := valName
|
||
else if SameText(fieName, 'ConnPerson') then curOrd.ConnPerson := valName
|
||
else if SameText(fieName, 'DeliveryDate') then curOrd.DeliveryDate := valName
|
||
else if SameText(fieName, 'Warehouse') then curOrd.Warehouse := valName
|
||
else if SameText(fieName, 'Qty') then curOrd.Qty := valName
|
||
else if SameText(fieName, 'Unitt') then curOrd.Unitt := valName
|
||
else if SameText(fieName, 'UnitPrice') then curOrd.UnitPrice := valName
|
||
else if SameText(fieName, 'Amount') then curOrd.Amount := valName
|
||
else if SameText(fieName, 'Descriptions') then curOrd.Descriptions := valName
|
||
else if SameText(fieName, 'ProcStatus') then curOrd.ProcStatus := valName
|
||
else if SameText(fieName, 'ScheDate') then curOrd.ScheDate := valName
|
||
else if SameText(fieName, 'ProcName') then curOrd.ProcName := valName
|
||
else if SameText(fieName, 'ProcDesc') then curOrd.ProcDesc := valName
|
||
|
||
else if SameText(fieName, 'ProcCost') then curOrd.ProcCost := valName
|
||
else if SameText(fieName, 'OutInfo') then curOrd.OutInfo := valName
|
||
else if SameText(fieName, 'OutDate') then curOrd.OutDate := valName
|
||
else if SameText(fieName, 'TaxDate') then curOrd.TaxDate := valName
|
||
else if SameText(fieName, 'InAmoDate') then curOrd.InAmoDate := valName;
|
||
end;
|
||
Result.Add(curOrd);
|
||
end else begin
|
||
curOrd := TOrderMst(Result.Items[idx]);
|
||
end;
|
||
|
||
curSub := TSubOrder.Create(nil);
|
||
for i := nidx to AQuery.FieldCount-1 do begin
|
||
fieName := StringReplace(AQuery.Fields[i].FieldName, '_1', '', [rfReplaceAll]);
|
||
valName := AQuery.Fields[i].AsString;
|
||
if SameText(fieName, 'OBID') then curSub.OBID := valName
|
||
else if SameText(fieName, 'Name') then curSub.Name := valName
|
||
else if SameText(fieName, 'wClassName') then curSub.wClassName := valName
|
||
else if SameText(fieName, 'CreateDate') then curSub.CreateDate := valName
|
||
else if SameText(fieName, 'CreateTime') then curSub.CreateTime := valName
|
||
else if SameText(fieName, 'CreatorID') then curSub.CreatorID := valName
|
||
else if SameText(fieName, 'IsValid') then curSub.IsValid := valName
|
||
else if SameText(fieName, 'LcStatus') then curSub.LcStatus := valName
|
||
|
||
else if SameText(fieName, 'OrdNum') then curSub.OrdNum := valName
|
||
else if SameText(fieName, 'OrdCode') then curSub.OrdCode := valName
|
||
else if SameText(fieName, 'Qty') then curSub.Qty := valName
|
||
else if SameText(fieName, 'Unitt') then curSub.Unitt := valName
|
||
else if SameText(fieName, 'UnitPrice') then curSub.UnitPrice := valName
|
||
else if SameText(fieName, 'Amount') then curSub.Amount := valName;
|
||
end;
|
||
curOrd.qSubList.Add(curSub);
|
||
|
||
AQuery.Next;
|
||
end;
|
||
end;
|
||
|
||
function TOrderMst.LoadFromQueryToSubOrder(AQuery: TFDQuery): TList;
|
||
var
|
||
curSub: TSubOrder;
|
||
begin
|
||
while not AQuery.Eof do begin
|
||
curSub := TSubOrder.Create(nil);
|
||
curSub.OBID := AQuery.FieldByName('OBID').AsString;
|
||
curSub.Name := AQuery.FieldByName('Name').AsString;
|
||
curSub.wClassName := AQuery.FieldByName('wClassName').AsString;
|
||
curSub.CreateDate := AQuery.FieldByName('CreateDate').AsString;
|
||
curSub.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime);
|
||
curSub.CreatorID := AQuery.FieldByName('CreatorID').AsString;
|
||
curSub.IsValid := AQuery.FieldByName('IsValid').AsString;
|
||
curSub.LcStatus := AQuery.FieldByName('LcStatus').AsString;
|
||
|
||
curSub.OrdNum := AQuery.FieldByName('OrdNum').AsString;
|
||
curSub.OrdCode := AQuery.FieldByName('OrdCode').AsString;
|
||
curSub.Qty := AQuery.FieldByName('Qty').AsString;
|
||
curSub.Unitt := AQuery.FieldByName('Unitt').AsString;
|
||
curSub.UnitPrice := AQuery.FieldByName('UnitPrice').AsString;
|
||
curSub.Amount := AQuery.FieldByName('Amount').AsString;
|
||
qSubList.Add(curSub);
|
||
|
||
AQuery.Next;
|
||
end;
|
||
end;
|
||
|
||
class function TOrderMst.LoadFromSingleQuery(AQuery: TFDQuery): TList;
|
||
var
|
||
curOrd: TOrderMst;
|
||
begin
|
||
Result := TList.Create;
|
||
while not AQuery.Eof do begin
|
||
curOrd := TOrderMst.Create(nil);
|
||
curOrd.OBID := AQuery.FieldByName('OBID').AsString;
|
||
curOrd.Name := AQuery.FieldByName('Name').AsString;
|
||
curOrd.wClassName := AQuery.FieldByName('wClassName').AsString;
|
||
curOrd.CreateDate := AQuery.FieldByName('CreateDate').AsString;
|
||
curOrd.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime);
|
||
curOrd.CreatorID := AQuery.FieldByName('CreatorID').AsString;
|
||
curOrd.IsValid := AQuery.FieldByName('IsValid').AsString;
|
||
curOrd.LcStatus := AQuery.FieldByName('LcStatus').AsString;
|
||
|
||
curOrd.OrdNum := AQuery.FieldByName('OrdNum').AsString;
|
||
curOrd.OrdDate := AQuery.FieldByName('OrdDate').AsString;
|
||
curOrd.CustName := AQuery.FieldByName('CustName').AsString;
|
||
curOrd.ConnPerson := AQuery.FieldByName('ConnPerson').AsString;
|
||
curOrd.DeliveryDate := AQuery.FieldByName('DeliveryDate').AsString;
|
||
curOrd.Warehouse := AQuery.FieldByName('Warehouse').AsString;
|
||
curOrd.Qty := AQuery.FieldByName('Qty').AsString;
|
||
curOrd.Unitt := AQuery.FieldByName('Unitt').AsString;
|
||
curOrd.UnitPrice := AQuery.FieldByName('UnitPrice').AsString;
|
||
curOrd.Amount := AQuery.FieldByName('Amount').AsString;
|
||
curOrd.Descriptions := AQuery.FieldByName('Descriptions').AsString;
|
||
curOrd.ProcStatus := AQuery.FieldByName('ProcStatus').AsString;
|
||
curOrd.ScheDate := AQuery.FieldByName('ScheDate').AsString;
|
||
curOrd.ProcDesc := AQuery.FieldByName('ProcDesc').AsString;
|
||
curOrd.ProcName := AQuery.FieldByName('ProcName').AsString;
|
||
|
||
curOrd.ProcCost := AQuery.FieldByName('ProcCost').AsString;
|
||
curOrd.OutInfo := AQuery.FieldByName('OutInfo').AsString;
|
||
curOrd.OutDate := AQuery.FieldByName('OutDate').AsString;
|
||
curOrd.TaxDate := AQuery.FieldByName('TaxDate').AsString;
|
||
curOrd.InAmoDate := AQuery.FieldByName('InAmoDate').AsString;
|
||
|
||
Result.Add(curOrd);
|
||
|
||
AQuery.Next;
|
||
end;
|
||
end;
|
||
|
||
class function TOrderMst.LoadFromStringsQuery(AQuery: TFDQuery;
|
||
column: string): TStrings;
|
||
var
|
||
valStr: string;
|
||
begin
|
||
Result := TStringList.Create;
|
||
while not AQuery.Eof do begin
|
||
valStr := AQuery.FieldByName(column).AsString;
|
||
Result.Add(valStr);
|
||
|
||
AQuery.Next;
|
||
end;
|
||
end;
|
||
|
||
class function TOrderMst.xAddSqlMark(velStr: string): string;
|
||
begin
|
||
Result := '';
|
||
Result := '''' + velStr + '''';
|
||
end;
|
||
|
||
class function TOrderMst.xGetObjsProdScheOrderList(AQuery: TFDQuery; scheStatus,
|
||
stDate, enDate: string): TList;
|
||
var
|
||
sql: string;
|
||
begin
|
||
Result := nil;
|
||
sql := 'SELECT * FROM "OrderMst"';
|
||
sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t');
|
||
if Length(Trim(scheStatus)) > 0 then sql := sql + ' AND "ProcStatus"=' + xAddSqlMark(scheStatus);
|
||
if Length(Trim(stDate)) > 0 then begin
|
||
sql := sql + ' AND "ScheDate">=' + xAddSqlMark(stDate);
|
||
sql := sql + ' AND "ScheDate"<=' + xAddSqlMark(enDate);
|
||
end;
|
||
|
||
try
|
||
AQuery.Close;
|
||
AQuery.SQL.Text := sql;
|
||
AQuery.Open;
|
||
except
|
||
on E: Exception do ShowMessage('xGetObjsProdScheOrderList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
|
||
end;
|
||
Result := LoadFromSingleQuery(AQuery);
|
||
end;
|
||
|
||
function TOrderMst.xGetObjsSubOrderList(AQuery: TFDQuery): TList;
|
||
var
|
||
sql: string;
|
||
begin
|
||
Result := nil;
|
||
sql := 'SELECT obj2.* FROM "OrderMst"obj0, "OrderMstSubR"obj1, "SubOrder"obj2';
|
||
sql := sql + ' WHERE obj0."IsValid"=' + xAddSqlMark('t');
|
||
sql := sql + ' AND obj0."OBID"=' + xAddSqlMark(OBID);
|
||
sql := sql + ' AND obj1."IsValid"=' + xAddSqlMark('t');
|
||
sql := sql + ' AND obj1."LOBID"=obj0."OBID"';
|
||
sql := sql + ' AND obj2."IsValid"=' + xAddSqlMark('t');
|
||
sql := sql + ' AND obj2."OBID"=obj1."ROBID"';
|
||
|
||
try
|
||
AQuery.Close;
|
||
AQuery.SQL.Text := sql;
|
||
AQuery.Open;
|
||
except
|
||
on E: Exception do ShowMessage('xGetObjsSubOrderList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
|
||
end;
|
||
Result := LoadFromQueryToSubOrder(AQuery);
|
||
end;
|
||
|
||
class function TOrderMst.xGetOrderMstLastNumber(AQuery: TFDQuery; column: string): string;
|
||
var
|
||
sql: string;
|
||
resStrs: TStrings;
|
||
begin
|
||
Result := '';
|
||
sql := 'SELECT COUNT(*) FROM "OrderMst"';
|
||
try
|
||
AQuery.Close;
|
||
AQuery.SQL.Text := sql;
|
||
AQuery.Open;
|
||
except
|
||
on E: Exception do ShowMessage('xGetOrderMstLastNumber <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
|
||
end;
|
||
resStrs := LoadFromStringsQuery(AQuery, column);
|
||
if resStrs.Count > 0 then begin
|
||
Result := resStrs.Strings[0];
|
||
end;
|
||
resStrs.Free;
|
||
end;
|
||
|
||
class function TOrderMst.xGetStrSqlOrderToSubList(AQuery: TFDQuery; cust,
|
||
status, stDate, enDate: string): TList;
|
||
var
|
||
sql: string;
|
||
begin
|
||
Result := nil;
|
||
sql := 'SELECT obj0.*, obj2.* FROM "OrderMst"obj0, "OrderMstSubR"obj1, "SubOrder"obj2';
|
||
sql := sql + ' WHERE obj0."IsValid"=' + xAddSqlMark('t');
|
||
if Length(Trim(cust)) > 0 then sql := sql + ' AND obj0."CustName"=' + xAddSqlMark(cust);
|
||
if Length(Trim(status)) > 0 then sql := sql + ' AND obj0."LcStatus"=' + xAddSqlMark(status);
|
||
if Length(Trim(stDate)) > 0 then begin
|
||
sql := sql + ' AND obj0."OrdDate">=' + xAddSqlMark(stDate);
|
||
sql := sql + ' AND obj0."OrdDate"<=' + xAddSqlMark(enDate);
|
||
end;
|
||
sql := sql + ' AND obj1."IsValid"=' + xAddSqlMark('t');
|
||
sql := sql + ' AND obj1."LOBID"=obj0."OBID"';
|
||
sql := sql + ' AND obj2."IsValid"=' + xAddSqlMark('t');
|
||
sql := sql + ' AND obj2."OBID"=obj1."ROBID"';
|
||
|
||
try
|
||
AQuery.Close;
|
||
AQuery.SQL.Text := sql;
|
||
AQuery.Open;
|
||
except
|
||
on E: Exception do ShowMessage('xGetStrSqlOrderToSubList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: ' + E.Message);
|
||
end;
|
||
Result := LoadFromQuery(AQuery);
|
||
end;
|
||
|
||
end.
|
||
|