source: Scheduling/branches/GUI1.2/DPatientLetter.cs@ 1082

Last change on this file since 1082 was 855, checked in by Sam Habiel, 14 years ago

Fixes issue with printing (Bug #15).

File size: 15.8 KB
RevLine 
[614]1using System;
2using System.Windows.Forms;
3using System.Data;
[772]4using System.Drawing.Printing;
5using System.Drawing;
[614]6
7namespace IndianHealthService.ClinicalScheduling
8{
9 /// <summary>
10 /// Summary description for DPatientLetter.
11 /// </summary>
[772]12 public class DPatientLetter : System.Windows.Forms.PrintPreviewDialog
13 {
[614]14 /// <summary>
15 /// Required designer variable.
16 /// </summary>
[772]17 private System.ComponentModel.Container components = null;
[788]18 private System.Drawing.Printing.PrintDocument printAppts;
19 private System.Drawing.Printing.PrintDocument printReminderLetters;
[614]20
21 #region Fields
[772]22 DateTime _dtBegin, _dtEnd; //global fields to use in passing to printing method
[788]23
24 //stuff to track what got printed and where we are -- very ugly, I know
25 //but I don't know if there is a better way to do it.
[772]26 int _currentResourcePrinting = 0;
27 int _currentApptPrinting = 0;
[788]28 int _pageNumber = 0;
29
30 //dataset to load the results of queries into and set to print routines
31 dsPatientApptDisplay2 _dsApptDisplay;
32 private PrintDocument printCancelLetters;
[789]33 private PrintDocument printRebookLetters;
[788]34 dsRebookAppts _dsRebookAppts;
[614]35 #endregion Fields
36
[788]37 /// <summary>
38 /// Print Clinic Schedules
39 /// </summary>
40 /// <param name="docManager">This docManger</param>
41 /// <param name="sClinicList">Clinics for which to print</param>
42 /// <param name="dtBegin">Beginning Date</param>
43 /// <param name="dtEnd">End Date</param>
44 public void InitializeFormClinicSchedule(CGDocumentManager docManager,
[614]45 string sClinicList,
46 DateTime dtBegin,
47 DateTime dtEnd)
48 {
49 try
50 {
51 if (sClinicList == "")
52 {
53 throw new Exception("At least one clinic must be selected.");
54 }
[772]55 _dtBegin = dtBegin;
56 _dtEnd = dtEnd;
[614]57 string sBegin = dtBegin.ToShortDateString();
58 string sEnd = dtEnd.ToShortDateString();
59 this.Text="Clinic Schedules";
60
61 string sSql = "BSDX CLINIC LETTERS^" + sClinicList + "^" + sBegin + "^" + sEnd;
[772]62 string sSql2 = "BSDX RESOURCE LETTERS^" + sClinicList;
[614]63
[788]64 _dsApptDisplay = new dsPatientApptDisplay2();
65 _dsApptDisplay.BSDXResource.Merge(docManager.RPMSDataTable(sSql2, "Resources"));
66 _dsApptDisplay.PatientAppts.Merge(docManager.RPMSDataTable(sSql, "PatientAppts"));
67
68 this.PrintPreviewControl.Document = printAppts;
[772]69 }
[614]70 catch (Exception ex)
71 {
72 throw ex;
73 }
74 }
75
[789]76 /// <summary>
77 /// Print Rebook Letters by Date
78 /// </summary>
79 /// <param name="docManager">This docManger</param>
80 /// <param name="sClinicList">Clinics for which to print</param>
81 /// <param name="dtBegin">Beginning Date</param>
82 /// <param name="dtEnd">End Date</param>
83 public void InitializeFormRebookLetters(CGDocumentManager docManager,
[614]84 string sClinicList,
[788]85 DateTime dtBegin,
86 DateTime dtEnd)
[614]87 {
88 try
89 {
90 if (sClinicList == "")
91 {
92 throw new Exception("At least one clinic must be selected.");
93 }
94
[788]95 string sBegin = dtBegin.ToString("M/d/yyyy@HH:mm");
96 string sEnd = dtEnd.ToString("M/d/yyyy@HH:mm");
97
98 //Call RPC to get list of appt ids that have been rebooked for these clinics on these dates
[789]99 string sSql1 = "BSDX REBOOK CLINIC LIST^" + sClinicList + "^" + sBegin + "^" + sEnd;
[788]100 string sSql2 = "BSDX RESOURCE LETTERS^" + sClinicList;
[789]101
102 _dsRebookAppts = new dsRebookAppts();
103 _dsRebookAppts.PatientAppts.Merge(docManager.RPMSDataTable(sSql1, "PatientAppts"));
104 _dsRebookAppts.BSDXResource.Merge(docManager.RPMSDataTable(sSql2, "Resources"));
105
[788]106 }
[614]107 catch (Exception ex)
108 {
109 throw ex;
110 }
[789]111
112 PrintPreviewControl.Document = printRebookLetters;
113
[614]114 }
[789]115
116 /// <summary>
117 /// Print Rebook Letters by Date
118 /// </summary>
119 /// <param name="docManager">This docManger</param>
120 /// <param name="sClinicList">Clinics for which to print</param>
121 /// <param name="sApptIDList">List of appointments IENs in ^BSDXAPPT, delimited by |</param>
[788]122 public void InitializeFormRebookLetters(CGDocumentManager docManager,
123 string sClinicList,
124 string sApptIDList)
125 {
126 try
127 {
128 if (sClinicList == "")
129 {
130 throw new Exception("At least one clinic must be selected.");
131 }
[614]132
[789]133 string sSql1 = "BSDX REBOOK LIST^" + sApptIDList;
[788]134 string sSql2 = "BSDX RESOURCE LETTERS^" + sClinicList;
135
[789]136 _dsRebookAppts = new dsRebookAppts();
137 _dsRebookAppts.PatientAppts.Merge(docManager.RPMSDataTable(sSql1, "PatientAppts"));
138 _dsRebookAppts.BSDXResource.Merge(docManager.RPMSDataTable(sSql2, "Resources"));
139
140
[788]141 }
142 catch (Exception ex)
143 {
144 throw ex;
145 }
[789]146
147 PrintPreviewControl.Document = printRebookLetters;
[788]148 }
149
150 /// <summary>
151 /// Print Cancellation letters to mail to patients
152 /// </summary>
153 /// <param name="docManager">This Docmanager</param>
154 /// <param name="sClinicList">| delemited clinic list (IEN's)</param>
155 /// <param name="dtBegin">Beginning Date</param>
156 /// <param name="dtEnd">Ending Date</param>
[614]157 public void InitializeFormCancellationLetters(CGDocumentManager docManager,
158 string sClinicList,
[788]159 DateTime dtBegin,
160 DateTime dtEnd)
161 {
[614]162 try
163 {
164 if (sClinicList == "")
165 {
166 throw new Exception("At least one clinic must be selected.");
167 }
168
[788]169 string sBegin = dtBegin.ToString("M/d/yyyy@HH:mm");
170 string sEnd = dtEnd.ToString("M/d/yyyy@HH:mm");
171
172 //Call RPC to get list of appt ids that have been cancelled for these clinics on these dates
173 string sSql1 = "BSDX CANCEL CLINIC LIST^" + sClinicList + "^" + sBegin + "^" + sEnd;
174 string sSql2 = "BSDX RESOURCE LETTERS^" + sClinicList;
175
176 _dsRebookAppts = new dsRebookAppts();
177 _dsRebookAppts.PatientAppts.Merge(docManager.RPMSDataTable(sSql1, "PatientAppts"));
178 _dsRebookAppts.BSDXResource.Merge(docManager.RPMSDataTable(sSql2, "Resources"));
179
180 PrintPreviewControl.Document = printCancelLetters;
181
[614]182 }
183 catch (Exception ex)
184 {
185 throw ex;
186 }
187 }
[788]188 /// <summary>
189 /// Print Reminder Letters to give or mail to patients
190 /// </summary>
191 /// <param name="docManager">This docManger</param>
192 /// <param name="sClinicList">Clinics for which to print</param>
193 /// <param name="dtBegin">Beginning Date</param>
194 /// <param name="dtEnd">End Date</param>
195 public void InitializeFormPatientReminderLetters(CGDocumentManager docManager,
[614]196 string sClinicList,
197 DateTime dtBegin,
198 DateTime dtEnd)
199 {
200 try
201 {
202 if (sClinicList == "")
203 {
204 throw new Exception("At least one clinic must be selected.");
205 }
206
[788]207 _dtBegin = dtBegin;
208 _dtEnd = dtEnd;
209 string sBegin = dtBegin.ToShortDateString();
210 string sEnd = dtEnd.ToShortDateString();
211 this.Text = "Clinic Schedules";
[614]212
[788]213 string sSql = "BSDX CLINIC LETTERS^" + sClinicList + "^" + sBegin + "^" + sEnd;
214 string sSql2 = "BSDX RESOURCE LETTERS^" + sClinicList;
215
216 _dsApptDisplay = new dsPatientApptDisplay2();
217 _dsApptDisplay.BSDXResource.Merge(docManager.RPMSDataTable(sSql2, "Resources"));
218 _dsApptDisplay.PatientAppts.Merge(docManager.RPMSDataTable(sSql, "PatientAppts"));
219
220 this.PrintPreviewControl.Document = printReminderLetters;
[614]221
222 }
223 catch (Exception ex)
224 {
225 throw ex;
226 }
227 }
228
[789]229 /// <summary>
230 /// Ctor
231 /// </summary>
[788]232 public DPatientLetter() : base()
[614]233 {
234 //
235 // Required for Windows Form Designer support
236 //
237 InitializeComponent();
238
239 //
240 // TODO: Add any constructor code after InitializeComponent call
241 //
242 }
243
244 /// <summary>
245 /// Clean up any resources being used.
246 /// </summary>
247 protected override void Dispose( bool disposing )
248 {
249 if( disposing )
250 {
251 if(components != null)
252 {
253 components.Dispose();
254 }
255 }
256 base.Dispose( disposing );
257 }
258
259 #region Windows Form Designer generated code
260 /// <summary>
261 /// Required method for Designer support - do not modify
262 /// the contents of this method with the code editor.
263 /// </summary>
264 private void InitializeComponent()
265 {
[788]266 this.printAppts = new System.Drawing.Printing.PrintDocument();
267 this.printReminderLetters = new System.Drawing.Printing.PrintDocument();
268 this.printCancelLetters = new System.Drawing.Printing.PrintDocument();
[789]269 this.printRebookLetters = new System.Drawing.Printing.PrintDocument();
[772]270 this.SuspendLayout();
271 //
[788]272 // printAppts
[772]273 //
[788]274 this.printAppts.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printAppts_PrintPage);
[772]275 //
[788]276 // printReminderLetters
277 //
278 this.printReminderLetters.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printReminderLetters_PrintPage);
279 //
280 // printCancelLetters
281 //
282 this.printCancelLetters.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printCancelLetters_PrintPage);
283 //
[789]284 // printRebookLetters
285 //
286 this.printRebookLetters.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printRebookLetters_PrintPage);
287 //
[772]288 // DPatientLetter
289 //
290 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
291 this.ClientSize = new System.Drawing.Size(648, 398);
292 this.Name = "DPatientLetter";
293 this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
294 this.Text = "Patient Letter";
295 this.ResumeLayout(false);
[614]296
297 }
298 #endregion
[772]299
[788]300 private void printAppts_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
[772]301 {
[788]302 //Each time we enter here, we start off with a new page number - we start off with zero
303 _pageNumber++; //becomes one first time through
304
[772]305 // _currentResourcePrinting starts with zero. There will be at least this one.
[788]306 ClinicalScheduling.Printing.PrintAppointments(_dsApptDisplay, e, _dtBegin, _dtEnd,
307 _currentResourcePrinting, ref _currentApptPrinting, _pageNumber);
[772]308
309 //If the printing routine says it needs more pages to print the appointments,
310 //return here and have it print again.
311 if (e.HasMorePages == true) return;
312
313 // if there are more resouces to print, increment. Setting HasMorePages to true
314 // calls this routine again, so printing will happen with the incremented _currentResourcePrinting
[788]315 if (_currentResourcePrinting < _dsApptDisplay.BSDXResource.Rows.Count - 1)
[772]316 {
317 _currentResourcePrinting++;
[788]318 //reset _currentApptPrinting
319 _currentApptPrinting = 0;
[772]320 e.HasMorePages = true;
[855]321 return;
322 }
323
324 // if neither of these conditions is true, then we are done with printing.
325 // So reset counters for next one. Fixes ticket #15 on https://trac.opensourcevista.net/ticket/15
326 _currentResourcePrinting = 0;
327 _currentApptPrinting = 0;
328 _pageNumber = 0;
[788]329 }
330
331 private void printReminderLetters_PrintPage(object sender, PrintPageEventArgs e)
332 {
333 // no patients
334 if (_dsApptDisplay.PatientAppts.Count == 0)
335 {
336 ClinicalScheduling.Printing.PrintMessage("No Appointments found", e);
337 return;
[772]338 }
[788]339 // if there are patients
340 else if (_currentApptPrinting < _dsApptDisplay.PatientAppts.Count)
341 {
342 dsPatientApptDisplay2.BSDXResourceRow c = (dsPatientApptDisplay2.BSDXResourceRow)
343 _dsApptDisplay.PatientAppts[_currentApptPrinting].GetParentRow(_dsApptDisplay.Relations[0]);
344 ClinicalScheduling.Printing.PrintReminderLetter(_dsApptDisplay.PatientAppts[_currentApptPrinting], e, c.LETTER_TEXT, "Reminder Letter");
345 _currentApptPrinting++;
346 if (_currentApptPrinting < _dsApptDisplay.PatientAppts.Count)
[855]347 {
[788]348 e.HasMorePages = true;
[855]349 return;
350 }
[788]351 }
[855]352
353 // If we reach this point, we need to reset the counter (ticket #15 on https://trac.opensourcevista.net/ticket/15)
354 _currentApptPrinting = 0;
[772]355
356 }
[788]357
358 private void printCancelLetters_PrintPage(object sender, PrintPageEventArgs e)
359 {
360 // no patients
361 if (_dsRebookAppts.PatientAppts.Count == 0)
362 {
363 ClinicalScheduling.Printing.PrintMessage("No Appointments found", e);
364 return;
365 }
366 // if there are patients
367 else if (_currentApptPrinting < _dsRebookAppts.PatientAppts.Count)
368 {
369 dsRebookAppts.BSDXResourceRow c = (dsRebookAppts.BSDXResourceRow)
370 _dsRebookAppts.PatientAppts[_currentApptPrinting].GetParentRow(_dsRebookAppts.Relations[0]);
371 ClinicalScheduling.Printing.PrintCancelLetter(_dsRebookAppts.PatientAppts[_currentApptPrinting], e, c.CLINIC_CANCELLATION_LETTER, "Cancellation Letter");
372 _currentApptPrinting++;
373 if (_currentApptPrinting < _dsRebookAppts.PatientAppts.Count)
[855]374 {
[788]375 e.HasMorePages = true;
[855]376 return;
377 }
[788]378 }
379
[855]380 // If we reach this point, we need to reset the counter (ticket #15 on https://trac.opensourcevista.net/ticket/15)
381 _currentApptPrinting = 0;
382
[788]383 }
[789]384
385 private void printRebookLetters_PrintPage(object sender, PrintPageEventArgs e)
386 {
387 // no patients
388 if (_dsRebookAppts.PatientAppts.Count == 0)
389 {
390 ClinicalScheduling.Printing.PrintMessage("No Appointments found", e);
391 return;
392 }
393 // if there are patients
394 else if (_currentApptPrinting < _dsRebookAppts.PatientAppts.Count)
395 {
396 dsRebookAppts.BSDXResourceRow c = (dsRebookAppts.BSDXResourceRow)
397 _dsRebookAppts.PatientAppts[_currentApptPrinting].GetParentRow(_dsRebookAppts.Relations[0]);
398 //XXX: Rebook letter rather oddly currently stored in NO SHOW LETTER field. What gives???
399 ClinicalScheduling.Printing.PrintRebookLetter(_dsRebookAppts.PatientAppts[_currentApptPrinting], e, c.NO_SHOW_LETTER, "Rebook Letter");
400 _currentApptPrinting++;
401 if (_currentApptPrinting < _dsRebookAppts.PatientAppts.Count)
[855]402 {
[789]403 e.HasMorePages = true;
[855]404 return;
405 }
[789]406 }
[855]407
408 // If we reach this point, we need to reset the counter (ticket #15 on https://trac.opensourcevista.net/ticket/15)
409 _currentApptPrinting = 0;
410
[789]411 }
[614]412 }
413}
Note: See TracBrowser for help on using the repository browser.