private bool deleteTrxPayroll(ISession session, String id, ILog log) { bool isTrue = true; try { TrxPayroll trx = session.CreateCriteria(typeof(TrxPayroll)) .Add(Expression.Eq("Id", id)) .UniqueResult <TrxPayroll>(); if (trx != null) { session.Delete(trx); session.Flush(); isTrue = true; } } catch (Exception ex) { isTrue = false; log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception Message =" + " " + ex.Message); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception InnerMessage =" + " " + ex.InnerException); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception StackTrace =" + " " + ex.StackTrace); } return(isTrue); }
//Payroll Reject Detail public static bool rejectAllChild(ISession session, TrxPayroll payroll, out string outMsgUpdate, ILog log) { outMsgUpdate = ""; bool result = true; try { log.Info("Reject All Child."); //Create Connection Parameter dbConf = session.Load <Parameter>("CMS_DBCONNECTION"); MySqlConnection conn = new MySqlConnection(dbConf.Data); conn.Open(); MySqlCommand command = conn.CreateCommand(); command.CommandText = "update trxpayrolldetails set status=" + ParameterHelper.TRXSTATUS_REJECT + ", description='Rejected by System' where pid='" + payroll.Id + "'"; int i = command.ExecuteNonQuery(); log.Info("command Execute = " + i); conn.Close(); } catch (Exception e) { string eMsg = "Error on update child " + e.Message + "==" + e.InnerException + "==" + e.StackTrace; log.Error(eMsg); outMsgUpdate = eMsg; result = false; } return(result); }
private void Commitjob_transaction(ILog log) { try { IList <TrxPayrollDetail> trxList = session.CreateCriteria(typeof(TrxPayrollDetail)) .Add(Expression.Eq("Status", ParameterHelper.TRXSTATUS_SUCCESS)) .Add(Expression.Not(Expression.Eq("Email", ""))) .Add(Expression.Eq("EmailTransactionId", 0)) .AddOrder(Order.Asc("Id")) .List <TrxPayrollDetail>(); log.Info("Jumlah transaksi butuh email : " + trxList.Count); //we've found some data foreach (TrxPayrollDetail trx in trxList) { try { //get parent TrxPayroll payroll = trx.Parent; string remark = payroll.FileDescription; //get client name Client cli = session.Load <Client>(payroll.ClientID); string lembaga = cli.Name; double amount = trx.Amount / 100; string text_amount = string.Format("{0:N}", amount); //set email content string email_content = EmailHelperUniversal.EmailTemplateInternalTransfertoBenef(session, "PAYROLL", lembaga, trx.Account, trx.Name, "IDR", text_amount, remark, payroll.ProcessTime.ToString("dd/MM/yyyy hh:mm:ss")); //send email int idEmailTransaction = 0; string OutMsg = ""; if (EmailHelperUniversal.AddEmailTransaction(session, int.Parse(trx.Id.ToString()), 100, "PAYROLL BENEF", payroll.ClientID, trx.Email, "Payroll Transfer Notification - Cash Management System BRI", email_content, "", 2, out idEmailTransaction, out OutMsg)) { trx.EmailTransactionId = idEmailTransaction; } else { trx.ErrorDescription = "Email exception. " + OutMsg; } session.Update(trx); session.Flush(); } catch (Exception e) { log.Error("Exception >>" + e.Message + ">>" + e.InnerException + ">>" + e.StackTrace); trx.ErrorDescription = "Send Email Exception >>" + e.Message + ">>" + e.InnerException + ">>" + e.StackTrace; session.Update(trx); session.Flush(); } } } catch (Exception e) { log.Error("Exception Send Email >>" + e.Message + ">>" + e.InnerException + ">>" + e.StackTrace); } }
public static Boolean cekDebetAcc(ISession session, Transaction trx, ILog log) { Boolean result = false; //get trxpayrolls object XmlDocument doc = new XmlDocument(); XmlSerializer ser = new XmlSerializer(typeof(TrxPayroll)); doc.LoadXml(trx.TObject); XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); object obj = ser.Deserialize(reader); TrxPayroll ObjPayroll = (TrxPayroll)obj; TrxPayroll payroll = session.Load <TrxPayroll>(ObjPayroll.Id); string dbAcc = payroll.DebitAccount; //dsini update Debet account jika beda (Khusu ftp jane) - denny #region update Debet Account tabel Transactions try { if (ObjPayroll.DebitAccount.Equals(payroll.DebitAccount)) { //Ya udah oke no problem log.Info("Transaksi Payroll ID transactions : " + trx.Id + " :: Debet Transactions is Match "); result = true; } else { //Rubah biar samaan log.Info("FTP Payroll ID transactions : " + trx.Id + " is Detected :: Debet Transactions is not Match "); ObjPayroll.DebitAccount = dbAcc; string hasilAkhir = ObjPayroll.ToString(); trx.TObject = hasilAkhir; session.Update(trx); session.Flush(); result = true; } #endregion update Debet Account tabel Transactions } catch (Exception ex) { log.Error("Ada exception, Trxid : " + trx.Id + "gagal cek atau update debit account"); result = false; } return(result); }
private void ParseResponseFile(TrxPayroll payroll, String fileName, ISession session) { ILog logs = LogManager.GetLogger(typeof(GetPayrollResponse)); logs.Info(">>>>Start parsing file...." + fileName); PayrollLog(session, "Start parsing file...." + fileName); try { //ITransaction tx = session.BeginTransaction(); //logs.Info("isi tx --> " + tx + "filename : " + fileName); //PayrollLog(session,"isi tx --> "+tx + "filename : "+fileName); //20170524 - sayedzul - handler file balikan dari host 0 KB FileInfo fl = new FileInfo(fileName); if (fl.Length == 0) { payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; payroll.Description = "Cannot Read File Response From Host, Plese contact Administrator||" + payroll.Description; payroll.ErrorDescription += "||FileResponse From Host NULL"; logs.Error("Payroll SeqNumber: " + payroll.SeqNumber.ToString() + " === File Balikan dari Host 0 KB!"); session.Update(payroll); session.Flush(); return; } FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); logs.Info("isi fs : " + fs); PayrollLog(session, "isi fs : " + fs); StreamReader sr = new StreamReader(fs); logs.Info("isi sr : " + fs); PayrollLog(session, "isi sr : " + fs); Boolean _next = true; Boolean _confirm = true; double totamt = 0; double totfee = 0; double totaltrx = 0; String accfrom = ""; while (_next && _confirm) { logs.Info("isi boolean next : " + _next + "isi boolean confirm : " + _confirm); PayrollLog(session, "isi boolean next : " + _next + "isi boolean confirm : " + _confirm); String detail = sr.ReadLine(); logs.Info("isi detail : " + detail); PayrollLog(session, "isi detail : " + detail); if (null == detail) { break; } _confirm = false; switch (detail.Substring(0, 2)) { case "FH": String _response = detail.Substring(37, 3); if (!"000".Equals(_response)) { logs.Info("File header error, code : " + _response); PayrollLog(session, "File header error , code : " + _response); payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; payroll.Description = payroll.Description.Replace("PROCESSED", ParameterHelper.TRXDESCRIPTION_REJECT); payroll.LastUpdate = DateTime.Now; payroll.ErrorDescription += "Status 20|File header (FH) error, code : " + _response; session.Update(payroll); _next = false; } else { logs.Info("File header succesfully proceed"); PayrollLog(session, "File header succesfully proceed"); _confirm = true; } break; case "CH": _response = detail.Substring(11, 3); if (!"000".Equals(_response)) { logs.Info("Client header error, code : " + _response); PayrollLog(session, "Client header error, code : " + _response); payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; payroll.Description = payroll.Description.Replace("PROCESSED", ParameterHelper.TRXDESCRIPTION_REJECT); payroll.LastUpdate = DateTime.Now; payroll.ErrorDescription += "||Status 20|Client Header(CH) error, code : " + _response; session.Update(payroll); _next = false; } else { logs.Info("Client header succesfully proceed"); PayrollLog(session, "Client header succesfully proceed"); _confirm = true; } break; case "BH": _response = detail.Substring(101, 3); accfrom = detail.Substring(23, 15); if (!"000".Equals(_response)) { logs.Info("Batch header error, code : " + _response); PayrollLog(session, "Batch header error, code : " + _response); if (_response.Equals("005")) { payroll.StatusIFT = ParameterHelper.TRXSTATUS_REJECT; payroll.Description = payroll.Description.Replace("PROCESSED", "REJECT - SALDO TIDAK CUKUP (Rekening tidak terdebet)"); } else if (_response.Equals("003")) { payroll.StatusIFT = ParameterHelper.TRXSTATUS_REJECT; payroll.Description = payroll.Description.Replace("PROCESSED", "REJECT" + _response); } else { payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; payroll.Description = payroll.Description.Replace("PROCESSED", ParameterHelper.TRXDESCRIPTION_REJECT); } payroll.LastUpdate = DateTime.Now; payroll.ErrorDescription += "||Status 20|Batch Header (BH) error, code : " + _response; session.Update(payroll); _next = false; } else { logs.Info("Batch header succesfully proceed"); PayrollLog(session, "Batch header succesfully proceed"); _confirm = true; } break; case "BD": try { _response = detail.Substring(161, 3); logs.Info("isi response : " + _response); PayrollLog(session, "isi response : " + _response); String account = detail.Substring(22, 16); logs.Info("isi account : " + account); PayrollLog(session, "isi account : " + account); String amount = detail.Substring(41, 15); logs.Info("isi amount : " + amount); PayrollLog(session, "isi amount : " + amount); String fee = detail.Substring(71, 15); logs.Info("isi fee : " + fee); PayrollLog(session, "isi fee : " + fee); String description = detail.Substring(164, 40); logs.Info("isi description : " + description); PayrollLog(session, "isi description : " + description); account = account.TrimStart('0'); logs.Info("isi account after trim : " + account); PayrollLog(session, "isi account after trim : " + account); //20170202 - sayedzul - add padding account for a better query account = account.PadLeft(15, '0'); logs.Info("isi account after trim : " + account); PayrollLog(session, "isi account after trim : " + account); amount = amount.TrimStart('0'); logs.Info("isi amount after trim : " + amount); PayrollLog(session, "isi amount after trim : " + amount); fee = fee.TrimStart('0'); if (fee == "") { fee = "0"; } logs.Info("isi fee after trim : " + fee); PayrollLog(session, "isi fee after trim : " + fee); logs.Info("Going into sql command.."); PayrollLog(session, "Going into sql command.."); //rfqconnection Parameter dbConf = session.Load <Parameter>("CMS_DBCONNECTION"); MySqlConnection conn = new MySqlConnection(dbConf.Data); //conn.ConnectionTimeout = 20000; conn.Open(); MySqlCommand command = conn.CreateCommand(); PayrollLog(session, "Sql Connection status : " + command.Connection); if (!"000".Equals(_response)) { command.CommandText = "update trxpayrolldetails set status=" + ParameterHelper.TRXSTATUS_REJECT + ", description='" + description + "' where pid='" + payroll.Id + "' and account = '" + account + "' and amount = " + amount; PayrollLog(session, "Update trxpayrolldetails set status to reject, desc : " + description + "' where pid='" + payroll.Id + "' and account = '" + account + "' and amount = " + amount); } else { totfee += double.Parse(fee); totamt += double.Parse(amount); totaltrx++; command.CommandText = "update trxpayrolldetails set status=" + ParameterHelper.TRXSTATUS_SUCCESS + " where pid='" + payroll.Id + "' and account = '" + account + "' and amount = " + amount; PayrollLog(session, "Update trxpayrolldetails set status to success, desc : " + description + "' where pid='" + payroll.Id + "' and account = '" + account + "' and amount = " + amount); } int i = command.ExecuteNonQuery(); PayrollLog(session, "Command Execute Non Query status : " + i); if (i > 0) { logs.Info("Update detail succesfully proceed : " + account); PayrollLog(session, "Update detail succesfully proceed : " + account); payroll.StatusIFT = ParameterHelper.TRXSTATUS_PAYROLLNEW_BOOK_IFT_COMPLETE; payroll.Description = payroll.Description.Replace("PROCESSED", ParameterHelper.TRXDESCRIPTION_SUCCESS); _confirm = true; } else { logs.Error("Suspect detail detected, cannot execute query where account : " + account); PayrollLog(session, "Suscpect detail detected, cannot execute query where account : " + account); payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; //payroll.Description = payroll.Description.Replace("PROCESSED", "SUSPECT"); payroll.ErrorDescription += "||Suspect detail detected, cannot execute query where account : " + account; _confirm = false; } //tutup koneksi conn.Close(); } catch (Exception e) { logs.Info("Suspect detail detected, cannot process BD header"); PayrollLog(session, "Suspect detail detected, cannot process BD header"); payroll.StatusIFT = ParameterHelper.PAYROLL_EXCEPTION; payroll.ErrorDescription += "||Suspect detail detected, cannot process BD header >>>" + e.Message + "==" + e.InnerException + "==" + e.StackTrace; //payroll.Description = payroll.Description.Replace("PROCESSED", "SUSPECT"); _confirm = false; } break; default: _confirm = true; break; } } #region trxobhist //if (_confirm) //{ // TrxOBHist ob = new TrxOBHist(); // ob.ParentId = 0; // Client cl = session.CreateCriteria(typeof(Client)) // .Add(Expression.Like("Handle", payroll.CreatedBy.Substring(0, payroll.CreatedBy.IndexOf("/")).Trim())) // .UniqueResult<Client>(); // ob.ClientId = cl.Id; // ob.TrxCode = TotalOBHelper.Payroll; // ob.TrxType = 1; // ob.TrxActId = "0"; // ob.ValueDate = DateTime.Now.ToString("yyMMdd"); // ob.CreditCur = "IDR"; // ob.CreditAmt = totamt / 100; // ob.KursBeliTrx = "1"; // ob.KursJualTrx = "1"; // ob.DebitCur = "IDR"; // ob.DebitAmt = totamt / 100; // ob.BaseCur = "IDR"; // ob.BaseAmt = totamt / 100; // ob.KursJualBase = "1"; // ob.TrxRemark = payroll.Id; // pid payroll // ob.VoucherCode = ""; // ob.ChargeCur = "IDR"; // ob.ChargeAmt = totfee / 100; // ob.DebitAcc = accfrom; // logs.Info("Number : " + accfrom); // logs.Info("PID : " + cl.Id); // ClientAccount cd = session.CreateCriteria(typeof(ClientAccount)) // .Add(Expression.Like("Number", accfrom)) // .Add(Expression.Eq("Pid", cl.Id)) // .UniqueResult<ClientAccount>(); // ob.DebitAccName = cd.Code; // ob.BenAcc = totaltrx.ToString(); // ob.BenAccName = "-"; // ob.BenBankIdentifier = "0002"; // ob.BenBankName = "PT.BRI (PERSERO) TBK."; // ob.MakerInfo = payroll.Maker; // ob.CheckerInfo = payroll.Checker; // ob.ApproverInfo = payroll.Approver; // ob.LastUpdate = DateTime.Now; // if (payroll.Description.Contains("SUCCESS")) // { // ob.Description = "Success"; // ob.Status = 3; // } // else // { // ob.Description = payroll.Description; // ob.Status = 4; // } // session.Save(ob); //} #endregion //payroll.StatusEmail = ParameterHelper.PAYROLL_NEEDEMAIL; } catch (Exception ex) { payroll.ErrorDescription += "||Status 20|Error : " + ex.Message + ">>" + ex.InnerException + ">>" + ex.StackTrace; payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; logs.Error("Error : " + ex.Message + ">>" + ex.InnerException + ">>" + ex.StackTrace); } session.Update(payroll, payroll.Id); session.Flush(); logs.Info("=== End Parsing File ==="); PayrollLog(session, "End parsing file.."); }
public static Boolean workflowCheckerPayroll(ISession session, Transaction trx, ILog log) { //get trxpayrolls object XmlDocument doc = new XmlDocument(); XmlSerializer ser = new XmlSerializer(typeof(TrxPayroll)); doc.LoadXml(trx.TObject); XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); object obj = ser.Deserialize(reader); TrxPayroll ObjPayroll = (TrxPayroll)obj; TrxPayroll payroll = session.Load <TrxPayroll>(ObjPayroll.Id); bool result = true; string HeaderErrorMsg = "||" + DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss") + " "; //invalid authority setting status string StatusInvalidAuth = ""; try { int user_id = 0; string clientID = trx.ClientId.ToString(); //sayedzul add - 20161108 #region cek rek debet notpool or not string debAcc = payroll.DebitAccount.Trim().PadLeft(15, '0'); NotionalPoolingMember npm = session.CreateCriteria(typeof(NotionalPoolingMember)) .Add(Expression.Eq("AccountNumber", debAcc)) .Add(Expression.Eq("Status", "A")) .UniqueResult <NotionalPoolingMember>(); if (npm != null) { String[] desc = payroll.Description.Split(new String[] { "||" }, StringSplitOptions.None); payroll.Status = ParameterHelper.TRXSTATUS_REJECT; payroll.StatusEmail = ParameterHelper.PAYROLL_NEEDEMAIL; payroll.Description = ParameterHelper.TRXDESCRIPTION_REJECT + " - Notional pooling account not permitted for payroll transaction||" + desc[1]; payroll.ErrorDescription += HeaderErrorMsg + "Notional pooling account not permitted for payroll transaction"; session.Update(payroll); //reject child string outRejectChild = ""; if (rejectAllChild(session, payroll, out outRejectChild, log)) { log.Info("Success Update All Child."); payroll.ErrorDescription += HeaderErrorMsg + " Success reject child"; //delete transactions session.Delete(trx); } else { payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; payroll.ErrorDescription = HeaderErrorMsg + outRejectChild; } session.Update(payroll); session.Flush(); return(true); } #endregion //end sayedzul #region get usermaps/user_id UserMap umap = null; try { if (!string.IsNullOrEmpty(trx.Approver)) { String[] tempmaker = trx.Approver.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); foreach (String makinfo in tempmaker) { String[] detmake = makinfo.Split(new String[] { " - " }, StringSplitOptions.RemoveEmptyEntries); umap = session.CreateCriteria(typeof(UserMap)) .Add(Expression.Like("UserHandle", detmake[0].Trim())) .Add(Expression.Like("ClientEntity", int.Parse(clientID))) .UniqueResult <UserMap>(); user_id = umap.UserEntity; } } else if (!string.IsNullOrEmpty(trx.Checker)) { String[] tempmaker = trx.Checker.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); foreach (String makinfo in tempmaker) { String[] detmake = makinfo.Split(new String[] { " - " }, StringSplitOptions.RemoveEmptyEntries); umap = session.CreateCriteria(typeof(UserMap)) .Add(Expression.Like("UserHandle", detmake[0].Trim())) .Add(Expression.Like("ClientEntity", int.Parse(clientID))) .UniqueResult <UserMap>(); user_id = umap.UserEntity; } } else//maker { String[] tempmaker = trx.Maker.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); foreach (String makinfo in tempmaker) { String[] detmake = makinfo.Split(new String[] { " - " }, StringSplitOptions.RemoveEmptyEntries); umap = session.CreateCriteria(typeof(UserMap)) .Add(Expression.Like("UserHandle", detmake[0].Trim())) .Add(Expression.Like("ClientEntity", int.Parse(clientID))) .UniqueResult <UserMap>(); user_id = umap.UserEntity; } } } catch (Exception ex) { payroll.ErrorDescription = "Exception on Scheduller Payroll Get Auth :: " + ex.Message + " => " + ex.StackTrace + " => " + ex.InnerException; payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; session.Update(payroll); session.Flush(); log.Error("Exception on Scheduller Payroll Get Auth :: " + ex.Message + " => " + ex.StackTrace + " => " + ex.InnerException); //EvtLogger.Write("Exception on Scheduller Payroll Get Auth :: " + ex.Message + " => " + ex.StackTrace, System.Diagnostics.EventLogEntryType.Error); result = false; } log.Info("User Id : " + user_id); #endregion //get total TRX //|susccess|fail|total| ==> |1:200|:|2:300| //string[] total = payroll.TotalTrx.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); //string[] pecahan = total[2].Split(':'); //string counttrx = pecahan[0]; //string totalamount = pecahan[1]; //trx.TotalTrx = "|" + feeIFT + "|" + reject + "|" + totalTrx + "|" + feeRTG + "|" + feeLLG + "|"; if (payroll.TotalTrx.Equals("|0:0|0:0|0:0|0:0|0:0|")) { //countift : sumift| countrejectAll : sumrejectAll | countAll : sumAll | countRTG : sumRTG | countLLG : sumLLG| //ga dipake pun, ga usah lah int _countSuccess = payroll.TrxPayrollDetail.Where(x => x.Status != ParameterHelper.TRXSTATUS_REJECT).Count(); double _sumSuccess = payroll.TrxPayrollDetail.Where(x => x.Status != ParameterHelper.TRXSTATUS_REJECT).Sum(x => x.Amount / 100); int _countInvalid = payroll.TrxPayrollDetail.Where(x => x.Status == ParameterHelper.TRXSTATUS_REJECT).Count(); double _sumInvalid = payroll.TrxPayrollDetail.Where(x => x.Status == ParameterHelper.TRXSTATUS_REJECT).Sum(x => x.Amount / 100); int _countTotal = payroll.TrxPayrollDetail.Count(); double _sumTotal = payroll.TrxPayrollDetail.Sum(x => x.Amount / 100); payroll.TotalTrx = "|" + _countSuccess.ToString() + ":" + _sumSuccess.ToString() + "|" + _countInvalid.ToString() + ":" + _sumInvalid.ToString() + "|" + _countTotal.ToString() + ":" + _sumTotal.ToString() + "|"; //log.Info("Trx Id = " + payroll.Id + ", Total Trx : " + payroll.TotalTrx); //session.Update(trx); //session.Flush(); //Denny coba //string TotalTrxNew = "|0:0|0:0|0:0|0:0|0:0|"; //TotalTrxNew = "|" + _countSuccess.ToString() + ":" + _sumSuccess.ToString() + "|" + _countInvalid.ToString() + ":" + _sumInvalid.ToString() + "|" + _countTotal.ToString() + ":" + _sumTotal.ToString() + "|"; #region Native update Parent payroll //string temp_query2 = ""; //string msg2 = ""; //int count2 = 0; //string dbResult2 = ""; //temp_query2 = @"update trxpayrolls set totaltrx = '" + TotalTrxNew + "' where id = '" + payroll.Id + "';"; //if (!PayrollHelper.ExecuteQueryValue(session, temp_query2, out dbResult2, out msg2)) //{ // log.Error("(TrxID " + payroll.Id + ") Failed Query: " + temp_query2 + " " + msg2); //} #endregion native update } string counttrx = payroll.TrxPayrollDetail.Where(x => x.Status != ParameterHelper.TRXSTATUS_REJECT).Count().ToString(); double totalamount = payroll.TrxPayrollDetail.Where(x => x.Status != ParameterHelper.TRXSTATUS_REJECT).Sum(x => x.Amount / 100); //get debit acc string[] debAccArr = payroll.Description.Split(new String[] { "||" }, StringSplitOptions.RemoveEmptyEntries); string debitAccId = debAccArr[1]; ClientAccount ClientAcc = session.Load <ClientAccount>(int.Parse(debitAccId)); string debitAcc = ClientAcc.Number; string valueDate = payroll.ProcessTime.ToString("yyMMdd"); if (valueDate.Equals("010101")) { valueDate = "991231"; } #region cek limit-limit if (trx.CheckWork == 0 && trx.ApproveWork == 0) { string outMsgAuthorityError = ""; if (CekAuthority(session, 100, umap, "PAYROLL", valueDate, totalamount, "IDR", out outMsgAuthorityError)) { if (!outMsgAuthorityError.Equals("")) { StatusInvalidAuth = "[LIMIT]" + outMsgAuthorityError; } } else { StatusInvalidAuth = "[EXCEPTION]" + outMsgAuthorityError; } } #endregion #region cek Authority Setting //Pengecekkan bypass transaksi di Settingan LIsence - Denny bool isWithAuthority = true; IList <ClientMatrix> cm = session.CreateCriteria(typeof(ClientMatrix)) .Add(Expression.Eq("Id", trx.ClientId)) .List <ClientMatrix>(); foreach (ClientMatrix cm1 in cm) { AuthorityHelper ah = null; ah = new AuthorityHelper(cm1.Matrix); isWithAuthority = ah.isDirectTransaction(100); //Kondisi menggunakan Direct Transactions if (trx.CheckTotal == 0 && trx.ApproveTotal == 0 && isWithAuthority) { StatusInvalidAuth = ""; } if (trx.CheckWork == 0 && trx.ApproveWork == 0 && isWithAuthority == false) { log.Error("debit Account : " + debitAcc); log.Error("total Account : " + totalamount); log.Error("umap Client Entity : " + umap.ClientEntity); //string nextProcessor = UserGroupHelper.getNextAppTemp(session, 100, umap, trx.Approver, "Payroll", debitAcc, "IDR", double.Parse(totalamount)); string nextProcessorChecker = "GAK PAKE CHECKER"; string nextProcessorApprover = "GAK PAKE APPROVER"; if (trx.CheckTotal != 0) { nextProcessorChecker = UserGroupHelper.getNextCheTemp(session, 100, umap, "", "Payroll", debitAcc, "IDR", totalamount); } if (trx.ApproveTotal != 0) { nextProcessorApprover = UserGroupHelper.getNextAppTemp(session, 100, umap, "", "Payroll", debitAcc, "IDR", totalamount); } log.Error("Checker : " + nextProcessorChecker); log.Error("Approver : " + nextProcessorApprover); nextProcessorChecker = nextProcessorChecker.Replace("|", ""); nextProcessorApprover = nextProcessorApprover.Replace("|", ""); if (string.IsNullOrEmpty(nextProcessorChecker)) { StatusInvalidAuth += "CHECKER"; } if (string.IsNullOrEmpty(nextProcessorApprover)) { StatusInvalidAuth += " and APPROVER"; } } } #endregion if (StatusInvalidAuth.Equals(""))//authority valid { //transaction complete if (trx.CheckWork >= trx.CheckTotal) { if (trx.ApproveWork >= trx.ApproveTotal)//FINAL, transactions ready to process { //update trxpayroll String[] des = payroll.Description.Split(new String[] { "||" }, StringSplitOptions.None); if (payroll.ProcessTime.ToString("yyyy-MM-dd").Equals("0001-01-01")) { payroll.ProcessTime = DateTime.Now; } //20170423 sayedzul add handler payroll processtime if (payroll.IsPayrollBankLain == 1) { payroll.ProcessTime = PayrollHelper.GetRealProcessTime(session, payroll.ProcessTime); } payroll.Maker = trx.Maker; payroll.Checker = trx.Checker; payroll.Approver = trx.Approver; payroll.Status = ParameterHelper.TRXSTATUS_RUNNING_AFTERCHECKACCOUNT;//19 payroll.Description = "PROCESSED" + "||" + des[1]; session.Update(payroll); session.Flush(); //delete transactions session.Delete(trx); session.Flush(); log.Info("Finish. Data deleteled from table transactions"); } else { //Masih Butuh Approval log.Info("Total Amount" + totalamount); string nextProcessor = UserGroupHelper.getNextAppTemp(session, 100, umap, trx.Approver, "Payroll", debitAcc, "IDR", totalamount); trx.NextProcessor = nextProcessor; trx.Status = short.Parse(ParameterHelper.TRXSTATUS_APPROVE.ToString()); session.Update(trx); log.Info("Masih Butuh Approver"); session.Flush(); #region Send Notification if (!nextProcessor.Trim().Replace("|", "").Equals("")) { String[] uid_np = nextProcessor.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); foreach (String idnp in uid_np) { UserMatrix umx = session.Load <UserMatrix>(int.Parse(idnp)); AuthorityHelper ahe = new AuthorityHelper(umx.Matrix); if (ahe.isNeedPendingEmail(100)) { User uid = session.Load <User>(int.Parse(idnp)); //state=0->inProcess verify; state=1->inProc Approve; state=2->Succed; state=3->reject EmailNotificationHelper.MassNotification(session, uid.Email, trx.ClientId, trx.Id, "Payroll", 1, payroll.FileDescription, counttrx, totalamount.ToString(), payroll.CreatedTime, trx.Maker, payroll.ProcessTime, "Need Approve"); } } } #endregion } } else { //Masih Butuh Checker Console.Write("===User Handle : " + umap.UserHandle); string nextProcessor = UserGroupHelper.getNextCheTemp(session, 100, umap, trx.Checker, "Payroll", debitAcc, "IDR", totalamount); trx.NextProcessor = nextProcessor; trx.Status = short.Parse(ParameterHelper.TRXSTATUS_VERIFY.ToString()); session.Update(trx); session.Flush(); log.Info("Next Processor : " + nextProcessor); log.Info("Masih Butuh Checker"); #region Send Notification if (!nextProcessor.Trim().Replace("|", "").Equals("")) { String[] uid_np = nextProcessor.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); foreach (String idnp in uid_np) { UserMatrix umx = session.Load <UserMatrix>(int.Parse(idnp)); AuthorityHelper ahe = new AuthorityHelper(umx.Matrix); if (ahe.isNeedPendingEmail(100)) { User uid = session.Load <User>(int.Parse(idnp)); //state=0->inProcess verify; state=1->inProc Approve; state=2->Succed; state=3->reject EmailNotificationHelper.MassNotification(session, uid.Email, trx.ClientId, trx.Id, "Payroll", 0, payroll.FileDescription, counttrx, totalamount.ToString(), payroll.CreatedTime, trx.Maker, payroll.ProcessTime, "Need Verify"); } } } #endregion } } else//invalid authority setting { string invalidMsg = ""; if (StatusInvalidAuth.Equals(" and APPROVER")) { invalidMsg = "APPROVER"; } else { invalidMsg = StatusInvalidAuth; } String[] desc = payroll.Description.Split(new String[] { "||" }, StringSplitOptions.None); payroll.Status = ParameterHelper.TRXSTATUS_REJECT; payroll.StatusEmail = ParameterHelper.PAYROLL_NEEDEMAIL; if (invalidMsg.Contains("[LIMIT]")) { payroll.Description = ParameterHelper.TRXDESCRIPTION_REJECT + " - " + invalidMsg.Replace("[LIMIT]", "") + "||" + desc[1]; payroll.ErrorDescription += HeaderErrorMsg + "Invalid Authority Settting on " + invalidMsg; } else if (invalidMsg.Contains("[EXCEPTION]")) { payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; payroll.ErrorDescription = HeaderErrorMsg + invalidMsg.Replace("[EXCEPTION]", ""); } else { payroll.Description = ParameterHelper.TRXDESCRIPTION_REJECT + " - Invalid Authority Setting on " + invalidMsg + "||" + desc[1]; payroll.ErrorDescription += HeaderErrorMsg + "Invalid Authority Settting on " + invalidMsg; } session.Update(payroll); //reject child string outRejectChild = ""; if (rejectAllChild(session, payroll, out outRejectChild, log)) { log.Info("Success Update All Child."); payroll.ErrorDescription += HeaderErrorMsg + " Success reject child"; //delete transactions session.Delete(trx); } else { payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; payroll.ErrorDescription = HeaderErrorMsg + outRejectChild; } } session.Update(payroll); session.Flush(); result = true; } catch (Exception ex) { log.Error("Exception on Scheduller Workflow Check Payroll :: " + ex.Message + " => " + ex.StackTrace + " => " + ex.InnerException); //EvtLogger.Write("Exception on Scheduller FT Workflow Check :: " + ex.Message + " => " + ex.StackTrace, System.Diagnostics.EventLogEntryType.Error); payroll.ErrorDescription += HeaderErrorMsg + "|Exception on Scheduller Workflow Check Payroll :: " + ex.Message + " => " + ex.StackTrace + " => " + ex.InnerException; payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; session.Update(payroll); session.Flush(); result = false; } return(result); }
private bool saveTransaction(ISession session, String filename, TrxPayroll trx, int cid, ILog log, out int IDTrxs, UserMap umap) { IDTrxs = 0; Boolean isTrue = true; try { String[] tmpfileInfo = filename.Split('!'); Transaction tx = new Transaction(); tx.Handle = "ADD PAYROLLBRI"; tx.TransactionId = 101; //tx.CreatedTime = DateTime.ParseExact(tmpfileInfo[0], "ddMMyyhhmmss", System.Globalization.CultureInfo.InvariantCulture);// Dari Split tx.CreatedTime = DateTime.Now; tx.VerifiedTime = DateTime.Now; tx.ApprovedTime = DateTime.Now; tx.TObject = trx.ToString(); tx.ClientId = cid; tx.Status = 1; tx.Action = "ADD"; tx.Maker = umap.UserHandle + " - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); Console.WriteLine("AA => " + umap.UserHandle + " - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")); Console.WriteLine("BB => " + tx.Maker); tx.Checker = ""; tx.Approver = ""; tx.Checker = ""; tx.Approver = ""; tx.CheckWork = 0; tx.CheckTotal = 0; tx.ApproveWork = 0; tx.CheckTotal = 0; ClientWorkflow cm = session.CreateCriteria(typeof(ClientWorkflow)) .Add(Expression.Eq("Id", cid)) .UniqueResult <ClientWorkflow>(); WorkflowHelper wh = new WorkflowHelper(cm.Workflow); if (!(null == wh)) { Workflow flow = wh.GetWorkflow(100); if (!(null == flow)) { //tx.Maker = ""; tx.Approver = ""; tx.CheckTotal = flow.TotalVerifier; tx.ApproveTotal = flow.TotalApprover; } else { throw new Exception("Matrix PAYROLL is Null for this Client"); } } IDTrxs = (int)session.Save(tx); session.Flush(); isTrue = true; } catch (Exception ex) { isTrue = false; log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception Message =" + " " + ex.Message); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception InnerMessage =" + " " + ex.InnerException); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception StackTrace =" + " " + ex.StackTrace); } return(isTrue); }
private Boolean saveTransactionPayroll(ISession session, ILog log, String pathFileSource, int cid, out String IdTrxPayroll, out int IDTrx) { Boolean isTrue = true; String fileName = ""; IdTrxPayroll = ""; IDTrx = 0; try { log.Info("== " + SchedulllerCode + " = START Save Transactions PAYROLL =="); if (!fileIsInserted(session, log, pathFileSource, cid)) { try { fileName = Path.GetFileName(pathFileSource); String[] fileNameArray = fileName.Split('!'); if (fileNameArray.Length == 4) { UserMap umap = getUsermapsValues(session, log, cid); String created = umap.ClientHandle.ToLower() + "/" + umap.UserHandle.ToLower(); String pathNoName = Path.GetDirectoryName(pathFileSource); TrxPayroll trx = new TrxPayroll(); String createdTime = fileNameArray[0].Substring(0, 8); //trx.CreatedTime = DateTime.ParseExact(createdTime, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); trx.CreatedTime = DateTime.Now; trx.SeqNumber = 0; trx.Maker = umap.UserHandle + " - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); trx.DebitAccount = fileNameArray[3].Substring(0, 15).ToString(); trx.LastUpdate = DateTime.Now; trx.CreatedBy = created; trx.Approver = ""; //trx.FileName = path + fname; trx.FileName = pathNoName + "\\" + "COMPLETE!DONE!" + fileName; trx.FileDescription = fileNameArray[1] + "_" + DateTime.Now.ToString("ffff");//Baca dr Split trx.Status = ParameterHelper.PAYROLL_WAITINGSEQNUM; trx.StatusEmail = 0; int idClientAccount = getIDClientAccount(session, log, fileNameArray[3], cid); if (idClientAccount > 0) { trx.Description = ParameterHelper.TRXDESCRIPTION_WAITING + "||" + idClientAccount.ToString() + "||";//Baca dr split } else { throw new Exception("This Debet Account:: [" + fileNameArray[3] + "] is not registered"); } DateTime tempDate = DateTime.ParseExact(fileNameArray[2], "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);// Baca dr Split DateTime dt = new DateTime(); if (tempDate.Date > DateTime.Now.Date) { dt = new DateTime(tempDate.Date.Year, tempDate.Date.Month, tempDate.Date.Day, 06, 00, 00); } else if (tempDate.Date < DateTime.Now.Date) { throw new Exception("Invalid Process Time, Date less than " + DateTime.Now.ToString("ddMMyyyy") + " with File Name:: " + fileName); } if (tempDate.Date == DateTime.Now.Date) { //dt = new DateTime(tempDate.Date.Year, tempDate.Date.Month, tempDate.Date.Day, DateTime.Now.TimeOfDay.Hours, DateTime.Now.TimeOfDay.Minutes, DateTime.Now.TimeOfDay.Seconds); dt = new DateTime(0001, 01, 01, 00, 00, 00); } trx.ProcessTime = dt; trx.FilePath = pathFileSource; trx.ClientID = cid; trx.PassKey = ""; IdTrxPayroll = (String)session.Save(trx); session.Flush(); int IDTrxs = 0; if (saveTransaction(session, fileName, trx, cid, log, out IDTrxs, umap)) { isTrue = true; IDTrx = IDTrxs; } else { session.Delete(trx); session.Flush(); isTrue = false; } } else { throw new Exception("Thie File :: " + fileName + " can't be proceed, please check file format"); } } catch (Exception ex) { isTrue = false; log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception Message =" + " " + ex.Message); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception InnerMessage =" + " " + ex.InnerException); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception StackTrace =" + " " + ex.StackTrace); } } else { isTrue = false; throw new Exception("File :: " + fileName + " is [[EXIST]]"); } } catch (Exception ex) { isTrue = false; log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception Message =" + " " + ex.Message); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception InnerMessage =" + " " + ex.InnerException); log.Error("== " + SchedulllerCode + " = Scheduller GetFilePayrollKai Failed to Start => Exception StackTrace =" + " " + ex.StackTrace); } return(isTrue); }
private Boolean job_GenerateMT100KAI(ISession session, String payrollID, String pathFile, ILog log, out String fName) { fName = ""; Boolean generated = true; string[] tempLine = new string[24]; try { TrxPayroll trxList = session.CreateCriteria(typeof(TrxPayroll)) .Add(Expression.Eq("Id", payrollID)) .UniqueResult <TrxPayroll>(); IList <TrxPayrollDetail> trxResult = trxList.TrxPayrollDetail; String FName = Path.GetFileName(trxList.FileName); String[] splitFile = FName.Split('!'); String fileName = splitFile[2]; fName = fileName + ".txt"; if (splitFile.Length == 6) { if (trxResult.Count > 0) { using (StreamWriter sw = new StreamWriter(pathFile + "\\Output\\" + fileName + ".txt")) { int count = 0; foreach (var item in trxResult) { count++; String tempStatus = ""; tempStatus = item.Status != 5 ? "GAGAL" : "SUKSES"; #region (asignValue) tempLine = new string[23]; tempLine[0] = "MT100"; tempLine[1] = count.ToString(); tempLine[2] = splitFile[2].Substring(0, 8); tempLine[3] = "IDR"; tempLine[4] = item.Amount.ToString(); tempLine[5] = splitFile[2].Substring(14, 5); tempLine[6] = splitFile[5].Substring(0, 15); tempLine[7] = ""; tempLine[8] = ""; tempLine[9] = ""; tempLine[10] = ""; tempLine[11] = ""; tempLine[12] = ""; tempLine[13] = "BRI"; tempLine[14] = ""; tempLine[15] = ""; tempLine[16] = ""; tempLine[17] = item.Account; tempLine[18] = item.Name; tempLine[19] = trxList.FileDescription; tempLine[20] = ""; tempLine[21] = "OUR"; tempLine[22] = ""; tempLine[22] = tempStatus; #endregion String line = String.Join("|", tempLine); sw.Write(line); sw.Write("\r\n"); } } if (generated) { trxList.StatusEmail = 4; session.Update(trxList); session.Flush(); } } else { generated = false; log.Error("== " + SchedulllerCode + " = Scheduller GanerateMT100 Failed to Start => " + " " + " Because Detailed File Is Null"); } } else { generated = false; log.Error("== " + SchedulllerCode + " = Scheduller GanerateMT100 Failed to Start => " + " " + " Because Incorect File Format"); } } catch (Exception ex) { generated = false; log.Error("== " + SchedulllerCode + " = Scheduller GanerateMT100 Failed to Start => Exception Message =" + " " + ex.Message); log.Error("== " + SchedulllerCode + " = Scheduller GanerateMT100 Failed to Start => Exception InnerMessage =" + " " + ex.InnerException); log.Error("== " + SchedulllerCode + " = Scheduller GanerateMT100 Failed to Start => Exception StackTrace =" + " " + ex.StackTrace); } return(generated); }
//method decript private string DecryptFile(ISession session, TrxPayroll payroll, FileInfo encryptedFile, String key, ILog log) { // decrypts the file using GnuPG, saves it to the file system // and returns the new (decrypted) file name. // encrypted file: thefile.xml.gpg decrypted: thefile.xml //log.Info("Decrypt File:"); string outputFileName = encryptedFile.Name.Substring(0, encryptedFile.Name.Length - 4) + ".csv"; // whatever you want here - just a convention string path = encryptedFile.DirectoryName; string outputFileNameFullPath = path + "\\" + outputFileName; try { System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.WorkingDirectory = "C:\\Program Files (x86)\\GNU\\GnuPG"; //string sCommandLine = "gpg.exe --allow-secret-key-import --import cmsPubKey.asc"; string sCommandLine = "\"C:/Program Files (x86)/GNU/GnuPG/gpg.exe\" --passphrase \"" + key + "\" -o \"" + outputFileNameFullPath + "\" --decrypt \"" + encryptedFile.FullName + "\""; //psi.FileName = CreateBat(session,"ita",sCommandLine); System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi); // actually NEED to set this as a local string variable // and pass it - bombs otherwise! log.Info("cmd :: " + sCommandLine); process.StandardInput.WriteLine(sCommandLine); process.StandardInput.Flush(); process.StandardInput.Close(); process.WaitForExit(); using (StreamReader reader = process.StandardError) { string result = reader.ReadToEnd(); log.Info("Result decrypt :: " + result); } process.Close(); } catch (Exception exce) { log.Error(":: Opening file error : " + exce.Message + "||" + exce.InnerException + "||" + exce.StackTrace); payroll.Status = ParameterHelper.PAYROLL_EXCEPTION; payroll.LastUpdate = DateTime.Now; payroll.ErrorDescription += ":: Opening file error : " + exce.Message + "||" + exce.InnerException + "||" + exce.StackTrace; session.Update(payroll); session.Flush(); outputFileName = ""; } return(outputFileName); }
private void Commitjob_transaction(ILog log) { IList <TrxPayrollDetail> txList = session.CreateSQLQuery("select * from trxpayrolldetails where status = ? and instructioncode in ('" + TotalOBHelper.RTGS + "','" + TotalOBHelper.LLG + "') and lastupdate < now()") .AddEntity(typeof(TrxPayrollDetail)) .SetInt32(0, ParameterHelper.TRXSTATUS_PAYROLLNEW_POST_MBASEANDWS_RTGSANDLLG) .List <TrxPayrollDetail>(); if (txList.Count > 0) { foreach (TrxPayrollDetail o in txList) { try { #region PARAMETERS int outid = 0; string outmsg = ""; Double _amt = 0; TrxPayroll p = o.Parent; ClientAccount clientAcc = new ClientAccount(); Booking b = session.Load <Booking>(o.IdBooking); ClientMatrix cm = session.Load <ClientMatrix>(p.ClientID); Client client = session.Load <Client>(p.ClientID); AuthorityHelper ah = new AuthorityHelper(cm.Matrix); if (o.InstructionCode.Equals(TotalOBHelper.RTGS)) { _amt = Double.Parse(ah.GetTransactionFee(session, 100, 2).ToString()); } else if (o.InstructionCode.Equals(TotalOBHelper.LLG)) { _amt = Double.Parse(ah.GetTransactionFee(session, 100, 3).ToString()); } int fid = 100; string fitur = TotalOBHelper.Payroll; string debitAcc = ""; string debitAccName = ""; string creditAcc = o.Account; string creditAccName = o.Name; string benAddress = o.BenAddress; string remark = o.TrxRemark.Trim(); string bucketAmt = b.Bucket; string chargeType = "OUR"; if (b.FeeBen > 0) { chargeType = "BEN"; } string debitAccAddress = client.Address1; try { IList <ClientAccount> clAccs = session.CreateCriteria(typeof(ClientAccount)) .Add(Expression.Eq("Number", p.DebitAccount)) .Add(Expression.Eq("Pid", p.ClientID)) .Add(Expression.Eq("StatusDel", 0)) .SetMaxResults(1) .List <ClientAccount>(); clientAcc = clAccs[0]; debitAcc = p.DebitAccount; debitAccName = clientAcc.Name; } catch { } #endregion #region PROCESS INSERT /*Modified by Mettaw : 1 Oct 2019 * * Terjadi perubahan Flow MBASE pada Payroll LLG (Kliring) namun tidak pada Payroll RTGS * Code Sedikit dirombak , bila RTGS pakai flow Lama, yaitu Insert ke tbl MBASEandWS * dan dimakan sama Sch MBASEAndWS * * Sedangkan LLG di insert ke tbl baru ExpressProcess. * dan dimakan sama ExpressProcessSch * */ if (o.InstructionCode.Equals(TotalOBHelper.RTGS)) { #region Insert to MBASEandWS log.Info(SchCode + " === (TrxID " + o.Id + ") === Begin Posting to MBASEANDWS"); if (MBASEAndWSHelper.insertMbaseandws(session, int.Parse(o.Id.ToString()), fid, fitur, p.ClientID, o.InstructionCode, debitAcc, debitAccName, creditAcc, creditAccName, benAddress, remark, bucketAmt, o.IdBooking, o.RemittanceNumber, o.BankCode.Trim(), b.JournalSeq.Trim(), chargeType, _amt, debitAccAddress, out outid, out outmsg)) { o.Status = ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_MBASEANDWS_RTGSANDLLG; o.IdMBASEAndWS = outid; o.Description = "proses mbaseandws".ToUpper(); log.Info(SchCode + " === (TrxID " + o.Id + ") === Posting to MBASEANDWS SUCCESS"); } else { if (outid > 0) { o.Status = ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_MBASEANDWS_RTGSANDLLG; o.IdMBASEAndWS = outid; o.Description = "proses mbaseandws".ToUpper(); log.Info(SchCode + " === (TrxID " + o.Id + ") === Already Exist, Posting to MBASEANDWS SUCCESS"); } else { //gagal insert Mbaseandws o.LastUpdate = DateTime.Now.AddMinutes(2); log.Error(SchCode + " === (TrxID " + o.Id + ") === Posting to MBASEANDWS FAILED: " + outmsg); } } session.Update(o); session.Flush(); log.Info(SchCode + " === (TrxID " + o.Id + ") === End Posting to MBASEANDWS"); #endregion } else if (o.InstructionCode.Equals(TotalOBHelper.LLG)) { #region Insert to ExpressProcess log.Info(SchCode + " === (TrxID " + o.Id + ") === Begin Posting to ExpressProcess"); #region PARAMETERS FOR ExpressProcess ExpressProcess exprocess = new ExpressProcess(); String _fitur = "PAYROLL LLG"; BankKliring bank = session.CreateCriteria(typeof(BankKliring)) .Add(Expression.Eq("BankCode", o.Account)) .UniqueResult <BankKliring>(); double _instamount = o.Amount; string _instcur = SchHelper._Currency(o.RemittanceNumber); string _benbankname = bank.Nama; #endregion #region ADD ExpressProcess /*New added by Mettaw : * tampung data disini... untuk parameter WS Express * dan insert ke tbl expressprocess * 9 september 2019*/ /*DATA MANDATORY*/ exprocess.Tanggal_Transaksi = DateTime.Now; exprocess.Sarana_Transaksi = "2"; exprocess.Kode_Transaksi = "50"; exprocess.Peserta_Pengirim_Asal = "BRINIDJA"; exprocess.Sandi_Kota_Asal = "0391"; exprocess.Peserta_Pengirim_Penerus = "BRINIDJA"; exprocess.Peserta_Penerima_Akhir = bank.BankCode; exprocess.Sandi_Kota_Tujuan = bank.SandiKota; exprocess.Peserta_Penerima_Penerus = bank.BankCode; exprocess.Jenis_Nasabah = "1"; exprocess.No_Rekening_Pengirim = debitAcc; exprocess.Nama_Pengirim = debitAccName; exprocess.No_Identitas_Pengirim = "NIKPENGRMCMS"; exprocess.Jenis_Nasabah_Pengirim = "1"; exprocess.Status_Kependudukan_Pengirim = "1"; exprocess.Alamat_Pengirim = client.Address1; exprocess.No_Rekening_Tujuan = creditAcc; exprocess.Nama_Penerima = creditAccName; exprocess.Jenis_Nasabah_Penerima = "1"; exprocess.Status_Kependudukan_Penerima = "1"; exprocess.Alamat_Penerima = benAddress; exprocess.Cara_Penyetoran = "DEBET_REK"; exprocess.No_Rekening_Asal = debitAcc; exprocess.Nama = debitAccName; exprocess.Jumlah_Dikirim = _instamount.ToString("0.00"); exprocess.Currency_Dikirim = _instcur; exprocess.Biaya = _amt.ToString("0.00"); exprocess.Total = (double.Parse(_instamount.ToString()) + _amt).ToString("0.00"); exprocess.Currency_Total = _instcur; exprocess.Kanca_Asal = "CMS"; exprocess.User_Approve = "0374891"; exprocess.Cabang = "0374"; exprocess.No_Remitance = o.RemittanceNumber; exprocess.Jurnal_Seq = o.IdBooking.ToString(); exprocess.Nama_Bank_Penerima = _benbankname; exprocess.Provinsi_Penerima = bank.SandiPropinsi; exprocess.Jenis_Badan_Usaha = bank.JenisUsaha.Trim(); exprocess.Kode_Bank_Brinets_Penerima = bank.Code; exprocess.Channel = "CMS"; exprocess.Booking_Id = o.IdBooking.ToString(); /*DATA TIDAK MANDATORY*/ exprocess.Telepon_Pengirim = "TELPPNGRMCMS"; exprocess.No_Identitas_Penerima = "NIKPENRMMCMS"; exprocess.Telepon_Penerima = "TELPPNRMCMS"; exprocess.NoCekBG = ""; exprocess.Berita = o.TrxRemark; exprocess.Sumber_Dana = ""; exprocess.Keperluan = ""; exprocess.Pekerjaan = ""; exprocess.Jabatan = ""; exprocess.Ttl = ""; exprocess.User_Id = ""; exprocess.Cif = ""; exprocess.Kode_Pos_Pengirim = ""; exprocess.Kode_Pos_Penerima = ""; exprocess.Remark = remark; #endregion #region PROCESS log.Info(SchCode + " === (TrxID " + o.Id + ") === DO INSERT TO ExpressProcess"); if (MBASEHelper.InsertMBASEExpress(session, o.Id, _fitur, exprocess, out outmsg, out outid)) { #region COMPLETE /*Express Process*/ exprocess.Status = ParameterHelper.SCH_MBASE_WAITING; /*1: Waiting*/ exprocess.Description = ParameterHelper.MBASEDESC_WAITINGMBASE; exprocess.LastUpdate = DateTime.Now; session.Update(exprocess); /*Trx Payroll*/ o.Status = ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_MBASEANDWS_RTGSANDLLG; o.Description = "proses express".ToUpper(); log.Info(SchCode + " === (TrxID " + o.Id + ") === Posting to ExpressProcess SUCCESS"); #endregion } else { if (outid > 0) { #region COMPLETE /*bila gagal validasi insert, tapi id sudah terbuat, update aja coy */ /*Express Process*/ ExpressProcess ex = session.Load <ExpressProcess>(outid); ex.Status = ParameterHelper.SCH_MBASE_WAITING; /*1: Waiting MBASE*/ ex.Description = ParameterHelper.MBASEDESC_WAITINGMBASE; ex.LastUpdate = DateTime.Now; session.Update(ex); /*Trx Payroll*/ o.Status = ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_MBASEANDWS_RTGSANDLLG; o.Description = "proses express".ToUpper(); log.Info(SchCode + " === (TrxID " + o.Id + ") === Already Exist, Posting to ExpressProcess SUCCESS"); #endregion } else { #region REVERSAL PROCESS /*Gagal Insert to ExpressProcess, do Reversal.*/ /*Booking*/ Booking book = session.Load <Booking>(o.IdBooking); book.StatusEC = ParameterHelper.SCH_ECWAITING; /*Trx Payroll*/ o.Status = ParameterHelper.TRXSTATUS_REJECT; o.Description = "REJECTED"; o.LastUpdate = DateTime.Now; session.Update(book); session.Flush(); log.Info(SchCode + " === (TrxID " + o.Id + " ) Insert to ExpressProcess FAILED: " + outmsg + ". DO Reject & REVERSAL"); #endregion } } session.Update(o); session.Flush(); log.Info(SchCode + " === (TrxID " + o.Id + ") === End Posting to ExpressProcess"); #endregion #endregion } else { log.Error(SchCode + " === " + SchName + " IntructionCode tidak terdefenisi "); } #endregion } catch (Exception ex) { log.Error(SchCode + " === (TrxID " + o.Id + ") === Exception: " + ex.Message + " >>> " + ex.InnerException + " >>> " + ex.StackTrace); } } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }