| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | 
							- unit rmDealInfosDm;
 
- interface
 
- uses
 
-   SysUtils, Classes, DB, DBClient, rmSelectProjectFrm, ProjectData,
 
-   ZhAPI, sdDB, sdIDTree;
 
- type
 
-   TInfoNode = class
 
-   private
 
-     // 合同类别
 
-     FDealType: string;
 
-     // 合同编号
 
-     FDealCode: string;
 
-     // 结算书编号
 
-     FBalanceCode: string;
 
-     // 合同名称
 
-     FDealName: string;
 
-     // 签订单位
 
-     FDealCompany: string;
 
-     // 合同金额
 
-     FDealTotalPrice: Double;
 
-     // 结算金额
 
-     FFinalTotalPrice: Double;
 
-     // 累计应扣款
 
-     FCutTotalPrice: Double;
 
-     // 累计已支付
 
-     FPaidTotalPrice: Double;
 
-     // 签约合同价 (单合同:取项目属性签约合同价,多合同:取0号台账合同)
 
-     FContractPrice: Double;
 
-   public
 
-     constructor Create;
 
-   end;
 
-   TrmDealInfosData = class(TDataModule)
 
-     cdsDealInfos: TClientDataSet;
 
-     cdsDealInfosDealType: TWideStringField;
 
-     cdsDealInfosDealCode: TWideStringField;
 
-     cdsDealInfosDealCompany: TWideStringField;
 
-     cdsDealInfosDealTotalPrice: TFloatField;
 
-     cdsDealInfosFinalTotalPrice: TFloatField;
 
-     cdsDealInfosCutTotalPrice: TFloatField;
 
-     cdsDealInfosPayTotalPrice: TFloatField;
 
-     cdsDealInfosPaidTotalPrice: TFloatField;
 
-     cdsDealInfosPayingTotalPrice: TFloatField;
 
-     cdsDealInfosMemoStr: TWideStringField;
 
-     cdsDealInfosBalanceCode: TWideStringField;
 
-     cdsDealInfosDealName: TWideStringField;
 
-     cdsDealInfosPayPercent: TFloatField;
 
-     cdsDealInfosContractPrice: TFloatField;
 
-   private
 
-     FDealInfos: TList;
 
-     FTotalDealInfo: TInfoNode;
 
-     FProjectData: TProjectData;
 
-     procedure BeforeGather;
 
-     procedure AfterGather;
 
-     procedure OpenProjectData(AProjectID: Integer);
 
-     procedure FreeProjectData;
 
-     procedure AddBillsDealInfo(ANode: TsdIDTreeNode);
 
-     procedure AddBillsDeal(ANode: TsdIDTreeNode);
 
-     // 标段为合同
 
-     procedure AddDealProjectInfo(AProjectID: Integer);
 
-     // 标段内含多个合同
 
-     procedure AddProjectDealInfos(AProjectID: Integer);
 
-     procedure AddDealInfo(AProject: TSelectProject);
 
-     procedure GatherTotalDealInfo;
 
-     procedure WriteDealInfoData;
 
-   public
 
-     function AssignData(AProjects: TList): TDataSet;
 
-   end;
 
- implementation
 
- uses ProjectProperty, Globals, UtilMethods;
 
- {$R *.dfm}
 
- { TrmDealInfosData }
 
- procedure TrmDealInfosData.AddBillsDeal(ANode: TsdIDTreeNode);
 
- begin
 
-   if not Assigned(ANode) then Exit;
 
-   if ANode.Rec.ValueByName('DealCode').AsString <> '' then
 
-     AddBillsDealInfo(ANode);
 
-   AddBillsDeal(ANode.FirstChild);
 
-   AddBillsDeal(ANode.NextSibling);
 
- end;
 
- procedure TrmDealInfosData.AddBillsDealInfo(ANode: TsdIDTreeNode);
 
- var
 
-   DealInfo: TInfoNode;
 
- begin
 
-   DealInfo := TInfoNode.Create;
 
-   FDealInfos.Add(DealInfo);
 
-   DealInfo.FDealType := ANode.Rec.ValueByName('DealType').AsString;
 
-   DealInfo.FDealCode := ANode.Rec.ValueByName('DealCode').AsString;
 
