///<summary>If not using clinics then supply an empty list of clinicNums.</summary>
        public static DataTable GetBrokenApptTable(DateTime dateStart, DateTime dateEnd, List <long> listProvNums, List <long> listClinicNums,
                                                   List <long> listAdj, BrokenApptProcedure brokenApptOption, bool hasAllClinics, bool isByProc, bool isByAptStatus, bool isByAdj, bool hasClinicsEnabled)
        {
            if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
            {
                return(Meth.GetTable(MethodBase.GetCurrentMethod(), dateStart, dateEnd, listProvNums, listClinicNums, listAdj, brokenApptOption, hasAllClinics, isByProc
                                     , isByAptStatus, isByAdj, hasClinicsEnabled));
            }
            string whereProv = "";

            if (listProvNums.Count > 0)
            {
                if (isByProc)                 //Report looking at ADA procedure code D9986
                {
                    whereProv = " AND procedurelog.ProvNum IN (" + string.Join(",", listProvNums) + ") ";
                }
                else if (isByAdj)                 //Report looking at broken appointment adjustments
                {
                    whereProv = " AND adjustment.ProvNum IN (" + string.Join(",", listProvNums) + ") ";
                }
                else                  //Report looking at appointments with a status of 'Broken'
                {
                    whereProv = " AND (appointment.ProvNum IN (" + string.Join(",", listProvNums) + ") "
                                + "OR appointment.ProvHyg IN (" + string.Join(",", listProvNums) + ")) ";
                }
            }
            string whereClin = "";

            if (hasClinicsEnabled && listClinicNums.Count > 0)
            {
                if (isByProc)                 //Report looking at ADA procedure code D9986
                {
                    whereClin += " AND procedurelog.ClinicNum IN(";
                }
                else if (isByAdj)                 //Report looking at broken appointment adjustments
                {
                    whereClin += " AND adjustment.ClinicNum IN(";
                }
                else                  //Report looking at appointments with a status of 'Broken'
                {
                    whereClin += " AND appointment.ClinicNum IN(";
                }
                whereClin += string.Join(",", listClinicNums) + ") ";
            }
            string queryBrokenApts = "";

            if (isByProc)
            {
                queryBrokenApts = ByProceduresQuery(hasClinicsEnabled, dateStart, dateEnd, whereProv, whereClin, brokenApptOption);
            }
            if (isByAdj)
            {
                queryBrokenApts = ByAdjustmentsQuery(hasClinicsEnabled, dateStart, dateEnd, whereProv, whereClin, listAdj);
            }
            if (isByAptStatus)
            {
                queryBrokenApts = ByApptStatusQuery(hasClinicsEnabled, dateStart, dateEnd, whereProv, whereClin);
            }
            return(ReportsComplex.RunFuncOnReportServer(() => ReportsComplex.GetTable(queryBrokenApts)));
        }
Exemple #2
0
        private void FillComboBrokenProc()
        {
            //Mimics FormRpBrokenAppointments.cs
            int index = 0;
            BrokenApptProcedure brokenApptCodeDB = (BrokenApptProcedure)PrefC.GetInt(PrefName.BrokenApptProcedure);

            switch (brokenApptCodeDB)
            {
            case BrokenApptProcedure.None:
            case BrokenApptProcedure.Missed:
                index = comboBrokenProcType.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()) + ": (D9986)");
                break;

            case BrokenApptProcedure.Cancelled:
                index = comboBrokenProcType.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()) + ": (D9987)");
                break;

            case BrokenApptProcedure.Both:
                comboBrokenProcType.Items.Add(Lans.g(this, BrokenApptProcedure.Missed.ToString()) + ": (D9986)");
                comboBrokenProcType.Items.Add(Lans.g(this, BrokenApptProcedure.Cancelled.ToString()) + ": (D9987)");
                index = comboBrokenProcType.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()));
                break;
            }
            comboBrokenProcType.SelectedIndex = index;
        }
Exemple #3
0
        private void FormApptBreak_Load(object sender, EventArgs e)
        {
            BrokenApptProcedure brokenApptProcs = (BrokenApptProcedure)PrefC.GetInt(PrefName.BrokenApptProcedure);

            radioMissed.Enabled    = brokenApptProcs.In(BrokenApptProcedure.Missed, BrokenApptProcedure.Both);
            radioCancelled.Enabled = brokenApptProcs.In(BrokenApptProcedure.Cancelled, BrokenApptProcedure.Both);
            if (radioMissed.Enabled && !radioCancelled.Enabled)
            {
                radioMissed.Checked = true;
            }
            else if (!radioMissed.Enabled && radioCancelled.Enabled)
            {
                radioMissed.Checked = true;
            }
        }
