rmWuJiuZqzfGatherDm.pas 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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. procedure GatherMainData(AProjectData: TProjectData);
  39. procedure LoadPhaseData(APhaseIndex: Integer; AProjectData: TProjectData = nil);
  40. public
  41. function AssignData(AProjectData: TProjectData): TDataSet;
  42. end;
  43. implementation
  44. uses BillsDm, BGLDm, DealPaymentDm, PhaseData, PhasePayDm, ConstUnit;
  45. {$R *.dfm}
  46. { TrmWuJiuZqzfGatherData }
  47. function TrmWuJiuZqzfGatherData.AssignData(
  48. AProjectData: TProjectData): TDataSet;
  49. var
  50. iPhase: Integer;
  51. begin
  52. cdsZqzf.Active := True;
  53. cdsZqzf.EmptyDataSet;
  54. GatherMainData(AProjectData);
  55. for iPhase := 1 to AProjectData.ProjProperties.PhaseCount do
  56. LoadPhaseData(iPhase, AProjectData);
  57. Result := cdsZqzf;
  58. end;
  59. procedure TrmWuJiuZqzfGatherData.GatherMainData(AProjectData: TProjectData);
  60. function FindChild(const AName: String; AParent: TsdIDTreeNode = nil): TsdIDTreeNode;
  61. var
  62. vNode: TsdIDTreeNode;
  63. begin
  64. Result := nil;
  65. if Assigned(AParent) then
  66. vNode := AParent.FirstChild
  67. else
  68. vNode := AProjectData.BillsCompileData.BillsCompileTree.FirstNode;
  69. while Assigned(vNode) do
  70. begin
  71. if Pos(AName, vNode.Rec.ValueByName('Name').AsString) > 0 then
  72. begin
  73. Result := vNode;
  74. Break;
  75. end
  76. else
  77. vNode := vNode.NextSibling;
  78. end;
  79. end;
  80. function FindNode(const AName: String; AParent: TsdIDTreeNode = nil): TsdIDTreeNode;
  81. var
  82. vNode: TsdIDTreeNode;
  83. i, iCount: Integer;
  84. begin
  85. Result := nil;
  86. i := 0;
  87. if Assigned(AParent) then
  88. begin
  89. vNode := AParent.FirstChild;
  90. iCount := AParent.PosterityCount;
  91. end
  92. else
  93. begin
  94. vNode := AProjectData.BillsCompileData.BillsCompileTree.FirstNode;
  95. iCount := AProjectData.BillsCompileData.BillsCompileTree.Count;
  96. end;
  97. while Assigned(vNode) and (i < iCount) do
  98. begin
  99. if Pos(AName, vNode.Rec.ValueByName('Name').AsString) > 0 then
  100. begin
  101. Result := vNode;
  102. Break;
  103. end
  104. else
  105. vNode := vNode.NextNode;
  106. Inc(i);
  107. end;
  108. end;
  109. var
  110. vQtFyNode, vChild: TsdIDTreeNode;
  111. begin
  112. // 签约合同金额
  113. FQyht := AProjectData.ProjProperties.ContractPrice;
  114. // 复核清单金额
  115. vQtFyNode := FindChild('建安工程其他费用', AProjectData.BillsCompileData.BillsCompileTree.FindNode(1));
  116. with AProjectData.BillsData do
  117. FFhqd := FirstPart[0] + SecondPart[0] + ThirdPart[0] + ReservedFee[0];
  118. if Assigned(vQtFyNode) then
  119. FFhqd := FFhqd - vQtFyNode.Rec.ValueByName('TotalPrice').AsFloat;
  120. // 变更金额
  121. FBg := AProjectData.BGLData.TotalPrice;
  122. // 索赔金额
  123. vChild := FindNode('索赔', vQtFyNode);
  124. if Assigned(vChild) then
  125. FSp := vChild.Rec.ValueByName('TotalPrice').AsFloat
  126. else
  127. FSp := 0;
  128. // 违约罚金
  129. vChild := FindNode('违约罚金', vQtFyNode);
  130. if Assigned(vChild) then
  131. FWy := vChild.Rec.ValueByName('TotalPrice').AsFloat
  132. else
  133. FWy := 0;
  134. // 材料价格调整金额
  135. vChild := FindNode('价差调整', vQtFyNode);
  136. if Assigned(vChild) then
  137. FCljg := vChild.Rec.ValueByName('TotalPrice').AsFloat
  138. else
  139. FCljg := 0;
  140. end;
  141. procedure TrmWuJiuZqzfGatherData.LoadPhaseData(APhaseIndex: Integer;
  142. AProjectData: TProjectData);
  143. function GetDealPayID(const AName: string; AMinus: Boolean = false): Integer;
  144. var
  145. iRec: Integer;
  146. Rec: TsdDataRecord;
  147. begin
  148. Result := -1;
  149. with AProjectData.DealPaymentData do
  150. for iRec := 0 to sddDealPayment.RecordCount - 1 do
  151. begin
  152. Rec := sddDealPayment.Records[iRec];
  153. if (Pos(AName, Rec.ValueByName('Name').AsString) > 0) and (Rec.ValueByName('IsMinus').AsBoolean = AMinus) then
  154. begin
  155. Result := Rec.ValueByName('ID').AsInteger;
  156. Break;
  157. end;
  158. end;
  159. end;
  160. var
  161. PhaseData: TPhaseData;
  162. sTPField: string;
  163. iDealPayId: Integer;
  164. Rec: TsdDataRecord;
  165. begin
  166. PhaseData := TPhaseData.Create(AProjectData);
  167. try
  168. PhaseData.SimpleOpen(Format('%s\Phase%d.dat', [AProjectData.TempPath, APhaseIndex]));
  169. cdsZqzf.Append;
  170. cdsZqzfPhaseIndex.AsInteger := APhaseIndex;
  171. cdsZqzfQyht.AsFloat := FQyht;
  172. cdsZqzfFhqd.AsFloat := FFhqd;
  173. cdsZqzfBg.AsFloat := AProjectData.BGLData.EndTotalPrice[APhaseIndex];
  174. cdsZqzfSp.AsFloat := FSp;
  175. cdsZqzfWy.AsFloat := FWy;
  176. cdsZqzfCljg.AsFloat := FCljg;//PhaseData.StageData.PriceMargin[2, 4];
  177. cdsZqzfBgh.AsFloat := cdsZqzfFhqd.AsFloat + cdsZqzfBg.AsFloat + cdsZqzfSp.AsFloat + cdsZqzfWy.AsFloat + cdsZqzfCljg.AsFloat;
  178. sTPField := 'TotalPrice' + IntToStr(TPhaseData(PhaseData).PhaseProperty.AuditCount);
  179. with PhaseData.PhasePayData do
  180. begin
  181. iDealPayId := GetDealPayID('本期完成计量');
  182. Rec := sddPhasePay.Locate('ID', iDealPayId);
  183. cdsZqzfEndGather.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  184. cdsZqzfPreGather.AsFloat := Rec.ValueByName('Pre' + sTPField).AsFloat;
  185. cdsZqzfCurGather.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  186. iDealPayId := GetDealPayID('保留金', true);
  187. Rec := sddPhasePay.Locate('ID', iDealPayId);
  188. if Assigned(Rec) then
  189. begin
  190. cdsZqzfAddKhBlj.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  191. cdsZqzfCurKhBlj.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  192. end;
  193. iDealPayId := GetDealPayID('农民工工资', true);
  194. Rec := sddPhasePay.Locate('ID', iDealPayId);
  195. if Assigned(Rec) then
  196. begin
  197. cdsZqzfAddKhNmggz.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  198. cdsZqzfCurKhNmggz.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  199. end;
  200. iDealPayId := GetDealPayID('动员预付款', false);
  201. Rec := sddPhasePay.Locate('ID', iDealPayId);
  202. if Assigned(Rec) then
  203. begin
  204. cdsZqzfDyyfk.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  205. end;
  206. iDealPayId := GetDealPayID('动员预付款', true);
  207. Rec := sddPhasePay.Locate('ID', iDealPayId);
  208. if Assigned(Rec) then
  209. begin
  210. cdsZqzfAddKhDyyfk.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  211. cdsZqzfCurKhDyyfk.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  212. end;
  213. iDealPayId := GetDealPayID('增值税', true);
  214. Rec := sddPhasePay.Locate('ID', iDealPayId);
  215. if Assigned(Rec) then
  216. begin
  217. cdsZqzfAddKAddedTax.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  218. cdsZqzfCurKAddedTax.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  219. end;
  220. iDealPayId := GetDealPayID('本期应付');
  221. Rec := sddPhasePay.Locate('ID', iDealPayId);
  222. if Assigned(Rec) then
  223. begin
  224. cdsZqzfAddSjzf.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  225. cdsZqzfCurSjzf.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  226. end;
  227. end;
  228. cdsZqzf.Post;
  229. finally
  230. PhaseData.Free;
  231. end;
  232. end;
  233. end.