-   DealInfo.FDealName := ANode.Rec.ValueByName('Name').AsString;
 
-   DealInfo.FDealCompany := ANode.Rec.ValueByName('DealCompany').AsString;
 
-   DealInfo.FDealTotalPrice := ANode.Rec.ValueByName('TotalPrice').AsFloat;
 
-   DealInfo.FFinalTotalPrice := ANode.Rec.ValueByName('AddGatherTotalPrice').AsFloat;
 
-   DealInfo.FCutTotalPrice := ANode.Rec.ValueByName('AddCutTotalPrice').AsFloat;
 
-   DealInfo.FPaidTotalPrice := ANode.Rec.ValueByName('AddPayTotalPrice').AsFloat;
 
-   DealInfo.FContractPrice := ANode.Rec.ValueByName('TotalPrice').AsFloat;
 
- end;
 
- procedure TrmDealInfosData.AddDealInfo(AProject: TSelectProject);
 
- begin
 
-   if AProject.IsDeal then
 
-     AddProjectDealInfos(AProject.ProjectID)
 
-   else
 
-     AddDealProjectInfo(AProject.ProjectID);
 
- end;
 
- procedure TrmDealInfosData.AddDealProjectInfo(AProjectID: Integer);
 
- var
 
-   DealInfo: TInfoNode;
 
- begin
 
-   OpenProjectData(AProjectID);
 
-   try
 
-     DealInfo := TInfoNode.Create;
 
-     FDealInfos.Add(DealInfo);
 
-     DealInfo.FDealType := FProjectData.ProjProperties.DealType;
 
-     DealInfo.FDealCode := FProjectData.ProjProperties.DealIndex;
 
-     DealInfo.FDealName := FProjectData.ProjProperties.DealName;
 
-     DealInfo.FDealCompany := FProjectData.ProjProperties.CName;
 
-     // Bug #674 要求修改为取项目属性界面签约合同价
 
-     DealInfo.FDealTotalPrice := FProjectData.BillsData.Settlement[0];
 
-     DealInfo.FFinalTotalPrice := FProjectData.DealPaymentData.AddTotalPrice;
 
-     DealInfo.FCutTotalPrice := FProjectData.DealPaymentData.CutTotalPrice;
 
-     DealInfo.FPaidTotalPrice := FProjectData.DealPaymentData.PaidTotalPrice;
 
-     DealInfo.FContractPrice := FProjectData.ProjProperties.ContractPrice;
 
-   finally
 
-     FreeProjectData;
 
-   end;
 
- end;
 
- procedure TrmDealInfosData.AddProjectDealInfos(AProjectID: Integer);
 
- begin
 
-   OpenProjectData(AProjectID);
 
-   try
 
-     AddBillsDeal(FProjectData.BillsCompileData.BillsCompileTree.FirstNode);
 
-   finally
 
-     FreeProjectData;
 
-   end;
 
- end;
 
- procedure TrmDealInfosData.AfterGather;
 
- begin
 
-   FTotalDealInfo.Free;
 
-   ClearObjects(FDealInfos);
 
-   FDealInfos.Free;
 
-   cdsDealInfos.EnableControls;
 
- end;
 
- function TrmDealInfosData.AssignData(AProjects: TList): TDataSet;
 
- var
 
-   iProject: Integer;
 
- begin
 
-   BeforeGather;
 
-   try
 
-     for iProject := 0 to AProjects.Count - 1 do
 
-       AddDealInfo(TSelectProject(AProjects.Items[iProject]));
 
-     GatherTotalDealInfo;
 
-     WriteDealInfoData;
 
-   finally
 
-     AfterGather;
 
-     Result := cdsDealInfos;
 
-   end;
 
- end;
 
- procedure TrmDealInfosData.BeforeGather;
 
- begin
 
-   cdsDealInfos.DisableControls;
 
-   cdsDealInfos.Active := True;
 
-   cdsDealInfos.EmptyDataSet;
 
-   FDealInfos := TList.Create;
 
-   FTotalDealInfo := TInfoNode.Create;
 
-   FTotalDealInfo.FDealType := '合计';
 
- end;
 
- procedure TrmDealInfosData.FreeProjectData;
 
- begin
 
-   if not Assigned(OpenProjectManager.FindProjectData(FProjectData.ProjectID)) then
 
