示例#1
0
        private void Search()
        {
            appointment_audit util = new appointment_audit();

            string sql = "SELECT * FROM appointment_audit WHERE  CAST(FLOOR(CAST(date_changed AS float)) AS DATETIME) >= '" + dtpStartDate.Value.ToShortDateString() +
                         "' AND  CAST(FLOOR(CAST(date_changed AS float)) AS DATETIME) < '" + dtpStartDate.Value.AddDays((cmbDuration.SelectedIndex + 1)).ToShortDateString() + "'";

            if (cmbUserList.SelectedIndex > 0)
            {
                sql += " AND USER_CHANGED = '" + cmbUserList.Text + "'";
            }

            DataTable results = util.Search(sql);

            dgvAppointments.Rows.Clear();
            foreach (DataRow aMatch in results.Rows)
            {
                util.Load(aMatch);

                string apptDate;



                if (util.change_type == appointment_audit.ChangeTypes.Created || util.change_type == appointment_audit.ChangeTypes.CreatedBroken)
                {
                    if (util["n_APPTDATE"] == DBNull.Value)
                    {
                        apptDate = "";
                    }
                    else
                    {
                        apptDate = util.n_APPTDATE.ToShortDateString();
                    }

                    dgvAppointments.Rows.Add(util.DATE_CHANGED.ToString("M/d h:mm:ss"), util.USER_CHANGED.Trim(), util.n_PATNAME,
                                             apptDate, util.change_type.ToString(), util.n_APPTID, FormatChangeList(util.ChangeList));
                }
                else
                {
                    if (util["APPTDATE"] == DBNull.Value)
                    {
                        apptDate = "";
                    }
                    else
                    {
                        apptDate = util.APPTDATE.ToShortDateString();
                    }

                    dgvAppointments.Rows.Add(util.DATE_CHANGED.ToString("M/d h:mm:ss"), util.USER_CHANGED.Trim(), util.PATNAME,
                                             apptDate, util.change_type.ToString(), util.APPTID, FormatChangeList(util.ChangeList));
                }
            }

            lblChangedAppointments.Text = string.Format("Changed Appointments ({0})", dgvAppointments.Rows.Count);
        }
示例#2
0
        private void InitializeUserList()
        {
            appointment_audit utility = new appointment_audit();

            cmbUserList.Items.Clear();
            cmbUserList.Items.Add("All");

            foreach (string u in utility.UserList)
            {
                cmbUserList.Items.Add(u);
            }
        }
示例#3
0
        private void btnChangeType_Click(object sender, EventArgs e)
        {
            appointment_audit aa = new appointment_audit();

            DataTable matches = aa.Search("SELECT * FROM appointment_audit WHERE change_type is null");

            foreach (DataRow aRow in matches.Rows)
            {
                aa = new appointment_audit();
                aa.Load(aRow);

                aa.change_type = aa.DiscoverChangeType();

                aa.Save();
            }

            MessageBox.Show(this, "Action Complete. " + matches.Rows.Count + " rows updated.");
        }
示例#4
0
        void WorkerThread_DoWork(object sender, DoWorkEventArgs e)
        {
            claim             workingClaim          = new claim();
            DataTable         importData            = new DataTable();
            DataTable         importDataSecondaries = new DataTable();
            DataTable         importDataPredeterms  = new DataTable();
            OleDbConnection   oConnect;
            appointment_audit aa;

            UpdateProgressBar(0, "Starting Import");


            #region Initiate Connection, Get Data
            try
            {
                oConnect = new OleDbConnection(data_mapping_schema.GetDefaultSchema.GetConnectionString(true));
            }
            catch (Exception err)
            {
                LoggingHelper.Log("An error occurred getting the connection string for a new connection in frmImportData.Import", LogSeverity.Error, err, false);
                e.Cancel = true;
                return;
            }



            OleDbDataAdapter oAdapter;
            // Use Connection object for the DataAdapter to retrieve all tables from selected Database
            try
            {
                oConnect.Open();
            }
            catch (Exception err)
            {
                LoggingHelper.Log("Could not connect to the database in frmImportAppointmentAuditdata.Import", LogSeverity.Error, err, false);
                e.Cancel = true;
                return;
            }

            DateTime lastImport  = system_options.GetLastAppointmentAuditImportDate();
            DateTime importStart = DateTime.Now;
            system_options.SetLastAppointmentAuditImportDate(importStart);



            try
            {
                string sql;

                // ************* Start import
                if (chkMergeData.Checked)
                {
                    sql = string.Format("SELECT * FROM AUDIT_DDB_APPT_BASE" +
                                        " WHERE DATE_CHANGED > '{0}'", CommonFunctions.ToSQLServerDateTime(lastImport));
                }
                else
                {
                    UpdateStatusBox("Clearing existing appointment audit information for full import...");
                    UpdateProgressBar(0, "Clearing existing appointments audit data...");
                    aa = new appointment_audit();
                    aa.Zap();

                    sql = string.Format("SELECT * FROM AUDIT_DDB_APPT_BASE" +
                                        " WHERE DATE_CHANGED > '{0}'",
                                        DateTime.Now.AddDays(Convert.ToInt32(nmbFullImportDuration.Value * -1)).ToShortDateString());
                }
                UpdateStatusBox("Starting the following query: \r\n" + sql);
                UpdateProgressBar(50, "Querying remote database...");
                oAdapter = new OleDbDataAdapter(sql, oConnect);
                oAdapter.SelectCommand.CommandTimeout = System.Convert.ToInt32(nmbTimeout.Value);
                oAdapter.Fill(importData);
            }
            catch (Exception err)
            {
                LoggingHelper.Log("Error with SQL statement or connection in frmImportData.Import", LogSeverity.Error, err);
                e.Cancel = true;
                CancelImport();
                return;
            }

            UpdateProgressBar(200, "Importing data...");

            // **** Data retrieved, put it into our local table

            totalRows = importData.Rows.Count;
            decimal exactIncrementAmount;
            decimal incrementCounter = 0;
            int     increment;

            if (totalRows > 0)
            {
                exactIncrementAmount = 500m / totalRows;
            }
            else
            {
                exactIncrementAmount = 500m;
            }


            if (exactIncrementAmount < 1)
            {
                increment = 1;
            }
            else
            {
                increment = Convert.ToInt32(Math.Truncate(exactIncrementAmount));
            }

            int i = 0;

            UpdateStatusBox("Starting import process for " + importData.Rows.Count + " rows.");

            // Have data at this point, need to tie them to the internal mapping schema data
            foreach (DataRow anImportRow in importData.Rows)
            {
                i++;
                // need new data object for this table type
                aa = new appointment_audit();

                foreach (DataColumn aColumn in importData.Columns)
                {
                    aa[aColumn.ColumnName] = anImportRow[aColumn.ColumnName];
                }

                aa.change_type = aa.DiscoverChangeType();
                aa.Save();

                incrementCounter += exactIncrementAmount;

                if (incrementCounter >= increment)
                {
                    UpdateProgressBar(increment, string.Format("Importing changes {0}/{1}", i, totalRows));
                    incrementCounter -= increment;
                }
            }

            #endregion
        }
示例#5
0
        void WorkerThread_DoWork(object sender, DoWorkEventArgs e)
        {
            claim             workingClaim          = new claim();
            DataTable         importData            = new DataTable();
            DataTable         importDataSecondaries = new DataTable();
            DataTable         importDataPredeterms  = new DataTable();
            OleDbConnection   oConnect;
            appointment_audit aa;

            UpdateProgressBar(0, "Starting Import");


            #region Initiate Connection, Get Data
            try
            {
                oConnect = new OleDbConnection(data_mapping_schema.GetDefaultSchema.GetConnectionString(true));
            }
            catch (Exception err)
            {
                LoggingHelper.Log("An error occurred getting the connection string for a new connection in frmImportData.Import", LogSeverity.Error, err, false);
                e.Cancel = true;
                return;
            }



            OleDbDataAdapter oAdapter;
            // Use Connection object for the DataAdapter to retrieve all tables from selected Database
            try
            {
                oConnect.Open();
            }
            catch (Exception err)
            {
                LoggingHelper.Log("Could not connect to the database in frmImportAppointmentAuditdata.Import", LogSeverity.Error, err, false);
                e.Cancel = true;
                return;
            }

            DateTime lastImport = system_options.GetLastAppointmentAuditImportDate();
            importStart = DateTime.Now;



            try
            {
                string sql;

                // ************* Start import
                if (chkMergeData.Checked)
                {
                    sql = string.Format("SELECT * FROM AUDIT_DDB_APPT_BASE" +
                                        " WHERE DATE_CHANGED > '{0}'", CommonFunctions.ToSQLServerDateTime(lastImport));
                }
                else
                {
                    UpdateStatusBox("Clearing existing appointment audit information for full import...");
                    UpdateProgressBar(0, "Clearing existing appointments audit data...");
                    aa = new appointment_audit();
                    aa.Zap();

                    sql = string.Format("SELECT * FROM AUDIT_DDB_APPT_BASE" +
                                        " WHERE DATE_CHANGED > '{0}'",
                                        DateTime.Now.AddDays(Convert.ToInt32(nmbFullImportDuration.Value * -1)).ToShortDateString());
                }
                UpdateStatusBox("Starting the following query: \r\n" + sql);
                UpdateProgressBar(50, "Querying remote database...");
                oAdapter = new OleDbDataAdapter(sql, oConnect);
                oAdapter.SelectCommand.CommandTimeout = System.Convert.ToInt32(nmbTimeout.Value);
                oAdapter.Fill(importData);
            }
            catch (Exception err)
            {
                LoggingHelper.Log("Error with SQL statement or connection in frmImportData.Import", LogSeverity.Error, err);
                e.Cancel = true;
                CancelImport();
                return;
            }

            UpdateProgressBar(200, "Importing data...");

            // **** Data retrieved, put it into our local table

            totalRows = importData.Rows.Count;
            decimal exactIncrementAmount;
            decimal incrementCounter = 0;
            int     increment;

            if (totalRows > 0)
            {
                exactIncrementAmount = 500m / totalRows;
            }
            else
            {
                exactIncrementAmount = 500m;
            }


            if (exactIncrementAmount < 1)
            {
                increment = 1;
            }
            else
            {
                increment = Convert.ToInt32(Math.Truncate(exactIncrementAmount));
            }

            UpdateStatusBox("Starting import process for " + importData.Rows.Count + " rows.");

            int i            = 0;
            int insertedRows = 0;
            aa = new appointment_audit();
            string colList   = "";
            string valueList = "";
            string sqlText   = "INSERT INTO APPOINTMENT_AUDIT ({0}) VALUES {1}";
            foreach (DataColumn aColumn in importData.Columns)
            {
                colList += aColumn.ColumnName + ",";
            }
            colList = colList.Substring(0, colList.Length - 1);


            // Have data at this point, need to tie them to the internal mapping schema data
            foreach (DataRow anImportRow in importData.Rows)
            {
                i++;
                insertedRows++;
                // need new data object for this table type

                /*aa = new appointment_audit();
                 *
                 * foreach (DataColumn aColumn in importData.Columns)
                 * {
                 *  aa[aColumn.ColumnName] = anImportRow[aColumn.ColumnName];
                 * }
                 *
                 * aa.change_type = aa.DiscoverChangeType();
                 * aa.Save();
                 *
                 * incrementCounter += exactIncrementAmount;
                 *
                 * */



                if (insertedRows > 500) // Can't go over 1000, no reason to cut it close
                {
                    valueList = valueList.Substring(0, valueList.Length - 1);
                    sqlText   = string.Format(sqlText, colList, valueList);

                    /* if (!THREADINGON)
                     *  Clipboard.SetText(sqlText); */
                    aa.ExecuteNonQuery(sqlText);

                    valueList = "";
                    sqlText   = "INSERT INTO APPOINTMENT_AUDIT ({0}) VALUES {1}";
                }

                valueList += "(";

                foreach (DataColumn aColumn in importData.Columns)
                {
                    string newValue = anImportRow[aColumn.ColumnName].ToString().Trim().Replace("'", "''");

                    if (!aColumn.DataType.ToString().Contains("int"))
                    {
                        newValue = "'" + newValue + "'";
                    }

                    valueList += newValue + ",";
                }

                valueList  = valueList.Substring(0, valueList.Length - 1);
                valueList += "),";

                if (incrementCounter >= increment)
                {
                    UpdateProgressBar(increment, string.Format("Importing changes {0}/{1}", i, totalRows));
                    incrementCounter -= increment;
                }
            }

            valueList = valueList.Substring(0, valueList.Length - 1);

            sqlText = string.Format(sqlText, colList, valueList);
            // Clipboard.SetText(sqlText);
            aa.ExecuteNonQuery(sqlText);

            #endregion

            if (!THREADINGON)
            {
                WorkerThread_RunWorkerCompleted(null, new RunWorkerCompletedEventArgs(null, null, false));
            }
        }
