コード例 #1
0
    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();
    }
コード例 #2
0
    /*
     *
     * 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> &nbsp;&nbsp; " + regRefFrom.Referrer.Person.Firstname + " " + regRefFrom.Referrer.Person.Surname + "[" + regRefFrom.Organisation.Name + "] &nbsp;&nbsp;<font color=\"black\">to</font> &nbsp;&nbsp;" + regRefTo.Referrer.Person.Firstname + " " + regRefTo.Referrer.Person.Surname + "[" + regRefTo.Organisation.Name + "]");
    }
コード例 #3
0
    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) + " &nbsp;&nbsp; (" + 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) + " &nbsp;&nbsp; (" + 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();
    }
コード例 #5
0
    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 &nbsp;&nbsp;<big><b>All Referrers</b></big>&nbsp;&nbsp; at &nbsp;&nbsp;<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 &nbsp;&nbsp;<big><b>" + regRef.Referrer.Person.FullnameWithoutMiddlename + "</b></big>&nbsp;&nbsp; at &nbsp;&nbsp;<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";
        }
    }
コード例 #6
0
    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;
        }
    }
コード例 #7
0
    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."));
        }
    }