rmWuJiuZqzfGatherDm.pas 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. unit rmWuJiuZqzfGatherDm;
  2. interface
  3. uses
  4. SysUtils, Classes, DB, DBClient, ProjectData, sdIDTree, sdDB;
  5. type
  6. TrmWuJiuZqzfGatherData = class(TDataModule)
  7. cdsZqzf: TClientDataSet;
  8. cdsZqzfPhaseIndex: TIntegerField;
  9. cdsZqzfQyht: TFloatField;
  10. cdsZqzfFhqd: TFloatField;
  11. cdsZqzfBg: TFloatField;
  12. cdsZqzfSp: TFloatField;
  13. cdsZqzfWy: TFloatField;
  14. cdsZqzfCljg: TFloatField;
  15. cdsZqzfBgh: TFloatField;
  16. cdsZqzfEndGather: TFloatField;
  17. cdsZqzfPreGather: TFloatField;
  18. cdsZqzfCurGather: TFloatField;
  19. cdsZqzfAddKhBlj: TFloatField;
  20. cdsZqzfCurKhBlj: TFloatField;
  21. cdsZqzfAddKhNmggz: TFloatField;
  22. cdsZqzfCurKhNmggz: TFloatField;
  23. cdsZqzfDyyfk: TFloatField;
  24. cdsZqzfAddKhDyyfk: TFloatField;
  25. cdsZqzfCurKhDyyfk: TFloatField;
  26. cdsZqzfAddKAddedTax: TFloatField;
  27. cdsZqzfCurKAddedTax: TFloatField;
  28. cdsZqzfAddSjzf: TFloatField;
  29. cdsZqzfCurSjzf: TFloatField;
  30. cdsZqzfMemo: TWideStringField;
  31. private
  32. FQyht: Double;
  33. FFhqd: Double;
  34. FBg: Double;
  35. FSp: Double;
  36. FWy: Double;
  37. FCljg: Double;
  38. FBgh: Double;
  39. procedure GatherMainData(AProjectData: TProjectData);
  40. procedure LoadPhaseData(APhaseIndex: Integer; AProjectData: TProjectData = nil);
  41. public
  42. function AssignData(AProjectData: TProjectData): TDataSet;
  43. end;
  44. implementation
  45. uses BillsDm, BGLDm, DealPaymentDm, PhaseData, PhasePayDm;
  46. {$R *.dfm}
  47. { TrmWuJiuZqzfGatherData }
  48. function TrmWuJiuZqzfGatherData.AssignData(
  49. AProjectData: TProjectData): TDataSet;
  50. var
  51. iPhase: Integer;
  52. begin
  53. cdsZqzf.Active := True;
  54. cdsZqzf.EmptyDataSet;
  55. GatherMainData(AProjectData);
  56. for iPhase := 1 to AProjectData.ProjProperties.PhaseCount do
  57. LoadPhaseData(iPhase, AProjectData);
  58. Result := cdsZqzf;
  59. end;
  60. procedure TrmWuJiuZqzfGatherData.GatherMainData(AProjectData: TProjectData);
  61. function FindNode(const AName: String; AParent: TsdIDTreeNode = nil): TsdIDTreeNode;
  62. var
  63. vNode: TsdIDTreeNode;
  64. begin
  65. Result := nil;
  66. if Assigned(AParent) then
  67. vNode := AParent.FirstChild
  68. else
  69. vNode := AProjectData.BillsCompileData.BillsCompileTree.FirstNode;
  70. while Assigned(vNode) do
  71. begin
  72. if Pos(AName, vNode.Rec.ValueByName('Name').AsString) > 0 then
  73. begin
  74. Result := vNode;
  75. Break;
  76. end
  77. else
  78. vNode := vNode.NextSibling;
  79. end;
  80. end;
  81. var
  82. vQtFyNode, vChild: TsdIDTreeNode;
  83. begin
  84. // 签约合同金额
  85. FQyht := AProjectData.ProjProperties.ContractPrice;
  86. // 复核清单金额
  87. vQtFyNode := FindNode('建安工程量其他费用');
  88. with AProjectData.BillsData do
  89. FFhqd := FirstPart[0] + SecondPart[0] + ThirdPart[0] + ReservedFee[0];
  90. if Assigned(vQtFyNode) then
  91. FFhqd := FFhqd - vQtFyNode.Rec.ValueByName('TotalPrice').AsFloat;
  92. // 变更金额
  93. FBg := AProjectData.BGLData.TotalPrice;
  94. // 索赔金额
  95. vChild := FindNode('索赔', vQtFyNode);
  96. if Assigned(vChild) then
  97. FSp := vChild.Rec.ValueByName('TotalPrice').AsFloat
  98. else
  99. FSp := 0;
  100. // 违约罚金
  101. vChild := FindNode('违约罚金', vQtFyNode);
  102. if Assigned(vChild) then
  103. FSp := vChild.Rec.ValueByName('TotalPrice').AsFloat
  104. else
  105. FSp := 0;
  106. // 材料价格调整金额
  107. vChild := FindNode('价差调整', vQtFyNode);
  108. if Assigned(vChild) then
  109. FSp := vChild.Rec.ValueByName('TotalPrice').AsFloat
  110. else
  111. FSp := 0;
  112. FBgh := FFhqd + FBg + FSp + FWy + FCljg;
  113. end;
  114. procedure TrmWuJiuZqzfGatherData.LoadPhaseData(APhaseIndex: Integer;
  115. AProjectData: TProjectData);
  116. function GetDealPayID(const AName: string; AMinus: Boolean = false): Integer;
  117. var
  118. iRec: Integer;
  119. Rec: TsdDataRecord;
  120. begin
  121. Result := -1;
  122. with AProjectData.DealPaymentData do
  123. for iRec := 0 to sddDealPayment.RecordCount - 1 do
  124. begin
  125. Rec := sddDealPayment.Records[iRec];
  126. if (Pos(AName, Rec.ValueByName('Name').AsString) > 0) and (Rec.ValueByName('IsMinus').AsBoolean = AMinus) then
  127. begin
  128. Result := Rec.ValueByName('ID').AsInteger;
  129. Break;
  130. end;
  131. end;
  132. end;
  133. var
  134. PhaseData: TPhaseData;
  135. sTPField: string;
  136. iDealPayId: Integer;
  137. Rec: TsdDataRecord;
  138. begin
  139. PhaseData := TPhaseData.Create(AProjectData);
  140. try
  141. PhaseData.SimpleOpen(Format('%s\Phase%d.dat', [AProjectData.TempPath, APhaseIndex]));
  142. cdsZqzf.Append;
  143. cdsZqzfPhaseIndex.AsInteger := APhaseIndex;
  144. cdsZqzfQyht.AsFloat := FQyht;
  145. cdsZqzfBg.AsFloat := FBg;
  146. cdsZqzfSp.AsFloat := FSp;
  147. cdsZqzfWy.AsFloat := FWy;
  148. cdsZqzfCljg.AsFloat := FCljg;
  149. cdsZqzfBgh.AsFloat := FBgh;
  150. sTPField := 'TotalPrice' + IntToStr(TPhaseData(PhaseData).PhaseProperty.AuditCount);
  151. with PhaseData.PhasePayData do
  152. begin
  153. iDealPayId := GetDealPayID('本期完成计量');
  154. Rec := sddPhasePay.Locate('ID', iDealPayId);
  155. cdsZqzfEndGather.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  156. cdsZqzfPreGather.AsFloat := Rec.ValueByName('Pre' + sTPField).AsFloat;
  157. cdsZqzfCurGather.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  158. iDealPayId := GetDealPayID('保留金', true);
  159. Rec := sddPhasePay.Locate('ID', iDealPayId);
  160. if Assigned(Rec) then
  161. begin
  162. cdsZqzfAddKhBlj.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  163. cdsZqzfCurKhBlj.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  164. end;
  165. iDealPayId := GetDealPayID('农民工工资', true);
  166. Rec := sddPhasePay.Locate('ID', iDealPayId);
  167. if Assigned(Rec) then
  168. begin
  169. cdsZqzfAddKhNmggz.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  170. cdsZqzfCurKhNmggz.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  171. end;
  172. iDealPayId := GetDealPayID('动员预付款', true);
  173. Rec := sddPhasePay.Locate('ID', iDealPayId);
  174. if Assigned(Rec) then
  175. begin
  176. cdsZqzfAddKhDyyfk.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  177. cdsZqzfCurKhDyyfk.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  178. end;
  179. iDealPayId := GetDealPayID('增值税', true);
  180. Rec := sddPhasePay.Locate('ID', iDealPayId);
  181. if Assigned(Rec) then
  182. begin
  183. cdsZqzfAddKAddedTax.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  184. cdsZqzfCurKAddedTax.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  185. end;
  186. iDealPayId := GetDealPayID('本期实付');
  187. Rec := sddPhasePay.Locate('ID', iDealPayId);
  188. if Assigned(Rec) then
  189. begin
  190. cdsZqzfAddSjzf.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  191. cdsZqzfCurSjzf.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  192. end;
  193. end;
  194. cdsZqzf.Post;
  195. finally
  196. PhaseData.Free;
  197. end;
  198. end;
  199. end.