protected bool ExistsAndCreatedLogin_FromEmail(int orgID, string phoneNumber, string email, int siteID, ref int register_patient_id, ref int phone_id, ref int email_id) { bool patientAlreadyExists = false; int[] entityIDs; if (Utilities.GetAddressType().ToString() == "Contact") { entityIDs = ContactDB.GetByAddrLine1(null, email, 27).Select(r => r.EntityID).ToArray(); } else if (Utilities.GetAddressType().ToString() == "ContactAus") { entityIDs = ContactAusDB.GetByAddrLine1(null, email, 27).Select(r => r.EntityID).ToArray(); } else { throw new Exception("Unknown AddressType in config: " + Utilities.GetAddressType().ToString().ToString()); } foreach (int entityID in entityIDs) { Patient patient = PatientDB.GetByEntityID(entityID); if (patient == null || patient.IsDeceased || patient.IsDeleted) { continue; } // if no login set, create it bool hasLoginDetails = patient.Login.Length > 0; if (!hasLoginDetails) { string login = txtLogin.Text; string loginTry = login; Random rnd = new Random(); int nbr = rnd.Next(11, 999); do { bool loginUsed = (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"]) && UserDatabaseMapperDB.UsernameExists(loginTry)) || (PatientDB.LoginExists(loginTry)); if (loginUsed) { throw new CustomMessageException("Login name in use. Please choose another"); } if (!loginUsed) { patient.Login = loginTry; patient.Pwd = txtPwd.Text; PatientDB.UpdateLoginPwd(patient.PatientID, patient.Login, patient.Pwd); if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"])) { UserDatabaseMapperDB.Insert(loginTry, Session["DB"].ToString()); } break; } nbr++; loginTry = login + nbr; } while (true); } // add phone number if different from existing phone_id = AddPhoneNbrIfNotExists(patient, siteID, phoneNumber); // add clinic if different from existing register_patient_id = AddOrgIfNotExists(patient, siteID, orgID); SendInfoEmail(email, patient.Login, patient.Pwd); patientAlreadyExists = true; } return(patientAlreadyExists); }
protected void CreatePatientButton_Click(object sender, EventArgs e) { if (!ddlDOBValidateAllSet.IsValid) { return; } int person_id = -1; int patient_id = -1; int register_patient_id = -1; bool patient_added = false; int mainDbUserID = -1; int phone_id = -1; int email_id = -1; bool contacts_added = false; try { string[] clinicInfo = ddlClinic.SelectedValue.Split(new string[] { "__" }, StringSplitOptions.None); string dbID = clinicInfo[0]; int siteID = Convert.ToInt32(clinicInfo[1]); int orgID = Convert.ToInt32(clinicInfo[2]); Session["DB"] = dbID; Session["SystemVariables"] = SystemVariableDB.GetAll(); txtEmailAddr.Text = txtEmailAddr.Text.Trim(); txtPhoneNumber.Text = txtPhoneNumber.Text.Trim(); if (!Utilities.IsValidEmailAddress(txtEmailAddr.Text)) { throw new CustomMessageException("Email must be in valid email format."); } txtLogin.Text = txtLogin.Text.Trim(); txtPwd.Text = txtPwd.Text.Trim(); txtFirstname.Text = txtFirstname.Text.Trim(); txtSurname.Text = txtSurname.Text.Trim(); // check if patient exists in the system, if so use existing patietn bool patientAlreadyExists = false; // check if email exists in the system if (!patientAlreadyExists) { if (ExistsAndCreatedLogin_FromEmail(orgID, txtPhoneNumber.Text, txtEmailAddr.Text, siteID, ref register_patient_id, ref phone_id, ref email_id)) { patientAlreadyExists = true; patient_added = true; contacts_added = true; this.lblErrorMessage.Text = "Your email alrady exist in this sytem.<br/>An email has been sent with new login details.<br/>When you receieve it, use the login link below."; } } // check if firstname / surname / DOB exists in the system if (!patientAlreadyExists) { if (ExistsAndCreatedLogin_FromNameAndDOB(orgID, txtPhoneNumber.Text, txtEmailAddr.Text, txtFirstname.Text, txtSurname.Text, GetDOBFromForm(), siteID, ref register_patient_id, ref phone_id, ref email_id)) { patientAlreadyExists = true; patient_added = true; contacts_added = true; this.lblErrorMessage.Text = "You alrady exist in this sytem.<br/>An email has been sent with new login details.<br/>When you receieve it, use the login link below."; } } if (!patientAlreadyExists) { if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"]) && UserDatabaseMapperDB.UsernameExists(txtLogin.Text)) { throw new CustomMessageException("Login name already in use. Please choose another"); } if (PatientDB.LoginExists(txtLogin.Text)) { throw new CustomMessageException("Login name already in use. Please choose another"); } // 1. Create Patient Staff loggedInStaff = StaffDB.GetByID(-6); person_id = PersonDB.Insert(loggedInStaff.Person.PersonID, Convert.ToInt32(ddlTitle.SelectedValue), Utilities.FormatName(txtFirstname.Text), "", Utilities.FormatName(txtSurname.Text), "", ddlGender.SelectedValue, GetDOBFromForm()); patient_id = PatientDB.Insert(person_id, true, false, false, "", -1, DateTime.MinValue, "", "", DateTime.MinValue, false, false, DateTime.MinValue, -1, -1, txtLogin.Text, txtPwd.Text, false, "", "", "", ""); register_patient_id = RegisterPatientDB.Insert(orgID, patient_id); patient_added = true; // added this because was throwing a thread aborted exception after patient added before Response.Redirect if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"])) { if (txtLogin.Text.Length > 0) { mainDbUserID = UserDatabaseMapperDB.Insert(txtLogin.Text, Session["DB"].ToString()); } } // 2. Add Contact Info Patient patient = PatientDB.GetByID(patient_id); phone_id = AddPhoneNbrIfNotExists(patient, siteID, txtPhoneNumber.Text); email_id = AddEmailIfNotExists(patient, siteID, txtEmailAddr.Text); register_patient_id = AddOrgIfNotExists(patient, siteID, orgID); contacts_added = true; SendInfoEmail(txtEmailAddr.Text, txtLogin.Text, txtPwd.Text); this.lblErrorMessage.Text = "An email has been sent with new login details.<br />When you receieve it, use the login link below."; } } catch (Exception ex) { if (!patient_added || !contacts_added) { // roll back - backwards of creation order if (Utilities.GetAddressType().ToString() == "Contact") { ContactDB.Delete(phone_id); ContactDB.Delete(email_id); } else if (Utilities.GetAddressType().ToString() == "ContactAus") { ContactAusDB.Delete(phone_id); ContactAusDB.Delete(email_id); } else { throw new Exception("Unknown AddressType in config: " + Utilities.GetAddressType().ToString().ToString()); } RegisterPatientDB.Delete(register_patient_id); PatientDB.Delete(patient_id); PersonDB.Delete(person_id); if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"])) { UserDatabaseMapperDB.Delete(mainDbUserID); } if (ex is CustomMessageException) { this.lblErrorMessage.Text = ex.Message; } else { lblErrorMessage.Text = ex.ToString(); } } } finally { //Session["DB"] = curDbName; //Session["SystemVariables"] = SystemVariableDB.GetAll(); Session.Remove("DB"); Session.Remove("SystemVariables"); } }
protected bool ExistsAndCreatedLogin_FromNameAndDOB(int orgID, string phoneNumber, string email, string firstname, string surname, DateTime DOB, int siteID, ref int register_patient_id, ref int phone_id, ref int email_id) { bool patientAlreadyExists = false; Patient[] matchingPatients = PatientDB.GetByFirstnameSurnameDOB(firstname, surname, DOB); foreach (Patient patient in matchingPatients) { if (patient == null || patient.IsDeceased || patient.IsDeleted) { continue; } if (patient.Person.Firstname != firstname || patient.Person.Surname != surname || patient.Person.Dob == DateTime.MinValue || patient.Person.Dob != DOB) { continue; } // if no login set, create it bool hasLoginDetails = patient.Login.Length > 0; if (!hasLoginDetails) { string login = txtLogin.Text; string loginTry = login; Random rnd = new Random(); int nbr = rnd.Next(11, 999); do { bool loginUsed = (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"]) && UserDatabaseMapperDB.UsernameExists(loginTry)) || (PatientDB.LoginExists(loginTry)); if (loginUsed) { throw new CustomMessageException("Login name in use. Please choose another"); } if (!loginUsed) { patient.Login = loginTry; patient.Pwd = txtPwd.Text; PatientDB.UpdateLoginPwd(patient.PatientID, patient.Login, patient.Pwd); if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"])) { UserDatabaseMapperDB.Insert(loginTry, Session["DB"].ToString()); } break; } nbr++; loginTry = login + nbr; } while (true); } // add phone number if different from existing phone_id = AddPhoneNbrIfNotExists(patient, siteID, phoneNumber); // add email if different from existing email_id = AddEmailIfNotExists(patient, siteID, email); // add clinic if different from existing register_patient_id = AddOrgIfNotExists(patient, siteID, orgID); SendInfoEmail(email, patient.Login, patient.Pwd); patientAlreadyExists = true; } return(patientAlreadyExists); }
protected void CreateLogin(string email) { email = email.Replace("'", "''"); //string curDbName = Session["DB"].ToString(); try { List <Tuple <string, Patient, bool> > list = new List <Tuple <string, Patient, bool> >(); System.Data.DataTable tbl = DBBase.ExecuteQuery("EXEC sp_databases;", "master").Tables[0]; for (int i = 0; i < tbl.Rows.Count; i++) { string databaseName = tbl.Rows[i][0].ToString(); if (!Regex.IsMatch(databaseName, @"Mediclinic_\d{4}")) { continue; } //if (databaseName == "Mediclinic_0001") // continue; System.Text.StringBuilder output = new System.Text.StringBuilder(); Session["DB"] = databaseName; Session["SystemVariables"] = SystemVariableDB.GetAll(); bool allowPatientLogins = ((SystemVariables)Session["SystemVariables"])["AllowPatientLogins"].Value == "1"; bool allowPatientsToCreateOwnLogin = ((SystemVariables)Session["SystemVariables"])["AllowPatientsToCreateOwnLogin"].Value == "1"; if (!allowPatientLogins || !allowPatientsToCreateOwnLogin) { continue; } int[] entityIDs; if (Utilities.GetAddressType().ToString() == "Contact") { entityIDs = ContactDB.GetByAddrLine1(null, email, 27).Select(r => r.EntityID).ToArray(); } else if (Utilities.GetAddressType().ToString() == "ContactAus") { entityIDs = ContactAusDB.GetByAddrLine1(null, email, 27).Select(r => r.EntityID).ToArray(); } else { throw new Exception("Unknown AddressType in config: " + Utilities.GetAddressType().ToString().ToString()); } foreach (int entityID in entityIDs) { Patient patient = PatientDB.GetByEntityID(entityID); if (patient == null || patient.IsDeceased || patient.IsDeleted) { continue; } bool hasLoginDetails = patient.Login.Length > 0; if (!hasLoginDetails) { string login = Regex.Replace(patient.Person.Firstname, @"[^A-Za-z]+", "").ToLower() + Regex.Replace(patient.Person.Surname, @"[^A-Za-z]+", "").ToLower(); string loginTry = login; Random rnd = new Random(); int nbr = rnd.Next(11, 999); do { bool loginUsed = (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"]) && UserDatabaseMapperDB.UsernameExists(loginTry)) || (PatientDB.LoginExists(loginTry)); if (!loginUsed) { patient.Login = loginTry; patient.Pwd = loginTry == login ? login + nbr : loginTry; PatientDB.UpdateLoginPwd(patient.PatientID, patient.Login, patient.Pwd); if (!Convert.ToBoolean(ConfigurationManager.AppSettings["UseConfigDB"])) { UserDatabaseMapperDB.Insert(loginTry, Session["DB"].ToString()); } break; } nbr++; loginTry = login + nbr; } while (true); } SendPasswordRetrievalEmail(patient.Login, patient.Pwd, email); list.Add(new Tuple <string, Patient, bool>(databaseName, patient, hasLoginDetails)); } Session.Remove("DB"); Session.Remove("SystemVariables"); } System.Text.StringBuilder finalOutput = new System.Text.StringBuilder(); foreach (Tuple <string, Patient, bool> item in list) { finalOutput.Append("<tr><td>" + item.Item1 + "</td><td>" + item.Item2.Person.FullnameWithoutMiddlename + "</td><td>" + item.Item3 + "</td><td>" + item.Item2.Login + " | " + item.Item2.Pwd + "</td></tr>"); } //FailureText.Text = "Count: " + list.Count + "<br /><table border=\"1\" class=\"block_center padded-table-2px\">" + finalOutput.ToString() + "</table>"; if (list.Count == 0) { throw new CustomMessageException("No patients found with this email"); } this.FailureText.Text = "An email has been sent with new login details"; } catch (CustomMessageException cmEx) { this.FailureText.Text = cmEx.Message; } finally { //Session["DB"] = curDbName; //Session["SystemVariables"] = SystemVariableDB.GetAll(); Session.Remove("DB"); Session.Remove("SystemVariables"); } }