source: cprs/branches/foia-cprs/CPRS-Chart/fAddlSigners.pas@ 459

Last change on this file since 459 was 459, checked in by Kevin Toppenberg, 16 years ago

Adding foia-cprs branch

File size: 9.3 KB
Line 
1unit fAddlSigners;
2
3interface
4
5uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
6 Buttons, ORCtrls, ORfn, ExtCtrls, FNoteProps,Dialogs;
7
8type
9 TfrmAddlSigners = class(TForm)
10 cmdOK: TButton;
11 cmdCancel: TButton;
12 cboSrcList: TORComboBox;
13 DstList: TORListBox;
14 SrcLabel: TLabel;
15 DstLabel: TLabel;
16 pnlBase: TPanel;
17 cmdRemove: TButton;
18 lblAuthor: TOROffsetLabel;
19 cboCosigner: TORComboBox;
20 lblCosigner: TOROffsetLabel;
21 txtAuthor: TCaptionEdit;
22 pnlAdditional: TORAutoPanel;
23 pnlButtons: TORAutoPanel;
24 pnlTop: TORAutoPanel;
25 procedure NewPersonNeedData(Sender: TObject; const StartFrom: String;
26 Direction, InsertAt: Integer);
27 procedure cmdOKClick(Sender: TObject);
28 procedure cmdCancelClick(Sender: TObject);
29 procedure cboSrcListMouseClick(Sender: TObject);
30 procedure cmdRemoveClick(Sender: TObject);
31 procedure FormCreate(Sender: TObject);
32 procedure FormDestroy(Sender: TObject);
33 procedure cboCosignerChange(Sender: TObject);
34 procedure DstListClick(Sender: TObject);
35 procedure cboSrcListKeyDown(Sender: TObject; var Key: Word;
36 Shift: TShiftState);
37 procedure cboCosignerNeedData(Sender: TObject; const StartFrom: String;
38 Direction, InsertAt: Integer);
39 procedure cboCosignerExit(Sender: TObject);
40 procedure cboSrcListClick(Sender: TObject);
41 private
42 FSigners: TStringList ;
43 FCosigner: int64;
44 FExclusions: TStringList;
45 FSigAction: integer;
46 FChanged: Boolean;
47 FNoteIEN: integer;
48 FToday: string;
49 FTabID: integer;
50 function CosignerOK: Boolean;
51 end;
52
53TSignerList = record
54 Changed: Boolean;
55 Signers: TStringList ;
56 Cosigner: int64;
57 end;
58
59procedure SelectAdditionalSigners(FontSize, NoteIEN, SigAction: Integer; Exclusions: TStrings;
60 var SignerList: TSignerList; TabID: integer) ;
61
62const
63 SG_ADDITIONAL = 1;
64 SG_COSIGNER = 2;
65 SG_BOTH = 3;
66
67implementation
68
69{$R *.DFM}
70
71uses
72 rCore, uCore, rTIU, uConst, rPCE;
73
74const
75 TX_SIGNER_CAP = 'Error adding signers';
76 TX_SIGNER_TEXT = 'Select signers or press Cancel.';
77 TX_BAD_SIGNER = 'Cannot select author, user, expected signer, or expected cosigner' ;
78 TX_DUP_SIGNER = 'You have already selected that additional signer';
79 TX_NO_COSIGNER = ' is not authorized to cosign this document.';
80 TX_NO_COSIGNER_CAP = 'Invalid Cosigner';
81 TX_NO_DELETE = 'A cosigner is required';
82 TX_NO_DELETE_CAP = 'No cosigner selected';
83
84
85procedure SelectAdditionalSigners(FontSize, NoteIEN, SigAction: Integer; {Status: string;} Exclusions: TStrings;
86 var SignerList: TSignerList; TabID: integer) ;
87{ displays additional signer form for notes and returns a record of the selection }
88var
89 frmAddlSigners: TfrmAddlSigners;
90 W, H, i: Integer;
91begin
92 frmAddlSigners := TfrmAddlSigners.Create(Application);
93 try
94 with frmAddlSigners do
95 begin
96 FTabID := TabID;
97 FSigAction := SigAction;
98 FNoteIEN := NoteIEN;
99 FExclusions.Assign(Exclusions);
100 FToday := FloatToStr(FMToday);
101 if FSigAction = SG_COSIGNER then
102 begin
103 pnlAdditional.Visible := False;
104 Height := Height - pnlAdditional.Height;
105 end;
106 Font.Size := FontSize;
107 W := ClientWidth;
108 H := ClientHeight;
109 ResizeToFont(FontSize, W, H);
110 ClientWidth := W; pnlBase.Width := W;
111 ClientHeight := H; pnlBase.Height := H;
112 with FExclusions do for i := 0 to Count-1 do
113 begin
114 if Piece(Strings[i],U,3) = 'Author' then txtAuthor.Text := Piece(Strings[i], U, 2)
115 else if Piece(Strings[i],U,3) = 'Expected Cosigner' then
116 begin
117 cboCosigner.Items.Add(Strings[i]);
118 cboCosigner.ItemIndex := 0;
119 end
120 else
121 DstList.Items.Add(Strings[i]);
122 end;
123
124 if (SigAction = SG_COSIGNER) or (SigAction = SG_BOTH) then
125 begin
126 lblCosigner.Caption := 'Expected cosigner';
127 cboCosigner.Caption := 'Expected cosigner';
128 cboCosigner.Color := clWindow;
129 cboCosigner.Enabled := True;
130 cboCosigner.InitLongList('');
131 end;
132 if (SigAction = SG_ADDITIONAL) or (SigAction = SG_BOTH) then
133 cboSrcList.InitLongList('');
134 FChanged := False;
135 ShowModal;
136 with SignerList do
137 begin
138 Signers := TStringList.Create;
139 Signers.Assign(FSigners);
140 Cosigner := FCosigner;
141 Changed := FChanged ;
142 end ;
143 end; {with frmAddlSigners}
144 finally
145 frmAddlSigners.Release;
146 end;
147end;
148
149procedure TfrmAddlSigners.NewPersonNeedData(Sender: TObject;
150 const StartFrom: String; Direction, InsertAt: Integer);
151begin
152 TORComboBox(Sender).ForDataUse(SubSetOfPersons(StartFrom, Direction));
153end;
154
155procedure TfrmAddlSigners.cmdCancelClick(Sender: TObject);
156begin
157 Close;
158end;
159
160procedure TfrmAddlSigners.cmdOKClick(Sender: TObject);
161var
162 i: integer;
163begin
164 FChanged := False;
165 if (FSigAction = SG_ADDITIONAL) and ((DstList.Items.Count = 0) and (FSigners.Count = 0)) then
166 begin
167 InfoBox(TX_SIGNER_TEXT, TX_SIGNER_CAP, MB_OK or MB_ICONWARNING);
168 Exit;
169 end;
170 if not CosignerOK then Exit;
171 FChanged := True;
172 FCosigner := cboCosigner.ItemIEN;
173 for i := 0 to DstList.Items.Count-1 do
174 begin
175 if fExclusions.IndexOf(DstList.Items[i]) < 0 then FSigners.Add(DstList.Items[i]);
176 end;
177 Close;
178end;
179
180procedure TfrmAddlSigners.cboSrcListMouseClick(Sender: TObject);
181var
182 i: integer;
183begin
184 if cboSrcList.ItemIndex = -1 then exit;
185 if (DstList.SelectByID(cboSrcList.ItemID) <> -1) then
186 begin
187 InfoBox(TX_DUP_SIGNER, TX_SIGNER_CAP, MB_OK or MB_ICONWARNING);
188 Exit;
189 end;
190 for i := 0 to FExclusions.Count-1 do
191 if (Piece(FExclusions.Strings[i],U,1) = cboSrcList.ItemID) then
192 begin
193 InfoBox(TX_BAD_SIGNER, TX_SIGNER_CAP, MB_OK or MB_ICONWARNING);
194 Exit;
195 end;
196 DstList.Items.Add(cboSrcList.Items[cboSrcList.Itemindex]) ;
197 cboSrcList.SelectByID(cboSrcList.ItemID);
198end;
199
200procedure TfrmAddlSigners.cmdRemoveClick(Sender: TObject);
201var
202 i,j: integer;
203begin
204 with DstList do
205 begin
206 if ItemIndex = -1 then exit ;
207 for i := Items.Count-1 downto 0 do
208 if Selected[i] then
209 begin
210 j := FExclusions.IndexOf(Items[i]);
211 FSigners.Add(Items[i]+'^REMOVE');
212 if j > -1 then FExclusions.Delete(j);
213 Items.Delete(i) ;
214 end;
215 end;
216end;
217
218procedure TfrmAddlSigners.cboCosignerChange(Sender: TObject);
219var
220 i: integer;
221begin
222 if UserInactive(cboCosigner.ItemID) then
223 if (InfoBox(fNoteProps.TX_USER_INACTIVE, TC_INACTIVE_USER, MB_OKCANCEL)= IDCANCEL) then exit;
224 if not CosignerOK then Exit;
225 i := DstList.SelectByID(cboCosigner.ItemID);
226 if i > -1 then
227 begin
228 DstList.Items.Delete(i);
229 FSigners.Add(cboCosigner.Items[cboCosigner.ItemIndex] + '^REMOVE');
230 end;
231end;
232
233procedure TfrmAddlSigners.FormCreate(Sender: TObject);
234begin
235 cboCosigner.Color := ReadOnlyColor;
236 txtAuthor.Color := ReadOnlyColor;
237 FSigners := TStringList.Create;
238 FExclusions := TStringList.Create;
239end;
240
241procedure TfrmAddlSigners.FormDestroy(Sender: TObject);
242begin
243 FSigners.Free;
244 FExclusions.Free;
245end;
246
247procedure TfrmAddlSigners.DstListClick(Sender: TObject);
248begin
249 if DstList.ItemIndex > -1 then cmdRemoveClick(Self);
250end;
251
252procedure TfrmAddlSigners.cboSrcListKeyDown(Sender: TObject; var Key: Word;
253 Shift: TShiftState);
254begin
255 if Key = VK_RETURN then cboSrcListMouseClick(Self);
256end;
257
258function TfrmAddlSigners.CosignerOK: Boolean;
259begin
260 Result := False;
261 if not cboCosigner.Enabled then
262 begin
263 Result := True;
264 Exit;
265 end;
266 if cboCosigner.ItemIndex < 0 then
267 begin
268 InfoBox(TX_NO_DELETE, TX_NO_DELETE_CAP, MB_OK or MB_ICONWARNING);
269 Exit;
270 end;
271 case FTabID of
272 CT_NOTES, CT_CONSULTS:
273 if (not CanCosign(TitleForNote(FNoteIEN), 0, cboCosigner.ItemIEN)) then
274 begin
275 InfoBox(cboCosigner.Text + TX_NO_COSIGNER, TX_NO_COSIGNER_CAP, MB_OK or MB_ICONWARNING);
276 Exit;
277 end;
278 CT_DCSUMM:
279 if not IsUserAProvider(cboCosigner.ItemIEN, FMNow) then
280 begin
281 InfoBox(cboCosigner.Text + TX_NO_COSIGNER, TX_NO_COSIGNER_CAP, MB_OK or MB_ICONWARNING);
282 Exit;
283 end;
284 end;
285 Result := True;
286end;
287
288procedure TfrmAddlSigners.cboCosignerNeedData(Sender: TObject;
289 const StartFrom: String; Direction, InsertAt: Integer);
290begin
291 case FTabID of
292 CT_NOTES: TORComboBox(Sender).ForDataUse(SubSetOfUsersWithClass(StartFrom, Direction, FToday));
293 CT_CONSULTS: TORComboBox(Sender).ForDataUse(SubSetOfUsersWithClass(StartFrom, Direction, FToday));
294 CT_DCSUMM: TORComboBox(Sender).ForDataUse(SubSetOfProviders(StartFrom, Direction));
295 end;
296end;
297
298procedure TfrmAddlSigners.cboCosignerExit(Sender: TObject);
299begin
300 with cboCosigner do if Text = '' then ItemIndex := -1;
301end;
302
303procedure TfrmAddlSigners.cboSrcListClick(Sender: TObject);
304var UserEIN:string;
305begin
306 UserEIN := Piece(cboSrcList.Items[cboSrcList.Itemindex],U,1);
307 if UserInactive(UserEIN) then
308 if (InfoBox(fNoteProps.TX_USER_INACTIVE, TC_INACTIVE_USER, MB_OKCANCEL)= IDCANCEL) then exit;
309
310end;
311
312end.
Note: See TracBrowser for help on using the repository browser.