| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | unit rmDealInfosDm;interfaceuses  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;implementationuses 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.
 |