public static Hashtable GetColorCodes() { Hashtable offeringColourHash = new Hashtable(); Offering[] offerings = OfferingDB.GetAll(false, null); foreach (Offering offering in offerings) { if (offering.UseCustomColor) { offeringColourHash[offering.OfferingID] = offering.CustomColor; } } return(offeringColourHash); }
public static string Run(bool incDisplay, bool incSending, bool incPtSending, DateTime date) { date = date.Date; string batchEmail = SystemVariableDB.GetByDescr("ServiceSpecificBookingReminderLettersToBatch_EmailAddress").Value; // don't actually run it if email empty (ie deactivated) incSending = incSending && batchEmail.Length > 0; Site[] sites = SiteDB.GetAll(); string output = string.Empty; Hashtable lettersHash = LetterDB.GetHashTable(); Offering[] offerings = OfferingDB.GetAll(false, -1); for (int j = 0; j < offerings.Length; j++) { if (offerings[j].ReminderLetterMonthsLaterToSend == 0 || offerings[j].ReminderLetterID == -1) { continue; } Booking[] bookings = BookingDB.GetWhenLastServiceFromXMonthsAgoToGenerageReminderLetter(offerings[j].OfferingID, date, offerings[j].ReminderLetterMonthsLaterToSend); Hashtable distinctPatients = new Hashtable(); for (int i = 0; i < bookings.Length; i++) { if (bookings[i].Patient != null && distinctPatients[bookings[i].Patient.PatientID] == null) { distinctPatients[bookings[i].Patient.PatientID] = bookings[i].Patient; } } Patient[] patients = (Patient[])(new ArrayList(distinctPatients.Values)).ToArray(typeof(Patient)); Hashtable patientContactEmailHash = GetPatientEmailCache(patients); // Generate Letters ArrayList filesToPrint = new ArrayList(); for (int i = 0; i < bookings.Length; i++) { Booking curBooking = bookings[i]; if (curBooking.Patient == null) { continue; } Patient curPatient = curBooking.Patient; string curPatientEmail = GetEmail(patientContactEmailHash, curPatient.Person.EntityID); bool curPatientHasEmail = curPatientEmail != null; SendMethod sendMethod = incPtSending && curPatientHasEmail ? SendMethod.Email_To_Patient : SendMethod.Batch; if (incSending) { if (sendMethod == SendMethod.Email_To_Patient) { // generate and send email Letter.FileContents fileContents = GenerteLetter(curBooking, Letter.FileFormat.PDF, lettersHash, sites); fileContents.DocName = "Reminder" + System.IO.Path.GetExtension(fileContents.DocName); if (fileContents != null) { Site site = SiteDB.GetSiteByType(curBooking.Organisation.IsAgedCare ? SiteDB.SiteType.AgedCare : SiteDB.SiteType.Clinic); SendEmail(site.Name, curPatientEmail, "Important Reminder", "Hi " + curBooking.Patient.Person.Firstname + ",<br /><br />Please find attached a review reminder letter for a previous appointment.<br /><br/>Best regards,<br />" + site.Name, true, new Letter.FileContents[] { fileContents }); } } else { // generate and add to batch list (if batch email set) if (batchEmail.Length > 0) { Letter.FileContents fileContents = GenerteLetter(curBooking, Letter.FileFormat.Word, lettersHash, sites); if (fileContents != null) { filesToPrint.Add(fileContents); } } } } string addEditContactListPage; if (Utilities.GetAddressType().ToString() == "Contact") { addEditContactListPage = "AddEditContactList.aspx"; } else if (Utilities.GetAddressType().ToString() == "ContactAus") { addEditContactListPage = "ContactAusListV2.aspx"; } else { throw new Exception("Unknown AddressType in config: " + Utilities.GetAddressType().ToString().ToString()); } string allFeatures = "dialogWidth:555px;dialogHeight:350px;center:yes;resizable:no; scroll:no"; string onclick = "onclick=\"javascript:window.showModalDialog('" + addEditContactListPage + "?entity_type=referrer&id=" + curBooking.Patient.Person.EntityID.ToString() + "', '', '" + allFeatures + "');document.getElementById('btnUpdateList').click();return false;\""; string hrefUpdateEmail = "<u><a style=\"text-decoration: none\" title=\"Edit\" AlternateText=\"Edit\" " + onclick + " href=\"\">Update PT Email</a></u>"; output += @"<tr> <td class=""nowrap"">" + curBooking.BookingID + " [" + curBooking.DateStart.ToString("dd-MM-yyyy") + " " + curBooking.DateStart.ToString("HH:mm") + "-" + curBooking.DateEnd.ToString("HH:mm") + "]" + @"</td> <td class=""text_left"">" + curBooking.Organisation.Name + @"</td> <td class=""text_left"">" + curBooking.Offering.Name + @"</td> <td class=""text_left"">" + ((Letter)lettersHash[curBooking.Offering.ReminderLetterID]).Docname + @"</td> <td class=""text_left"">" + curPatient.Person.FullnameWithoutMiddlename + @"</td> <td class=""nowrap"">" + (curPatientHasEmail ? curPatientEmail : "Has No Email") + " (" + hrefUpdateEmail + ")" + @"</td> <td>" + sendMethod.ToString().Replace("_", " ") + @"</td> </tr>"; } // combine and email where the patient had no email if (incSending && filesToPrint.Count > 0) { Letter.FileContents filesContents = Letter.FileContents.Merge((Letter.FileContents[])filesToPrint.ToArray(typeof(Letter.FileContents)), "Reminders.pdf"); // .pdf SendEmail( ((SystemVariables)System.Web.HttpContext.Current.Session["SystemVariables"])["Email_FromName"].Value, batchEmail, "Batch Reminder Letters", string.Empty, true, new Letter.FileContents[] { filesContents }); } } if (output.Length == 0) { output += @"<tr> <td colspan=""7"">No Reminders To Send Today</td> </tr>"; } return(@" <table class=""table table-bordered table-striped table-grid table-grid-top-bottum-padding-thick auto_width block_center"" style=""border-style:solid;border-width:1px;border-collapse:collapse;padding:4px;""> <tr> <th>Booking (ID, Date/Time)</th> <th>Organisation</th> <th>Service</th> <th>Letter</th> <th>Patient</th> <th>PT Email</th> <th>Send Method</th> </tr> " + output + @" </table>"); }
protected void SetupGUI() { if (Request.QueryString["date_type"] != null) { rblDateType.SelectedValue = Request.QueryString["date_type"]; } UserView userView = UserView.GetInstance(); ddlOrgs.Style["width"] = "300px"; ddlOrgs.Items.Clear(); ddlOrgs.Items.Add(new ListItem("All " + (userView.IsAgedCareView ? "Facilities" : "Clinics"), (-1).ToString())); foreach (Organisation curOrg in OrganisationDB.GetAll(false, true, !userView.IsClinicView && !userView.IsGPView, !userView.IsAgedCareView, true, true)) { ListItem li = new ListItem(curOrg.Name, curOrg.OrganisationID.ToString()); li.Attributes.Add("title", curOrg.Name); ddlOrgs.Items.Add(li); } ddlProviders.Style["width"] = "300px"; ddlProviders.Items.Clear(); ddlProviders.Items.Add(new ListItem("All Providers", (-1).ToString())); foreach (Staff curProv in StaffDB.GetAll()) { if (curProv.IsProvider) { ddlProviders.Items.Add(new ListItem(curProv.Person.FullnameWithoutMiddlename, curProv.StaffID.ToString())); } } ddlOfferings.Style["width"] = "300px"; ddlOfferings.Items.Clear(); ddlOfferings.Items.Add(new ListItem("All Products & Services", (-1).ToString())); foreach (Offering offering in OfferingDB.GetAll(false, userView.IsAgedCareView ? "3,4" : "1,3", "63,89", false)) { ddlOfferings.Items.Add(new ListItem(offering.Name, offering.OfferingID.ToString())); } if (IsValidFormOrgID()) { Organisation org = OrganisationDB.GetByID(GetFormOrgID()); if (org != null) { ddlOrgs.SelectedValue = org.OrganisationID.ToString(); } } if (!UserView.GetInstance().IsAdminView) { providerRow.Visible = false; Staff provider = StaffDB.GetByID(Convert.ToInt32(Session["StaffID"])); if (provider != null) { ddlProviders.SelectedValue = provider.StaffID.ToString(); } } else { if (IsValidFormProviderID()) { Staff provider = StaffDB.GetByID(GetFormProviderID()); if (provider != null) { ddlProviders.SelectedValue = provider.StaffID.ToString(); } } } if (IsValidFormOfferingID()) { Offering offering = OfferingDB.GetByID(GetFormOfferingID()); if (offering != null) { ddlOfferings.SelectedValue = offering.OfferingID.ToString(); } } txtStartDate.Text = IsValidFormStartDate() ? (GetFormStartDate(false) == DateTime.MinValue ? "" : GetFormStartDate(false).ToString("dd-MM-yyyy")) : DateTime.Today.ToString("dd-MM-yyyy"); txtEndDate.Text = IsValidFormEndDate() ? (GetFormEndDate(false) == DateTime.MinValue ? "" : GetFormEndDate(false).ToString("dd-MM-yyyy")) : DateTime.Today.ToString("dd-MM-yyyy"); txtStartDate_Picker.OnClientClick = "displayDatePicker('txtStartDate', this, 'dmy', '-'); return false;"; txtEndDate_Picker.OnClientClick = "displayDatePicker('txtEndDate', this, 'dmy', '-'); return false;"; }