SearchDm.pas 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. unit SearchDm;
  2. interface
  3. uses
  4. SysUtils, Classes, DB, DBClient, sdIDTree, sdDB, BillsTree;
  5. type
  6. TLocateType = (ltCompile, ltMeasure);
  7. TSearchData = class(TDataModule)
  8. cdsSearch: TClientDataSet;
  9. cdsSearchCode: TStringField;
  10. cdsSearchB_Code: TStringField;
  11. cdsSearchName: TWideStringField;
  12. cdsSearchUnits: TWideStringField;
  13. cdsSearchQuantity: TFloatField;
  14. cdsSearchAddGatherQuantity: TFloatField;
  15. cdsSearchID: TIntegerField;
  16. cdsSearchCurQcQuantity: TFloatField;
  17. cdsSearchPrice: TFloatField;
  18. cdsSearchCompleteRate: TFloatField;
  19. procedure cdsSearchQuantityGetText(Sender: TField; var Text: String;
  20. DisplayText: Boolean);
  21. private
  22. FProjectData: TObject;
  23. procedure AddSearchResult(ANode: TBillsIDTreeNode);
  24. public
  25. constructor Create(AProjectData: TObject);
  26. destructor Destroy; override;
  27. procedure SearchKeyword(const AKeyword: string);
  28. procedure SearchOverRange;
  29. procedure SearchBelowRange;
  30. procedure LocateCurrent(ALocateType: TLocateType);
  31. property ProjectData: TObject read FProjectData;
  32. end;
  33. implementation
  34. uses
  35. ProjectData, BillsMeasureDm, BillsCompileDm, Math, ZhAPI,
  36. UtilMethods;
  37. {$R *.dfm}
  38. { TSearchData }
  39. procedure TSearchData.AddSearchResult(ANode: TBillsIDTreeNode);
  40. begin
  41. if not Assigned(ANode) then Exit;
  42. cdsSearch.Append;
  43. with ANode do
  44. begin
  45. cdsSearchID.AsInteger := Rec.ValueByName('ID').AsInteger;
  46. cdsSearchCode.AsString := Rec.ValueByName('Code').AsString;
  47. cdsSearchB_Code.AsString := Rec.ValueByName('B_Code').AsString;
  48. cdsSearchName.AsString := Rec.ValueByName('Name').AsString;
  49. cdsSearchUnits.AsString := Rec.ValueByName('Units').AsString;
  50. cdsSearchPrice.AsFloat := Rec.ValueByName('Price').AsFloat;
  51. cdsSearchQuantity.AsString := Rec.ValueByName('Quantity').AsString;
  52. if Assigned(StageRec) then
  53. cdsSearchCurQcQuantity.AsFloat := StageRec.ValueByName('QcQuantity').AsFloat;
  54. cdsSearchAddGatherQuantity.AsString := Rec.ValueByName('AddGatherQuantity').AsString;
  55. if cdsSearchQuantity.AsFloat <> 0 then
  56. cdsSearchCompleteRate.AsFloat := advRoundTo(
  57. Rec.ValueByName('AddDealQuantity').AsFloat/cdsSearchQuantity.AsFloat*100);
  58. end;
  59. cdsSearch.Post;
  60. end;
  61. constructor TSearchData.Create(AProjectData: TObject);
  62. begin
  63. inherited Create(nil);
  64. FProjectData := AProjectData;
  65. end;
  66. destructor TSearchData.Destroy;
  67. begin
  68. inherited;
  69. end;
  70. procedure TSearchData.LocateCurrent(ALocateType: TLocateType);
  71. procedure LocateCompile;
  72. var
  73. stnNode: TsdIDTreeNode;
  74. begin
  75. with TProjectData(FProjectData).BillsCompileData do
  76. begin
  77. stnNode := BillsCompileTree.FindNode(cdsSearchID.AsInteger);
  78. sdvBillsCompile.LocateInControl(stnNode.Rec);
  79. end;
  80. end;
  81. procedure LocateMeasure;
  82. var
  83. stnNode: TsdIDTreeNode;
  84. begin
  85. with TProjectData(FProjectData).BillsMeasureData do
  86. begin
  87. stnNode := BillsMeasureTree.FindNode(cdsSearchID.AsInteger);
  88. sdvBillsMeasure.LocateInControl(stnNode.Rec);
  89. end;
  90. end;
  91. begin
  92. if ALocateType = ltCompile then
  93. LocateCompile
  94. else if ALocateType = ltMeasure then
  95. LocateMeasure;
  96. end;
  97. procedure TSearchData.SearchKeyword(const AKeyword: string);
  98. var
  99. iNode: Integer;
  100. vNode: TBillsIDTreeNode;
  101. begin
  102. if AKeyword = '' then Exit;
  103. cdsSearch.DisableControls;
  104. try
  105. cdsSearch.EmptyDataSet;
  106. with TProjectData(FProjectData).BillsMeasureData do
  107. begin
  108. for iNode := 0 to BillsMeasureTree.Count - 1 do
  109. begin
  110. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[iNode]);
  111. if (Pos(AKeyword, vNode.Rec.B_Code.AsString) > 0) or
  112. (Pos(AKeyword, vNode.Rec.Name.AsString) > 0) then
  113. AddSearchResult(vNode);
  114. end;
  115. end;
  116. finally
  117. cdsSearch.EnableControls;
  118. end;
  119. end;
  120. procedure TSearchData.SearchOverRange;
  121. var
  122. i: Integer;
  123. vNode: TBillsIDTreeNode;
  124. begin
  125. cdsSearch.DisableControls;
  126. try
  127. cdsSearch.EmptyDataSet;
  128. with TProjectData(FProjectData).BillsMeasureData do
  129. begin
  130. for i := 0 to BillsMeasureTree.Count - 1 do
  131. begin
  132. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
  133. if not vNode.HasChildren then
  134. if vNode.Rec.Quantity.AsFloat < vNode.Rec.AddDealQuantity.AsFloat then
  135. AddSearchResult(vNode);
  136. end;
  137. end;
  138. finally
  139. cdsSearch.EnableControls;
  140. end;
  141. end;
  142. procedure TSearchData.cdsSearchQuantityGetText(Sender: TField;
  143. var Text: String; DisplayText: Boolean);
  144. begin
  145. if Sender.AsFloat = 0 then
  146. Text := ''
  147. else
  148. Text := Sender.AsString;
  149. end;
  150. procedure TSearchData.SearchBelowRange;
  151. var
  152. i: Integer;
  153. vNode: TBillsIDTreeNode;
  154. begin
  155. cdsSearch.DisableControls;
  156. try
  157. cdsSearch.EmptyDataSet;
  158. with TProjectData(FProjectData).BillsMeasureData do
  159. begin
  160. for i := 0 to BillsMeasureTree.Count - 1 do
  161. begin
  162. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
  163. if not vNode.HasChildren then
  164. if vNode.Rec.Quantity.AsFloat > vNode.Rec.AddDealQuantity.AsFloat then
  165. AddSearchResult(vNode);
  166. end;
  167. end;
  168. finally
  169. cdsSearch.EnableControls;
  170. end;
  171. end;
  172. end.