123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- unit BillsCommand;
- interface
- uses
- BillsMeasureDm, PhaseData, BillsTree,
- sdDB, Classes, SysUtils;
- type
- TBillsCalculate = class
- private
- FBillsMeasureData: TBillsMeasureData;
- FPhaseData: TPhaseData;
- procedure ClearNodeCacheData(ANode: TBillsIDTreeNode);
- procedure ClearCacheData;
- procedure UpdateNodeCacheData(ABillsID: Integer; Rec: TsdDataRecord);
- procedure GatherPhaseData(APhaseData: TPhaseData);
- procedure GatherAllPhaseData;
- procedure WriteNodeGatherData(ANode: TBillsIDTreeNode);
- procedure WriteGatherData;
- public
- constructor Create(ABillsMeasureData: TBillsMeasureData);
- destructor Destroy; override;
- procedure Execute;
- end;
- implementation
- uses
- ProjectData, StageDm;
- { TBillsCalculate }
- procedure TBillsCalculate.ClearCacheData;
- begin
- ClearNodeCacheData(TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.FirstNode));
- end;
- procedure TBillsCalculate.ClearNodeCacheData(ANode: TBillsIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- ANode.DealQuantity := 0;
- ANode.DealTotalPrice := 0;
- ANode.QcQuantity := 0;
- ANode.QcTotalPrice := 0;
- ANode.PcQuantity := 0;
- ANode.PcTotalPrice := 0;
- ANode.GatherQuantity := 0;
- ANode.GatherTotalPrice := 0;
- ClearNodeCacheData(TBillsIDTreeNode(ANode.FirstChild));
- ClearNodeCacheData(TBillsIDTreeNode(ANode.NextSibling));
- end;
- constructor TBillsCalculate.Create(ABillsMeasureData: TBillsMeasureData);
- begin
- FBillsMeasureData := ABillsMeasureData;
- end;
- destructor TBillsCalculate.Destroy;
- begin
- inherited;
- end;
- procedure TBillsCalculate.Execute;
- begin
- ClearCacheData;
- GatherAllPhaseData;
- WriteGatherData;
- end;
- procedure TBillsCalculate.GatherAllPhaseData;
- var
- iIndex: Integer;
- begin
- with TProjectData(FBillsMeasureData.ProjectData) do
- for iIndex :=1 to ProjProperties.PhaseCount do
- if iIndex = PhaseIndex then
- GatherPhaseData(PhaseData)
- else
- begin
- FPhaseData := TPhaseData.Create(FBillsMeasureData.ProjectData);
- try
- FPhaseData.Open(Format('%sPhase%d.dat', [TempPath, iIndex]));
- GatherPhaseData(FPhaseData);
- finally
- FPhaseData.Free;
- end;
- end;
- end;
- procedure TBillsCalculate.GatherPhaseData(APhaseData: TPhaseData);
- var
- iIndex: Integer;
- Rec: TsdDataRecord;
- StageData: TStageData;
- bIsNew: Boolean;
- begin
- bIsNew := not APhaseData.IsLastStage;
- if bIsNew then
- begin
- StageData := TStageData.Create(APhaseData);
- StageData.TableName := APhaseData.StageTableName[APhaseData.AuditCount];
- StageData.Open(APhaseData.ADOConnection);
- end
- else
- StageData := APhaseData.StageData;
- try
- if not bIsNew and not APhaseData.PhaseProperty.FinalAudit then
- StageData.CalculateAll;
- for iIndex := 0 to StageData.sddStage.RecordCount - 1 do
- begin
- Rec := StageData.sddStage.Records[iIndex];
- UpdateNodeCacheData(Rec.ValueByName('BillsID').AsInteger, Rec);
- end;
- finally
- if bIsNew then
- StageData.Free;
- end;
- end;
- procedure TBillsCalculate.UpdateNodeCacheData(ABillsID: Integer; Rec: TsdDataRecord);
- var
- vNode: TBillsIDTreeNode;
- begin
- vNode := TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.FindNode(ABillsID));
- if not Assigned(vNode) then Exit;
- if not vNode.HasChildren then
- begin
- vNode.DealQuantity := vNode.DealQuantity + Rec.ValueByName('DealQuantity').AsFloat;
- vNode.QcQuantity := vNode.QcQuantity + Rec.ValueByName('QcQuantity').AsFloat;
- vNode.PcQuantity := vNode.PcQuantity + Rec.ValueByName('PcQuantity').AsFloat;
- end;
- vNode.GatherQuantity := vNode.GatherQuantity + Rec.ValueByName('DealQuantity').AsFloat
- + Rec.ValueByName('QcQuantity').AsFloat;
- vNode.DealTotalPrice := vNode.DealTotalPrice + Rec.ValueByName('DealTotalPrice').AsFloat;
- vNode.QcTotalPrice := vNode.QcTotalPrice + Rec.ValueByName('QcTotalPrice').AsFloat;
- vNode.PcTotalPrice := vNode.PcTotalPrice + Rec.ValueByName('PcTotalPrice').AsFloat;
- vNode.GatherTotalPrice := vNode.GatherTotalPrice + Rec.ValueByName('DealTotalPrice').AsFloat
- + Rec.ValueByName('QcTotalPrice').AsFloat
- + Rec.ValueByName('PcTotalPrice').AsFloat;
- //UpdateNodeCacheData(vNode.ParentID, Rec);
- end;
- procedure TBillsCalculate.WriteGatherData;
- begin
- WriteNodeGatherData(TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.FirstNode));
- end;
- procedure TBillsCalculate.WriteNodeGatherData(ANode: TBillsIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- ANode.Rec.ValueByName('AddDealQuantity').AsFloat := ANode.DealQuantity;
- ANode.Rec.ValueByName('AddDealTotalPrice').AsFloat := ANode.DealTotalPrice;
- ANode.Rec.ValueByName('AddQcQuantity').AsFloat := ANode.QcQuantity;
- ANode.Rec.ValueByName('AddQcTotalPrice').AsFloat := ANode.QcTotalPrice;
- ANode.Rec.ValueByName('AddPcQuantity').AsFloat := ANode.PcQuantity;
- ANode.Rec.ValueByName('AddPcTotalPrice').AsFloat := ANode.PcTotalPrice;
- ANode.Rec.ValueByName('AddGatherQuantity').AsFloat := ANode.GatherQuantity;
- ANode.Rec.ValueByName('AddGatherTotalPrice').AsFloat := ANode.GatherTotalPrice;
- WriteNodeGatherData(TBillsIDTreeNode(ANode.FirstChild));
- WriteNodeGatherData(TBillsIDTreeNode(ANode.NextSibling));
- end;
- end.
|