private Service GetServiceJustEntered(string Patid, string EpisodeNumber, DateTime ServiceDate, string ServiceCode, string StaffId)
 {
     var service = new Service();
     var connectionString = ConfigurationManager.ConnectionStrings["CacheODBC"].ConnectionString;
     #region CommandText
     var commandText = "SELECT TOP(1) billing_tx_history.cost_of_service, " +
                             "billing_tx_history.date_of_service, " +
                             "billing_tx_history.duration, " +
                             "billing_tx_history.end_time, " +
                             "billing_tx_history.EPISODE_NUMBER, " +
                             "billing_tx_history.FACILITY, " +
                             "billing_tx_history.JOIN_TO_TX_HISTORY, " +
                             "billing_tx_history.location_code, " +
                             "billing_tx_history.location_value, " +
                             "billing_tx_history.NOT_uniqueid, " +
                             "billing_tx_history.ORIG_JOIN_TO_TX_HISTORY, " +
                             "billing_tx_history.PATID, " +
                             "billing_guar_table.GUARANTOR_ID, " +
                             "billing_guar_table.guarantor_name, " +
                             "billing_tx_history.program_code, " +
                             "billing_tx_history.program_value, " +
                             "billing_tx_history.program_X_RRG_code, " +
                             "billing_tx_history.program_X_RRG_value, " +
                             "billing_tx_history.PROVIDER_ID, " +
                             "billing_tx_history.SERVICE_CODE, " +
                             "billing_tx_history.start_time, " +
                             "billing_tx_history.units_of_service, " +
                             "billing_tx_history.v_patient_name, " +
                             "billing_tx_history.v_PROVIDER_NAME, " +
                             "billing_tx_history.v_service_value " +
                             "FROM SYSTEM.billing_tx_history " +
                             "INNER JOIN SYSTEM.billing_guar_table " +
                             "ON billing_tx_history.primary_guarantor = billing_guar_table.GUARANTOR_ID " +
                             "AND billing_tx_history.FACILITY = billing_guar_table.FACILITY " +
                             "WHERE billing_tx_history.PATID=? " +
                             "AND billing_tx_history.EPISODE_NUMBER=? " +
                             "AND billing_tx_history.SERVICE_CODE=? " +
                             "AND billing_tx_history.PROVIDER_ID=? " +
                             "AND billing_tx_history.date_of_service=? " +
                             "AND (billing_tx_history.data_entry_time=? OR billing_tx_history.data_entry_time=?)";
     #endregion
     try
     {
         using (var connection = new OdbcConnection(connectionString))
         {
             connection.Open();
             using (var dbcommand = new OdbcCommand(commandText, connection))
             {
                 dbcommand.Parameters.Add(new OdbcParameter("PATID", Patid));
                 dbcommand.Parameters.Add(new OdbcParameter("EPISODE_NUMBER", EpisodeNumber));
                 dbcommand.Parameters.Add(new OdbcParameter("SERVICE_CODE", ServiceCode));
                 dbcommand.Parameters.Add(new OdbcParameter("PROVIDER_ID", StaffId));
                 dbcommand.Parameters.Add(new OdbcParameter("date_of_service", ServiceDate.ToString("yyyy-MM-dd")));
                 dbcommand.Parameters.Add(new OdbcParameter("data_entry_time", DateTime.Now.ToString("hh:mm tt")));
                 dbcommand.Parameters.Add(new OdbcParameter("data_entry_time", DateTime.Now.AddMinutes(-1).ToString("hh:mm tt")));
                 using (var reader = dbcommand.ExecuteReader())
                 {
                     if (reader.Read())
                     {
                         #region ReadInValues
                         service.ServiceCost = reader["cost_of_service"].ToString();
                         service.ServiceDate = DateTime.Parse(reader["date_of_service"].ToString());
                         service.Duration = reader["duration"].ToString();
                         service.StartTime = reader["start_time"].ToString();
                         service.EndTime = reader["end_time"].ToString();
                         service.EpisodeNumber = reader["EPISODE_NUMBER"].ToString();
                         service.Facility = reader["FACILITY"].ToString();
                         service.JoinToTxHistory = reader["JOIN_TO_TX_HISTORY"].ToString();
                         service.LocationCode = reader["location_code"].ToString();
                         service.LocationValue = reader["location_value"].ToString();
                         service.NotUniqueId = reader["NOT_uniqueid"].ToString();
                         service.OrigJoinToTxHistory = reader["ORIG_JOIN_TO_TX_HISTORY"].ToString();
                         service.Patid = reader["PATID"].ToString();
                         service.PatientName = reader["v_patient_name"].ToString();
                         service.GuarantorId = reader["GUARANTOR_ID"].ToString();
                         service.GuarantorName = reader["guarantor_name"].ToString();
                         service.ProgramCode = reader["program_code"].ToString();
                         service.ProgramValue = reader["program_value"].ToString();
                         service.ProgramRRGCode = reader["program_X_RRG_code"].ToString();
                         service.ProgramRRGValue = reader["program_X_RRG_value"].ToString();
                         service.StaffId = reader["PROVIDER_ID"].ToString();
                         service.StaffName = reader["v_PROVIDER_NAME"].ToString();
                         service.ServiceCode = reader["SERVICE_CODE"].ToString();
                         service.ServiceValue = reader["v_service_value"].ToString();
                         service.UnitsOfService = reader["units_of_service"].ToString();
                         #endregion
                     }
                     else
                     {
                         service = null;
                     }
                 }
             }
             connection.Close();
         }
     }
     catch (Exception e)
     {
     }
     return service;
 }
        private bool guarantorAndServiceNeedAuth(Service service)
        {
            List<String> List202 = new List<String>() { "203", "300", "3000", "301", "3001", "307", "313", "315", "316", "400", "4000", "4001" };

            List<String> List207_208_210_215 = new List<String>() { "203", "3000", "3001", "300", "301", "307", "313", "315", "316", "400", "401", "402", "403", "404", "405", "4000", "4001" };
            List<String> List212 = new List<String>() { "400", "401", "402", "403", "404", "405", "300", "3000", "301", "3001", "307", "313", "315", "316", "203" };
            List<String> List213_406 = new List<String>() { "200", "201", "202", "203", "3000", "3001", "300", "301", "307", "313", "315", "316", "400", "401", "402", "4000", "4001" };
            List<String> List57 = new List<String>() { "203" };
            switch (service.GuarantorId)
            {
                case "57": return List57.Contains(service.ServiceCode);
                case "202": return List202.Contains(service.ServiceCode);
                case "205": return true;
                case "207": return List207_208_210_215.Contains(service.ServiceCode);
                case "208": return List207_208_210_215.Contains(service.ServiceCode);
                case "210": return List207_208_210_215.Contains(service.ServiceCode);
                case "212": return List212.Contains(service.ServiceCode);
                case "213": return List213_406.Contains(service.ServiceCode);
                case "215": return List207_208_210_215.Contains(service.ServiceCode);//Added this for Magellan complete care noAuths to send email alerts
                case "211": return List207_208_210_215.Contains(service.ServiceCode);//Added this for Prestige (CAID) noAuths to send email alerts
                case "302": return true;
                case "303": return true;
                case "401": return true;
                case "403": return true;
                case "406": return List213_406.Contains(service.ServiceCode);
                case "701": return true;
                default: return false;
            }
        }
 private bool isAuthValid(Service service)
 {
     bool temp = true;
     var connectionString = ConfigurationManager.ConnectionStrings["CacheODBC"].ConnectionString;
     var commandText = "SELECT history_managed_care_auths.auth_start_date " +
                         "FROM SYSTEM.history_managed_care_auths " +
                         "WHERE history_managed_care_auths.PATID=? " +
                         "AND history_managed_care_auths.GUARANTOR_ID=? " +
                         "AND history_managed_care_auths.auth_start_date<=? " +
                         "AND history_managed_care_auths.auth_end_date>=? " +
                         "AND (history_managed_care_auths.rem_units IS NULL OR CAST(history_managed_care_auths.rem_units as DOUBLE)>0) " +
                         "AND (history_managed_care_auths.rem_visits IS NULL OR CAST(history_managed_care_auths.rem_visits as DOUBLE)>0) " +
                         "AND history_managed_care_auths.service_codes_all like ?";
     try
     {
         using (var connection = new OdbcConnection(connectionString))
         {
             connection.Open();
             using (var dbcommand = new OdbcCommand(commandText, connection))
             {
                 dbcommand.Parameters.Add(new OdbcParameter("PATID", service.Patid));
                 dbcommand.Parameters.Add(new OdbcParameter("GUARANTOR_ID", service.GuarantorId));
                 dbcommand.Parameters.Add(new OdbcParameter("auth_start_date", service.ServiceDate.ToString("yyyy-MM-dd")));
                 dbcommand.Parameters.Add(new OdbcParameter("auth_end_date", service.ServiceDate.ToString("yyyy-MM-dd")));
                 dbcommand.Parameters.Add(new OdbcParameter("service_codes_all", "%" + service.ServiceCode + "%"));
                 using (var reader = dbcommand.ExecuteReader())
                 {
                     if (reader.Read())
                         temp = true;
                     else
                         temp = false;
                 }
             }
             connection.Close();
         }
     }
     catch (Exception e)
     {
     }
     return temp;
 }
        public OptionObject ToDraftAuthorizationNotification(OptionObject optionObject)
        {
            List<string> UpdateCommands = new List<string>();
            OptionObject returnOptionObject = new OptionObject();
            //string guarantorID;
            var noteStatus = new FieldObject { FieldNumber = "50010" };
            var serviceCode = new FieldObject { FieldNumber = "51001" };
            var serviceDate = new FieldObject { FieldNumber = "51011" };
            var serviceDuration = new FieldObject { FieldNumber = "51003" };
            foreach (var form in optionObject.Forms)
            {
                foreach (var field in form.CurrentRow.Fields)
                {
                    if (field.FieldNumber.Equals(noteStatus.FieldNumber))
                        noteStatus.FieldValue = field.FieldValue;
                    if (field.FieldNumber.Equals(serviceCode.FieldNumber))
                        serviceCode.FieldValue = field.FieldValue;
                    if (field.FieldNumber.Equals(serviceDate.FieldNumber))
                        serviceDate.FieldValue = field.FieldValue;
                    if (field.FieldNumber.Equals(serviceDuration.FieldNumber))
                        serviceDuration.FieldValue = field.FieldValue;
                }
            }

            var service = new Service();
            service = GetServiceJustEntered(optionObject.EntityID, optionObject.EpisodeNumber.ToString(),
                                            DateTime.Parse(serviceDate.FieldValue), serviceCode.FieldValue,
                                            optionObject.OptionStaffId);
            try
            {
                if (service != null && guarantorAndServiceNeedAuth(service))
                    if (!isAuthValid(service))
                    {
                        //Set note to Draft and Disable
                        string SetToDraft = "7001|50010|D|1|0|0";
                        UpdateCommands.Add(SetToDraft);
                        OptionObjectHelper OOHelper = new OptionObjectHelper(optionObject, UpdateCommands);
                        returnOptionObject = OOHelper.returnOptionObject;
                    }
            }
            catch (Exception e)
            {
            }

            //    var svcCodeList = ConfigurationManager.AppSettings["ServiceCodesToExclude"].ToString().Split(',').ToList();
            //    if (Convert.ToInt32(serviceDuration.FieldValue) > 300 && svcCodeList.IndexOf(serviceCode.FieldValue) < 0)
            //    {
            //        sendEmail(ConfigurationManager.AppSettings["SMTPFromEmailAddress"].ToString(),
            //            "Service with a duration of " + serviceDuration.FieldValue + " entered.",
            //            "Client ID: " + optionObject.EntityID +
            //            "\nEpisode #: " + optionObject.EpisodeNumber +
            //            "\nGuarantor ID: " + service.GuarantorId +
            //            "\nService Code: " + serviceCode.FieldValue +
            //            "\nService Date: " + serviceDate.FieldValue +
            //            "\nStaff ID: " + optionObject.OptionStaffId,
            //            new List<string> { ConfigurationManager.AppSettings["SMTPCreateSWTicket"].ToString() },
            //            new List<string>(),
            //            ConfigurationManager.AppSettings["AssignToBilling"].ToString().Split(',').ToList());

            //    }

            return returnOptionObject;
        }