private void butAdd_Click(object sender, EventArgs e) { FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.ExamSheet; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; //only useful if not Terminal for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { sheetDef = FormS.SelectedSheetDefs[i]; sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); } FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); if (FormSF.DialogResult == DialogResult.OK) { FillGrid(); gridMain.SetSelected(false); //unselect all rows gridMain.SetSelected(gridMain.Rows.Count - 1, true); //Select the newly added row. Always last, since ordered by date. } }
private void butSlip_Click(object sender, EventArgs e) { int idx = gridMain.GetSelectedIndex(); if (idx == -1) { MsgBox.Show(this, "Please select a referral first"); return; } Referral referral = Referrals.GetReferral(RefAttachList[idx].ReferralNum); SheetDef sheetDef; if (referral.Slip == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.ReferralSlip); } else { sheetDef = SheetDefs.GetSheetDef(referral.Slip); } Sheet sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetParameter.SetParameter(sheet, "ReferralNum", referral.ReferralNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); FormSheetFillEdit FormS = new FormSheetFillEdit(sheet); FormS.ShowDialog(); //grid will not be refilled, so no need to reselect. }
///<summary>Supply a template sheet as well as a list of primary keys. This method creates a new collection of sheets which each have a parameter of int. It also fills the sheets with data from the database, so no need to run that separately.</summary> public static List <Sheet> CreateBatch(SheetDef sheetDef, List <long> priKeys) { //we'll assume for now that a batch sheet has only one parameter, so no need to check for values. //foreach(SheetParameter param in sheet.Parameters){ // if(param.IsRequired && param.ParamValue==null){ // throw new ApplicationException(Lan.g("Sheet","Parameter not specified for sheet: ")+param.ParamName); // } //} List <Sheet> retVal = new List <Sheet>(); //List<int> paramVals=(List<int>)sheet.Parameters[0].ParamValue; Sheet newSheet; SheetParameter paramNew; for (int i = 0; i < priKeys.Count; i++) { newSheet = CreateSheet(sheetDef); newSheet.Parameters = new List <SheetParameter>(); paramNew = new SheetParameter(sheetDef.Parameters[0].IsRequired, sheetDef.Parameters[0].ParamName); paramNew.ParamValue = priKeys[i]; newSheet.Parameters.Add(paramNew); SheetFiller.FillFields(newSheet); retVal.Add(newSheet); } return(retVal); }
private void butLettersPreview_Click(object sender, EventArgs e) { //Create letters. loop through each row and insert information into sheets, //take all the sheets and add to one giant pdf for preview. if (gridMain.SelectedIndices.Length == 0) { MsgBox.Show(this, "Please select patient(s) first."); return; } FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.PatientLetter; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; List <Sheet> listSheets = new List <Sheet>(); //for saving for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { PdfDocument document = new PdfDocument(); PdfPage page = new PdfPage(); string filePathAndName = ""; for (int j = 0; j < gridMain.SelectedIndices.Length; j++) { sheetDef = FormS.SelectedSheetDefs[i]; sheet = SheetUtil.CreateSheet(sheetDef, PIn.Long(((DataRow)gridMain.SelectedGridRows[j].Tag)["PatNum"].ToString())); SheetParameter.SetParameter(sheet, "PatNum", PIn.Long(((DataRow)gridMain.SelectedGridRows[j].Tag)["PatNum"].ToString())); SheetFiller.FillFields(sheet); sheet.SheetFields.Sort(SheetFields.SortDrawingOrderLayers); SheetUtil.CalculateHeights(sheet); SheetPrinting.PagesPrinted = 0; //Clear out the pages printed variable before printing all pages for this pdf. int pageCount = Sheets.CalculatePageCount(sheet, SheetPrinting.PrintMargin); for (int k = 0; k < pageCount; k++) { page = document.AddPage(); SheetPrinting.CreatePdfPage(sheet, page, null); } listSheets.Add(sheet); } filePathAndName = PrefC.GetRandomTempFile(".pdf"); document.Save(filePathAndName); if (ODBuild.IsWeb()) { ThinfinityUtils.HandleFile(filePathAndName); } else { Process.Start(filePathAndName); } DialogResult = DialogResult.OK; } if (MsgBox.Show(this, MsgBoxButtons.YesNo, "Would you like to save the sheets for the selected patients?")) { Sheets.SaveNewSheetList(listSheets); } }
private void butPrint_Click(object sender, System.EventArgs e) { //only visible if sheet==null. if (comboSendStatus.SelectedIndex == (int)RxSendStatus.InElectQueue || comboSendStatus.SelectedIndex == (int)RxSendStatus.SentElect) { //do not change status } else { comboSendStatus.SelectedIndex = (int)RxSendStatus.Printed; } if (!SaveRx()) { return; } SheetDef sheetDef; List <SheetDef> customSheetDefs = SheetDefs.GetCustomForType(SheetTypeEnum.Rx); if (customSheetDefs.Count == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.Rx); } else { sheetDef = customSheetDefs[0]; SheetDefs.GetFieldsAndParameters(sheetDef); } sheet = SheetUtil.CreateSheet(sheetDef, PatCur.PatNum); SheetParameter.SetParameter(sheet, "RxNum", RxPatCur.RxNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); SheetPrinting.PrintRx(sheet, RxPatCur.IsControlled); DialogResult = DialogResult.OK; }
///<summary></summary> public static void PrintAppointment(long aptNum) { SheetDef sheetDef; List <SheetDef> customSheetDefs = SheetDefs.GetCustomForType(SheetTypeEnum.LabelAppointment); if (customSheetDefs.Count == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabelAppointment); } else { sheetDef = customSheetDefs[0]; SheetDefs.GetFieldsAndParameters(sheetDef); } Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "AptNum", aptNum); SheetFiller.FillFields(sheet); try { SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void butSlip_Click(object sender, EventArgs e) { int idx = gridMain.GetSelectedIndex(); if (idx == -1) { MsgBox.Show(this, "Please select a referral first"); return; } Referral referral = ReferralL.GetReferral(((RefAttach)gridMain.ListGridRows[idx].Tag).ReferralNum); if (referral == null) { return; } SheetDef sheetDef; if (referral.Slip == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.ReferralSlip); } else { sheetDef = SheetDefs.GetSheetDef(referral.Slip); } Sheet sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetParameter.SetParameter(sheet, "ReferralNum", referral.ReferralNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSheetFillEdit.ShowForm(sheet); }
private void PrintClickHelper(bool isPreviewMode) { Sheet sheet = SheetUtil.CreateSheet(SheetDefs.GetInternalOrCustom(SheetInternalType.ERA)); SheetParameter.GetParamByName(sheet.Parameters, "ERA").ParamValue = _x835; //Required param SheetFiller.FillFields(sheet); SheetPrinting.Print(sheet, isPreviewMode: isPreviewMode); }
private void butAdd_Click(object sender, EventArgs e) { FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.PatientForm; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; //only useful if not Terminal bool isPatUsingEClipboard = MobileAppDevices.PatientIsAlreadyUsingDevice(PatNum); for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { sheetDef = FormS.SelectedSheetDefs[i]; if (FormS.TerminalSend && isPatUsingEClipboard && !sheetDef.HasMobileLayout) { if (!MsgBox.Show(MsgBoxButtons.YesNo, $"The patient is currently using an eClipboard to fill out forms, but the " + $"{sheetDef.Description} sheet does not have a mobile layout and cannot be used with eClipboard. " + $"If you add this form to the patient's list it will not be shown in eClipboard. Do you still want to add this form?")) { continue; } } sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); if (FormS.TerminalSend) { sheet.InternalNote = ""; //because null not ok sheet.ShowInTerminal = (byte)(Sheets.GetBiggestShowInTerminal(PatNum) + 1); Sheets.SaveNewSheet(sheet); //save each sheet. //Push new sheet to eClipboard. if (isPatUsingEClipboard && sheetDef.HasMobileLayout) { OpenDentBusiness.WebTypes.PushNotificationUtils.CI_AddSheet(sheet.PatNum, sheet.SheetNum); } } } if (FormS.TerminalSend) { //do not show a dialog now. User will need to click the terminal button. FillGrid(); Signalods.SetInvalid(InvalidType.Kiosk); } else if (sheet != null) { FormSheetFillEdit.ShowForm(sheet, FormSheetFillEdit_FormClosing); } }
private void butPrint_Click(object sender, System.EventArgs e) { if (textDate.errorProvider1.GetError(textDate) != "") { MsgBox.Show(this, "Please fix data entry errors first."); return; } if (IsNew) { if (!SaveToDB()) { return; } } else //not new //Only allowed to change date and bank account info, NOT attached checks. //We enforce security here based on date displayed, not date entered. //If user is trying to change date without permission: { DateTime date = PIn.Date(textDate.Text); if (Security.IsAuthorized(Permissions.DepositSlips, date, true)) { if (!SaveToDB()) { return; } } //if security.NotAuthorized, then it simply skips the save process before printing } SheetDef sheetDef = null; List <SheetDef> depositSheetDefs = SheetDefs.GetCustomForType(SheetTypeEnum.DepositSlip); if (depositSheetDefs.Count > 0) { sheetDef = depositSheetDefs[0]; SheetDefs.GetFieldsAndParameters(sheetDef); } else { sheetDef = SheetsInternal.DepositSlip(); } Sheet sheet = SheetUtil.CreateSheet(sheetDef, 0); SheetParameter.SetParameter(sheet, "DepositNum", DepositCur.DepositNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); DialogResult = DialogResult.OK; //this is imporant, since we don't want to insert the deposit slip twice. }
public static void PrintPatientLFPatNum(long patNum) { SheetDef sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabelPatientLFPatNum); Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); try { SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/*private void buttonEmail_Click(object sender,EventArgs e) { * int CurPatNum=CaseCur.PatNum; * EmailMessage message=new EmailMessage(); * message.PatNum=CurPatNum; * Patient pat=Patients.GetPat(CurPatNum); * message.ToAddress="";//pat.Email; * message.FromAddress=PrefC.GetString(PrefName.EmailSenderAddress"); * message.Subject=Lan.g(this,"RE: ")+pat.GetNameFL(); * FormEmailMessageEdit FormE=new FormEmailMessageEdit(message); * FormE.IsNew=true; * FormE.ShowDialog(); * * }*/ private void butSlip_Click(object sender, EventArgs e) { if (sheet == null) //create new { if (!SaveToDb()) { return; } Laboratory lab = ListLabs[listLab.SelectedIndex]; SheetDef sheetDef; if (lab.Slip == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabSlip); } else { sheetDef = SheetDefs.GetSheetDef(lab.Slip); } sheet = SheetUtil.CreateSheet(sheetDef, CaseCur.PatNum); SheetParameter.SetParameter(sheet, "PatNum", CaseCur.PatNum); SheetParameter.SetParameter(sheet, "LabCaseNum", CaseCur.LabCaseNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); FormSheetFillEdit FormS = new FormSheetFillEdit(sheet); FormS.ShowDialog(); //if(FormS.DialogResult!=DialogResult.OK) { // sheet=null; // return; //} } else //edit existing { SheetFields.GetFieldsAndParameters(sheet); FormSheetFillEdit FormS = new FormSheetFillEdit(sheet); FormS.ShowDialog(); //if(FormS.DialogResult!=DialogResult.OK) { // return; //} } //refresh sheet = Sheets.GetLabSlip(CaseCur.PatNum, CaseCur.LabCaseNum); if (sheet == null) { butSlip.Text = Lan.g(this, "New Slip"); } else { butSlip.Text = Lan.g(this, "Edit Slip"); } }
private void butPrint_Click(object sender, EventArgs e) { Sheet sheet = SheetUtil.CreateSheet(SheetDefs.GetInternalOrCustom(SheetInternalType.ERA)); X835 x835 = _x835.Copy(); x835.ListClaimsPaid = new List <Hx835_Claim>() { _claimPaid }; //Only print the current claim. SheetParameter.GetParamByName(sheet.Parameters, "ERA").ParamValue = x835; //Required param SheetParameter.GetParamByName(sheet.Parameters, "IsSingleClaimPaid").ParamValue = true; //Value is null if not set SheetFiller.FillFields(sheet); SheetPrinting.Print(sheet, isPreviewMode: true); }
public static void PrintCustomPatient(long patNum, SheetDef sheetDef) { SheetDefs.GetFieldsAndParameters(sheetDef); Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); try { SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public static void PrintText(long patNum, string text) { SheetDef sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabelText); Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "PatNum", patNum); sheet.Parameters.Add(new SheetParameter(false, "text")); SheetParameter.SetParameter(sheet, "text", text); SheetFiller.FillFields(sheet); try { SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void butPrint_Click(object sender, System.EventArgs e) { if (PrinterSettings.InstalledPrinters.Count == 0) { MsgBox.Show(this, "Error: No Printers Installed\r\n" + "If you do have a printer installed, restarting the workstation may solve the problem." ); return; } //only visible if sheet==null. if (comboSendStatus.SelectedIndex == (int)RxSendStatus.InElectQueue || comboSendStatus.SelectedIndex == (int)RxSendStatus.SentElect) { //do not change status } else { comboSendStatus.SelectedIndex = (int)RxSendStatus.Printed; } if (!SaveRx()) { return; } //This logic is an exact copy of FormRxManage.butPrintSelect_Click()'s logic when 1 Rx is selected. //If this is updated, that method needs to be updated as well. SheetDef sheetDef = SheetDefs.GetSheetsDefault(SheetTypeEnum.Rx, Clinics.ClinicNum); sheet = SheetUtil.CreateSheet(sheetDef, PatCur.PatNum); SheetParameter.SetParameter(sheet, "RxNum", RxPatCur.RxNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); if (!SheetPrinting.PrintRx(sheet, RxPatCur)) { return; } if (RxPatCur.IsNew) { AutomationL.Trigger(AutomationTrigger.RxCreate, new List <string>(), PatCur.PatNum, 0, new List <RxPat>() { RxPatCur }); } DialogResult = DialogResult.OK; }
/*private void buttonEmail_Click(object sender,EventArgs e) { * int CurPatNum=CaseCur.PatNum; * EmailMessage message=new EmailMessage(); * message.PatNum=CurPatNum; * Patient pat=Patients.GetPat(CurPatNum); * message.ToAddress="";//pat.Email; * message.FromAddress=PrefC.GetString(PrefName.EmailSenderAddress"); * message.Subject=Lan.g(this,"RE: ")+pat.GetNameFL(); * FormEmailMessageEdit FormE=new FormEmailMessageEdit(message); * FormE.IsNew=true; * FormE.ShowDialog(); * * }*/ private void butSlip_Click(object sender, EventArgs e) { if (sheet == null) //create new { if (!SaveToDb()) { return; } Laboratory lab = ListLabs[listLab.SelectedIndex]; SheetDef sheetDef; if (lab.Slip == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabSlip); } else { sheetDef = SheetDefs.GetSheetDef(lab.Slip); } sheet = SheetUtil.CreateSheet(sheetDef, CaseCur.PatNum); SheetParameter.SetParameter(sheet, "PatNum", CaseCur.PatNum); SheetParameter.SetParameter(sheet, "LabCaseNum", CaseCur.LabCaseNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); FormSheetFillEdit FormS = new FormSheetFillEdit(sheet); FormS.ShowDialog(); } else //edit existing { SheetFields.GetFieldsAndParameters(sheet); FormSheetFillEdit FormS = new FormSheetFillEdit(sheet); FormS.ShowDialog(); } //refresh sheet = Sheets.GetLabSlip(CaseCur.PatNum, CaseCur.LabCaseNum); if (sheet == null) { butSlip.Text = Lan.g(this, "New Slip"); } else { butSlip.Text = Lan.g(this, "Edit Slip"); butCancel.Enabled = false; //user can still click X to close window, but we do handle that as well. } }
private void butLettersPreview_Click(object sender, EventArgs e) { //Create letters. loop through each row and insert information into sheets, //take all the sheets and add to one giant pdf for preview. if (gridMain.SelectedIndices.Length == 0) { MsgBox.Show(this, "Please select patient(s) first."); return; } FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.PatientLetter; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { PdfDocument document = new PdfDocument(); FormSheetFillEdit FormSF = null; PdfPage page = new PdfPage(); string filePathAndName = ""; for (int j = 0; j < gridMain.SelectedIndices.Length; j++) { page = document.AddPage(); sheetDef = FormS.SelectedSheetDefs[i]; sheet = SheetUtil.CreateSheet(sheetDef, PIn.Long(table.Rows[gridMain.SelectedIndices[j]]["PatNum"].ToString())); SheetParameter.SetParameter(sheet, "PatNum", PIn.Long(table.Rows[gridMain.SelectedIndices[j]]["PatNum"].ToString())); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); FormSF = new FormSheetFillEdit(sheet); SheetPrinting.CreatePdfPage(sheet, page); } filePathAndName = Path.ChangeExtension(Path.GetTempFileName(), ".pdf"); document.Save(filePathAndName); Process.Start(filePathAndName); DialogResult = DialogResult.OK; } }
private void butAdd_Click(object sender, EventArgs e) { FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.PatientForm; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; //only useful if not Terminal for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { sheetDef = FormS.SelectedSheetDefs[i]; sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet, this.CreateGraphics()); if (FormS.TerminalSend) { sheet.InternalNote = ""; //because null not ok sheet.ShowInTerminal = (byte)(Sheets.GetBiggestShowInTerminal(PatNum) + 1); Sheets.SaveNewSheet(sheet); //save each sheet. } } if (FormS.TerminalSend) { //do not show a dialog now. //User will need to click the terminal button. FillGrid(); } else { FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); if (FormSF.DialogResult == DialogResult.OK) { FillGrid(); } } }
///<summary>Prints the selected rx's. If one rx is selected, uses single rx sheet. If more than one is selected, uses multirx sheet</summary> private void butPrintSelect_Click(object sender, EventArgs e) { List <RxPat> listSelectRx = new List <RxPat>(); SheetDef sheetDef; Sheet sheet; for (int i = 0; i < gridMain.SelectedIndices.Length; i++) { listSelectRx.Add(_listRx[gridMain.SelectedIndices[i]]); } if (listSelectRx.Count == 0) { MsgBox.Show(this, "At least one prescription must be selected"); return; } if (PrinterSettings.InstalledPrinters.Count == 0) { MsgBox.Show(this, "Error: No Printers Installed\r\n" + "If you do have a printer installed, restarting the workstation may solve the problem." ); return; } if (listSelectRx.Count == 1) //old way of printing one rx //This logic is an exact copy of FormRxEdit.butPrint_Click()'s logic. If this is updated, that method needs to be updated as well. { sheetDef = SheetDefs.GetSheetsDefault(SheetTypeEnum.Rx, Clinics.ClinicNum); sheet = SheetUtil.CreateSheet(sheetDef, _patCur.PatNum); SheetParameter.SetParameter(sheet, "RxNum", listSelectRx[0].RxNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); SheetPrinting.PrintRx(sheet, listSelectRx[0]); } else //multiple rx selected //Print batch list of rx { SheetPrinting.PrintMultiRx(listSelectRx); } }
///<summary></summary> public static void PrintPat(long patNum) { SheetDef sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabelPatientMail); if (PrefC.GetLong(PrefName.LabelPatientDefaultSheetDefNum) != 0) //Try to use custom label sheet. { try { sheetDef = SheetDefs.GetSheetDef(PrefC.GetLong(PrefName.LabelPatientDefaultSheetDefNum)); } catch { //The default label could not be retrieved so just use the internal sheet. } } Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); try{ SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void butAdd_Click(object sender, EventArgs e) { FormSheetPicker FormS = new FormSheetPicker(); FormS.SheetType = SheetTypeEnum.ExamSheet; FormS.ShowDialog(); if (FormS.DialogResult != DialogResult.OK) { return; } SheetDef sheetDef; Sheet sheet = null; //only useful if not Terminal for (int i = 0; i < FormS.SelectedSheetDefs.Count; i++) { sheetDef = FormS.SelectedSheetDefs[i]; sheet = SheetUtil.CreateSheet(sheetDef, PatNum); SheetParameter.SetParameter(sheet, "PatNum", PatNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); } FormSheetFillEdit.ShowForm(sheet, FormSheetFillEdit_Add_FormClosing); }
///<summary></summary> public static void PrintPat(long patNum) { SheetDef sheetDef; if (PrefC.GetLong(PrefName.LabelPatientDefaultSheetDefNum) == 0) { sheetDef = SheetsInternal.GetSheetDef(SheetInternalType.LabelPatientMail); } else { sheetDef = SheetDefs.GetSheetDef(PrefC.GetLong(PrefName.LabelPatientDefaultSheetDefNum)); } Sheet sheet = SheetUtil.CreateSheet(sheetDef); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); try{ SheetPrinting.Print(sheet); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
///<summary>ProcCodes will be null unless trigger is CompleteProcedure. This routine will generally fail silently. Will return true if a trigger happened.</summary> public static bool Trigger(AutomationTrigger trigger, List <string> procCodes, long patNum) { if (patNum == 0) //Could happen for OpenPatient trigger { return(false); } bool automationHappened = false; for (int i = 0; i < Automations.Listt.Count; i++) { if (Automations.Listt[i].Autotrigger != trigger) { continue; } if (trigger == AutomationTrigger.CompleteProcedure) { if (procCodes == null) { continue; //fail silently } bool codeFound = false; string[] arrayCodes = Automations.Listt[i].ProcCodes.Split(','); for (int p = 0; p < procCodes.Count; p++) { for (int a = 0; a < arrayCodes.Length; a++) { if (arrayCodes[a] == procCodes[p]) { codeFound = true; break; } } } if (!codeFound) { continue; } } //matching automation item has been found //Get possible list of conditions that exist for this automation item List <AutomationCondition> autoConditionsList = AutomationConditions.GetListByAutomationNum(Automations.Listt[i].AutomationNum); if (Automations.Listt[i].AutoAction == AutomationAction.CreateCommlog) { if (autoConditionsList.Count > 0) { if (!CheckAutomationConditions(autoConditionsList, patNum)) { continue; } } Commlog CommlogCur = new Commlog(); CommlogCur.PatNum = patNum; CommlogCur.CommDateTime = DateTime.Now; CommlogCur.CommType = Automations.Listt[i].CommType; CommlogCur.Note = Automations.Listt[i].MessageContent; CommlogCur.Mode_ = CommItemMode.None; CommlogCur.UserNum = Security.CurUser.UserNum; FormCommItem FormCI = new FormCommItem(CommlogCur); FormCI.IsNew = true; FormCI.ShowDialog(); automationHappened = true; } else if (Automations.Listt[i].AutoAction == AutomationAction.PopUp) { if (autoConditionsList.Count > 0) { if (!CheckAutomationConditions(autoConditionsList, patNum)) { continue; } } MessageBox.Show(Automations.Listt[i].MessageContent); automationHappened = true; } else if (Automations.Listt[i].AutoAction == AutomationAction.PrintPatientLetter) { if (autoConditionsList.Count > 0) { if (!CheckAutomationConditions(autoConditionsList, patNum)) { continue; } } SheetDef sheetDef = SheetDefs.GetSheetDef(Automations.Listt[i].SheetDefNum); Sheet sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); //SheetParameter.SetParameter(sheet,"ReferralNum",referral.ReferralNum); SheetFiller.FillFields(sheet); using (Bitmap bmp = new Bitmap(100, 100)) { //a dummy bitmap for the graphics object using (Graphics g = Graphics.FromImage(bmp)) { SheetUtil.CalculateHeights(sheet, g); } } FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; } else if (Automations.Listt[i].AutoAction == AutomationAction.PrintReferralLetter) { if (autoConditionsList.Count > 0) { if (!CheckAutomationConditions(autoConditionsList, patNum)) { continue; } } long referralNum = RefAttaches.GetReferralNum(patNum); if (referralNum == 0) { MsgBox.Show("Automations", "This patient has no referral source entered."); automationHappened = true; continue; } SheetDef sheetDef = SheetDefs.GetSheetDef(Automations.Listt[i].SheetDefNum); Sheet sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetParameter.SetParameter(sheet, "ReferralNum", referralNum); SheetFiller.FillFields(sheet); using (Bitmap bmp = new Bitmap(100, 100)) { //a dummy bitmap for the graphics object using (Graphics g = Graphics.FromImage(bmp)) { SheetUtil.CalculateHeights(sheet, g); } } FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; } else if (Automations.Listt[i].AutoAction == AutomationAction.ShowExamSheet) { if (autoConditionsList.Count > 0) { if (!CheckAutomationConditions(autoConditionsList, patNum)) { continue; } } SheetDef sheetDef = SheetDefs.GetSheetDef(Automations.Listt[i].SheetDefNum); Sheet sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); using (Bitmap bmp = new Bitmap(100, 100)) { //a dummy bitmap for the graphics object using (Graphics g = Graphics.FromImage(bmp)) { SheetUtil.CalculateHeights(sheet, g); } } FormSheetFillEdit FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; } } return(automationHappened); }
private void SetStaticFields(Patient pat, Family fam = null, StaticTextData staticTextData = null) { _sheetWidget = SheetUtil.CreateSheet(_sheetDefWidget, pat?.PatNum ?? 0); SheetFiller.FillFields(_sheetWidget, pat: pat, fam: fam, staticTextData: staticTextData); }
///<summary>Uses sheet framework to generate a PDF file, save it to patient's image folder, and attempt to launch file with defualt reader. ///If using ImagesStoredInDB it will not launch PDF. If no valid patient is selected you cannot perform this action.</summary> private void butPDF_Click(object sender, EventArgs e) { if (PatCur == null) //not attached to a patient when form loaded and they haven't selected a patient to attach to yet { MsgBox.Show(this, "The Medical Lab must be attached to a patient before the PDF can be saved."); return; } if (PatCur.PatNum > 0 && _medLabCur.PatNum != PatCur.PatNum) //save the current patient attached to the MedLab if it has been changed { MoveLabsAndImagesHelper(); } Cursor = Cursors.WaitCursor; SheetDef sheetDef = SheetUtil.GetMedLabResultsSheetDef(); Sheet sheet = SheetUtil.CreateSheet(sheetDef, _medLabCur.PatNum); SheetFiller.FillFields(sheet, null, null, _medLabCur); //create the file in the temp folder location, then import so it works when storing images in the db string tempPath = ODFileUtils.CombinePaths(PrefC.GetTempFolderPath(), _medLabCur.PatNum.ToString() + ".pdf"); SheetPrinting.CreatePdf(sheet, tempPath, null, _medLabCur); HL7Def defCur = HL7Defs.GetOneDeepEnabled(true); long category = defCur.LabResultImageCat; if (category == 0) { category = Defs.GetFirstForCategory(DefCat.ImageCats, true).DefNum; //put it in the first category. } //create doc-------------------------------------------------------------------------------------- OpenDentBusiness.Document docc = null; try { docc = ImageStore.Import(tempPath, category, Patients.GetPat(_medLabCur.PatNum)); } catch (Exception ex) { ex.DoNothing(); Cursor = Cursors.Default; MsgBox.Show(this, "Error saving document."); return; } finally { //Delete the temp file since we don't need it anymore. try { File.Delete(tempPath); } catch { //Do nothing. This file will likely get cleaned up later. } } docc.Description = Lan.g(this, "MedLab Result"); docc.DateCreated = DateTime.Now; Documents.Update(docc); string filePathAndName = ""; if (PrefC.AtoZfolderUsed == DataStorageType.LocalAtoZ) { string patFolder = ImageStore.GetPatientFolder(Patients.GetPat(_medLabCur.PatNum), ImageStore.GetPreferredAtoZpath()); filePathAndName = ODFileUtils.CombinePaths(patFolder, docc.FileName); } else if (CloudStorage.IsCloudStorage) { FormProgress FormP = new FormProgress(); FormP.DisplayText = "Downloading..."; FormP.NumberFormat = "F"; FormP.NumberMultiplication = 1; FormP.MaxVal = 100; //Doesn't matter what this value is as long as it is greater than 0 FormP.TickMS = 1000; OpenDentalCloud.Core.TaskStateDownload state = CloudStorage.DownloadAsync( ImageStore.GetPatientFolder(Patients.GetPat(_medLabCur.PatNum), ImageStore.GetPreferredAtoZpath()) , docc.FileName , new OpenDentalCloud.ProgressHandler(FormP.OnProgress)); if (FormP.ShowDialog() == DialogResult.Cancel) { state.DoCancel = true; return; } filePathAndName = PrefC.GetRandomTempFile(Path.GetExtension(docc.FileName)); File.WriteAllBytes(filePathAndName, state.FileContent); } Cursor = Cursors.Default; if (filePathAndName != "") { Process.Start(filePathAndName); } SecurityLogs.MakeLogEntry(Permissions.SheetEdit, sheet.PatNum, sheet.Description + " from " + sheet.DateTimeSheet.ToShortDateString() + " pdf was created"); DialogResult = DialogResult.OK; }
///<summary>Called by eClipboard check-in once an appointment has been moved to the waiting room and the patient is ready to fill out forms. ///Returns number of new sheets created and inserted into Sheet table.</summary> public static int CreateSheetsForCheckIn(Appointment appt) { if (RemotingClient.RemotingRole == RemotingRole.ClientWeb) { return(Meth.GetInt(MethodBase.GetCurrentMethod(), appt)); } if (!MobileAppDevices.IsClinicSignedUpForEClipboard(PrefC.HasClinicsEnabled?appt.ClinicNum:0)) //this clinic isn't signed up for this feature { return(0); } if (!ClinicPrefs.GetBool(PrefName.EClipboardCreateMissingFormsOnCheckIn, appt.ClinicNum)) //This feature is turned off { return(0); } bool useDefault = ClinicPrefs.GetBool(PrefName.EClipboardUseDefaults, appt.ClinicNum); List <EClipboardSheetDef> listSheetsToCreate = EClipboardSheetDefs.GetForClinic(useDefault ? 0 : appt.ClinicNum); if (listSheetsToCreate.Count == 0) //There aren't any sheets to create here { return(0); } List <Sheet> listAlreadyCompleted = Sheets.GetForPatient(appt.PatNum); List <Sheet> listAlreadyInTerminal = Sheets.GetForTerminal(appt.PatNum); //if we already have sheets queued for the patient don't add duplicates if (listAlreadyInTerminal.Count > 0) { listAlreadyCompleted.RemoveAll(x => listAlreadyInTerminal.Select(y => y.SheetNum).Contains(x.SheetNum)); listSheetsToCreate.RemoveAll(x => listAlreadyInTerminal.Select(y => y.SheetDefNum).Contains(x.SheetDefNum)); } byte showInTerminal = GetBiggestShowInTerminal(appt.PatNum); List <Sheet> listNewSheets = new List <Sheet>(); foreach (EClipboardSheetDef sheetInsert in listSheetsToCreate.OrderBy(x => x.ItemOrder)) { //First check if we've already completed this form against our resubmission interval rules DateTime lastCompleted = listAlreadyCompleted .Where(x => x.SheetDefNum == sheetInsert.SheetDefNum) .OrderBy(x => x.DateTimeSheet) .LastOrDefault()?.DateTimeSheet ?? DateTime.MinValue; if (lastCompleted > DateTime.MinValue) { if (sheetInsert.ResubmitInterval.Days == 0) { continue; //If this interval is set to 0 and they've already completed this form once, we never want to create it automatically again } int elapsed = (DateTime.Today - lastCompleted.Date).Days; if (elapsed < sheetInsert.ResubmitInterval.Days) { continue; //The interval hasn't elapsed yet so we don't want to create this sheet } } SheetDef def = SheetDefs.GetSheetDef(sheetInsert.SheetDefNum); Sheet newSheet = CreateSheetFromSheetDef(def, appt.PatNum); SheetParameter.SetParameter(newSheet, "PatNum", appt.PatNum); SheetFiller.FillFields(newSheet); //Counting starts at 1 in this case and we don't want to ovewrite the previous number so increment first newSheet.ShowInTerminal = ++showInTerminal; listNewSheets.Add(newSheet); } SaveNewSheetList(listNewSheets); return(listNewSheets.Count); }
public static bool Trigger <T>(AutomationTrigger trigger, List <string> procCodes, long patNum, long aptNum = 0, T triggerObj = default(T)) { if (patNum == 0) //Could happen for OpenPatient trigger { return(false); } List <Automation> listAutomations = Automations.GetDeepCopy(); bool automationHappened = false; for (int i = 0; i < listAutomations.Count; i++) { if (listAutomations[i].Autotrigger != trigger) { continue; } if (trigger == AutomationTrigger.CompleteProcedure || trigger == AutomationTrigger.ScheduleProcedure) { if (procCodes == null || procCodes.Count == 0) { continue; //fail silently } string[] arrayCodes = listAutomations[i].ProcCodes.Split(','); if (procCodes.All(x => !arrayCodes.Contains(x))) { continue; } } //matching automation item has been found //Get possible list of conditions that exist for this automation item List <AutomationCondition> autoConditionsList = AutomationConditions.GetListByAutomationNum(listAutomations[i].AutomationNum); if (autoConditionsList.Count > 0 && !CheckAutomationConditions(autoConditionsList, patNum, triggerObj)) { continue; } SheetDef sheetDef; Sheet sheet; FormSheetFillEdit FormSF; Appointment aptNew; Appointment aptOld; switch (listAutomations[i].AutoAction) { case AutomationAction.CreateCommlog: if (Plugins.HookMethod(null, "AutomationL.Trigger_CreateCommlog_start", patNum, aptNum, listAutomations[i].CommType, listAutomations[i].MessageContent, trigger)) { automationHappened = true; continue; } Commlog commlogCur = new Commlog(); commlogCur.PatNum = patNum; commlogCur.CommDateTime = DateTime.Now; commlogCur.CommType = listAutomations[i].CommType; commlogCur.Note = listAutomations[i].MessageContent; commlogCur.Mode_ = CommItemMode.None; commlogCur.UserNum = Security.CurUser.UserNum; commlogCur.IsNew = true; FormCommItem commItemView = new FormCommItem(commlogCur); commItemView.ShowDialog(); automationHappened = true; continue; case AutomationAction.PopUp: MessageBox.Show(listAutomations[i].MessageContent); automationHappened = true; continue; case AutomationAction.PopUpThenDisable10Min: Plugins.HookAddCode(null, "AutomationL.Trigger_PopUpThenDisable10Min_begin", listAutomations[i], procCodes, patNum); long automationNum = listAutomations[i].AutomationNum; bool hasAutomationBlock = FormOpenDental.DicBlockedAutomations.ContainsKey(automationNum); if (hasAutomationBlock && FormOpenDental.DicBlockedAutomations[automationNum].ContainsKey(patNum)) //Automation block exist for current patient. { continue; } if (hasAutomationBlock) { FormOpenDental.DicBlockedAutomations[automationNum].Add(patNum, DateTime.Now.AddMinutes(10)); //Disable for 10 minutes. } else //Add automationNum to higher level dictionary . { FormOpenDental.DicBlockedAutomations.Add(automationNum, new Dictionary <long, DateTime>() { { patNum, DateTime.Now.AddMinutes(10) } //Disable for 10 minutes. }); } MessageBox.Show(listAutomations[i].MessageContent); automationHappened = true; continue; case AutomationAction.PrintPatientLetter: case AutomationAction.ShowExamSheet: case AutomationAction.ShowConsentForm: sheetDef = SheetDefs.GetSheetDef(listAutomations[i].SheetDefNum); sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; continue; case AutomationAction.PrintReferralLetter: long referralNum = RefAttaches.GetReferralNum(patNum); if (referralNum == 0) { MsgBox.Show("Automations", "This patient has no referral source entered."); automationHappened = true; continue; } sheetDef = SheetDefs.GetSheetDef(listAutomations[i].SheetDefNum); sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetParameter.SetParameter(sheet, "ReferralNum", referralNum); //Don't fill these params if the sheet doesn't use them. if (sheetDef.SheetFieldDefs.Any(x => (x.FieldType == SheetFieldType.Grid && x.FieldName == "ReferralLetterProceduresCompleted") || (x.FieldType == SheetFieldType.Special && x.FieldName == "toothChart"))) { List <Procedure> listProcs = Procedures.GetCompletedForDateRange(DateTime.Today, DateTime.Today , listPatNums: new List <long>() { patNum } , includeNote: true , includeGroupNote: true ); if (sheetDef.SheetFieldDefs.Any(x => x.FieldType == SheetFieldType.Grid && x.FieldName == "ReferralLetterProceduresCompleted")) { SheetParameter.SetParameter(sheet, "CompletedProcs", listProcs); } if (sheetDef.SheetFieldDefs.Any(x => x.FieldType == SheetFieldType.Special && x.FieldName == "toothChart")) { SheetParameter.SetParameter(sheet, "toothChartImg", SheetPrinting.GetToothChartHelper(patNum, false, listProceduresFilteredOverride: listProcs)); } } SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; continue; case AutomationAction.SetApptASAP: aptNew = Appointments.GetOneApt(aptNum); if (aptNew == null) { MsgBox.Show("Automations", "Invalid appointment for automation."); automationHappened = true; continue; } aptOld = aptNew.Copy(); aptNew.Priority = ApptPriority.ASAP; Appointments.Update(aptNew, aptOld); //Appointments S-Class handles Signalods continue; case AutomationAction.SetApptType: aptNew = Appointments.GetOneApt(aptNum); if (aptNew == null) { MsgBox.Show("Automations", "Invalid appointment for automation."); automationHappened = true; continue; } aptOld = aptNew.Copy(); aptNew.AppointmentTypeNum = listAutomations[i].AppointmentTypeNum; AppointmentType aptTypeCur = AppointmentTypes.GetFirstOrDefault(x => x.AppointmentTypeNum == aptNew.AppointmentTypeNum); if (aptTypeCur != null) { aptNew.ColorOverride = aptTypeCur.AppointmentTypeColor; aptNew.Pattern = AppointmentTypes.GetTimePatternForAppointmentType(aptTypeCur); List <Procedure> listProcs = Appointments.ApptTypeMissingProcHelper(aptNew, aptTypeCur, new List <Procedure>()); Procedures.UpdateAptNums(listProcs.Select(x => x.ProcNum).ToList(), aptNew.AptNum, aptNew.AptStatus == ApptStatus.Planned); } Appointments.Update(aptNew, aptOld); //Appointments S-Class handles Signalods continue; case AutomationAction.PatRestrictApptSchedTrue: if (!Security.IsAuthorized(Permissions.PatientApptRestrict, true)) { SecurityLogs.MakeLogEntry(Permissions.PatientApptRestrict, patNum, "Attempt to restrict patient scheduling was blocked due to lack of user permission."); continue; } PatRestrictions.Upsert(patNum, PatRestrict.ApptSchedule); automationHappened = true; continue; case AutomationAction.PatRestrictApptSchedFalse: if (!Security.IsAuthorized(Permissions.PatientApptRestrict, true)) { SecurityLogs.MakeLogEntry(Permissions.PatientApptRestrict, patNum, "Attempt to allow patient scheduling was blocked due to lack of user permission."); continue; } PatRestrictions.RemovePatRestriction(patNum, PatRestrict.ApptSchedule); automationHappened = true; continue; case AutomationAction.PrintRxInstruction: List <RxPat> listRx = (List <RxPat>)(object) triggerObj; if (listRx == null) { //Got here via a pre-existing trigger that doesn't pass in triggerObj. We now block creation of automation triggers that could get //here via code that does not pass in triggerObj. continue; } //We go through each new Rx where the patient note isn't blank. //There should only usually be one new rx, but we'll loop just in case. foreach (RxPat rx in listRx.Where(x => !string.IsNullOrWhiteSpace(x.PatientInstruction))) { //This logic is an exact copy of FormRxManage.butPrintSelect_Click()'s logic when 1 Rx is selected. //If this is updated, that method needs to be updated as well. sheetDef = SheetDefs.GetSheetDef(listAutomations[i].SheetDefNum); sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "RxNum", rx.RxNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; } continue; case AutomationAction.ChangePatStatus: Patient pat = Patients.GetPat(patNum); Patient patOld = pat.Copy(); pat.PatStatus = listAutomations[i].PatStatus; //Don't allow changing status from Archived if this is a merged patient. if (patOld.PatStatus != pat.PatStatus && patOld.PatStatus == PatientStatus.Archived && PatientLinks.WasPatientMerged(patOld.PatNum)) { MsgBox.Show("FormPatientEdit", "Not allowed to change the status of a merged patient."); continue; } switch (pat.PatStatus) { case PatientStatus.Deceased: if (patOld.PatStatus != PatientStatus.Deceased) { List <Appointment> listFutureAppts = Appointments.GetFutureSchedApts(pat.PatNum); if (listFutureAppts.Count > 0) { string apptDates = string.Join("\r\n", listFutureAppts.Take(10).Select(x => x.AptDateTime.ToString())); if (listFutureAppts.Count > 10) { apptDates += "(...)"; } if (MessageBox.Show( Lan.g("FormPatientEdit", "This patient has scheduled appointments in the future") + ":\r\n" + apptDates + "\r\n" + Lan.g("FormPatientEdit", "Would you like to delete them and set the patient to Deceased?"), Lan.g("FormPatientEdit", "Delete future appointments?"), MessageBoxButtons.YesNo) == DialogResult.Yes) { foreach (Appointment appt in listFutureAppts) { Appointments.Delete(appt.AptNum, true); } } else { continue; } } } break; } //Re-activate or disable recalls depending on the the status that the patient is changing to. Patients.UpdateRecalls(pat, patOld, "ChangePatStatus automation"); if (Patients.Update(pat, patOld)) { SecurityLogs.MakeLogEntry(Permissions.PatientEdit, patNum, "Patient status changed from " + patOld.PatStatus.GetDescription() + " to " + listAutomations[i].PatStatus.GetDescription() + " through ChangePatStatus automation."); } automationHappened = true; continue; } } return(automationHappened); }
public static bool Trigger <T>(AutomationTrigger trigger, List <string> procCodes, long patNum, long aptNum = 0, T triggerObj = default(T)) { if (patNum == 0) //Could happen for OpenPatient trigger { return(false); } List <Automation> listAutomations = Automations.GetDeepCopy(); bool automationHappened = false; for (int i = 0; i < listAutomations.Count; i++) { if (listAutomations[i].Autotrigger != trigger) { continue; } if (trigger == AutomationTrigger.CompleteProcedure || trigger == AutomationTrigger.ScheduleProcedure) { if (procCodes == null || procCodes.Count == 0) { continue; //fail silently } string[] arrayCodes = listAutomations[i].ProcCodes.Split(','); if (procCodes.All(x => !arrayCodes.Contains(x))) { continue; } } //matching automation item has been found //Get possible list of conditions that exist for this automation item List <AutomationCondition> autoConditionsList = AutomationConditions.GetListByAutomationNum(listAutomations[i].AutomationNum); if (autoConditionsList.Count > 0 && !CheckAutomationConditions(autoConditionsList, patNum, triggerObj)) { continue; } SheetDef sheetDef; Sheet sheet; FormSheetFillEdit FormSF; Appointment aptNew; Appointment aptOld; switch (listAutomations[i].AutoAction) { case AutomationAction.CreateCommlog: if (Plugins.HookMethod(null, "AutomationL.Trigger_CreateCommlog_start", patNum, aptNum, listAutomations[i].CommType, listAutomations[i].MessageContent)) { automationHappened = true; continue; } Commlog commlogCur = new Commlog(); commlogCur.PatNum = patNum; commlogCur.CommDateTime = DateTime.Now; commlogCur.CommType = listAutomations[i].CommType; commlogCur.Note = listAutomations[i].MessageContent; commlogCur.Mode_ = CommItemMode.None; commlogCur.UserNum = Security.CurUser.UserNum; FormCommItem commItemView = new FormCommItem(); commItemView.ShowDialog(new CommItemModel() { CommlogCur = commlogCur }, new CommItemController(commItemView) { IsNew = true }); automationHappened = true; continue; case AutomationAction.PopUp: MessageBox.Show(listAutomations[i].MessageContent); automationHappened = true; continue; case AutomationAction.PopUpThenDisable10Min: long automationNum = listAutomations[i].AutomationNum; bool hasAutomationBlock = FormOpenDental.DicBlockedAutomations.ContainsKey(automationNum); if (hasAutomationBlock && FormOpenDental.DicBlockedAutomations[automationNum].ContainsKey(patNum)) //Automation block exist for current patient. { continue; } if (hasAutomationBlock) { FormOpenDental.DicBlockedAutomations[automationNum].Add(patNum, DateTime.Now.AddMinutes(10)); //Disable for 10 minutes. } else //Add automationNum to higher level dictionary . { FormOpenDental.DicBlockedAutomations.Add(automationNum, new Dictionary <long, DateTime>() { { patNum, DateTime.Now.AddMinutes(10) } //Disable for 10 minutes. }); } MessageBox.Show(listAutomations[i].MessageContent); automationHappened = true; continue; case AutomationAction.PrintPatientLetter: case AutomationAction.ShowExamSheet: case AutomationAction.ShowConsentForm: sheetDef = SheetDefs.GetSheetDef(listAutomations[i].SheetDefNum); sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; continue; case AutomationAction.PrintReferralLetter: long referralNum = RefAttaches.GetReferralNum(patNum); if (referralNum == 0) { MsgBox.Show("Automations", "This patient has no referral source entered."); automationHappened = true; continue; } sheetDef = SheetDefs.GetSheetDef(listAutomations[i].SheetDefNum); sheet = SheetUtil.CreateSheet(sheetDef, patNum); SheetParameter.SetParameter(sheet, "PatNum", patNum); SheetParameter.SetParameter(sheet, "ReferralNum", referralNum); //Don't fill these params if the sheet doesn't use them. if (sheetDef.SheetFieldDefs.Any(x => (x.FieldType == SheetFieldType.Grid && x.FieldName == "ReferralLetterProceduresCompleted") || (x.FieldType == SheetFieldType.Special && x.FieldName == "toothChart"))) { List <Procedure> listProcs = Procedures.GetCompletedForDateRange(DateTime.Today, DateTime.Today , listPatNums: new List <long>() { patNum } , includeNote: true , includeGroupNote: true ); if (sheetDef.SheetFieldDefs.Any(x => x.FieldType == SheetFieldType.Grid && x.FieldName == "ReferralLetterProceduresCompleted")) { SheetParameter.SetParameter(sheet, "CompletedProcs", listProcs); } if (sheetDef.SheetFieldDefs.Any(x => x.FieldType == SheetFieldType.Special && x.FieldName == "toothChart")) { SheetParameter.SetParameter(sheet, "toothChartImg", SheetPrinting.GetToothChartHelper(patNum, false, listProceduresFilteredOverride: listProcs)); } } SheetFiller.FillFields(sheet); SheetUtil.CalculateHeights(sheet); FormSF = new FormSheetFillEdit(sheet); FormSF.ShowDialog(); automationHappened = true; continue; case AutomationAction.SetApptASAP: aptNew = Appointments.GetOneApt(aptNum); if (aptNew == null) { MsgBox.Show("Automations", "Invalid appointment for automation."); automationHappened = true; continue; } aptOld = aptNew.Copy(); aptNew.Priority = ApptPriority.ASAP; Appointments.Update(aptNew, aptOld); //Appointments S-Class handles Signalods continue; case AutomationAction.SetApptType: aptNew = Appointments.GetOneApt(aptNum); if (aptNew == null) { MsgBox.Show("Automations", "Invalid appointment for automation."); automationHappened = true; continue; } aptOld = aptNew.Copy(); aptNew.AppointmentTypeNum = listAutomations[i].AppointmentTypeNum; AppointmentType aptTypeCur = AppointmentTypes.GetFirstOrDefault(x => x.AppointmentTypeNum == aptNew.AppointmentTypeNum); if (aptTypeCur != null) { aptNew.ColorOverride = aptTypeCur.AppointmentTypeColor; } Appointments.Update(aptNew, aptOld); //Appointments S-Class handles Signalods continue; case AutomationAction.PatRestrictApptSchedTrue: if (!Security.IsAuthorized(Permissions.PatientApptRestrict, true)) { SecurityLogs.MakeLogEntry(Permissions.PatientApptRestrict, patNum, "Attempt to restrict patient scheduling was blocked due to lack of user permission."); continue; } PatRestrictions.Upsert(patNum, PatRestrict.ApptSchedule); automationHappened = true; continue; case AutomationAction.PatRestrictApptSchedFalse: if (!Security.IsAuthorized(Permissions.PatientApptRestrict, true)) { SecurityLogs.MakeLogEntry(Permissions.PatientApptRestrict, patNum, "Attempt to allow patient scheduling was blocked due to lack of user permission."); continue; } PatRestrictions.RemovePatRestriction(patNum, PatRestrict.ApptSchedule); automationHappened = true; continue; } } return(automationHappened); }