Exemple #4
0
        private void radioProcs_CheckedChanged(object sender, EventArgs e)
        {
            if (radioProcs.Checked)
            {
                listOptions.Items.Clear();
                listOptions.SelectionMode = SelectionMode.One;
                int index = 0;
                _listBrokenProcOptions.Clear();
                BrokenApptProcedure brokenApptCodeDB = (BrokenApptProcedure)PrefC.GetInt(PrefName.BrokenApptProcedure);
                switch (brokenApptCodeDB)
                {
                case BrokenApptProcedure.None:
                case BrokenApptProcedure.Missed:
                    _listBrokenProcOptions.Add(BrokenApptProcedure.Missed);
                    index           = listOptions.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()) + ": (D9986)");
                    labelDescr.Text = Lan.g(this, "Broken appointments based on ADA code D9986");
                    break;

                case BrokenApptProcedure.Cancelled:
                    _listBrokenProcOptions.Add(BrokenApptProcedure.Cancelled);
                    index           = listOptions.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()) + ": (D9987)");
                    labelDescr.Text = Lan.g(this, "Broken appointments based on ADA code D9987");
                    break;

                case BrokenApptProcedure.Both:
                    _listBrokenProcOptions.Add(BrokenApptProcedure.Missed);
                    _listBrokenProcOptions.Add(BrokenApptProcedure.Cancelled);
                    _listBrokenProcOptions.Add(BrokenApptProcedure.Both);
                    listOptions.Items.Add(Lans.g(this, BrokenApptProcedure.Missed.ToString()) + ": (D9986)");
                    listOptions.Items.Add(Lans.g(this, BrokenApptProcedure.Cancelled.ToString()) + ": (D9987)");
                    index           = listOptions.Items.Add(Lans.g(this, brokenApptCodeDB.ToString()));
                    labelDescr.Text = Lan.g(this, "Broken appointments based on ADA code D9986 or D9987");
                    break;
                }
                listOptions.SetSelected(index, true);
                listOptions.Visible = true;
            }
        }
