/// <summary>
        /// Gets all variance report.
        /// </summary>
        /// <param name="varianceReport">The variance report.</param>
        /// <returns>reportInfo</returns>
        public VarianceReport GetVarianceReport(VarianceReport varianceReport)
        {
            var reportInfo = new VarianceReport();

            if (varianceReport != null)
            {
                if (varianceReport.StartDate == DateTime.MinValue &&
                    varianceReport.EndDate == DateTime.MinValue)
                {
                    if (!string.IsNullOrEmpty(varianceReport.ClaimSearchCriteria) && varianceReport.ClaimSearchCriteria.Contains(Constants.AdjudicationRequestCriteria))
                    {
                        varianceReport.DateType = -1;
                    }

                    varianceReport.EndDate   = DateTime.Now;
                    varianceReport.StartDate =
                        DateTime.Now.AddYears(-GlobalConfigVariable.PullDataForNumberOfYears);
                }

                //when file type is excel and report level is claim level, call GetExcelVarianceReport. In any other case use GetAllVarianceReport
                reportInfo = varianceReport.FileType == Constants.DownloadFileTypeExcel && varianceReport.ReportLevel == Constants.ReportLevelClaim
                    ? _varianceReportRepository.GetExcelVarianceReport(varianceReport, GlobalConfigVariable.MaxRecordLimitForExcelReport)
                    : _varianceReportRepository.GetAllVarianceReport(varianceReport);

                reportInfo.ReportDate = DateTime.UtcNow.ToString(Constants.DateTime24HourFormat, CultureInfo.InvariantCulture);
                reportInfo.DateType   = varianceReport.DateType;
            }
            return(reportInfo);
        }