示例#6
0
        private void Search()
        {
            appointment_audit util  = new appointment_audit();
            int        deletedRows  = 0;
            int        brokenRows   = 0;
            int        createdRows  = 0;
            int        timeChange   = 0;
            int        statusChange = 0;
            int        otherChange  = 0;
            List <int> total        = new List <int>()
            {
                0, 0, 0
            };
            List <int> newPatient = new List <int>()
            {
                0, 0, 0
            };
            List <int> totalDaysBetween = new List <int>()
            {
                0, 0, 0
            };
            List <int> totalApptsCreated = new List <int>()
            {
                0, 0, 0
            };
            const int DentalIndex      = 0;
            const int HygieneIndex     = 1;
            const int OtherIndex       = 2;
            int       currentTypeIndex = 0;



            List <List <string> > patientIDs = new List <List <string> >();

            #region Individual Stats
            string sql = "SELECT * FROM appointment_audit WHERE  CAST(FLOOR(CAST(date_changed AS float)) AS DATETIME) >= '" + dtpStartDate.Value.ToShortDateString() +
                         "' AND  CAST(FLOOR(CAST(date_changed AS float)) AS DATETIME) < '" + dtpStartDate.Value.AddDays((cmbDuration.SelectedIndex + 1)).ToShortDateString() + "'";

            if (cmbUserList.SelectedIndex > 0)
            {
                sql += " AND USER_CHANGED = '" + cmbUserList.Text + "'";
            }

            DataTable results = util.Search(sql);

            dgvAppointments.Rows.Clear();
            string   lastPatient    = "";
            DateTime lastChangeDate = DateTime.Now;


            foreach (DataRow aMatch in results.Rows)
            {
                util.Load(aMatch);


                string apptDate;



                if (util.change_type == appointment_audit.ChangeTypes.Created || util.change_type == appointment_audit.ChangeTypes.CreatedBroken)
                {
                    if (util["n_APPTDATE"] == DBNull.Value)
                    {
                        apptDate = "";
                    }
                    else
                    {
                        apptDate = util.n_APPTDATE.ToShortDateString();
                    }

                    dgvAppointments.Rows.Add(util.DATE_CHANGED.ToString("M/d h:mm:ss"), util.USER_CHANGED.Trim(), util.n_PATNAME,
                                             apptDate, util.change_type.ToString(), util.n_APPTID, FormatChangeList(util.ChangeList));
                }
                else
                {
                    bool isGrouped = false;

                    if (chkGroupSimilar.Checked)
                    {
                        if (util.PATNAME == lastPatient && util.DATE_CHANGED == lastChangeDate)
                        {
                            if (dgvAppointments.Rows.Count > 0)
                            {
                                dgvAppointments.Rows[dgvAppointments.Rows.Count - 1].Cells[colApptDate.DisplayIndex].Value = "Multiple";
                                dgvAppointments.Rows[dgvAppointments.Rows.Count - 1].Cells[colApptID.DisplayIndex].Value   = "Multiple";
                                isGrouped = true;
                            }
                        }
                        else
                        {
                            lastPatient    = util.PATNAME;
                            lastChangeDate = util.DATE_CHANGED;
                        }
                    }

                    if (!isGrouped)
                    {
                        if (util["APPTDATE"] == DBNull.Value)
                        {
                            apptDate = "";
                        }
                        else
                        {
                            apptDate = util.APPTDATE.ToShortDateString();
                        }

                        dgvAppointments.Rows.Add(util.DATE_CHANGED.ToString("M/d h:mm:ss"), util.USER_CHANGED.Trim(), util.PATNAME,
                                                 apptDate, util.change_type.ToString(), util.APPTID, FormatChangeList(util.ChangeList));
                    }
                }


                #region General Stats

                switch (util.change_type)
                {
                case appointment_audit.ChangeTypes.Created:
                    createdRows++;
                    break;

                case appointment_audit.ChangeTypes.CreatedBroken:
                    createdRows++;
                    brokenRows++;
                    break;

                case appointment_audit.ChangeTypes.Broken:
                    brokenRows++;
                    break;

                case appointment_audit.ChangeTypes.Deleted:
                    deletedRows++;
                    break;

                case appointment_audit.ChangeTypes.Status:
                    statusChange++;
                    break;

                case appointment_audit.ChangeTypes.Time_Operatory:
                    timeChange++;
                    break;

                case appointment_audit.ChangeTypes.Other:
                    otherChange++;
                    break;

                case appointment_audit.ChangeTypes.Unbroken:
                    otherChange++;
                    break;
                }

                List <string> thisPatient = new List <string>()
                {
                    util.PATID.ToString(), util.PATDB.ToString()
                };
                bool found = false;
                foreach (List <string> aPatient in patientIDs)
                {
                    if (aPatient[0] == thisPatient[0] && aPatient[1] == thisPatient[1])
                    {
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    patientIDs.Add(thisPatient);
                }

                #endregion

                #region Dental / Hygiene stats


                if (util.ProviderIDString.StartsWith("D"))
                {
                    currentTypeIndex = DentalIndex;
                }
                else if (util.ProviderIDString.StartsWith("H"))
                {
                    currentTypeIndex = HygieneIndex;
                }
                else
                {
                    currentTypeIndex = OtherIndex;
                }

                total[currentTypeIndex]++;

                if (util.change_type == appointment_audit.ChangeTypes.Created)
                {
                    // Check for changes to average creation date -> schedule date
                    if (util.n_APPTDATE > new DateTime(1900, 1, 1))
                    {
                        totalApptsCreated[currentTypeIndex]++;
                        totalDaysBetween[currentTypeIndex] += Convert.ToInt32((util.n_APPTDATE - util.n_CREATEDATE).TotalDays);
                    }
                    else if (util.APPTDATE > new DateTime(1990, 1, 1))
                    {
                        totalApptsCreated[currentTypeIndex]++;
                        totalDaysBetween[currentTypeIndex] += Convert.ToInt32((util.APPTDATE - util.CREATEDATE).TotalDays);
                    }

                    // Check to see if it's for a new patient
                    if (util.IsNewPatient)
                    {
                        newPatient[currentTypeIndex]++;
                    }
                }

                #endregion
            }

            lblChangedAppointments.Text = string.Format("Changed Appointments ({0})", dgvAppointments.Rows.Count);
            #endregion

            lblBroken.Text        = brokenRows.ToString();
            lblCreated.Text       = createdRows.ToString();
            lblDeleted.Text       = deletedRows.ToString();
            lblStatus.Text        = statusChange.ToString();
            lblTime.Text          = timeChange.ToString();
            lblTotalPatients.Text = patientIDs.Count.ToString();
            lblOther.Text         = otherChange.ToString();
            lblTotalChanges.Text  = results.Rows.Count.ToString();

            lblDentalTotal.Text = total[DentalIndex].ToString();
            if (totalDaysBetween[DentalIndex] > 0)
            {
                lblDentalAverageDays.Text = ((double)totalDaysBetween[DentalIndex] / (double)totalApptsCreated[DentalIndex]).ToString("0.0");
            }
            else
            {
                lblDentalAverageDays.Text = "N/A";
            }
            lblDentalNewPatients.Text = newPatient[DentalIndex].ToString();

            lblHygieneTotal.Text = total[HygieneIndex].ToString();
            if (totalDaysBetween[HygieneIndex] > 0)
            {
                lblHygieneAverageDays.Text = ((double)totalDaysBetween[HygieneIndex] / (double)totalApptsCreated[HygieneIndex]).ToString("0.0");
            }
            else
            {
                lblHygieneAverageDays.Text = "N/A";
            }
            lblHygieneNewPatients.Text = newPatient[HygieneIndex].ToString();

            lblOtherTotal.Text = total[OtherIndex].ToString();
            if (totalDaysBetween[OtherIndex] > 0)
            {
                lblOtherAverageDays.Text = ((double)totalDaysBetween[OtherIndex] / (double)totalApptsCreated[OtherIndex]).ToString("0.0");
            }
            else
            {
                lblOtherAverageDays.Text = "N/A";
            }
            lblOtherNewPatients.Text = newPatient[OtherIndex].ToString();
        }