AuditSelectFrm.pas 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. {----------------------------------------------------------------
  2. 交互报表 -- 审核人选择窗口
  3. 交互报表中,所有须选择审核人的报表,均可使用该界面,其他情况禁止使用
  4. 即 InteractFlag[交互类型]为1时 可用。
  5. 将交互报表中的角色名填入第一列,用户在第二列下拉选择审核人
  6. [项目数据库Proj, 当前期数据库Phase, 交互表内容保存至RD数据表]
  7. 其中Proj和Phase中均存有1份RD
  8. 整个流程可大致分解为4步:
  9. 1. 用户切换至报表界面时,将[Phase]RD -拷贝-> [Proj]RD
  10. 2. 用户点击该报表时,加载[Proj]RD数据至该窗口
  11. 3. 用户可在该窗口更改选择的审核人,用户确认后,将数据保存至[Proj]RD中
  12. 4. 用户关闭报表界面时,将[Proj]RD -拷贝-> [Phase]RD
  13. -----------------------------------------------------------------}
  14. unit AuditSelectFrm;
  15. interface
  16. uses
  17. ProjectData, ReportManager, ADODB, Checker,
  18. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  19. Dialogs, StdCtrls, ExtCtrls, ZJGrid, ZJEdits, ZJCells;
  20. const
  21. AuditSelectSql = 'Select SerialNo, Select1, Result1, Result2' +
  22. ' From P_ReportData' +
  23. ' Where (Flag = %d) and (SubFlag = %d)' +
  24. ' Order By SerialNo';
  25. AuditDeleteSql = 'Delete From %s' +
  26. ' Where (Flag = %d) and (SubFlag = %d)';
  27. AuditInsertSql = 'Insert Into %s' +
  28. ' (Flag, SubFlag, SerialNo, Select1, Result1, Result2)' +
  29. ' Values (%d, %d, %d, ''%s'', ''%s'', ''%s'')';
  30. type
  31. TAuditSelctForm = class(TForm)
  32. zgAuditSelect: TZJGrid;
  33. pnlBottom: TPanel;
  34. btnOk: TButton;
  35. btnCancel: TButton;
  36. pnlSelectAudit: TPanel;
  37. cbbAuditors: TZjComboBox;
  38. procedure zgAuditSelectGetCellEditor(Sender: TObject; ACoord: TPoint;
  39. var AControl: TWinControl);
  40. procedure zgAuditSelectEditorLoadCell(Sender: TObject; ACoord: TPoint;
  41. AControl: TWinControl);
  42. procedure zgAuditSelectEditorSaveCell(Sender: TObject; ACoord: TPoint;
  43. AControl: TWinControl);
  44. procedure zgAuditSelectGetCellText(Sender: TObject;
  45. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  46. private
  47. FProjectData: TProjectData;
  48. FReportTemplate: TTemplateNode;
  49. FProjQuery: TADOQuery;
  50. FPhaseQuery: TADOQuery;
  51. procedure LoadReportAudits;
  52. procedure LoadHistorySelectAudits;
  53. procedure LoadPhaseAuditors;
  54. procedure InitAuditSelectGrid;
  55. public
  56. constructor Create(AProjectData: TProjectData; ATemplateNode: TTemplateNode);
  57. destructor Destroy; override;
  58. procedure SaveAuditData;
  59. end;
  60. implementation
  61. uses ReportInteractInfo, PhaseData;
  62. {$R *.dfm}
  63. { TAuditSelctForm }
  64. constructor TAuditSelctForm.Create(AProjectData: TProjectData;
  65. ATemplateNode: TTemplateNode);
  66. begin
  67. inherited Create(nil);
  68. FProjectData := AProjectData;
  69. FReportTemplate := ATemplateNode;
  70. FProjQuery := TADOQuery.Create(nil);
  71. FProjQuery.Connection := FProjectData.ADOConnection;
  72. FPhaseQuery := TADOQuery.Create(nil);
  73. FPhaseQuery.Connection := FProjectData.PhaseData.ADOConnection;
  74. InitAuditSelectGrid;
  75. LoadReportAudits;
  76. LoadPhaseAuditors;
  77. LoadHistorySelectAudits;
  78. end;
  79. destructor TAuditSelctForm.Destroy;
  80. begin
  81. inherited;
  82. end;
  83. procedure TAuditSelctForm.InitAuditSelectGrid;
  84. begin
  85. zgAuditSelect.RowCount := 1;
  86. zgAuditSelect.Cells[1, 0].Text := '需选择信息';
  87. zgAuditSelect.ColWidths[1] := 150;
  88. zgAuditSelect.Cells[2, 0].Text := '审核人';
  89. zgAuditSelect.ColWidths[2] := 200;
  90. zgAuditSelect.CellClass.Cols[2] := TZjComboCell;
  91. end;
  92. procedure TAuditSelctForm.LoadHistorySelectAudits;
  93. var
  94. i, iRow: Integer;
  95. begin
  96. FProjQuery.Close;
  97. FProjQuery.SQL.Clear;
  98. FProjQuery.SQL.Add(Format(AuditSelectSql, [FReportTemplate.InteractFlag, FReportTemplate.InteractSubFlag]));
  99. FProjQuery.Open;
  100. FProjQuery.First;
  101. while not FProjQuery.Eof do
  102. begin
  103. iRow := FProjQuery.FieldByName('SerialNo').AsInteger;
  104. zgAuditSelect.Cells[2, iRow].Data := Pointer(StrToIntDef(FProjQuery.FieldByName('Select1').AsString, -1));
  105. FProjQuery.Next;
  106. end;
  107. end;
  108. procedure TAuditSelctForm.LoadPhaseAuditors;
  109. var
  110. i: Integer;
  111. Auditor: TChecker;
  112. begin
  113. cbbAuditors.Clear;
  114. for i := 0 to FProjectData.Checkers.Count - 1 do
  115. begin
  116. Auditor := FProjectData.Checkers.Item[i];
  117. if Auditor.Role = '' then
  118. cbbAuditors.Items.Add(Auditor.Name)
  119. else
  120. cbbAuditors.Items.Add(Format('%-10s[%s]', [Auditor.Name, Auditor.Role]));
  121. end;
  122. end;
  123. procedure TAuditSelctForm.LoadReportAudits;
  124. var
  125. i: Integer;
  126. begin
  127. if Assigned(FReportTemplate.InteractInfo) then
  128. begin
  129. with FReportTemplate.InteractInfo do
  130. begin
  131. zgAuditSelect.RowCount := Audits.Count + 1;
  132. for i := 0 to Audits.Count - 1 do
  133. begin
  134. zgAuditSelect.Cells[1, i+1].Text := Audits.Strings[i];
  135. zgAuditSelect.Cells[1, i+1].Align := gaCenterLeft;
  136. zgAuditSelect.Cells[2, i+1].Data := Pointer(-1);
  137. zgAuditSelect.Cells[2, i+1].Align := gaCenterLeft;
  138. end;
  139. end;
  140. end;
  141. end;
  142. procedure TAuditSelctForm.SaveAuditData;
  143. procedure UpdateDataBase(const ATableName: string; AQuery: TADOQuery);
  144. procedure ExecuteSql(const ASql: string);
  145. begin
  146. AQuery.Close;
  147. AQuery.SQL.Clear;
  148. AQuery.SQL.Add(ASql);
  149. AQuery.ExecSQL;
  150. end;
  151. procedure DeleteOldData;
  152. var
  153. sSql: string;
  154. begin
  155. sSql := Format(AuditDeleteSql, [ATableName, FReportTemplate.InteractFlag, FReportTemplate.InteractSubFlag]);
  156. ExecuteSql(sSql);
  157. end;
  158. procedure InsertNewData;
  159. var
  160. sSql: string;
  161. iRow, iAuditor: Integer;
  162. Auditor: TChecker;
  163. begin
  164. for iRow := 1 to zgAuditSelect.RowCount - 1 do
  165. begin
  166. iAuditor := Integer(zgAuditSelect.Cells[2, iRow].Data);
  167. if iAuditor <> -1 then
  168. begin
  169. Auditor := FProjectData.Checkers.Item[iAuditor];
  170. sSql := Format(AuditInsertSql, [ATableName, FReportTemplate.InteractFlag,
  171. FReportTemplate.InteractSubFlag, iRow, IntToStr(Auditor.No), Auditor.Memo, Auditor.Name])
  172. end
  173. else
  174. sSql := Format(AuditInsertSql, [ATableName, FReportTemplate.InteractFlag,
  175. FReportTemplate.InteractSubFlag, iRow, '-1', '', '']);
  176. ExecuteSql(sSql);
  177. end;
  178. end;
  179. begin
  180. DeleteOldData;
  181. InsertNewData;
  182. end;
  183. begin
  184. UpdateDataBase('P_ReportData', FProjQuery);
  185. UpdateDataBase('ReportData', FPhaseQuery);
  186. end;
  187. procedure TAuditSelctForm.zgAuditSelectGetCellEditor(Sender: TObject;
  188. ACoord: TPoint; var AControl: TWinControl);
  189. begin
  190. if (ACoord.X = 2) and (ACoord.Y > 0) then
  191. AControl := cbbAuditors;
  192. end;
  193. procedure TAuditSelctForm.zgAuditSelectEditorLoadCell(Sender: TObject;
  194. ACoord: TPoint; AControl: TWinControl);
  195. var
  196. iAuditorIndex: Integer;
  197. begin
  198. if AControl = cbbAuditors then
  199. begin
  200. iAuditorIndex := Integer(zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data);
  201. if iAuditorIndex < cbbAuditors.Items.Count then
  202. cbbAuditors.ItemIndex := iAuditorIndex
  203. else
  204. cbbAuditors.ItemIndex := -1;
  205. end;
  206. end;
  207. procedure TAuditSelctForm.zgAuditSelectEditorSaveCell(Sender: TObject;
  208. ACoord: TPoint; AControl: TWinControl);
  209. begin
  210. if AControl = cbbAuditors then
  211. zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data := Pointer(cbbAuditors.ItemIndex);
  212. end;
  213. procedure TAuditSelctForm.zgAuditSelectGetCellText(Sender: TObject;
  214. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  215. var
  216. iAuditorIndex: Integer;
  217. begin
  218. if (ACoord.X = 2) and (ACoord.Y > 0) then
  219. begin
  220. iAuditorIndex := Integer(zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data);
  221. if iAuditorIndex < cbbAuditors.Items.Count then
  222. Value := cbbAuditors.Items.Strings[iAuditorIndex]
  223. else
  224. Value := '';
  225. end;
  226. end;
  227. end.