Exemple #5
0
        private void butOK_Click(object sender, EventArgs e)
        {
            if (!checkAllProvs.Checked && listProvs.SelectedIndices.Count == 0)
            {
                MsgBox.Show(this, "At least one provider must be selected.");
                return;
            }
            if (_hasClinicsEnabled)
            {
                if (!checkAllClinics.Checked && listClinics.SelectedIndices.Count == 0)
                {
                    MsgBox.Show(this, "At least one clinic must be selected.");
                    return;
                }
            }
            if (radioAdj.Checked && listOptions.SelectedIndices.Count == 0)
            {
                MsgBox.Show(this, "At least one adjustment type must be selected.");
                return;
            }
            if (radioProcs.Checked && listOptions.SelectedIndices.Count == 0)
            {
                MsgBox.Show(this, "At least one procedure code option must be selected.");
                return;
            }
            List <long> listClinicNums = new List <long>();

            for (int i = 0; i < listClinics.SelectedIndices.Count; i++)
            {
                if (Security.CurUser.ClinicIsRestricted)
                {
                    listClinicNums.Add(_listClinics[listClinics.SelectedIndices[i]].ClinicNum);                            //we know that the list is a 1:1 to _listClinics
                }
                else
                {
                    if (listClinics.SelectedIndices[i] == 0)
                    {
                        listClinicNums.Add(0);
                    }
                    else
                    {
                        listClinicNums.Add(_listClinics[listClinics.SelectedIndices[i] - 1].ClinicNum);                      //Minus 1 from the selected index
                    }
                }
            }
            List <long> listProvNums = new List <long>();

            if (checkAllProvs.Checked)
            {
                for (int i = 0; i < _listProviders.Count; i++)
                {
                    listProvNums.Add(_listProviders[i].ProvNum);
                }
            }
            else
            {
                for (int i = 0; i < listProvs.SelectedIndices.Count; i++)
                {
                    listProvNums.Add(_listProviders[listProvs.SelectedIndices[i]].ProvNum);
                }
            }
            List <long> listAdjDefNums = new List <long>();

            if (radioAdj.Checked)
            {
                for (int i = 0; i < listOptions.SelectedIndices.Count; i++)
                {
                    listAdjDefNums.Add(_listPosAdjTypes[listOptions.SelectedIndices[i]].DefNum);
                }
            }
            BrokenApptProcedure brokenApptSelection = BrokenApptProcedure.None;

            if (radioProcs.Checked)
            {
                brokenApptSelection = _listBrokenProcOptions[listOptions.SelectedIndex];
            }
            ReportComplex report = new ReportComplex(true, false);
            DataTable     table  = new DataTable();

            table = RpBrokenAppointments.GetBrokenApptTable(dateStart.SelectionStart, dateEnd.SelectionStart, listProvNums, listClinicNums, listAdjDefNums, brokenApptSelection
                                                            , checkAllClinics.Checked, radioProcs.Checked, radioAptStatus.Checked, radioAdj.Checked, _hasClinicsEnabled);
            string subtitleProvs   = "";
            string subtitleClinics = "";

            if (checkAllProvs.Checked)
            {
                subtitleProvs = Lan.g(this, "All Providers");
            }
            else
            {
                for (int i = 0; i < listProvs.SelectedIndices.Count; i++)
                {
                    if (i > 0)
                    {
                        subtitleProvs += ", ";
                    }
                    subtitleProvs += _listProviders[listProvs.SelectedIndices[i]].Abbr;
                }
            }
            if (_hasClinicsEnabled)
            {
                if (checkAllClinics.Checked)
                {
                    subtitleClinics = Lan.g(this, "All Clinics");
                }
                else
                {
                    for (int i = 0; i < listClinics.SelectedIndices.Count; i++)
                    {
                        if (i > 0)
                        {
                            subtitleClinics += ", ";
                        }
                        if (Security.CurUser.ClinicIsRestricted)
                        {
                            subtitleClinics += _listClinics[listClinics.SelectedIndices[i]].Abbr;
                        }
                        else
                        {
                            if (listClinics.SelectedIndices[i] == 0)
                            {
                                subtitleClinics += Lan.g(this, "Unassigned");
                            }
                            else
                            {
                                subtitleClinics += _listClinics[listClinics.SelectedIndices[i] - 1].Abbr;                            //Minus 1 from the selected index
                            }
                        }
                    }
                }
            }
            Font font         = new Font("Tahoma", 10);
            Font fontBold     = new Font("Tahoma", 10, FontStyle.Bold);
            Font fontTitle    = new Font("Tahoma", 17, FontStyle.Bold);
            Font fontSubTitle = new Font("Tahoma", 11, FontStyle.Bold);

            report.ReportName = Lan.g(this, "Broken Appointments");
            report.AddTitle("Title", Lan.g(this, "Broken Appointments"), fontTitle);
            if (radioProcs.Checked)             //Report looking at ADA procedure code D9986
            {
                string codes = "";
                switch (brokenApptSelection)
                {
                case BrokenApptProcedure.None:
                case BrokenApptProcedure.Missed:
                    codes = "D9986";
                    break;

                case BrokenApptProcedure.Cancelled:
                    codes = "D9987";
                    break;

                case BrokenApptProcedure.Both:
                    codes = "D9986 or D9987";
                    break;
                }
                report.AddSubTitle("Report Description", Lan.g(this, "By ADA Code " + codes), fontSubTitle);
            }
            else if (radioAdj.Checked)             //Report looking at broken appointment adjustments
            {
                report.AddSubTitle("Report Description", Lan.g(this, "By Broken Appointment Adjustment"), fontSubTitle);
            }
            else              //Report looking at appointments with a status of 'Broken'
            {
                report.AddSubTitle("Report Description", Lan.g(this, "By Appointment Status"), fontSubTitle);
            }
            report.AddSubTitle("Providers", subtitleProvs, fontSubTitle);
            report.AddSubTitle("Clinics", subtitleClinics, fontSubTitle);
            QueryObject query;

            if (PrefC.HasClinicsEnabled)             //Split the query up by clinics.
            {
                query = report.AddQuery(table, Lan.g(this, "Date") + ": " + DateTimeOD.Today.ToString("d"), "ClinicDesc", SplitByKind.Value, 0, true);
            }
            else
            {
                query = report.AddQuery(table, Lan.g(this, "Date") + ": " + DateTimeOD.Today.ToString("d"), "", SplitByKind.None, 0, true);
            }
            //Add columns to report
            if (radioProcs.Checked)             //Report looking at ADA procedure code D9986 or D9987
            {
                query.AddColumn(Lan.g(this, "Date"), 85, FieldValueType.Date, font);
                query.AddColumn(Lan.g(this, "Provider"), 180, FieldValueType.String, font);
                if (brokenApptSelection == BrokenApptProcedure.Both)
                {
                    query.AddColumn(Lan.g(this, "Code"), 75, FieldValueType.String, font);
                }
                query.AddColumn(Lan.g(this, "Patient"), 220, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "Fee"), 200, FieldValueType.Number, font);
                query.AddGroupSummaryField(Lan.g(this, "Total Broken Appointment Fees") + ":", Lan.g(this, "Fee"), "ProcFee", SummaryOperation.Sum, fontBold, 0, 10);
                query.AddGroupSummaryField(Lan.g(this, "Total Broken Appointments") + ":", Lan.g(this, "Fee"), "ProcFee", SummaryOperation.Count, fontBold, 0, 10);
            }
            else if (radioAdj.Checked)             //Report looking at broken appointment adjustments
            {
                query.AddColumn(Lan.g(this, "Date"), 85, FieldValueType.Date, font);
                query.AddColumn(Lan.g(this, "Provider"), 100, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "Patient"), 220, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "Amount"), 80, FieldValueType.Number, font);
                query.AddColumn(Lan.g(this, "Note"), 300, FieldValueType.String, font);
                query.AddGroupSummaryField(Lan.g(this, "Total Broken Appointment Adjustment Amount") + ":",
                                           Lan.g(this, "Amount"), "AdjAmt", SummaryOperation.Sum, fontBold, 0, 10);
                query.AddGroupSummaryField(Lan.g(this, "Total Broken Appointments") + ":",
                                           Lan.g(this, "Amount"), "AdjAmt", SummaryOperation.Count, fontBold, 0, 10);
            }
            else              //Report looking at appointments with a status of 'Broken'
            {
                query.AddColumn(Lan.g(this, "AptDate"), 85, FieldValueType.Date, font);
                query.AddColumn(Lan.g(this, "Patient"), 220, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "Doctor"), 165, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "Hygienist"), 165, FieldValueType.String, font);
                query.AddColumn(Lan.g(this, "IsHyg"), 50, FieldValueType.Boolean, font);
                query.GetColumnDetail(Lan.g(this, "IsHyg")).ContentAlignment = ContentAlignment.MiddleCenter;
                query.AddGroupSummaryField(Lan.g(this, "Total Broken Appointments") + ":", Lan.g(this, "IsHyg"), "AptDateTime", SummaryOperation.Count, fontBold, 0, 10);
            }
            query.ContentAlignment = ContentAlignment.MiddleRight;
            report.AddPageNum(font);
            //execute query
            if (!report.SubmitQueries())
            {
                return;
            }
            //display report
            FormReportComplex FormR = new FormReportComplex(report);

            //FormR.MyReport=report;
            FormR.ShowDialog();
            DialogResult = DialogResult.OK;
        }
        private static string ByProceduresQuery(bool hasClinicsEnabled, DateTime dateStart, DateTime dateEnd, string whereProv, string whereClin, BrokenApptProcedure brokenApptOption)
        {
            string queryBrokenApts = "SELECT procedurelog.ProcDate ProcDate,provider.Abbr Provider,";

            if (brokenApptOption == BrokenApptProcedure.Both)                   //Show code when running for both.
            {
                queryBrokenApts += "procedurecode.ProcCode,";
            }
            queryBrokenApts += DbHelper.Concat("patient.LName", "', '", "patient.FName") + " Patient, "
                               + "procedurelog.ProcFee ProcFee ";
            if (hasClinicsEnabled)
            {
                queryBrokenApts += ",COALESCE(clinic.Description,'" + POut.String(Lans.g("FormRpBrokenAppointments", "Unassigned")) + "') ClinicDesc ";
            }
            queryBrokenApts +=
                "FROM procedurelog ";
            switch (brokenApptOption)
            {
            case BrokenApptProcedure.None:                            //Just in case.
            case BrokenApptProcedure.Missed:
                queryBrokenApts += "INNER JOIN procedurecode ON procedurecode.CodeNum=procedurelog.CodeNum AND procedurecode.ProcCode='D9986' ";
                break;

            case BrokenApptProcedure.Cancelled:
                queryBrokenApts += "INNER JOIN procedurecode ON procedurecode.CodeNum=procedurelog.CodeNum AND procedurecode.ProcCode='D9987' ";
                break;

            case BrokenApptProcedure.Both:
                queryBrokenApts += "INNER JOIN procedurecode ON procedurecode.CodeNum=procedurelog.CodeNum AND procedurecode.ProcCode IN ('D9986','D9987') ";
                break;
            }
            queryBrokenApts += "INNER JOIN patient ON patient.PatNum=procedurelog.PatNum "
                               + "INNER JOIN provider ON provider.ProvNum=procedurelog.ProvNum "
                               + whereProv;
            if (hasClinicsEnabled)
            {
                queryBrokenApts += "LEFT JOIN clinic ON clinic.ClinicNum=procedurelog.ClinicNum ";
            }
            queryBrokenApts += "WHERE procedurelog.ProcDate BETWEEN " + POut.Date(dateStart) + " AND " + POut.Date(dateEnd) + " "
                               + "AND procedurelog.ProcStatus=" + POut.Int((int)ProcStat.C) + " ";
            if (hasClinicsEnabled)
            {
                queryBrokenApts += whereClin + " "
                                   + "ORDER BY clinic.Description,procedurelog.ProcDate,patient.LName,patient.FName";
            }
            else
            {
                queryBrokenApts += "ORDER BY procedurelog.ProcDate,patient.LName,patient.FName";
            }
            return(queryBrokenApts);
        }