protected void GrdReferrer_RowUpdating(object sender, GridViewUpdateEventArgs e) { Label lblId = (Label)GrdReferrer.Rows[e.RowIndex].FindControl("lblId"); DropDownList ddlRefs = (DropDownList)GrdReferrer.Rows[e.RowIndex].FindControl("ddlRefs"); TextBox txtProviderNumber = (TextBox)GrdReferrer.Rows[e.RowIndex].FindControl("txtProviderNumber"); CheckBox chkIsReportEveryVisit = (CheckBox)GrdReferrer.Rows[e.RowIndex].FindControl("chkIsReportEveryVisit"); CheckBox chkIsBatchSendAllPatientsTreatmentNotes = (CheckBox)GrdReferrer.Rows[e.RowIndex].FindControl("chkIsBatchSendAllPatientsTreatmentNotes"); RegisterReferrer regRef = RegisterReferrerDB.GetByID(Convert.ToInt32(lblId.Text)); if (RegisterReferrerDB.Exists(regRef.Organisation.OrganisationID, Convert.ToInt32(ddlRefs.SelectedValue), regRef.RegisterReferrerID)) { SetErrorMessage("Clinic is already linked to " + ddlRefs.SelectedItem.Text + ". If it is not visible, use the 'show deleted' checkbox and un-delete it."); GrdReferrer.EditIndex = -1; FillGrid(); return; } RegisterReferrerDB.Update( regRef.RegisterReferrerID, regRef.Organisation.OrganisationID, Convert.ToInt32(ddlRefs.SelectedValue), txtProviderNumber.Text.Trim(), chkIsReportEveryVisit.Checked, chkIsBatchSendAllPatientsTreatmentNotes.Checked, regRef.DateLastBatchSendAllPatientsTreatmentNotes); GrdReferrer.EditIndex = -1; FillGrid(); }
/* * * protected void btnRunBatchSendTreatmentNotes_AllReferrers_SinceLast_Click(object sender, EventArgs e) * { * try * { * DateTime startDate = GetStartDate(6, GetLastDateBatchSendTreatmentNotesAllReferrers()); * DateTime endDate = DateTime.Now; * * RunBatchSendTreatmentNotes_AllReferrers(startDate, endDate); * } * catch (CustomMessageException cmEx) * { * SetErrorMessage(cmEx.Message); * } * } * protected void btnRunBatchSendTreatmentNotes_AllReferrers_Last6Months_Click(object sender, EventArgs e) * { * try * { * DateTime startDate = DateTime.Now.AddMonths(-6); * DateTime endDate = DateTime.Now; * * RunBatchSendTreatmentNotes_AllReferrers(startDate, endDate); * } * catch (CustomMessageException cmEx) * { * SetErrorMessage(cmEx.Message); * } * } * protected void RunBatchSendTreatmentNotes_AllReferrers(DateTime startDate, DateTime endDate) * { * ArrayList noteFileList = new ArrayList(); * * try * { * * // TODO: Send Letter By Email * * * string tmpLettersDirectory = Letter.GetTempLettersDirectory(); * if (!Directory.Exists(tmpLettersDirectory)) * throw new CustomMessageException("Temp letters directory doesn't exist"); * * * // get all notes of all patients of this referrer * foreach (RegisterReferrer regReferrer in RegisterReferrerDB.GetAllByBatchSendAllTreatmentNotes(true)) * { * foreach (Patient patient in PatientReferrerDB.GetActivePatientsOf(regReferrer.RegisterReferrerID)) * { * HealthCard[] hcs = HealthCardDB.GetAllByPatientID(patient.PatientID); * HealthCard hc = hcs[0]; * * Booking[] completedBookings = BookingDB.GetBetween(startDate.Date, endDate, null, null, patient, false, "187"); * foreach (Booking booking in completedBookings) * { * if (booking.NoteCount == 0) * continue; * * Letter.FileContents fileContentsStandardTreatment = booking.GetTreatmentLetter(-1, hc, regReferrer.Referrer, Convert.ToInt32(Session["SiteID"]), Convert.ToInt32(Session["StaffID"]), false, 1); * string tmpFileName_EPCTreatment = FileHelper.GetTempFileName(tmpLettersDirectory + fileContentsStandardTreatment.DocName); * File.WriteAllBytes(tmpFileName_EPCTreatment, fileContentsStandardTreatment.Contents); * noteFileList.Add(tmpFileName_EPCTreatment); * } * } * } * * * SetErrorMessage("Generated " + noteFileList.Count + " Notes"); * if (noteFileList.Count > 0) // merge * { * string docName = "TreatmentNotes.doc"; * * string tmpFinalFileName = Letter.MergeMultipleDocuments((string[])noteFileList.ToArray(typeof(string)), tmpLettersDirectory + docName); * byte[] fileContents = System.IO.File.ReadAllBytes(tmpFinalFileName); * * for (int i = noteFileList.Count - 1; i >= 0; i--) * { * File.Delete(noteFileList[i].ToString()); * noteFileList.RemoveAt(i); * } * File.Delete(tmpFinalFileName); * * Session["downloadFile_Contents"] = fileContents; * Session["downloadFile_DocName"] = docName; * Page.ClientScript.RegisterStartupScript(this.GetType(), "download", "<script language=javascript>window.open('DownloadFile.aspx','_blank','status=1,toolbar=0,menubar=0,location=1,scrollbars=1,resizable=1,width=30,height=30');</script>"); * * RegisterReferrerDB.UpdateLastBatchSendAllPatientsTreatmentNotes_All(endDate); * SetLastDateBatchSendTreatmentNotesAllReferrers(endDate); * FillGrid(); // because each referrers date that has send=true should have been updated * } * * * // don't allow this to be in production: * // * bool resetGlobalLastPrintedDate = false; * bool resetAllRegReferrersLastPrintedDate = false; * * if (resetGlobalLastPrintedDate) * SetLastDateBatchSendTreatmentNotesAllReferrers(DateTime.MinValue); * if (resetAllRegReferrersLastPrintedDate) * { * RegisterReferrerDB.UpdateLastBatchSendAllPatientsTreatmentNotes_All(DateTime.MinValue); * FillGrid(); * } * * } * catch (CustomMessageException cmEx) * { * for(int i=noteFileList.Count-1; i>= 0; i--) * { * File.Delete(noteFileList[i].ToString()); * noteFileList.RemoveAt(i); * } * SetErrorMessage(cmEx.Message); * } * } * * protected void btnRunBatchSendTreatmentNotes_Click(object sender, EventArgs e) * { * try * { * object argument = ((Button)sender).CommandArgument; * int register_referrer_id = Convert.ToInt32(argument); * RegisterReferrer regReferrer = RegisterReferrerDB.GetByID(register_referrer_id); * if (regReferrer == null) * throw new CustomMessageException(""); * * DateTime startDate = DateTime.Now.AddMonths(-6); // GetStartDate(6, regReferrer.DateLastBatchSendAllPatientsTreatmentNotes); * DateTime endDate = DateTime.Now; * * RunBatchSendTreatmentNotes(regReferrer, startDate, endDate); * } * catch (CustomMessageException cmEx) * { * SetErrorMessage(cmEx.Message); * } * * } * protected void RunBatchSendTreatmentNotes(RegisterReferrer regReferrer, DateTime startDate, DateTime endDate) * { * ArrayList noteFileList = new ArrayList(); * * try * { * * // TODO: Send Letter By Email * * * * string tmpLettersDirectory = Letter.GetTempLettersDirectory(); * if (!Directory.Exists(tmpLettersDirectory)) * throw new CustomMessageException("Temp letters directory doesn't exist"); * * * // get all notes of all patients of this referrer * foreach (Patient patient in PatientReferrerDB.GetActivePatientsOf(regReferrer.RegisterReferrerID)) * { * HealthCard[] hcs = HealthCardDB.GetAllByPatientID(patient.PatientID); * HealthCard hc = hcs[0]; * * Booking[] completedBookings = BookingDB.GetBetween(startDate.Date, endDate, null, null, patient, false, "187"); * foreach (Booking booking in completedBookings) * { * if (booking.NoteCount == 0) * continue; * * Letter.FileContents fileContentsStandardTreatment = booking.GetTreatmentLetter(-1, hc, regReferrer.Referrer, Convert.ToInt32(Session["SiteID"]), Convert.ToInt32(Session["StaffID"]), false, 1); * string tmpFileName_EPCTreatment = FileHelper.GetTempFileName(tmpLettersDirectory + fileContentsStandardTreatment.DocName); * File.WriteAllBytes(tmpFileName_EPCTreatment, fileContentsStandardTreatment.Contents); * noteFileList.Add(tmpFileName_EPCTreatment); * } * } * * if (noteFileList.Count == 0) * { * SetErrorMessage("No treatment notes for: " + regReferrer.Referrer.Person.Fullname); * return; * } * else // merge * { * SetErrorMessage("Treatment notes created for: " + regReferrer.Referrer.Person.Fullname); * * string docName = "TreatmentNotes.doc"; * * string tmpFinalFileName = Letter.MergeMultipleDocuments((string[])noteFileList.ToArray(typeof(string)), tmpLettersDirectory + docName); * byte[] fileContents = System.IO.File.ReadAllBytes(tmpFinalFileName); * * for (int i = noteFileList.Count - 1; i >= 0; i--) * { * File.Delete(noteFileList[i].ToString()); * noteFileList.RemoveAt(i); * } * File.Delete(tmpFinalFileName); * * Session["downloadFile_Contents"] = fileContents; * Session["downloadFile_DocName"] = docName; * Page.ClientScript.RegisterStartupScript(this.GetType(), "download", "<script language=javascript>window.open('DownloadFile.aspx','_blank','status=1,toolbar=0,menubar=0,location=1,scrollbars=1,resizable=1,width=30,height=30');</script>"); * * } * * RegisterReferrerDB.UpdateLastBatchSendAllPatientsTreatmentNotes(regReferrer.RegisterReferrerID, endDate); * FillGrid(); * } * catch (CustomMessageException cmEx) * { * for (int i = noteFileList.Count - 1; i >= 0; i--) * { * File.Delete(noteFileList[i].ToString()); * noteFileList.RemoveAt(i); * } * SetErrorMessage(cmEx.Message); * } * } * * protected DateTime GetStartDate(int maxMonths, DateTime lastSendDate) * { * bool hasLastSendDateAndNotOverMaxMonthsAgo = (lastSendDate != DateTime.MinValue && lastSendDate > DateTime.Now.AddMonths(-1 * maxMonths)); * return hasLastSendDateAndNotOverMaxMonthsAgo ? lastSendDate : DateTime.Now.AddMonths(-1 * maxMonths); * } * */ #endregion protected void btnMovePatients_Click(object sender, EventArgs e) { RegisterReferrer regRefFrom = RegisterReferrerDB.GetByID(Convert.ToInt32(hiddenMovePatientFrom.Value)); RegisterReferrer regRefTo = RegisterReferrerDB.GetByID(Convert.ToInt32(hiddenMovePatientTo.Value)); PatientReferrerDB.UpdateMoveAllPatients(regRefFrom.RegisterReferrerID, regRefTo.RegisterReferrerID); FillGrid(); SetErrorMessage("<font color=\"black\">Patients Moved From</font> " + regRefFrom.Referrer.Person.Firstname + " " + regRefFrom.Referrer.Person.Surname + "[" + regRefFrom.Organisation.Name + "] <font color=\"black\">to</font> " + regRefTo.Referrer.Person.Firstname + " " + regRefTo.Referrer.Person.Surname + "[" + regRefTo.Organisation.Name + "]"); }
protected void btnRegisterReferrerSelectionUpdate_Click(object sender, EventArgs e) { // can update info ... if needed... int newRegisterReferrerID = Convert.ToInt32(registerReferrerID.Value); if (newRegisterReferrerID == -1) { lblReferrerText.Text = "<b>All Referreres</b>"; } else { RegisterReferrer regRef = RegisterReferrerDB.GetByID(newRegisterReferrerID); //lblReferrerText.Text = regRef.Referrer.Person.FullnameWithoutMiddlename; string phNumTxt = string.Empty; if (Utilities.GetAddressType().ToString() == "Contact") { Contact[] phNums = ContactDB.GetByEntityID(2, regRef.Organisation.EntityID); for (int i = 0; i < phNums.Length; i++) { phNumTxt += (i > 0 ? "<br />" : "") + Utilities.FormatPhoneNumber(phNums[i].AddrLine1) + " (" + phNums[i].ContactType.Descr + ")"; } } else if (Utilities.GetAddressType().ToString() == "ContactAus") { ContactAus[] phNums = ContactAusDB.GetByEntityID(2, regRef.Organisation.EntityID); for (int i = 0; i < phNums.Length; i++) { phNumTxt += (i > 0 ? "<br />" : "") + Utilities.FormatPhoneNumber(phNums[i].AddrLine1) + " (" + phNums[i].ContactType.Descr + ")"; } } else { throw new Exception("Unknown AddressType in config: " + Utilities.GetAddressType().ToString().ToString()); } lblReferrerText.Text = "<b>" + regRef.Referrer.Person.FullnameWithoutMiddlename + "</b> [" + regRef.Organisation.Name + "]" + "<br />" + (phNumTxt.Length == 0 ? "" : phNumTxt + "<br />"); // put in referrers fax and phone numbers } }
protected void GrdRegistration_RowUpdating(object sender, GridViewUpdateEventArgs e) { Label lblId = (Label)GrdRegistration.Rows[e.RowIndex].FindControl("lblId"); DropDownList ddlReferrer = (DropDownList)GrdRegistration.Rows[e.RowIndex].FindControl("ddlReferrer"); TextBox txtProviderNumber = (TextBox)GrdRegistration.Rows[e.RowIndex].FindControl("txtProviderNumber"); DropDownList ddlIsClinic = (DropDownList)GrdRegistration.Rows[e.RowIndex].FindControl("ddlIsClinic"); CheckBox chkIsReportEveryVisit = (CheckBox)GrdRegistration.Rows[e.RowIndex].FindControl("chkIsReportEveryVisit"); CheckBox chkIsBatchSendAllPatientsTreatmentNotes = (CheckBox)GrdRegistration.Rows[e.RowIndex].FindControl("chkIsBatchSendAllPatientsTreatmentNotes"); Organisation org = OrganisationDB.GetByID(GetFormID()); if (org == null) { HideTableAndSetErrorMessage(""); return; } RegisterReferrer registerReferrer = RegisterReferrerDB.GetByID(Convert.ToInt32(lblId.Text)); RegisterReferrerDB.Update(Convert.ToInt32(lblId.Text), org.OrganisationID, Convert.ToInt32(ddlReferrer.SelectedValue), txtProviderNumber.Text, chkIsReportEveryVisit.Checked, chkIsBatchSendAllPatientsTreatmentNotes.Checked, registerReferrer.DateLastBatchSendAllPatientsTreatmentNotes); GrdRegistration.EditIndex = -1; FillGrid(); }
protected void FillGrid_Patients(Type type, int id) { UserView userView = UserView.GetInstance(); DataTable dt = null; if (type == typeof(Organisation)) { Organisation org = OrganisationDB.GetByID(id); lblPatientsHeading.Text = "Patients of <big><b>All Referrers</b></big> at <big><b>" + org.Name + "</b></big>"; if (userView.IsAdminView && userView.IsClinicView) { dt = PatientDB.GetDataTable(false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", "", "", id.ToString(), false, false, false); } if (userView.IsAdminView && !userView.IsClinicView) { dt = RegisterPatientDB.GetDataTable_PatientsOfOrgGroupType(false, "6", false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", "", "", id.ToString(), false, false, false); } if (!userView.IsAdminView) { dt = RegisterPatientDB.GetDataTable_PatientsOf(false, Convert.ToInt32(Session["OrgID"]), false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", "", "", id.ToString(), false, false, false); } } else if (type == typeof(RegisterReferrer)) { RegisterReferrer regRef = RegisterReferrerDB.GetByID(id); lblPatientsHeading.Text = "Patients of <big><b>" + regRef.Referrer.Person.FullnameWithoutMiddlename + "</b></big> at <big><b>" + regRef.Organisation.Name + "</b></big>"; if (userView.IsAdminView && userView.IsClinicView) { dt = PatientDB.GetDataTable(false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", id.ToString(), "", "", false, false, false); } if (userView.IsAdminView && !userView.IsClinicView) { dt = RegisterPatientDB.GetDataTable_PatientsOfOrgGroupType(false, "6", false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", id.ToString(), "", "", false, false, false); } if (!userView.IsAdminView) { dt = RegisterPatientDB.GetDataTable_PatientsOf(false, Convert.ToInt32(Session["OrgID"]), false, false, userView.IsClinicView, false, "", false, "", false, "", "", "", "", "", false, -1, -1, -1, "", "", id.ToString(), "", "", false, false, false); } } else { SetErrorMessage("Unknown type: " + type.ToString()); return; } lblPatientsHeading.Visible = true; GrdPatients.Visible = true; // put in epc info into the table in a bulk call // epc exp date, if valid, how many epc's remaining... int[] patientIDs = new int[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { patientIDs[i] = Convert.ToInt32(dt.Rows[i]["patient_id"]); } int MedicareMaxNbrServicesPerYear = Convert.ToInt32(SystemVariableDB.GetByDescr("MedicareMaxNbrServicesPerYear").Value); Hashtable patientsMedicareCountThisYearCache = PatientsMedicareCardCountThisYearCacheDB.GetBullk(patientIDs, DateTime.Today.Year); Hashtable patientsMedicareCountNextYearCache = PatientsMedicareCardCountThisYearCacheDB.GetBullk(patientIDs, DateTime.Today.Year + 1); Hashtable patientsEPCRemainingCache = PatientsEPCRemainingCacheDB.GetBullk(patientIDs, DateTime.MinValue); dt.Columns.Add("epc_signed_date", typeof(DateTime)); dt.Columns.Add("epc_expiry_date", typeof(DateTime)); dt.Columns.Add("epc_n_services_left", typeof(Int32)); for (int i = 0; i < dt.Rows.Count; i++) { int patientID = Convert.ToInt32(dt.Rows[i]["patient_id"]); int totalServicesAllowedLeft = (MedicareMaxNbrServicesPerYear - (int)patientsMedicareCountThisYearCache[patientID]); Pair totalEPCRemaining = patientsEPCRemainingCache[patientID] as Pair; int nServicesLeft = 0; if (totalEPCRemaining != null) { DateTime referralSignedDate = (DateTime)totalEPCRemaining.Second; DateTime hcExpiredDate = referralSignedDate.AddYears(1); if (DateTime.Today >= referralSignedDate.Date && DateTime.Today < hcExpiredDate.Date) { nServicesLeft = (int)totalEPCRemaining.First; } if (totalServicesAllowedLeft < nServicesLeft) { nServicesLeft = totalServicesAllowedLeft; } dt.Rows[i]["epc_signed_date"] = referralSignedDate; dt.Rows[i]["epc_expiry_date"] = hcExpiredDate; dt.Rows[i]["epc_n_services_left"] = nServicesLeft; } else { dt.Rows[i]["epc_signed_date"] = DBNull.Value; dt.Rows[i]["epc_expiry_date"] = DBNull.Value; dt.Rows[i]["epc_n_services_left"] = DBNull.Value; } } Session["referrerinfoclinic_patients_data"] = dt; if (dt.Rows.Count > 0) { if (IsPostBack && Session["referrerinfoclinic_patients_sortexpression"] != null && Session["referrerinfoclinic_patients_sortexpression"].ToString().Length > 0) { DataView dataView = new DataView(dt); dataView.Sort = Session["referrerinfoclinic_patients_sortexpression"].ToString(); GrdPatients.DataSource = dataView; } else { GrdPatients.DataSource = dt; } try { GrdPatients.DataBind(); } catch (Exception ex) { HideTableAndSetErrorMessage("", ex.ToString()); } } else { dt.Rows.Add(dt.NewRow()); GrdPatients.DataSource = dt; GrdPatients.DataBind(); int TotalColumns = GrdPatients.Rows[0].Cells.Count; GrdPatients.Rows[0].Cells.Clear(); GrdPatients.Rows[0].Cells.Add(new TableCell()); GrdPatients.Rows[0].Cells[0].ColumnSpan = TotalColumns; GrdPatients.Rows[0].Cells[0].Text = "No Patients"; } }
protected void btnPrint_Click(object sender, EventArgs e) { try { decimal smsBalance = SMSCreditDataDB.GetTotal() - SMSHistoryDataDB.GetTotal(); decimal smsCost = Convert.ToDecimal(SystemVariableDB.GetByDescr("SMSPrice").Value); int maxSMSCountCanAfford = smsCost == 0 ? 1000000 : (int)(smsBalance / smsCost); int smsCountSending = 0; // // Start Validation // txtEmailSubject.Text = txtEmailSubject.Text.Trim(); txtEmailForPrinting.Text = txtEmailForPrinting.Text.Trim(); txtSMSText.Text = txtSMSText.Text.Trim(); bool printSelected = (ddlBothMobileAndEmail.SelectedValue == "1" || ddlEmailNoMobile.SelectedValue == "1" || ddlMobileNoEmail.SelectedValue == "1" || ddlNeitherMobileOrEmail.SelectedValue == "1"); bool emailSelected = (ddlBothMobileAndEmail.SelectedValue == "2" || ddlEmailNoMobile.SelectedValue == "2" || ddlMobileNoEmail.SelectedValue == "2" || ddlNeitherMobileOrEmail.SelectedValue == "2"); bool smsSelected = (ddlBothMobileAndEmail.SelectedValue == "3" || ddlEmailNoMobile.SelectedValue == "3" || ddlMobileNoEmail.SelectedValue == "3" || ddlNeitherMobileOrEmail.SelectedValue == "3"); string validationErrors = string.Empty; if (printSelected) { if (txtEmailForPrinting.Text.Length == 0) { validationErrors += "<li>Printed Batch Letters Email Address To Send To can not be empty.</li>"; } else if (!Utilities.IsValidEmailAddress(txtEmailForPrinting.Text)) { validationErrors += "<li>Printed Batch Letters Email Address To Send To must look like a valid email address.</li>"; } } if (emailSelected) { if (txtEmailSubject.Text.Length == 0) { validationErrors += "<li>Email Subject can not be empty.</li>"; } if (FreeTextBox1.Text.Length == 0) { validationErrors += "<li>Email Text can not be empty.</li>"; } } if (smsSelected) { if (smsCost > 0 && smsBalance == 0) { validationErrors += "<li>Can not send SMS's - your SMS balance is empty. Please topup or unselect sending by SMS.</li>"; } else if (txtSMSText.Text.Length == 0) { validationErrors += "<li>SMS Text can not be empty.</li>"; } } if (validationErrors.Length > 0) { throw new CustomMessageException("<ul>" + validationErrors + "</ul>"); } // // End Validation // // // get hashtables of those with mobiles and emails // ArrayList regRefIDsArr = new ArrayList(); foreach (ListItem referrerItem in lstReferrers.Items) // regrefid { if (referrerItem.Selected) { regRefIDsArr.Add(Convert.ToInt32(referrerItem.Value)); } } int[] regRefIDs = (int[])regRefIDsArr.ToArray(typeof(int)); int[] entityIDs = RegisterReferrerDB.GetOrgEntityIDs(regRefIDs); Hashtable entityIDHash = RegisterReferrerDB.GetOrgEntityIDsHash(regRefIDs); Hashtable regRefIDHash = RegisterReferrerDB.GetByIDsInHashtable(regRefIDs); Hashtable emailHash = PatientsContactCacheDB.GetBullkEmail(entityIDs, -1); Hashtable mobileHash = PatientsContactCacheDB.GetBullkPhoneNumbers(entityIDs, -1, "30"); string email_from_address = ((SystemVariables)System.Web.HttpContext.Current.Session["SystemVariables"])["Email_FromEmail"].Value; string email_from_name = ((SystemVariables)System.Web.HttpContext.Current.Session["SystemVariables"])["Email_FromName"].Value; //bool StoreLettersHistoryInDB = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["StoreLettersHistoryInDB"]); //bool StoreLettersHistoryInFlatFile = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["StoreLettersHistoryInFlatFile"]); bool StoreLettersHistoryInDB = false; // don't store bulk marketing letters bool StoreLettersHistoryInFlatFile = false; // don't store bulk marketing letters // // ok start the sending process // int bulkLetterSendingQueueBatchID = UseBulkLetterSender ? BulkLetterSendingQueueBatchDB.Insert(txtEmailForPrinting.Text, false) : -1; // TODO: Send Letter By Email int letterPrintHistorySendMethodID = 1; // send by mail // make sure at least one referrer selected if (lstReferrers.GetSelectedIndices().Length == 0) { throw new CustomMessageException("Please select at least one referrer."); } // make sure at least one letter selected if (lstLetters.GetSelectedIndices().Length == 0) { throw new CustomMessageException("Please select a letter."); } // get letter and make sure it exists Letter letter = LetterDB.GetByID(Convert.ToInt32(lstLetters.SelectedValue)); string sourchTemplatePath = letter.GetFullPath(Convert.ToInt32(Session["SiteID"])); if (!File.Exists(sourchTemplatePath)) { throw new CustomMessageException("File doesn't exist."); } // get temp directory string tmpLettersDirectory = Letter.GetTempLettersDirectory(); if (!Directory.Exists(tmpLettersDirectory)) { throw new CustomMessageException("Temp letters directory doesn't exist"); } // delete old tmp files FileHelper.DeleteOldFiles(tmpLettersDirectory, new TimeSpan(1, 0, 0)); // create individual merged docs and put into list of docsToMerge - only if there is an org-patient relationship ArrayList docsToMerge = new ArrayList(); Site site = SiteDB.GetByID(Convert.ToInt32(Session["SiteID"])); int StaffID = Convert.ToInt32(Session["StaffID"]); foreach (ListItem referrerItem in lstReferrers.Items) { if (!referrerItem.Selected) { continue; } if (UseBulkLetterSender) { int refEntityID = (int)entityIDHash[Convert.ToInt32(referrerItem.Value)]; string refPhoneNumber = GetPhoneNbr(mobileHash, refEntityID, true); string refEmail = GetEmail(emailHash, refEntityID); SendMethod sendMethod = GetSendMethod(refEmail != null, refPhoneNumber != null); RegisterReferrer regRef = RegisterReferrerDB.GetByID(Convert.ToInt32(referrerItem.Value)); if (sendMethod != SendMethod.None) { string text = string.Empty; if (sendMethod == SendMethod.SMS) { text = txtSMSText.Text; } if (sendMethod == SendMethod.Email) { text = FreeTextBox1.Text; } text = ReplaceMergeFields(text, regRefIDHash, Convert.ToInt32(referrerItem.Value)); bool generateLetter = false; if (sendMethod == SendMethod.SMS) { generateLetter = false; } if (sendMethod == SendMethod.Email) { generateLetter = lstLetters.GetSelectedIndices().Length != 0; } if (sendMethod == SendMethod.Print) { generateLetter = true; } if (sendMethod == SendMethod.SMS) // copy to other methods!! { smsCountSending++; } BulkLetterSendingQueueDB.Insert ( bulkLetterSendingQueueBatchID, (int)sendMethod, // bulk_letter_sending_queue_method_id StaffID, // added_by -1, // patient_id regRef.Referrer.ReferrerID, // referrer_id -1, // booking_id (sendMethod == SendMethod.SMS) ? refPhoneNumber : "", // phone_number (sendMethod == SendMethod.Email) ? refEmail : "", // email_to_address "", // email_to_name (sendMethod == SendMethod.Email) ? email_from_address : "", // email_from_address (sendMethod == SendMethod.Email) ? email_from_name : "", // email_from_name text, // text (sendMethod == SendMethod.Email) ? txtEmailSubject.Text : "", // email_subject "", // email_attachment_location false, // email_attachment_delete_after_sending false, // email_attachment_folder_delete_after_sending !generateLetter ? -1 : letter.LetterID, !generateLetter ? false : chkKeepInHistory.Checked && StoreLettersHistoryInDB, !generateLetter ? false : chkKeepInHistory.Checked && StoreLettersHistoryInFlatFile, !generateLetter ? -1 : letterPrintHistorySendMethodID, !generateLetter ? "" : Letter.GetLettersHistoryDirectory(0), !generateLetter ? "" : letter.Docname.Replace(".dot", ".doc"), !generateLetter ? -1 : site.SiteID, 0, // organisation_id -1, // booking id -1, // patient_id !generateLetter ? -1 : Convert.ToInt32(referrerItem.Value), // register_referrer_id_to_use_instead_of_patients_reg_ref !generateLetter ? -1 : StaffID, -1, //healthcardactionid !generateLetter ? "" : sourchTemplatePath, !generateLetter ? "" : tmpLettersDirectory + letter.Docname.Replace(".dot", ".doc"), !generateLetter ? false : true, "", // email_letter_extra_pages "", // email_letter_item_seperator "", // sql_to_run_on_completion "" // sql_to_run_on_failure ); } } else { // create doc string tmpSingleFileName = Letter.CreateMergedDocument( letter.LetterID, chkKeepInHistory.Checked && StoreLettersHistoryInDB, chkKeepInHistory.Checked && StoreLettersHistoryInFlatFile, letterPrintHistorySendMethodID, Letter.GetLettersHistoryDirectory(0), letter.Docname.Replace(".dot", ".doc"), site, 0, // org id -1, // booking id -1, // patient id Convert.ToInt32(referrerItem.Value), StaffID, -1, //healthcardactionid sourchTemplatePath, tmpLettersDirectory + letter.Docname.Replace(".dot", ".doc"), true); // record name of merged doc docsToMerge.Add(tmpSingleFileName); } } if (UseBulkLetterSender) { if ((smsCountSending * smsCost) > smsBalance) { BulkLetterSendingQueueDB.DeleteByBatchID(bulkLetterSendingQueueBatchID); BulkLetterSendingQueueBatchDB.Delete(bulkLetterSendingQueueBatchID); SetErrorMessage("Not Enough Credit To Send SMS's. Please Top Up You SMS Credit or Choose Methods Other Than SMS."); return; } BulkLetterSendingQueueBatchDB.UpdateReadyToProcess(bulkLetterSendingQueueBatchID, true); SetErrorMessage("Items Added To Sending Queue. View Details <a href='/Letters_PrintBatch_StatusV2.aspx?batch_id=" + bulkLetterSendingQueueBatchID + "'>Here</a>"); } else { // merge all tmp files string tmpFinalFileName = Letter.MergeMultipleDocuments( ((string[])docsToMerge.ToArray(typeof(string))), tmpLettersDirectory + letter.Docname.Replace(".dot", ".doc")); // delete all single tmp files foreach (string file in docsToMerge) { File.Delete(file); } // download the document byte[] fileContents = File.ReadAllBytes(tmpFinalFileName); System.IO.File.Delete(tmpFinalFileName); // Nothing gets past the "DownloadDocument" method because it outputs the file // which is writing a response to the client browser and calls Response.End() // So make sure any other code that functions goes before this Letter.DownloadDocument(Response, fileContents, letter.Docname.Replace(".dot", ".doc")); } } catch (CustomMessageException cmEx) { SetErrorMessage(cmEx.Message); return; } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Utilities.SetNoCache(Response); } try { if (Session == null || Session["DB"] == null) { throw new SessionTimedOutException(); } string fieldsSep = "|"; string itemSep = "<>"; string id = Request.QueryString["id"]; if (id == null || !Regex.IsMatch(id, @"^\-?\d+$")) { throw new CustomMessageException(); } string type = Request.QueryString["type"]; if (type == null || (type.ToLower() != "patient" && type.ToLower() != "staff" && type.ToLower() != "referrer" && type.ToLower() != "register_referrer")) { throw new CustomMessageException(); } Person person = null; int contactEntityID = -1; if (type == "patient") { Patient patient = PatientDB.GetByID(Convert.ToInt32(id)); if (patient == null) { throw new CustomMessageException(); } person = patient.Person; contactEntityID = patient.Person.EntityID; } else if (type == "staff") { Staff staff = StaffDB.GetByID(Convert.ToInt32(id)); if (staff == null) { throw new CustomMessageException(); } person = staff.Person; contactEntityID = staff.Person.EntityID; } else if (type == "referrer") { Referrer referrer = ReferrerDB.GetByID(Convert.ToInt32(id)); if (referrer == null) { throw new CustomMessageException(); } person = referrer.Person; contactEntityID = referrer.Person.EntityID; } else if (type == "register_referrer") { RegisterReferrer regReferrer = RegisterReferrerDB.GetByID(Convert.ToInt32(id)); if (regReferrer == null || regReferrer.Referrer == null) { throw new CustomMessageException(); } person = regReferrer.Referrer.Person; contactEntityID = regReferrer.Organisation.EntityID; } else { throw new CustomMessageException(); } string details = GetDetails(person, contactEntityID, fieldsSep, itemSep); Response.Write(details); } catch (SessionTimedOutException) { Utilities.UnsetSessionVariables(); Response.Write("SessionTimedOutException"); } catch (Exception ex) { Response.Write("Exception: " + (Utilities.IsDev() ? ex.ToString() : "please contact system administrator.")); } }