Exemple #2
0
 public VarianceReport GetVarianceReport(VarianceReport varianceReport)
 {
     if (varianceReport != null)
     {
         return(_varianceReportLogic.GetVarianceReport(varianceReport));
     }
     return(null);
 }
        public void GetAllVarianceReportTestWithOutRequestAdjudicationName()
        {
            VarianceReport varianceReport = new VarianceReport
            {
                StartDate = DateTime.MinValue,
                EndDate   = DateTime.MinValue
            };

            Mock <IVarianceReportRepository> varianceReportRepository = new Mock <IVarianceReportRepository>();

            varianceReportRepository.Setup(x => x.GetAllVarianceReport(varianceReport)).Returns(varianceReport);

            VarianceReport actualReport = new VarianceReportLogic(varianceReportRepository.Object).GetVarianceReport(varianceReport);

            Assert.AreEqual(varianceReport, actualReport);
            varianceReportRepository.VerifyAll();
        }
        public void GetAllVarianceReportTestWithSpecifiedDate()
        {
            VarianceReport varianceReport = new VarianceReport
            {
                StartDate = DateTime.Now.AddYears(-1),
                EndDate   = DateTime.Now
            };

            Mock <IVarianceReportRepository> varianceReportRepository = new Mock <IVarianceReportRepository>();

            varianceReportRepository.Setup(x => x.GetAllVarianceReport(varianceReport)).Returns(varianceReport);

            VarianceReport actualReport = new VarianceReportLogic(varianceReportRepository.Object).GetVarianceReport(varianceReport);

            Assert.AreEqual(varianceReport, actualReport);
            varianceReportRepository.VerifyAll();
        }
        /// <summary>
        /// Gets the excel variance report.
        /// </summary>
        /// <param name="varianceReport">The variance report.</param>
        /// <param name="maxRecordLimitForExcelReport">The maximum record limit for excel report.</param>
        /// <returns>reportInfo</returns>
        public VarianceReport GetExcelVarianceReport(VarianceReport varianceReport, int maxRecordLimitForExcelReport)
        {
            VarianceReport varianceReportData = new VarianceReport();

            // Initialize the Stored Procedure
            _databaseCommandObj = _databaseObj.GetStoredProcCommand("GetVarianceDetailReport");
            // Pass parameters to Stored Procedure(i.e., @ParamName), add values for
            _databaseObj.AddInParameter(_databaseCommandObj, "@ModelID ", DbType.Int64, varianceReport.NodeId);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateType ", DbType.Int32, varianceReport.DateType);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateFrom ", DbType.DateTime, varianceReport.StartDate);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateTo ", DbType.DateTime, varianceReport.EndDate);
            _databaseObj.AddInParameter(_databaseCommandObj, "@SelectCriteria ", DbType.String, varianceReport.ClaimSearchCriteria.ToTrim());
            _databaseObj.AddInParameter(_databaseCommandObj, "@MaxRecordLimit", DbType.Int32, maxRecordLimitForExcelReport);

            //Added RequestedUserID and RequestedUserName with reference to HIPAA logging feature
            _databaseObj.AddInParameter(_databaseCommandObj, "@RequestedUserID", DbType.String, varianceReport.RequestedUserId);
            _databaseObj.AddInParameter(_databaseCommandObj, "@RequestedUserName", DbType.String, varianceReport.RequestedUserName);

            // Retrieve the results of the Stored Procedure in Data set
            _databaseCommandObj.CommandTimeout = varianceReport.CommandTimeoutForVarianceReport;
            DataSet varianceReportResult = _databaseObj.ExecuteDataSet(_databaseCommandObj);

            if (varianceReportResult.IsTableDataPopulated())
            {
                if (varianceReportResult.Tables[0].Columns.Count == 2)
                {
                    varianceReportData.CountThreshold = Convert.ToInt32(varianceReportResult.Tables[0].Rows[0][0]);
                    return(varianceReportData);
                }

                List <EvaluateableClaim> claimDataList          = new List <EvaluateableClaim>();
                DataRowCollection        claimDataRowCollection = varianceReportResult.Tables[0].Rows;
                for (int indexCount = 0; indexCount < claimDataRowCollection.Count; indexCount++)
                {
                    DataRow           claimDataRow = claimDataRowCollection[indexCount];
                    EvaluateableClaim claimData    = new EvaluateableClaim
                    {
                        PatientAccountNumber = GetStringValue(claimDataRow["PatientAccountNumber"]),
                        AdjudicatedDate      = GetValue <DateTime?>(claimDataRow["AdjudicatedDate"], typeof(DateTime)),
                        Ssinumber            = GetValue <int?>(claimDataRow["SSINumber"], typeof(int)),
                        ClaimType            = GetStringValue(claimDataRow["ClaimType"]),
                        ClaimState           = GetStringValue(claimDataRow["ClaimState"]),
                        PayerSequence        = GetValue <int?>(claimDataRow["PayerSequence"], typeof(int)),
                        ClaimTotal           = GetValue <double?>(claimDataRow["ClaimTotal"], typeof(double)),
                        StatementFrom        = GetValue <DateTime?>(claimDataRow["StatementFrom"], typeof(DateTime)),
                        StatementThru        = GetValue <DateTime?>(claimDataRow["StatementThru"], typeof(DateTime)),
                        ClaimDate            = GetValue <DateTime?>(claimDataRow["ClaimDate"], typeof(DateTime)),
                        BillDate             = GetValue <DateTime?>(claimDataRow["BillDate"], typeof(DateTime)),
                        LastFiledDate        = GetValue <DateTime?>(claimDataRow["LastFiledDate"], typeof(DateTime)),
                        LastFiledDateValue   = DBNull.Value == claimDataRow["LastFiledDate"] ? null : Convert.ToDateTime(claimDataRow["LastFiledDate"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture),
                        BillType             = GetStringValue(claimDataRow["BillType"]),
                        Drg                     = GetStringValue(claimDataRow["DRG"]),
                        PriIcdpCode             = GetStringValue(claimDataRow["PriICDPCode"]),
                        PriIcddCode             = GetStringValue(claimDataRow["PriICDDCode"]),
                        PriPayerName            = GetStringValue(claimDataRow["PriPayerName"]),
                        SecPayerName            = GetStringValue(claimDataRow["SecPayerName"]),
                        TerPayerName            = GetStringValue(claimDataRow["TerPayerName"]),
                        IsRemitLinked           = GetStringValue(claimDataRow["IsRemitLinked"]),
                        ClaimStat               = GetStringValue(claimDataRow["ClaimStatus"]),
                        AdjudicatedValue        = GetValue <double?>(claimDataRow["AdjudicatedValue"], typeof(double)),
                        ActualPayment           = GetValue <double>(claimDataRow["ActualPayment"], typeof(double)),
                        PatientResponsibility   = GetValue <double?>(claimDataRow["PatientResponsibility"], typeof(double)),
                        RemitAllowedAmt         = GetValue <double?>(claimDataRow["RemitAllowedAmt"], typeof(double)),
                        RemitNonCovered         = GetValue <double?>(claimDataRow["RemitNonCovered"], typeof(double)),
                        ClaimLink               = GetValue <long?>(claimDataRow["ClaimLink"], typeof(long)),
                        LinkedRemitId           = GetStringValue(claimDataRow["LinkedRemitID"]),
                        ClaimId                 = GetValue <long>(claimDataRow["ClaimId"], typeof(long)),
                        CalculatedAdjustment    = GetValue <double?>(claimDataRow["CalculatedAdj"], typeof(double)),
                        ActualAdjustment        = GetValue <double?>(claimDataRow["ActualAdj"], typeof(double)),
                        ContractualVariance     = GetValue <double?>(claimDataRow["ContractualVariance"], typeof(double)),
                        PaymentVariance         = GetValue <double?>(claimDataRow["PaymentVariance"], typeof(double)),
                        AdjudicatedDateValue    = DBNull.Value == claimDataRow["AdjudicatedDate"] ? null : Convert.ToString(claimDataRow["AdjudicatedDate"].ToString() == "1/1/1900 12:00:00 AM" ? "" : claimDataRow["AdjudicatedDate"].ToString()),
                        StatementFromValue      = DBNull.Value == claimDataRow["StatementFrom"] ? null : Convert.ToString(claimDataRow["StatementFrom"].ToString() == "1/1/1900 12:00:00 AM" ? "" : Convert.ToDateTime(claimDataRow["StatementFrom"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)),
                        StatementThruValue      = DBNull.Value == claimDataRow["StatementThru"] ? null : Convert.ToString(claimDataRow["StatementThru"].ToString() == "1/1/1900 12:00:00 AM" ? "" : Convert.ToDateTime(claimDataRow["StatementThru"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)),
                        ClaimDateValue          = DBNull.Value == claimDataRow["ClaimDate"] ? null : Convert.ToString(claimDataRow["ClaimDate"].ToString() == "1/1/1900 12:00:00 AM" ? "" : Convert.ToDateTime(claimDataRow["ClaimDate"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)),
                        BillDateValue           = DBNull.Value == claimDataRow["BillDate"] ? null : Convert.ToString(claimDataRow["BillDate"].ToString() == "1/1/1900 12:00:00 AM" ? "" : Convert.ToDateTime(claimDataRow["BillDate"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)),
                        CustomField1            = GetStringValue(claimDataRow["CustomField1"]),
                        CustomField2            = GetStringValue(claimDataRow["CustomField2"]),
                        CustomField3            = GetStringValue(claimDataRow["CustomField3"]),
                        CustomField4            = GetStringValue(claimDataRow["CustomField4"]),
                        CustomField5            = GetStringValue(claimDataRow["CustomField5"]),
                        CustomField6            = GetStringValue(claimDataRow["CustomField6"]),
                        DischargeStatus         = GetStringValue(claimDataRow["DischargeStatus"]),
                        Npi                     = GetStringValue(claimDataRow["NPI"]),
                        MemberId                = GetStringValue(claimDataRow["MemberID"]),
                        Icn                     = GetStringValue(claimDataRow["ICN"]),
                        Mrn                     = GetStringValue(claimDataRow["MRN"]),
                        IsReviewed              = GetValue <bool>(claimDataRow["IsReviewed"], typeof(bool)),
                        Los                     = GetValue <int>(claimDataRow["Los"], typeof(int)),
                        Age                     = GetValue <byte>(claimDataRow["Age"], typeof(byte)),
                        CheckDate               = DBNull.Value == claimDataRow["CheckDate"] ? null : Convert.ToString(claimDataRow["CheckDate"].ToString() == Constants.DateTime1900 ? string.Empty : Convert.ToDateTime(claimDataRow["CheckDate"]).ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)),
                        CheckNumber             = GetValue <string>(claimDataRow["CheckNumber"], typeof(string)),
                        AdjudicatedContractName = DBNull.Value == claimDataRow["AdjudicatedContractName"] ? null : GetValue <string>(claimDataRow["AdjudicatedContractName"], typeof(string)),
                        InsuredsGroupNumber     = DBNull.Value == claimDataRow["InsuredsGroupNumber"] ? null : GetValue <string>(claimDataRow["InsuredsGroupNumber"], typeof(string))
                    };
                    claimDataList.Add(claimData);
                }
                varianceReportData.ClaimData = claimDataList;
            }

            return(varianceReportData);
        }
        /// <summary>
        /// Gets all variance report.
        /// </summary>
        /// <param name="varianceReport">The variance report.</param>
        /// <returns>reportInfo</returns>
        public VarianceReport GetAllVarianceReport(VarianceReport varianceReport)
        {
            VarianceReport varianceReportData = new VarianceReport();

            // Initialize the Stored Procedure
            _databaseCommandObj = _databaseObj.GetStoredProcCommand("GetContractManagementVarianceDetailReport");
            // Pass parameters to Stored Procedure(i.e., @ParamName), add values for
            _databaseObj.AddInParameter(_databaseCommandObj, "@ModelID ", DbType.Int64, varianceReport.NodeId);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateType ", DbType.Int32, varianceReport.DateType);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateFrom ", DbType.DateTime, varianceReport.StartDate);
            _databaseObj.AddInParameter(_databaseCommandObj, "@DateTo ", DbType.DateTime, varianceReport.EndDate);
            _databaseObj.AddInParameter(_databaseCommandObj, "@SelectCriteria ", DbType.String, varianceReport.ClaimSearchCriteria.ToTrim());
            _databaseObj.AddInParameter(_databaseCommandObj, "@ReportLevel", DbType.Int32, varianceReport.ReportLevel);
            _databaseObj.AddInParameter(_databaseCommandObj, "@MaxRecordLimit", DbType.Int32, varianceReport.MaxLinesForPdfReport);

            //Added RequestedUserID and RequestedUserName with reference to HIPAA logging feature
            _databaseObj.AddInParameter(_databaseCommandObj, "@RequestedUserID", DbType.String, varianceReport.RequestedUserId);
            _databaseObj.AddInParameter(_databaseCommandObj, "@RequestedUserName", DbType.String, varianceReport.RequestedUserName);

            // Retrieve the results of the Stored Procedure in Data table
            _databaseCommandObj.CommandTimeout = varianceReport.CommandTimeoutForVarianceReport;
            DataSet varianceReportInfo = _databaseObj.ExecuteDataSet(_databaseCommandObj);

            if (varianceReportInfo.IsTableDataPopulated())
            {
                List <Contract> contracts = new List <Contract>();

                List <VarianceReport> varianceReports = new List <VarianceReport>();
                TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

                if (varianceReport.ReportLevel == 1)
                {
                    if (varianceReportInfo.Tables[0].Columns.Count == 2)
                    {
                        varianceReportData.CountThreshold = -1;
                        return(varianceReportData);
                    }

                    for (int indexCount = 0; indexCount < varianceReportInfo.Tables[1].Rows.Count; indexCount++)
                    {
                        DataRow claimCharge = varianceReportInfo.Tables[1].Rows[indexCount];
                        string  claimId     = GetStringValue(claimCharge["Claimid"]);

                        DataRow claimTable = varianceReportInfo.Tables[0].Select(string.Format("Claimid = '{0}'", claimId)).First();

                        VarianceReport varianceReportDetails = new VarianceReport
                        {
                            ClaimId         = claimId,
                            Line            = GetValue <int?>(claimCharge["line"], typeof(int)),
                            RevCode         = GetStringValue(claimCharge["RevCode"]),
                            HcpcsCode       = GetStringValue(claimCharge["HCPCSCode"]),
                            ServiceFromDate =
                                DBNull.Value == claimCharge["ServiceFromDate"]
                                    ? new DateTime()
                                    : Convert.ToDateTime(claimCharge["ServiceFromDate"]),
                            Units        = GetValue <int?>(claimCharge["Units"], typeof(int)),
                            TotalCharges =
                                DBNull.Value == claimCharge["TotalCharges"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimCharge["TotalCharges"].ToString())),
                            CalculatedAllowedChargeLevel =
                                DBNull.Value == claimCharge["CalculatedAllowed"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimCharge["CalculatedAllowed"].ToString())),
                            PatientAccountNumber = GetStringValue(claimTable["PatAcctNum"]),
                            ContractName         = GetStringValue(claimTable["ContractName"]),
                            PriPayerName         =
                                DBNull.Value == claimTable["PriPayerName"]
                                    ? string.Empty
                                    : textInfo.ToTitleCase(
                                    claimTable["PriPayerName"].ToString()),
                            BillType = GetStringValue(claimTable["BillType"]),
                            Drg      =
                                DBNull.Value == claimTable["DRG"]
                                    ? string.Empty
                                    : claimTable["DRG"].ToString(),
                            Los           = GetValue <int>(claimTable["LOS"], typeof(int)),
                            StatementFrom = GetValue <DateTime>(claimTable["StatementFrom"], typeof(DateTime)),
                            StatementThru = GetValue <DateTime>(claimTable["StatementThru"], typeof(DateTime)),
                            ClaimTotal    =
                                DBNull.Value == claimTable["ClaimTotalCharges"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["ClaimTotalCharges"].ToString())),
                            CalculatedAdjustment =
                                DBNull.Value == claimTable["CalculatedAdj"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["CalculatedAdj"].ToString())),
                            CalculatedAllowedClaimLevel =
                                DBNull.Value == claimTable["CalculatedAllowed"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["CalculatedAllowed"].ToString())),
                            ActualPaymentClaimLevel =
                                DBNull.Value == claimTable["ActualPmt"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["ActualPmt"].ToString())),
                            ActualAdjustment =
                                DBNull.Value == claimTable["ActulAdj"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["ActulAdj"].ToString())),
                            PatientResponsibility = DBNull.Value == claimTable["PatientResponsibility"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["PatientResponsibility"].ToString())),
                            ContractualVariance = DBNull.Value == claimTable["ContractualVariance"]
                                    ? (double?)null
                                     : Convert.ToDouble(double.Parse(claimTable["ContractualVariance"].ToString())),
                            PaymentVariance = DBNull.Value == claimTable["PaymentVariance"]
                                    ? (double?)null
                                    : Convert.ToDouble(double.Parse(claimTable["PaymentVariance"].ToString())),
                            HcpcsModifier  = Regex.Replace(GetStringValue(claimCharge["HCPCSModifier"]), Constants.HcpcsModifierPattern, Constants.WhiteSpace),
                            PlaceOfService = GetStringValue(claimCharge["PlaceOfService"]),
                            ClaimType      = claimTable["ClaimType"].ToString()
                        };
                        varianceReports.Add(varianceReportDetails);
                    }

                    varianceReportData.VarianceReports = varianceReports.OrderBy(q => q.PatientAccountNumber).ToList();
                }

                DataTable varianceReportDataTable = varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[2] : varianceReportInfo.Tables[0];

                contracts.AddRange(varianceReportDataTable.Rows.Cast <object>().Select((t, indexCount) => new Contract
                {
                    ContractName = GetStringValue(varianceReportDataTable.Rows[indexCount]["ContractName"]),
                    ClaimCount   =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["ClaimCount"]
                            ? 0
                            : Convert.ToInt64(varianceReportDataTable.Rows[indexCount]["ClaimCount"].ToString()),
                    TotalClaimCharges =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["ClaimTotalCharges"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["ClaimTotalCharges"].ToString()), 2),
                    CalculatedAllowed =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["CalculatedAllowed"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["CalculatedAllowed"].ToString()), 2),
                    PatientResponsibility =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["PatientResponsibility"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["PatientResponsibility"].ToString()), 2),
                    ActualPayment =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["ActualPmt"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["ActualPmt"].ToString()), 2),
                    PaymentVariance =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["PaymentVariance"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["PaymentVariance"].ToString()), 2),
                    CalculatedAdjustment =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["CalculatedAdj"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["CalculatedAdj"].ToString()), 2),
                    ActualAdjustment =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["ActulAdj"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["ActulAdj"].ToString()), 2),
                    ContractualVariance =
                        DBNull.Value == varianceReportDataTable.Rows[indexCount]["ContractualVariance"]
                            ? (double?)null
                            : Math.Round(double.Parse(varianceReportDataTable.Rows[indexCount]["ContractualVariance"].ToString()), 2)
                }));
                Contract unadjudicatedContract = contracts.FirstOrDefault(a => a.ContractName == "Un-adjudicated");
                //Removes the unadjudicated contract from the list and add tto the bottom
                if (unadjudicatedContract != null)
                {
                    contracts.Remove(unadjudicatedContract);
                    contracts.Add(unadjudicatedContract);
                }
                //FIXED-OCT15-Make a common function in base repository so we can utilize it in adjudication as well as variance report.
                varianceReportData.ClaimsAdjudicated = GetClaimsAdjudicated(varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[4] : varianceReportInfo.Tables[2]);
                varianceReportData.PaymentsLinked    = GetPaymentsLinked(varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[5] : varianceReportInfo.Tables[3]);
                varianceReportData.ClaimCharges      = GetClaimCharges(varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[6] : varianceReportInfo.Tables[4]);
                varianceReportData.ClaimVariances    = GetClaimVariances(varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[7] : varianceReportInfo.Tables[5]);
                varianceReportData.VarianceRanges    = GetVarianceRanges(varianceReport.ReportLevel == 1 ? varianceReportInfo.Tables[8] : varianceReportInfo.Tables[6]);
                varianceReportData.Contracts         = contracts;
                varianceReportData.FacilityName      = GetStringValue(varianceReportDataTable.Rows[0]["FacilityName"]);

                varianceReportData.TotalClaims = varianceReport.ReportLevel == 1
                    ? GetValue <int>(varianceReportInfo.Tables[3].Rows[0]["TotalClaims"], typeof(int))
                    : GetValue <int>(varianceReportInfo.Tables[1].Rows[0]["TotalClaims"], typeof(int));
            }

            return(varianceReportData);
        }
        public void ShowVarianceReport(int BatchNo, string ExchangeConn, string TicketingConn)
        {
            string sVersion = string.Empty;
            string sSiteName = string.Empty;

            try
            {
                LogManager.WriteLog("Inside ShowVarianceReport method when Common CDO Enlable ", LogManager.enumLogLevel.Info);

                GetVersion_SiteName(out  sVersion, out  sSiteName);

                CrystalDecisions.CrystalReports.Engine.Database crDatabase;
                CrystalDecisions.CrystalReports.Engine.Tables crTables;

                TableLogOnInfo tableLogonInfo = new TableLogOnInfo();

                VarianceReport varianceReport = new VarianceReport();

                LogManager.WriteLog("Setting Report Datasource...", LogManager.enumLogLevel.Info);

                LogManager.WriteLog("Report DataSource set successfully", LogManager.enumLogLevel.Info);

                LogManager.WriteLog("Setting Report Parameters...", LogManager.enumLogLevel.Info);

                try
                {
                    varianceReport.SetParameterValue("CurrencySymbol", ExtensionMethods.CurrentSiteCulture.GetCurrencySymbol());
                }
                catch
                {
                    varianceReport.SetParameterValue("CurrencySymbol", "£");
                    LogManager.WriteLog("Exception occurred at CurrencySymbol Set in ExceptionSummary...", LogManager.enumLogLevel.Info);
                }
                varianceReport.SetParameterValue("BatchNumber", BatchNo);
                varianceReport.SetParameterValue("@Batch_No", BatchNo);
                varianceReport.SetParameterValue("Version", sVersion);

                IReports objReports = ReportsBusinessObject.CreateInstance(ExchangeConn, TicketingConn);

                List<ServerDetails> DbConnectionInfo = objReports.GetDataBaseConnectionString(ExchangeConn);

                ConnectionInfo myConnectionInfo = new ConnectionInfo();


                myConnectionInfo.ServerName = DbConnectionInfo[0].ServerName;  // read this information from config file.
                myConnectionInfo.DatabaseName = DbConnectionInfo[0].DataBase; // read this information from config file.
                myConnectionInfo.UserID = DbConnectionInfo[0].Username;  // read this information from config file.
                myConnectionInfo.Password = DbConnectionInfo[0].Password;  // read this information from config file.


                crDatabase = varianceReport.Database;
                crTables = crDatabase.Tables;

                foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
                {
                    tableLogonInfo = crTable.LogOnInfo;
                    tableLogonInfo.ConnectionInfo = myConnectionInfo;
                    crTable.ApplyLogOnInfo(tableLogonInfo);
                }


                LogManager.WriteLog("Report Parameters set successfully", LogManager.enumLogLevel.Info);


                LogManager.WriteLog("Setting Report Source...", LogManager.enumLogLevel.Info);

                crystalReportViewer.ReportSource = varianceReport;


                LogManager.WriteLog("Report Source set successfully", LogManager.enumLogLevel.Info);

                AuditReports();

                strReportName = "Variance Report";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Variances the claim report.
        /// </summary>
        /// <param name="nodeId">The node unique identifier.</param>
        /// <param name="datetype">The datetype.</param>
        /// <param name="startDate">The start date.</param>
        /// <param name="endDate">The end date.</param>
        /// <param name="criteria">The criteria.</param>
        /// <param name="reportType">Type of the report.</param>
        /// <param name="fileType">type of file. Either pdf or excel</param>
        /// <param name="currentDateTime"></param>
        /// <returns></returns>
        public ActionResult VarianceReport(long?nodeId, int?datetype, DateTime?startDate, DateTime?endDate, string criteria, int reportType, int fileType, string currentDateTime)
        {
            string fileName;

            Enums.DownloadFileType reportFormat = fileType == 1 ? Enums.DownloadFileType.Pdf : Enums.DownloadFileType.Xls;
            //If the Report Type is Claim Level and report format is PDF
            if (reportType == Constants.One && fileType == Constants.One)
            {
                ClaimAdjudicationReport claimAdjudicationReport = new ClaimAdjudicationReport
                {
                    ModelId             = nodeId,
                    NodeId              = nodeId,
                    DateType            = Convert.ToInt32(datetype),
                    StartDate           = Convert.ToDateTime(startDate),
                    EndDate             = Convert.ToDateTime(endDate),
                    ClaimSearchCriteria = criteria,
                    FacilityId          = GetCurrentFacilityId(),
                    //Added RequestedUserID and RequestedUserName with reference to HIPAA logging feature
                    RequestedUserId =
                        string.IsNullOrEmpty(GetCurrentUserName()) ? Guid.Empty.ToString() : GetUserKey(),
                    RequestedUserName = GetCurrentUserName(),
                    CommandTimeoutForClaimAdjudication =
                        Convert.ToInt32(GlobalConfigVariable.CommandTimeoutForClaimAdjudication),
                    MaxLinesForPdfReport =
                        GlobalConfigVariable.MaxRecordLimitForTelericReport,
                };
                ClaimAdjudicationReport claimAdjudicationReportDetails =
                    PostApiResponse <ClaimAdjudicationReport>(Constants.ClaimAdjudicationReport,
                                                              Constants.GetClaimAdjudicationReport,
                                                              claimAdjudicationReport);
                ClaimAdjudicationReportViewModel adjudicationList =
                    Mapper.Map <ClaimAdjudicationReport, ClaimAdjudicationReportViewModel>(
                        claimAdjudicationReportDetails);


                // Gets the current CST time.
                adjudicationList.CurrentDateTime = Utilities.GetLocalTimeString(currentDateTime);
                adjudicationList.LoggedInUser    = GetCurrentUserName();
                fileName = new ClaimAdjudicationReportUtil().GetExportedFileName(adjudicationList,
                                                                                 Enums.DownloadFileType.Pdf, GlobalConfigVariable.ReportsFilePath, currentDateTime);
            }
            else
            {
                VarianceReport varianceReport = new VarianceReport
                {
                    NodeId               = nodeId,
                    DateType             = datetype,
                    StartDate            = Convert.ToDateTime(startDate),
                    EndDate              = Convert.ToDateTime(endDate),
                    ClaimSearchCriteria  = criteria,
                    ReportLevel          = reportType,
                    FacilityId           = GetCurrentFacilityId(),
                    RequestedUserId      = string.IsNullOrEmpty(GetCurrentUserName()) ? Guid.Empty.ToString() : GetUserKey(),
                    RequestedUserName    = GetCurrentUserName(),
                    FileType             = fileType,
                    MaxLinesForPdfReport = GlobalConfigVariable.MaxRecordLimitForTelericReport
                };

                //Added RequestedUserID and RequestedUserName with reference to HIPAA logging feature
                VarianceReport varianceReportInfo = PostApiResponse <VarianceReport>(Constants.VarianceReport,
                                                                                     Constants.GetVarianceReport, varianceReport);
                VarianceReportViewModel varianceReportlist =
                    Mapper.Map <VarianceReport, VarianceReportViewModel>(varianceReportInfo);
                varianceReportlist.LoggedInUser = GetCurrentUserName();
                // Gets the local time zone.
                varianceReportlist.CurrentDateTime = Utilities.GetLocalTimeString(currentDateTime);
                fileName = new VarianceReportUtil().GetExportedFileName(reportType, reportFormat,
                                                                        varianceReportlist, GlobalConfigVariable.ReportsFilePath, currentDateTime);
            }
            return(Json(new { fileName, reportFormat }, JsonRequestBehavior.AllowGet));
        }