public async Task <ActionResult> Login(ICMS.Lite.Repository.ViewModels.AccountViewModel.LoginViewModel model)
        {
            ViewBag.Response = null;
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var isValid = await _accountService.AUTHENTICATEUSER(model);

                if (!isValid)
                {
                    ViewBag.Response = "Invalid username or password";
                    return(View(model));
                }
                await this.LoginAuthenticationTicketInitializer(model);

                var returnUrl = string.Empty;

                if (string.IsNullOrEmpty(returnUrl))
                {
                    var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
                    if (authCookie == null)
                    {
                        ViewBag.Response = "Unable to determine your role. Contact your administrator";
                    }
                    //ModelState.AddModelError("", "Unable to determine your role. Contact your administrator");
                    else
                    {
                        //Extract the forms authentication cookie
                        FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                        //If caching roles in userData field then extract
                        var role = authTicket.UserData;

                        var roleName = authTicket.UserData;
                        //Todo::Get menu for the user role

                        //if (string.IsNullOrEmpty(roleName))
                        //{
                        //    ModelState.AddModelError("", "Invalid login attempt.");
                        //    return View(model);
                        //}

                        return(RedirectToAction("Index", new { Controller = "Indents", action = "Index" }));
                    }
                }
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ViewBag.Response = error;
                return(View(model));
            }

            return(View(model));
        }
        public async Task <UserViewModel> GETUSERBYUSERID(string username)
        {
            try
            {
                var parameters = new List <IDbDataParameter>();

                parameters.Add(_db.CreateParameter("P_USER_ID", 10, username, DbType.String, ParameterDirection.Input));
                parameters.Add(_db.CreateParameter("P_USER_NAME", 10, "", DbType.String, ParameterDirection.Output));
                parameters.Add(_db.CreateParameter("P_USER_ROLE", 10, "", DbType.String, ParameterDirection.Output));
                parameters.Add(_db.CreateParameter("P_APPROVED", 10, "", DbType.String, ParameterDirection.Output));
                parameters.Add(_db.CreateParameter("P_DELETED", 10, "", DbType.String, ParameterDirection.Output));
                parameters.Add(_db.CreateParameter("P_ERROR_MSG", 100, "", DbType.String, ParameterDirection.Output));

                DbConnection connection = null;

                var userCommand = _db.GetExecuteNonQuery(STOREDPROC.GETUSERBYUSERID, CommandType.StoredProcedure, parameters, 0, out connection);

                string uId       = userCommand.Parameters["P_USER_ID"].Value.ToString();
                string uname     = userCommand.Parameters["P_USER_NAME"].Value.ToString();
                string urole     = userCommand.Parameters["P_USER_ROLE"].Value.ToString();
                string uapproved = userCommand.Parameters["P_APPROVED"].Value.ToString();
                string udeleted  = userCommand.Parameters["P_DELETED"].Value.ToString();
                string error     = userCommand.Parameters["P_ERROR_MSG"].Value.ToString();

                if (string.IsNullOrEmpty(error))
                {
                    var objUser = new UserViewModel()
                    {
                        USER_ID   = uId,
                        USER_NAME = uname,
                        USER_ROLE = urole,
                        APPROVED  = uapproved,
                        DELETED   = udeleted,
                        Status    = true,
                        Message   = "Success"
                    };

                    ErrorWriter.WriteLog($"Fetch user data returned : { objUser.Message } at { DateTime.Now }");
                    return(objUser);
                }
                else
                {
                    ErrorWriter.WriteLog($"Fetch user data returned : { error } at { DateTime.Now }");
                    throw new Exception(error);
                }
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Fetch user data returned : { ex.Message } at { DateTime.Now }");

                throw new Exception(error);
            }
        }