-     FProjectData.Free;
 
- end;
 
- procedure TrmDealInfosData.GatherTotalDealInfo;
 
- var
 
-   i: Integer;
 
-   DealInfo: TInfoNode;
 
- begin
 
-   for i := 0 to FDealInfos.Count - 1 do
 
-   begin
 
-     DealInfo := TInfoNode(FDealInfos.Items[i]);
 
-     FTotalDealInfo.FDealTotalPrice := FTotalDealInfo.FDealTotalPrice + DealInfo.FDealTotalPrice;
 
-     FTotalDealInfo.FFinalTotalPrice := FTotalDealInfo.FFinalTotalPrice + DealInfo.FFinalTotalPrice;
 
-     FTotalDealInfo.FCutTotalPrice := FTotalDealInfo.FCutTotalPrice + DealInfo.FCutTotalPrice;
 
-     FTotalDealInfo.FPaidTotalPrice := FTotalDealInfo.FPaidTotalPrice + DealInfo.FPaidTotalPrice;
 
-     FTotalDealInfo.FContractPrice := FTotalDealInfo.FContractPrice + DealInfo.FContractPrice;
 
-   end;
 
- end;
 
- procedure TrmDealInfosData.OpenProjectData(AProjectID: Integer);
 
- var
 
-   Rec: TsdDataRecord;
 
- begin
 
-   FProjectData := OpenProjectManager.FindProjectData(AProjectID);
 
-   Rec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProjectID);
 
-   if not Assigned(FProjectData) then
 
-   begin
 
-     FProjectData := TProjectData.Create;
 
-     FProjectData.OpenForReport(GetMyProjectsFilePath + Rec.ValueByName('FileName').AsString);
 
-   end;
 
- end;
 
- procedure TrmDealInfosData.WriteDealInfoData;
 
-   procedure WriteInfoNodeData(AInfo: TInfoNode);
 
-   begin
 
-     cdsDealInfos.Append;
 
-     cdsDealInfosDealType.AsString := AInfo.FDealType;
 
-     cdsDealInfosDealCode.AsString := AInfo.FDealCode;
 
-     cdsDealInfosBalanceCode.AsString := AInfo.FBalanceCode;
 
-     cdsDealInfosDealName.AsString := AInfo.FDealName;
 
-     cdsDealInfosDealCompany.AsString := AInfo.FDealCompany;
 
-     cdsDealInfosDealTotalPrice.AsFloat := AInfo.FDealTotalPrice;
 
-     cdsDealInfosFinalTotalPrice.AsFloat := AInfo.FFinalTotalPrice;
 
-     cdsDealInfosCutTotalPrice.AsFloat := AInfo.FCutTotalPrice;
 
-     cdsDealInfosPayTotalPrice.AsFloat := AInfo.FFinalTotalPrice - AInfo.FCutTotalPrice;
 
-     cdsDealInfosPaidTotalPrice.AsFloat := AInfo.FPaidTotalPrice;
 
-     cdsDealInfosPayingTotalPrice.AsFloat := AInfo.FFinalTotalPrice - AInfo.FCutTotalPrice - AInfo.FPaidTotalPrice;
 
-     if cdsDealInfosPayTotalPrice.AsFloat <> 0 then
 
-       cdsDealInfosPayPercent.AsFloat := AdvRoundTo(
 
-           cdsDealInfosPaidTotalPrice.AsFloat/cdsDealInfosPayTotalPrice.AsFloat*100);
 
-     cdsDealInfosContractPrice.AsFloat := AInfo.FContractPrice;
 
-     cdsDealInfos.Post;
 
-   end;
 
- var
 
-   i: Integer;
 
- begin
 
-   for i := 0 to FDealInfos.Count - 1 do
 
-     WriteInfoNodeData(TInfoNode(FDealInfos.Items[i]));
 
-   WriteInfoNodeData(FTotalDealInfo);
 
- end;
 
- { TInfoNode }
 
- constructor TInfoNode.Create;
 
- begin
 
-   FDealTotalPrice := 0;
 
-   FFinalTotalPrice := 0;
 
-   FCutTotalPrice := 0;
 
-   FPaidTotalPrice := 0;
 
-   FContractPrice := 0;
 
- end;
 
- end.
 
 
  |