예제 #3
0
        public async Task <bool> AUTHENTICATEUSER(LoginViewModel loginModel)
        {
            if (loginModel == null)
            {
                throw new PlatformCustomException("Invalid username or password");
            }
            try
            {
                var objUser    = new DataResult <UserViewModel>();
                var parameters = new List <IDbDataParameter>();

                var authorizedRole = GetConfigValue("AuthorizedUserRole");

                //implement password hashing here
                loginModel.Password = HashUtil.EncryptStringValue(loginModel.Password);


                parameters.Add(_db.CreateParameter("p_user_id", 10, loginModel.UserId, DbType.String, ParameterDirection.Input));
                parameters.Add(_db.CreateParameter("p_password", 70, loginModel.Password, DbType.String, ParameterDirection.Input));
                parameters.Add(_db.CreateParameter("p_authorized_role", 70, authorizedRole, DbType.String, ParameterDirection.Input));
                parameters.Add(_db.CreateParameter("p_error_msg", 100, "", DbType.String, ParameterDirection.Output));
                parameters.Add(_db.CreateParameter("p_success", 100, "", DbType.String, ParameterDirection.Output));

                DbConnection connection = null;

                var authCommand = _db.GetExecuteNonQuery(STOREDPROC.AUTHUSER, CommandType.StoredProcedure, parameters, 0, out connection);

                string error   = authCommand.Parameters["p_error_msg"].Value.ToString();
                string success = authCommand.Parameters["p_success"].Value.ToString();

                if (!string.IsNullOrEmpty(error))
                {
                    throw new PlatformCustomException("Invalid username or password.");
                }

                var message = string.IsNullOrEmpty(error) ? error : success;
                ErrorWriter.WriteLog($"Login operation returned : { message } at { DateTime.Now }");

                return(true);
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Login operation returned : { ex.Message } at { DateTime.Now }");
                throw new Exception(error);
            }
        }
        public async Task <DataResult <List <AvailableIndentsViewModel> > > GETINDENTSFORENCRYPTION()
        {
            var objIndents = new DataResult <List <AvailableIndentsViewModel> >();

            try
            {
                var parameter = new List <IDbDataParameter>();

                parameter.Add(_db.CreateParameter("P_ERROR_MSG", string.Empty, DbType.String));
                parameter.Add(_db.CreateParameter("P_INDENTFORENCRYPTION", OracleDbType.RefCursor, null));

                var indentsDT = _db.GetDataTable(STOREDPROC.GENERATEDINDENTLIST, CommandType.StoredProcedure, 0, parameter);
                if (indentsDT.Rows.Count == 0)
                {
                    objIndents.Data    = null;
                    objIndents.Status  = false;
                    objIndents.Message = "No record currently available for processing";
                }

                var indentsList = ConvertDataTableToList <AvailableIndentsViewModel>(indentsDT);

                objIndents.Data    = indentsList;
                objIndents.Status  = true;
                objIndents.Message = "Successful";
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Fetch indents returned error: { ex.Message } at { DateTime.Now }");
                objIndents.Data    = null;
                objIndents.Status  = false;
                objIndents.Message = error;
            }

            ErrorWriter.WriteLog($"Fetch indents returned : { objIndents.Message } at { DateTime.Now }");
            return(objIndents);
        }
        public async Task <DataResult <List <ReportViewModel> > > GETINDENTSREPORTS(string startDate, string endDate)
        {
            var objReport = new DataResult <List <ReportViewModel> >();

            try
            {
                var dt = new DataTable();

                var ds = _dr.GETINDENTSREPORTS(startDate, endDate);
                dt = ds.Tables[0];

                if (dt.Rows.Count == 0)
                {
                    objReport.Data    = null;
                    objReport.Status  = false;
                    objReport.Message = "No record currently available for processing";
                    return(objReport);
                }

                var reportList = ConvertDataTableToList <ReportViewModel>(dt);

                objReport.Data    = reportList;
                objReport.Status  = true;
                objReport.Message = "Successful";
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Indent reports returned error: { ex.Message } at { DateTime.Now }");
                objReport.Data    = null;
                objReport.Status  = false;
                objReport.Message = error;
            }

            return(objReport);
        }
        public async Task <DataResult <MfbViewModel> > UPLOADMFBEXCEL(HttpPostedFileBase upload, string username)
        {
            try
            {
                if (string.IsNullOrEmpty(username))
                {
                    throw new PlatformCustomException("invalid user");
                }

                var objResult = new DataResult <MfbViewModel>();
                var parameter = new List <IDbDataParameter>();

                //declare all variables for indents for excel
                #region IndentVariables
                var indentId               = string.Empty;
                var micrAccountNo          = string.Empty;
                var sortCode               = string.Empty;
                var lastSerialNumber       = 0;
                var branchCode             = string.Empty;
                var branchName             = string.Empty;
                var firstChequeNumber      = string.Empty;
                var numberOfCheques        = string.Empty;
                var numberOfChequesPrinted = string.Empty;
                var chequeType             = string.Empty;
                var dateOfRequest          = DateTime.Now.ToString("dd-MMM-yy");
                var dateEnterted           = DateTime.Now.ToString("dd-MMM-yy");
                var pulled             = string.Empty;
                var datePulled         = DateTime.Now.ToString("dd-MMM-yy");
                var printed            = string.Empty;
                var approved           = string.Empty;
                var approver           = string.Empty;
                var uploaded           = string.Empty;
                var requisitionId      = string.Empty;
                var scheduleNo         = string.Empty;
                var indentSource       = string.Empty;
                var deliveryBranchCode = string.Empty;
                var customerName       = string.Empty;
                var ranged             = string.Empty;
                var recieved           = string.Empty;
                var dateRecieved       = DateTime.Now.ToString("dd-MMM-yy");
                var deleted            = string.Empty;
                var acknowledged       = string.Empty;
                var dateAcknowledged   = DateTime.Now.ToString("dd-MMM-yy");
                var dispatched         = string.Empty;
                var dateDispatched     = DateTime.Now.ToString("dd-MMM-yy");
                var dispatchNumber     = string.Empty;
                var dateApproved       = DateTime.Now.ToString("dd-MMM-yy");
                var costOfBooklet      = string.Empty;
                var cancel             = string.Empty;
                var mult               = string.Empty;
                var cmcCode            = string.Empty;
                var batchId            = string.Empty;
                var generated          = string.Empty;
                var dateOfPrinting     = DateTime.Now.ToString("dd-MMM-yy");
                var receivedApprovedBy = string.Empty;
                int lastSerialCounter  = 0;
                #endregion

                var validateUpload = await MfbExcelValidation(upload);

                //convert excel to list
                var convertExcelToDT = FileUploadToDataTable(upload);
                //convert databaTable to List
                var convertDtToList = ConvertDataTableToList <MFBIndentsUpload>(convertExcelToDT);
                var listMfb         = new List <MFBIndentsUpload>();

                foreach (var item in convertDtToList)
                {
                    var          branchParam = new List <IDbDataParameter>();
                    DbConnection connection  = null;
                    branchParam.Add(_db.CreateParameter("p_branchname", 100, item.BRANCHNAME, DbType.String, ParameterDirection.Input));
                    branchParam.Add(_db.CreateParameter("p_branchcode", 5, string.Empty, DbType.String, ParameterDirection.Output));
                    branchParam.Add(_db.CreateParameter("p_sortcode", 9, string.Empty, DbType.String, ParameterDirection.Output));
                    branchParam.Add(_db.CreateParameter("p_cmcinuse", 5, string.Empty, DbType.String, ParameterDirection.Output));
                    branchParam.Add(_db.CreateParameter("p_error_msg", 200, string.Empty, DbType.String, ParameterDirection.Output));

                    if (string.IsNullOrEmpty(branchCode))
                    {
                        var getBranchCodeByName = _db.GetExecuteNonQuery(STOREDPROC.GETBRANCHCODEBYBRANCHNAME, CommandType.StoredProcedure, branchParam, 0, out connection);

                        branchCode = getBranchCodeByName.Parameters["p_branchcode"].Value.ToString();
                        sortCode   = getBranchCodeByName.Parameters["p_sortcode"].Value.ToString();
                        cmcCode    = getBranchCodeByName.Parameters["p_cmcinuse"].Value.ToString();
                        string error = getBranchCodeByName.Parameters["p_error_msg"].Value.ToString();

                        if (!string.IsNullOrEmpty(error))
                        {
                            objResult.Data    = null;
                            objResult.Status  = false;
                            objResult.Message = error;
                            ErrorWriter.WriteLog($"MFB upload process returned : { objResult.Message } at { DateTime.Now }");
                            return(objResult);
                        }
                    }
                    var currentUser = username;
                    var reqId       = item.REQUISITION_ID.ToString();

                    micrAccountNo      = item.MICR_ACCOUNT_NO;
                    requisitionId      = Convert.ToInt32(item.REQUISITION_ID).ToString("D8");
                    approved           = "N";
                    branchName         = item.BRANCHNAME;
                    cancel             = "N";
                    chequeType         = GetConfigValue("MFBChequeType");
                    deleted            = "N";
                    dispatched         = "N";
                    numberOfCheques    = item.NUMBEROFCHEQUES;
                    indentSource       = GetConfigValue("IndentSource");
                    pulled             = "N";
                    acknowledged       = "N";
                    printed            = "N";
                    scheduleNo         = item.SCHEDULE_NO;
                    deliveryBranchCode = item.DELIVERY_BRANCHCODE;
                    customerName       = item.CUSTOMER_NAME;
                    recieved           = "N";
                    deleted            = "N";
                    dispatched         = "N";

                    indentId = $"{branchCode}{micrAccountNo}{requisitionId}";

                    var lastSerialParam = new List <IDbDataParameter>();


                    if (lastSerialCounter <= Convert.ToInt32(lastSerialNumber))
                    {
                        var dR = new DataRead();
                        var dt = new DataTable();

                        var ds = dR.GetLastSerialNumberByBranchCode(branchCode);
                        if (ds.Tables[0].Rows.Count < 1)
                        {
                            //SETLAST_SERIAL_NUMBER TO 1
                            lastSerialCounter = 1;

                            var insertParams = new List <IDbDataParameter>();

                            insertParams.Add(_db.CreateParameter("p_branchcode", 13, branchCode, DbType.String, ParameterDirection.Input));
                            insertParams.Add(_db.CreateParameter("p_sortcode", 9, sortCode, DbType.String, ParameterDirection.Input));
                            insertParams.Add(_db.CreateParameter("p_lastserial", 12, 0, DbType.Decimal, ParameterDirection.Input));
                            insertParams.Add(_db.CreateParameter("p_cmccode", 3, cmcCode, DbType.String, ParameterDirection.Input));
                            insertParams.Add(_db.CreateParameter("p_error_msg", 200, string.Empty, DbType.String, ParameterDirection.Output));

                            //INSERT NEW RECORD FOR THE BRANCH
                            _db.InsertWithTransaction(STOREDPROC.INSERTINTOLASTSERIALNUMBER, CommandType.StoredProcedure, insertParams, 0);
                        }
                        else
                        {
                            dt = ds.Tables[0];
                            var getLastSerial = dt.Rows[0]["LAST_SERIAL_NUMBER"].ToString();

                            lastSerialNumber = Convert.ToInt32(getLastSerial);
                            var lastSerialNumberToUse = Convert.ToInt32(lastSerialNumber) + 1;
                            lastSerialCounter = Convert.ToInt32(lastSerialNumberToUse);
                        }
                    }

                    var objMfb = new MFBIndentsUpload()
                    {
                        INDENT_ID              = indentId,
                        MICR_ACCOUNT_NO        = micrAccountNo,
                        SORTCODE               = sortCode,
                        BRANCHNAME             = branchName,
                        BRANCHCODE             = branchCode,
                        FIRST_CHEQUE_NUMBER    = lastSerialCounter.ToString(),
                        NUMBEROFCHEQUES        = numberOfCheques,
                        NUMBEROFCHEQUESPRINTED = numberOfChequesPrinted,
                        CHEQUETYPE             = chequeType,
                        DATEOFREQUEST          = dateOfRequest,
                        DATEENTERED            = dateEnterted,
                        PULLED              = pulled,
                        DATEPULLED          = datePulled,
                        PRINTED             = printed,
                        DATEOFPRINTING      = dateOfPrinting,
                        RECEIVEDAPPROVED_BY = receivedApprovedBy,
                        ORIGINATOR          = currentUser,
                        APPROVED            = approved,
                        APPROVER            = approver,
                        UPLOADED            = uploaded,
                        REQUISITION_ID      = requisitionId,
                        SCHEDULE_NO         = scheduleNo,
                        INDENTSOURCE        = indentSource,
                        DELIVERY_BRANCHCODE = deliveryBranchCode,
                        CUSTOMER_NAME       = customerName,
                        RANGED              = ranged,
                        RECEIVED            = recieved,
                        DATERECEIVED        = dateRecieved,
                        DELETED             = deleted,
                        ACKNOWLEDGED        = acknowledged,
                        DATEACKNOWLEDGED    = dateAcknowledged,
                        DISPATCHED          = dispatched,
                        DATEDISPATCHED      = dateDispatched,
                        DISPATCHNUMBER      = dispatchNumber,
                        DATEAPPROVED        = dateApproved,
                        COST_OF_BOOKLET     = costOfBooklet,
                        CANCEL              = cancel,
                        MULT      = mult,
                        BATCHID   = batchId,
                        GENERATED = generated
                    };

                    lastSerialCounter++;
                    listMfb.Add(objMfb);
                }

                var listMfbDT = new ListtoDataTable().ToDataTable(listMfb);

                _db.BulkCopyWriteToServer(listMfbDT, "INDENTS_TEST");

                //update last serial table with the last id used by branch code
                var updateParam = new List <IDbDataParameter>();

                updateParam.Add(_db.CreateParameter("p_lastserialnumber", 100, lastSerialCounter - 1, DbType.String, ParameterDirection.Input));
                updateParam.Add(_db.CreateParameter("p_branchcode", 5, branchCode, DbType.String, ParameterDirection.Input));
                updateParam.Add(_db.CreateParameter("p_error_msg", 200, string.Empty, DbType.String, ParameterDirection.Output));

                _db.Update(STOREDPROC.UPDATELASTSERIALNUMBER, CommandType.StoredProcedure, updateParam, 0);

                objResult.Data    = null;
                objResult.Status  = true;
                objResult.Message = listMfbDT.Rows.Count.ToString();

                ErrorWriter.WriteLog($"MFB upload process returned : { objResult.Message } indents processed at { DateTime.Now }");

                return(objResult);
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"MFB upload process returned error: { ex.Message } at { DateTime.Now }");
                return(new DataResult <MfbViewModel>()
                {
                    Data = null,
                    Message = error,
                    Status = false
                });
            }
        }
        public async Task <DataResult <IndentsToGenerate> > GENERATEDINDENTSANDENCRYPT(string userId)
        {
            var objIndents        = new DataResult <IndentsToGenerate>();
            var parameter         = new List <IDbDataParameter>();
            var exportDataToExcel = false;
            var listIndents       = new List <GeneratedIndents>();
            //var copyOfGeneratedIndents = new DataTable();
            DbConnection db        = null;
            var          transCode = GetConfigValue("TransactionCode");


            try
            {
                parameter.Add(_db.CreateParameter("P_ERROR_MSG", string.Empty, DbType.String));
                parameter.Add(_db.CreateParameter("P_INDENTGENERATED", OracleDbType.RefCursor, null));
                parameter.Add(_db.CreateParameter("p_transcode", 13, transCode, DbType.String, ParameterDirection.Input));

                var generateIndentsForProcessing = _db.GetDataTable(STOREDPROC.GENERATEINDENTFORPROC, CommandType.StoredProcedure, 0, parameter);
                if (generateIndentsForProcessing.Rows.Count == 0)
                {
                    objIndents.Data    = null;
                    objIndents.Status  = false;
                    objIndents.Message = "No record currently available for processing.";
                    ErrorWriter.WriteLog($"Fetch indetns for encryption returned : { objIndents.Message } at { DateTime.Now }");

                    return(objIndents);
                }

                //This part is used to remove indentId column from excel report. Uncomment if you want to generate indents without Indent_Id
                //copyOfGeneratedIndents = generateIndentsForProcessing.Copy();
                //generateIndentsForProcessing.Columns.RemoveAt(0);

                DeleteExistingFilesInFolder(GetConfigValue("GeneratedIndentLocation"));
                var fullPath = ServerPath();
                var fileName = Path.GetFileName(fullPath);
                exportDataToExcel = await ExportDataToExcelAndEncrypt(generateIndentsForProcessing, fileName, fullPath);

                var convertDTToList = ConvertDataTableToList <IndentsToGenerate>(generateIndentsForProcessing);

                string id = DateTime.Now.ToFileTimeUtc().ToString();


                foreach (var item in convertDTToList)
                {
                    var model = new GeneratedIndents();
                    model.GENERATED_ID     = id;
                    model.BATCHID          = id;
                    model.INDENT_ID        = item.INDENT_ID;
                    model.STATUSID         = 0;
                    model.DOM_BRANCH_ADD   = item.DOMICILEBRANCHADDRESS;
                    model.DOM_BRANCH_CODE  = item.DOMICILEBRANCHCODE;
                    model.SORTCODE         = item.SORTCODE;
                    model.CHEAQUETYPE      = item.CHEQUETYPE;
                    model.NUMBER_OF_LEAVES = item.NOOFLEAVES.ToString();
                    model.DEL_BRANCH_ADD   = item.DELIVERYBRANCHADDRESS;
                    model.SCHEMECODE       = item.SCHEMECODE;
                    model.DEL_BRANCH_CODE  = item.DELIVERYBRANCHCODE;
                    model.RANGE_START      = item.RANGESTART.ToString();
                    model.RANGE_STOP       = item.RANGESTOP.ToString();
                    model.GENERATEDBY      = userId;
                    model.GENERATEDON      = DateTime.Now.ToString("dd-MMMM-yy");
                    model.SECNUM           = null;
                    model.DATECAPTURED     = DateTime.Now.ToString("dd-MMMM-yy");
                    model.ACCOUNTNO        = item.ACCOUNTNUMBER;
                    model.ACCOUNTNAME      = item.ACCOUNTNAME;
                    model.CURRENCY         = item.CURRENCY;

                    listIndents.Add(model);
                }

                var listIndentDT = new ListtoDataTable().ToDataTable(listIndents);

                var updateParam = new List <IDbDataParameter>();
                updateParam.Add(_db.CreateParameter("P_ERROR_MSG", 200, string.Empty, DbType.String, ParameterDirection.Output));

                var updateCommand = _db.UpdateWithTransaction(STOREDPROC.UPDATEGENERATEDINDENTS, CommandType.StoredProcedure, updateParam, 0);

                _db.BulkCopyWriteToServer(listIndentDT, "GENERATEDINDENTS");

                objIndents.Data    = null;
                objIndents.Status  = true;
                objIndents.Message = generateIndentsForProcessing.Rows.Count.ToString();
                return(objIndents);
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Encryption process returned error: { ex.Message } at { DateTime.Now }");
                objIndents.Data    = null;
                objIndents.Status  = false;
                objIndents.Message = error;

                return(objIndents);
            }
        }
        public async Task <DataResult <DecryptViewModel> > DECRYPTINDENTS(DecryptViewModel model)
        {
            var objDecrypt     = new DataResult <DecryptViewModel>();
            var listOfIndentId = new List <string>();
            var listSec        = new List <SecurityNumberUpdateVM>();

            try
            {
                var dModel = new DecryptViewModel();

                string outputFile = Path.Combine($"{model.OutputPath}\\DecryptedFile.xls");

                var decrypt = PGPDecryptMain.Decrypt(model.EncryptedFilePath, GetConfigValue("PFSPrivateKey"), HashUtil.DecryptStringValue(GetConfigValue("PGPPassword")), outputFile);
                dModel.OutputPath = outputFile;
                if (!string.IsNullOrEmpty(dModel.OutputPath))
                {
                    var excelToDT = ParseExcelNow(outputFile);

                    var excelToList = ConvertDataTableToList <ExcelFileViewModel>(excelToDT).Select(x => new ExcelFileViewModel {
                        //INDENTID =  x.INDENTID.Remove(0,1),
                        INDENTID      = x.INDENTID,
                        ACCOUNTNUMBER = x.ACCOUNTNUMBER,
                        ACCOUNTNAME   = x.ACCOUNTNAME,
                        //DOMICILEBRANCHNAME = x.DOMICILEBRANCHNAME,
                        DOMICILEBRANCHADDRESS = x.DOMICILEBRANCHADDRESS,
                        SORTCODE              = x.SORTCODE,
                        CHEQUETYPE            = x.CHEQUETYPE,
                        NOOFLEAVES            = x.NOOFLEAVES,
                        DELIVERYBRANCHADDRESS = x.DELIVERYBRANCHADDRESS,
                        SCHEMECODE            = x.SCHEMECODE,
                        DOMICILEBRANCHCODE    = x.DOMICILEBRANCHCODE,
                        //DELIVERYBRANCHCODE = x.DELIVERYBRANCHCODE,
                        RANGESTART = x.RANGESTART,
                        RANGESTOP  = x.RANGESTOP,
                        STARTAUDIT = x.STARTAUDIT
                    });

                    var accountNo = excelToList.FirstOrDefault().ACCOUNTNUMBER;

                    var parameter = new List <IDbDataParameter>();
                    parameter.Add(_db.CreateParameter("P_ACCOUNTNO", accountNo, OracleDbType.Varchar2, ParameterDirection.Input));
                    parameter.Add(_db.CreateParameter("P_BATCHGENERATED", OracleDbType.RefCursor, null));
                    parameter.Add(_db.CreateParameter("P_ERROR_MSG", 100, string.Empty, DbType.String, ParameterDirection.Output));

                    var generatedIndentsByAccountNo = _db.GetDataTable(STOREDPROC.GETGENERATEDINDENTSBYACCTNO, CommandType.StoredProcedure, 0, parameter);

                    if (generatedIndentsByAccountNo.Rows.Count == 0)
                    {
                        objDecrypt.Data    = null;
                        objDecrypt.Status  = true;
                        objDecrypt.Message = "No matching record in database";
                    }
                    var generatedIndentsByAccountNoToList = ConvertDataTableToList <LocalValidateIndents>(generatedIndentsByAccountNo);

                    foreach (var item in excelToList)
                    {
                        var objIndent = generatedIndentsByAccountNoToList.Where(x => x.ACCOUNTNO == item.ACCOUNTNUMBER && x.INDENT_ID == item.INDENTID).Select(x => new CompareObjectFromDb
                        {
                            INDENTID              = x.INDENT_ID,
                            ACCOUNTNUMBER         = x.ACCOUNTNO,
                            ACCOUNTNAME           = x.ACCOUNTNAME,
                            DOMICILEBRANCHADDRESS = x.DOM_BRANCH_ADD,
                            SORTCODE              = x.SORTCODE,
                            CHEQUETYPE            = x.CHEAQUETYPE,
                            NOOFLEAVES            = x.NUMBER_OF_LEAVES,
                            DELIVERYBRANCHADDRESS = x.DEL_BRANCH_ADD,
                            SCHEMECODE            = x.SCHEMECODE,
                            DOMICILEBRANCHCODE    = x.DOM_BRANCH_CODE,
                            RANGESTART            = x.RANGE_START,
                            RANGESTOP             = x.RANGE_STOP,
                        }).FirstOrDefault();

                        if (objIndent == null)
                        {
                            objDecrypt.Data    = null;
                            objDecrypt.Status  = false;
                            objDecrypt.Message = "Excel record(s) does not match generated indents";
                            ErrorWriter.WriteLog($"Decryption process returned : { objDecrypt.Message } at { DateTime.Now }");

                            return(objDecrypt);
                        }

                        if (item.CHEQUETYPE != objIndent.CHEQUETYPE || item.DELIVERYBRANCHADDRESS != objIndent.DELIVERYBRANCHADDRESS || item.DOMICILEBRANCHADDRESS != objIndent.DOMICILEBRANCHADDRESS ||
                            item.DOMICILEBRANCHCODE != objIndent.DOMICILEBRANCHCODE || item.RANGESTART != Convert.ToDouble(objIndent.RANGESTART) || item.RANGESTOP != Convert.ToDouble(objIndent.RANGESTOP) ||
                            item.NOOFLEAVES != Convert.ToDouble(objIndent.NOOFLEAVES) || item.SORTCODE != objIndent.SORTCODE)
                        {
                            objDecrypt.Data    = null;
                            objDecrypt.Status  = false;
                            objDecrypt.Message = "Excel record(s) does not match generated indents";
                            ErrorWriter.WriteLog($"Decryption process returned : { objDecrypt.Message } at { DateTime.Now }");

                            return(objDecrypt);
                        }
                        listOfIndentId.Add(item.INDENTID);

                        var secModel = new SecurityNumberUpdateVM()
                        {
                            ACCOUNTNUMBER             = item.ACCOUNTNUMBER,
                            APPROVED                  = "0",
                            CHEQUESTATE               = "0",
                            CHEQUE_NUMBER             = item.RANGESTART.ToString(),
                            CMC_CODE                  = "985",
                            DATECAPTURED              = DateTime.Now.ToString("dd-MMM-yy"),
                            INDENT_ID                 = item.INDENTID,
                            INITUPLOAD                = "1",
                            NUMBER_OF_CHEQUES_PRINTED = item.NOOFLEAVES.ToString(),
                            OPERATOR_ID               = "Superflux",
                            PREFIX          = "PO",
                            REPLACES        = "",
                            REPLACESPREFIX  = "",
                            SECURITY_NUMBER = item.STARTAUDIT.ToString(),
                            SEQ             = "",
                            SN       = "1",
                            UPLOADED = "0"
                        };

                        listSec.Add(secModel);
                    }

                    using (var orcl = new OracleConnection(_connectionString))
                    {
                        orcl.Open();
                        var command = new OracleCommand()
                        {
                            Connection  = orcl,
                            CommandText = STOREDPROC.UPDATEINDENTTABLE,
                            CommandType = CommandType.StoredProcedure,
                            BindByName  = true
                        };

                        command.Parameters.Add(new OracleParameter("P_ERROR_MSG", OracleDbType.Varchar2)).Direction = ParameterDirection.Output;
                        command.Parameters.Add(new OracleParameter("n_array", OracleDbType.Varchar2)
                        {
                            CollectionType = OracleCollectionType.PLSQLAssociativeArray,
                            Value          = listOfIndentId.ToArray()
                        });
                        try
                        {
                            command.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {
                            ErrorWriter.WriteLog($"Decryption process returned error : { ex.Message } at { DateTime.Now }");
                        }
                        finally
                        {
                            orcl.Close();
                        }

                        var listSecDT = new ListtoDataTable().ToDataTable(listSec);
                        _db.BulkCopyWriteToServer(listSecDT, "SECURITYCHEQUENUMBEROLD");
                    }
                }

                objDecrypt.Status  = true;
                objDecrypt.Message = $"File successfully decrypted to { outputFile } at { DateTime.Now }";
                objDecrypt.Data    = dModel;

                ErrorWriter.WriteLog($"Decryption process returned : { objDecrypt.Message } at { DateTime.Now }");

                return(objDecrypt);
            }
            catch (Exception ex)
            {
                var error = await ExceptionRefiner.LogError(ex);

                ErrorWriter.WriteLog($"Decryption process returned error: { ex.Message } at { DateTime.Now }");
                objDecrypt.Status  = false;
                objDecrypt.Message = error;
                objDecrypt.Data    = null;

                return(objDecrypt);
            }
        }