private void Commitjob_transaction(ILog log) { IList <TrxPayroll> txList = session.CreateCriteria(typeof(TrxPayroll)) .Add(Expression.In("Status", new int[] { ParameterHelper.TRXSTATUS_PAYROLLNEW_READY_BOOK, ParameterHelper.TRXSTATUS_PAYROLLNEW_POST_BOOK_IAKREDIT, ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_BOOK_IAKREDIT, ParameterHelper.TRXSTATUS_PAYROLLNEW_POST_BOOK_REK_NASABAH, ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_BOOK_REK_NASABAH })) .Add(Expression.Lt("LastUpdate", DateTime.Now)) .List <TrxPayroll>(); if (txList.Count > 0) { foreach (TrxPayroll ts in txList) { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Start Checking"); PayrollHelper.ProcessPayrollConsolidation(session, ts, log, SchCode); Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Finish Checking"); } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }
private void Commitjob_transaction(ILog log) { Parameter maxJob = session.Load <Parameter>("PAYROLL_RTGSLLG_SCH_JOB"); IList <TrxPayrollDetail> txList = session.CreateSQLQuery("select * from trxpayrolldetails where STATUS = ? and INSTRUCTIONCODE in (?, ?) and LASTUPDATE < ? and (ID%?)=?") .AddEntity(typeof(TrxPayrollDetail)) .SetInt32(0, ParameterHelper.TRXSTATUS_PAYROLL_WAITINGRESPONSE_PROCESS) .SetString(1, TotalOBHelper.RTGS) .SetString(2, TotalOBHelper.LLG) .SetDateTime(3, DateTime.Now) .SetInt32(4, int.Parse(maxJob.Data)) .SetInt32(5, jobNumber) .List <TrxPayrollDetail>(); if (txList.Count > 0) { foreach (TrxPayrollDetail ts in txList) { PayrollHelper.ProcessRTGSLLGPostToBooking(session, ts, log, jobNumber, SchCode); } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }
private void Commitjob_transaction(ILog log) { IList <TrxPayroll> trxList = session.CreateSQLQuery("select * from trxpayrolls where status=? and lastupdate<=? and statusbris = ? order by id ASC") .AddEntity(typeof(TrxPayroll)) .SetInt32(0, ParameterHelper.TRXSTATUS_PAYROLLNEW_READY_BOOK) //22 .SetDateTime(1, DateTime.Now) //kurang dari last update .SetInt32(2, ParameterHelper.TRXSTATUS_PAYROLLNEW_WAITING_CREATEFILE_BRIS) //2 .SetMaxResults(maxResult) .List <TrxPayroll>(); if (trxList.Count > 0) { foreach (TrxPayroll ts in trxList) { if (PayrollHelper.GenerateFileBRISPayment(session, ts, log, jobNumber, SchCode)) { log.Info(SchCode + "SeqNum = " + ts.SeqNumber + " - Generate FIle BriS : Success"); } else { //Gagal generate - reject BRIS ts.StatusBRIS = ParameterHelper.TRXSTATUS_PAYROLLNEW_FTP_BRIS_ERROR;//4 gagal genrate file ts.LogFtpBris = DateTime.Now.ToString() + "- Gen File GAGAL|"; ts.LastUpdate = DateTime.Now; session.Update(ts); session.Flush(); log.Info(SchCode + "SeqNum = " + ts.SeqNumber + " - Generate FIle BriS : Gagal. Akan di retry 10x"); } } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }
public static bool InsertBooking(ISession session, string trxid, int fid, string fitur, int clientid, string debitaccount, string debitaccountname, double debitamount, string debitcurrency, string creditaccount, string creditaccountname, double creditamount, string creditcurrency, double instAmount, string instCurrency, string dealrate, string trxremark, DateTime trxdate, int booktype, string bookingoffice, out int idbooking, out string OutMsg) { bool result = true; idbooking = 0; OutMsg = ""; //20161122 - Add SayedZul Handler duplicate data try { string theQuery = "select id from booking where trxid = '" + trxid + "' and fid = " + fid + " and booktype = " + booktype + " and status <> 4 and not (status = 3 and statusec = 3) limit 1;"; string theId = ""; string msg = ""; if (!PayrollHelper.ExecuteQueryValue(session, theQuery, out theId, out msg)) { result = false; OutMsg = "Exception on checking duplicate trx - Message: " + msg; Console.WriteLine("Exception Id: " + trxid + " === " + OutMsg); return(result); } else { if (!String.IsNullOrEmpty(theId)) { result = false; idbooking = int.Parse(theId); OutMsg = "Transaction already exist: " + idbooking; return(result); } } } catch (Exception ee) { result = false; OutMsg = "Exception on checking duplicate trx - Message: " + ee.Message + " - InnerEx: " + ee.InnerException + " - StackTr: " + ee.StackTrace; Console.WriteLine("Exception Id: " + trxid + " === " + OutMsg); return(result); } try { Booking bookrcd = new Booking(); bookrcd.TrxId = trxid.ToString(); bookrcd.FID = fid; bookrcd.Fitur = fitur; #region set jenis transaksi string JenisTransaksi = ""; fitur = fitur.ToUpper(); if (fitur.Contains("IFT")) { JenisTransaksi = TotalOBHelper.Overbooking; } else if (fitur.Contains("LLG") || fitur.Contains("KLIRING")) { JenisTransaksi = TotalOBHelper.LLG; } else if (fitur.Contains("RTG")) { JenisTransaksi = TotalOBHelper.RTGS; } else if (fitur.Contains("SWIFT") || fitur.Contains("MOR")) { JenisTransaksi = TotalOBHelper.SWIFT; } else if (fid == 100) { JenisTransaksi = TotalOBHelper.Overbooking; } else { JenisTransaksi = "OTHER"; } bookrcd.JenisTransaksi = JenisTransaksi; #endregion bookrcd.ClientId = clientid; bookrcd.DebitAccount = debitaccount; bookrcd.DebitAccountName = debitaccountname; bookrcd.DebitAmount = debitamount; bookrcd.DebitCurrency = debitcurrency; bookrcd.CreditAccount = creditaccount; bookrcd.CreditAccountName = creditaccountname; bookrcd.CreditAmount = creditamount; bookrcd.CreditCurrency = creditcurrency; bookrcd.InstAmount = instAmount; bookrcd.InstCurrency = instCurrency; //bookrcd.TrxRate = trxrate; bookrcd.DealRate = dealrate; bookrcd.TrxDate = trxdate; bookrcd.BookType = booktype; bookrcd.TrxRemark = trxremark; if (booktype == ParameterHelper.BOOKTYPE_FEE) { bookrcd.TrxRemark = "Fee " + bookrcd.Fitur + " BRI CMS " + bookrcd.TrxId; } bookrcd.BookingOffice = bookingoffice; bookrcd.Status = ParameterHelper.SCH_WAITINGBOOK; bookrcd.Description = ParameterHelper.BOOKINGDESC_WAITINGBOOKING; bookrcd.CreationDate = DateTime.Now; bookrcd.LastUpdate = DateTime.Now; session.Save(bookrcd); idbooking = bookrcd.Id; session.Flush(); result = true; } catch (Exception e) { OutMsg = "Exception " + e.Message + "||" + e.InnerException + "||" + e.StackTrace; result = false; } return(result); }
public static bool InsertBookingNew(ISession session, string trxid, int fid, string fitur, int clientid, string debitaccount, string debitaccountname, string debitcurr, string creditaccount, string creditaccountname, string creditcurr, double instAmount, string instCurrency, string dealrate, string trxremark, string trxremark2, DateTime trxdate, int booktype, string bookingoffice, double feeBen, out int idbooking, out string OutMsg) { bool result = true; idbooking = 0; OutMsg = ""; //20161122 - Add SayedZul Handler duplicate data try { string theQuery = "select id from booking where trxid = '" + trxid + "' and fid = " + fid + " and booktype = " + booktype + " and status <> 4 and not (status = 3 and statusec = 3) limit 1;"; string theId = ""; string msg = ""; if (!PayrollHelper.ExecuteQueryValue(session, theQuery, out theId, out msg)) { result = false; OutMsg = "Exception on checking duplicate trx - Message: " + msg; Console.WriteLine("Exception Id: " + trxid + " === " + OutMsg); return(result); } else { if (!String.IsNullOrEmpty(theId)) { result = false; idbooking = int.Parse(theId); OutMsg = "Transaction already exist: " + idbooking; return(result); } } } catch (Exception ee) { result = false; OutMsg = "Exception on checking duplicate trx - Message: " + ee.Message + " - InnerEx: " + ee.InnerException + " - StackTr: " + ee.StackTrace; Console.WriteLine("Exception Id: " + trxid + " === " + OutMsg); return(result); } try { Booking bookrcd = new Booking(); bookrcd.TrxId = trxid.ToString(); bookrcd.FID = fid; bookrcd.Fitur = fitur; #region set jenis transaksi string JenisTransaksi = ""; fitur = fitur.ToUpper(); if (fitur.Equals("IFT")) { JenisTransaksi = TotalOBHelper.Overbooking; } else if (fitur.Contains("LLG") || fitur.Contains("KLIRING")) { JenisTransaksi = TotalOBHelper.LLG; } else if (fitur.Contains("RTG")) { JenisTransaksi = TotalOBHelper.RTGS; } else if (fitur.Contains("SWIFT") || fitur.Contains("MOR")) { JenisTransaksi = TotalOBHelper.SWIFT; } else if (fitur.Contains("PAYROLL")) { string temp = trxremark; string[] jenisTrx = temp.Trim().Split(' '); if (jenisTrx.Length > 2) { if (jenisTrx[2].Equals("LLG")) { JenisTransaksi = TotalOBHelper.LLG; } else { JenisTransaksi = TotalOBHelper.RTGS; } } } else { JenisTransaksi = "OTHER"; } if (fid == 80 || fid == 85) { JenisTransaksi = TotalOBHelper.Overbooking; } bookrcd.JenisTransaksi = JenisTransaksi; #endregion bookrcd.ClientId = clientid; bookrcd.DebitAccount = debitaccount; bookrcd.DebitAccountName = debitaccountname; bookrcd.CreditAccount = creditaccount; bookrcd.CreditAccountName = creditaccountname; bookrcd.InstAmount = instAmount; bookrcd.InstCurrency = instCurrency; bookrcd.DealRate = dealrate; bookrcd.TrxRemark = trxremark; bookrcd.TrxRemark2 = trxremark2; bookrcd.TrxDate = trxdate; bookrcd.BookType = booktype; bookrcd.BookingOffice = bookingoffice; bookrcd.Status = ParameterHelper.SCH_WAITINGBOOK; bookrcd.Description = ParameterHelper.BOOKINGDESC_WAITINGBOOKING; bookrcd.CreationDate = DateTime.Now; bookrcd.LastUpdate = DateTime.Now; bookrcd.FeeBen = Convert.ToInt32(feeBen); /* Denny IL - 27 Feb 17 * Add to get Currency from Account Number */ //bookrcd.CreditCurrency = GetCurrency(creditaccount);//skenariuo gagal insert bookrcd.CreditCurrency = creditcurr; bookrcd.DebitCurrency = SchHelper._Currency(debitaccount); session.Save(bookrcd); idbooking = bookrcd.Id; session.Flush(); result = true; } catch (Exception e) { OutMsg = "Exception " + e.Message + "||" + e.InnerException + "||" + e.StackTrace; result = false; } return(result); }
private void Commitjob_transaction(ILog log) { //initial parameters Parameter maxJob = session.Load <Parameter>("PAYROLL_SCH_JOB_READ_MASS_INQ"); Parameter maxTrx = session.Load <Parameter>("PAYROLL_SCH_GENERATE_MASS_INQ_MAX_TRX"); int maxResult = int.Parse(maxTrx.Data); IList <TrxPayroll> trxList = session.CreateSQLQuery("select * from trxpayrolls where status=? and (seqnumber%?)=? and lastupdate<=? order by id ASC") .AddEntity(typeof(TrxPayroll)) .SetInt32(0, ParameterHelper.PAYROLL_WAITING_CHECKACC) //11 : waiting mass inq output .SetInt32(1, int.Parse(maxJob.Data)) //id mod(10) .SetInt32(2, jobNumber) //id mod = ini mod 0, ambil trxID kelipatan 10 .SetDateTime(3, DateTime.Now) //.SetMaxResults(maxResult) .List <TrxPayroll>(); //we've found some data foreach (TrxPayroll trx in trxList) { string outStatus = ""; Boolean isReject = false; //Pengecekkan retry, jika dr created time sudah 1 jam maka Lastupdate di tambah setMenitBye menit int setMenitBye = int.Parse(ParameterHelper.GetString("PAYROLL_SET_MINUTES_TROUBLE_MASSACC", session)); //60 int paramRetryPosition = int.Parse(ParameterHelper.GetString("PAYROLL_PARAMETER__MAX_RETRY_MASSACC", session)); //10 if (trx.RetryPosition > paramRetryPosition) { trx.ErrorDescription += "|Transaksi terdeteksi sudah retry sebanyak > " + paramRetryPosition.ToString() + " kali, REJECT Transactions"; isReject = MassInquiryHelper.rejectPayroll(trx, session, log, trx.RetryPosition); if (isReject) { log.Error(SchCode + " === (TrxID " + trx.Id + ") Transaksi terdeteksi sudah retry sebanyak > " + paramRetryPosition.ToString() + " kali, REJECT Transactions"); } else { log.Error(SchCode + " === (TrxID " + trx.Id + ") Transaksi terdeteksi sudah retry sebanyak > " + paramRetryPosition.ToString() + " kali, GAGAL REJECT Transactions"); trx.LastUpdate = DateTime.Now; trx.Status = ParameterHelper.TRXSTATUS_REJECT;//4 trx.Description = "ERROR - Problem in Host BRI, please contact Administrator"; trx.ErrorDescription += "|Reject Trx : Failed to Delete Transactions or Delete detail Payroll, Set Reject Payroll only"; session.Update(trx); session.Flush(); } } else { if (MassInquiryHelper.downloadHostResponse(trx, session, out outStatus, log, jobNumber)) { /* * SUKSES file valid maka normal * ERROR file jawaban host mengirim message error generate file lagi akan generate 10 menit * RETRY file blm complete, blm ada footer add 2 minutes * UNKNOWN unknown isi file Host belum dikenal, generate lagi add 10 menit * INVALID cek footer gagal, retry reading 2 minutes */ #region download true Parameter retryAja = session.Load <Parameter>("PAYROLL_ADD_MINUTES_RETRY_MASSACC"); Parameter retryError = session.Load <Parameter>("PAYROLL_ADD_MINUTES_RETRY_MASSACC2"); int retryAjaInt = int.Parse(retryAja.Data); int retryErrorInt = int.Parse(retryError.Data); if (outStatus.Equals("SUKSES"))//jika sukses download { #region sukses log.Info("Success download file."); trx.ErrorDescription += schInfo + "Success download file"; if (MassInquiryHelper.parsingFile(trx, session, log, jobNumber, SchCode, out outStatus)) { #region cek sudahkah anak2 keupdate semua? string temp_query = ""; string msg = ""; bool lanjut = true; int count = 0; string dbResult = ""; bool result = true; if (result) { temp_query = @"select count(1) from trxpayrolldetails where pid = '" + trx.Id + "' and status = " + ParameterHelper.PAYROLLDETAILS_WAITING_CHECK + " and instructioncode = '" + TotalOBHelper.IFT + "';"; if (!PayrollHelper.ExecuteQueryValue(session, temp_query, out dbResult, out msg)) { log.Error(SchCode + " === (TrxID " + trx.Id + ") Failed Query: " + temp_query + " " + msg); result = false; } else { try { if (int.TryParse(dbResult, out count)) { if (count > 0) { lanjut = false; log.Info(SchCode + " === (TrxID " + trx.Id + ") Processing update Detail Transactions not completed, retry parsing again in 1 minutes"); } } } catch (Exception ex) { lanjut = false; log.Error("=== (TrxID " + trx.Id + ") Msg : " + ex.Message + "Stack :" + ex.StackTrace + "Stack :" + ex.InnerException); } } } #endregion if (!lanjut && result) { log.Error(SchCode + " === (TrxID " + trx.Id + ") Ada " + count.ToString() + " anak yang beum keupdate, ulangi transaksi " + retryAja.Data.ToString() + " menit kemudian!"); trx.LastUpdate = DateTime.Now.AddMinutes(retryAjaInt); session.Update(trx); session.Flush(); return; } else if (result && lanjut) { trx.Status = ParameterHelper.PAYROLL_SUCCESS_PARSING; //46 trx.LastUpdate = DateTime.Now; log.Info(SchCode + " === (TrxID " + trx.Id + ") Finish Processing"); } log.Info("Success Parsing File."); } else { if (outStatus.Equals("[NULL]")) { //trx.Status = ParameterHelper.PAYROLL_WAITING_GENERATE_MASS_INQ;//10 trx.LastUpdate = DateTime.Now.AddMinutes(retryAjaInt); trx.ErrorDescription += "|file balikan host 0 KB / Not Completed-Pending 2 minutes : " + trx.LastUpdate + "|"; trx.RetryPosition += 1; } else { log.Error("Failed in Parsing File-try again to parsing at: " + trx.LastUpdate); trx.LastUpdate = DateTime.Now.AddMinutes(retryAjaInt); trx.ErrorDescription += schInfo + "Failed in Parsing File-Pending 2 minutes : " + trx.LastUpdate; trx.RetryPosition += 1; } } #endregion sukses } else if (outStatus.Equals("ERROR")) // File mendapat message error dr host dan generate lagi { trx.LastUpdate = DateTime.Now.AddMinutes(retryErrorInt); trx.Status = ParameterHelper.PAYROLL_WAITING_GENERATE_MASS_INQ;//10 trx.ErrorDescription += schInfo + " Message from Host error, generate again (" + retryErrorInt.ToString() + " minutes) at " + trx.LastUpdate; log.Error("ID : " + trx.SeqNumber + " Message from Host error, generate again (" + retryErrorInt.ToString() + " minutes) at " + trx.LastUpdate); trx.RetryPosition += 1; } else if (outStatus.Equals("RETRY")) // Not Completed { trx.LastUpdate = DateTime.Now.AddMinutes(retryAjaInt); trx.ErrorDescription += schInfo + "Mass Inq file is not Completed, try again (" + retryAjaInt.ToString() + " minutes) to read file at " + trx.LastUpdate; log.Error("ID : " + trx.SeqNumber + " Mass Inq file is not Completed, try again (" + retryAjaInt.ToString() + " minutes) to read file at " + trx.LastUpdate); trx.RetryPosition += 1; } else if (outStatus.Equals("UNKNOWN")) // UNKNOWN { trx.LastUpdate = DateTime.Now.AddMinutes(retryErrorInt); trx.Status = ParameterHelper.PAYROLL_WAITING_GENERATE_MASS_INQ;//10 trx.ErrorDescription += schInfo + "Message from host is unknown, generate again (" + retryErrorInt.ToString() + " minutes) at " + trx.LastUpdate; log.Error("ID : " + trx.SeqNumber + " Message from host is unknown, generate again (" + retryErrorInt.ToString() + " minutes) at " + trx.LastUpdate); trx.RetryPosition += 1; } else if (outStatus.Equals("INVALID")) // Cek footer gagal retry aja { trx.LastUpdate = DateTime.Now.AddMinutes(retryAjaInt); trx.ErrorDescription += schInfo + "Failed checking Footer, try again (" + retryAjaInt.ToString() + " minutes) to read file at " + trx.LastUpdate; log.Error("ID : " + trx.SeqNumber + " Failed checking Footer, try again (" + retryAjaInt.ToString() + " minutes) to read file at " + trx.LastUpdate); trx.RetryPosition += 1; } else { /* * JIka sejam retry sampai BOSOKS maksinal 1 jam maka akan reject transakski, eaea dan * Jika lebih dr 3 menit akan generate Mass Acc Inq, set 10 */ //if (!MassInquiryHelper.retryMassInq(trx, session, log)) //{ // log.Error("Something Wrong In Retry Mass Inq"); // trx.LastUpdate = DateTime.Now.AddMinutes(2); // trx.ErrorDescription += schInfo + "Something Wrong In Retry Mass Inq, try again at " + trx.LastUpdate; //} #endregion } } else { log.Error("Something Wrong In Download File :("); trx.LastUpdate = DateTime.Now.AddMinutes(2); trx.ErrorDescription += schInfo + "Something Wrong In Download File" + trx.LastUpdate; trx.RetryPosition += 1; } } session.Update(trx); session.Flush(); } }
private void Commitjob_transaction(ILog log) { Parameter maxJob = session.Load <Parameter>("PAYROLL_SCH_JOB_READFILEHOST"); //Parameter maxTrx = session.Load<Parameter>("PAYROLL_SCH_MAX_TRX"); int maxResult = 1;// int.Parse(maxTrx.Data); IList <TrxPayroll> trxList = session.CreateSQLQuery("select * from trxpayrolls where statusIFT=? and (seqnumber%?)=? and lastupdate < now() order by createdtime ASC") .AddEntity(typeof(TrxPayroll)) .SetInt32(0, ParameterHelper.TRXSTATUS_PAYROLLNEW_BOOK_IFT_AFTER_FILEEXIST) .SetInt32(1, int.Parse(maxJob.Data)) .SetInt32(2, jobNumber) .SetMaxResults(maxResult) .List <TrxPayroll>(); if (trxList.Count > 0) { String _date_folder = DateTime.Now.ToString("yyyyMMdd"); Parameter param = session.Load <Parameter>("FOLDER_PAYROLL_LOGS"); string port = param.Data; String _payroll_Log_dir = port + "\\" + _date_folder; CekRunningFolder(_payroll_Log_dir); param = session.Load <Parameter>("FOLDER_PAYROLL_INPUT_HOST"); port = param.Data; String _payroll_input_dir = port + "\\" + _date_folder; param = session.Load <Parameter>("FOLDER_PAYROLL_OUTPUT_HOST"); port = param.Data; String _payroll_output_dir = port + "\\" + _date_folder; CekRunningFolder(_payroll_input_dir); param = session.Load <Parameter>("FOLDER_PAYROLL_RESPONSE_HOST"); port = param.Data; String _payroll_response_dir = port; CekRunningFolder(_payroll_output_dir); foreach (TrxPayroll payroll in trxList) { String[] desc = payroll.Description.Split(new String[] { "||" }, StringSplitOptions.None); //payroll.Status = ParameterHelper.TRXSTATUS_RESPONSE_PROCESS; payroll.ErrorDescription += "||File Response On Process.."; session.Update(payroll); session.Flush(); log.Info(SchCode + " === (SeqNo " + payroll.SeqNumber + ") Start Processing response file " + desc[2]); String _fileName = desc[2].Replace("IPAY", "OPAY"); if (!desc[0].Equals("PROCESSED")) { break; payroll.ErrorDescription += "||Description not PROCESSED"; session.Update(payroll); session.Flush(); } log.Info(SchCode + " === (SeqNo " + payroll.SeqNumber + ") " + _payroll_response_dir + "\\" + _fileName); string outErrorDesc = ""; try { if (payroll.StatusIFT == ParameterHelper.TRXSTATUS_PAYROLLNEW_BOOK_IFT_AFTER_FILEEXIST) { payroll.LastUpdate = DateTime.Now; payroll.ErrorDescription += "Start read file response"; session.Update(payroll); session.Flush(); //20170524 - SayedZul - Handler processtime tak sama dengan hari ini string _dateProcess = payroll.ProcessTime.ToString("yyyyMMdd"); if (!_dateProcess.Equals(_date_folder)) { Parameter paramDir = session.Load <Parameter>("FOLDER_PAYROLL_INPUT_HOST"); _payroll_output_dir = paramDir.Data + "\\" + _dateProcess; } PayrollHelper.ParseResponseFile(payroll, _payroll_output_dir + "\\" + _fileName, session, log, SchCode); } } catch (Exception eek) { log.Error(eek.Message + eek.StackTrace); } log.Info(SchCode + " === (SeqNo " + payroll.SeqNumber + ") Finish Processing response file " + desc[2]); } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }
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 void Commitjob_transaction(ILog log) { IList <TrxPayroll> txList = session.CreateCriteria(typeof(TrxPayroll)) .Add(Expression.In("Status", new int[] { ParameterHelper.TRXSTATUS_RUNNING_AFTERCHECKACCOUNT, //19 ParameterHelper.TRXSTATUS_PAYROLLNEW_POST_BOOK_IADEBET, //20 ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_BOOK_IADEBET //21 })) .Add(Expression.Lt("ProcessTime", DateTime.Now)) .Add(Expression.Lt("LastUpdate", DateTime.Now)) .List <TrxPayroll>(); if (txList.Count > 0) { foreach (TrxPayroll ts in txList) { bool lanjut = false; //Pengecekkan cut of dilakukan jika ada / mengandung LLG-RTG saja jika IFT dan BRIS maka cut off nya ikut BRIS //Pengecekkan berguna untuk menghandele #region cek count jika ada LLG maka ikut LLG jika g maka ikut BRIS #endregion end of cek count jika ada LG maka ikut LLG jika g maka BRIS #region cek cutoff ato libur untuk payroll bank lain if (ts.Status == ParameterHelper.TRXSTATUS_RUNNING_AFTERCHECKACCOUNT && ts.IsPayrollBankLain == 1)//19 { //Cek jumlah BRIS //CUT OFF SKNBI string day = PayrollHelper.isHoliday(session, 1200, DateTime.Now); if (day.Equals("[WEEKEND]")) { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Weekend!"); } else if (day.Equals("[HOLIDAY]")) { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Holiday!"); } else if (day.Equals("[WEEKDAY]")) { Parameter paramCute = session.Load <Parameter>("LLGX_CUTOFFTIME"); DateTime cutoff = DateTime.ParseExact(DateTime.Now.Day.ToString("00") + "/" + DateTime.Now.Month.ToString("00") + "/" + DateTime.Now.Year.ToString("0000") + " " + paramCute.Data + ":00", "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); Parameter paramStart = session.Load <Parameter>("LLGX_STARTTIME"); DateTime start = DateTime.ParseExact(DateTime.Now.Day.ToString("00") + "/" + DateTime.Now.Month.ToString("00") + "/" + DateTime.Now.Year.ToString("0000") + " " + paramStart.Data + ":00", "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); if ((cutoff.CompareTo(DateTime.Now) > 0) && (start.CompareTo(DateTime.Now) < 0)) { lanjut = true; } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === CUTOFF TIME"); } } } else { lanjut = true; } #endregion if (lanjut) { if (ts.Status == ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_BOOK_IADEBET)//21 { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === (SeqNo " + ts.SeqNumber + ") - Start Checking"); } else { log.Info(SchCode + " === (SeqNo " + ts.SeqNumber + ") Start Processing"); } PayrollHelper.ProcessRunBeforePayroll(session, ts, log, SchCode); if (ts.Status == ParameterHelper.TRXSTATUS_PAYROLLNEW_CHECK_BOOK_IADEBET)//21 { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === (SeqNo " + ts.SeqNumber + ") - Finish Checking"); } else { log.Info(SchCode + " === (SeqNo " + ts.SeqNumber + ") Finish Processing"); } } } } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Tidak ada Trx yang diproses"); } }
private void Commitjob_transaction(ILog log) { //initial parameters Parameter maxJob = session.Load<Parameter>("PAYROLL_SCH_JOB_GENERATE_MASS_INQ"); Parameter maxTrx = session.Load<Parameter>("PAYROLL_SCH_GENERATE_MASS_INQ_MAX_TRX"); int maxResult = int.Parse(maxTrx.Data); /*Inisiasi*/ string temp_query = ""; string msg = ""; string outFileName = ""; IList<TrxPayroll> trxList = session.CreateSQLQuery("select * from trxpayrolls where status=? and (seqnumber%?)=? and lastupdate<=? order by id ASC") .AddEntity(typeof(TrxPayroll)) .SetInt32(0, ParameterHelper.PAYROLL_WAITING_GENERATE_MASS_INQ)//10 .SetInt32(1, int.Parse(maxJob.Data))//id mod(10) .SetInt32(2, jobNumber)//id mod = ini mod 0, ambil trxID kelipatan 10 .SetDateTime(3, DateTime.Now)//kurang dari last update .SetMaxResults(maxResult) .List<TrxPayroll>(); //we've found some data foreach(TrxPayroll trx in trxList) { #region patching instructioncode null //20170530 - sayedzul add handler instructioncode null dan account payrollBRI ga 15 digit int jumlahInstCodeNull = trx.TrxPayrollDetail.Where(x => String.IsNullOrEmpty(x.InstructionCode)).Count(); if (jumlahInstCodeNull > 0) { string theQuery = @"update trxpayrolldetails set instructioncode = '" + TotalOBHelper.IFT + "' where pid = '" + trx.Id + "' and (instructioncode is null or instructioncode = '');"; string msg1 = ""; PayrollHelper.ExecuteQuery(session, theQuery, out msg1); break; } int jumlahBenAccGa15Digit = trx.TrxPayrollDetail.Where(x => x.InstructionCode.Equals(TotalOBHelper.IFT) && x.Account.Length < 15).Count(); if (jumlahBenAccGa15Digit > 0) { string theQuery2 = @"update trxpayrolldetails set account = lpad(account, 15, '0') where pid = '" + trx.Id + "' and instructioncode = '" + TotalOBHelper.IFT + "' and length(account) < 15;"; string msg2 = ""; PayrollHelper.ExecuteQuery(session, theQuery2, out msg2); break; } #endregion int jumlahTrxIFT = trx.TrxPayrollDetail.Where(x => x.Status != ParameterHelper.TRXSTATUS_REJECT && x.InstructionCode.Equals(TotalOBHelper.IFT)).Count(); if (jumlahTrxIFT > 0) { if (MassInquiryHelper.generate(trx, session, log, SchCode, out outFileName)) { log.Info("Success Generate File, update to next process."); trx.ErrorDescription += schInfo + "Success Generate File"; if (MassInquiryHelper.sendToHost(trx, session, log, outFileName)) { log.Info("Success Generate File, update to next process."); //Skenario : jika file banyak agar respons host blm selesai, ada jeda int tambahMenit = 0; if (jumlahTrxIFT < 10000) { tambahMenit = 1; } else if ((jumlahTrxIFT < 50000) && (jumlahTrxIFT > 10000)) { tambahMenit = 2; } else { tambahMenit = int.Parse(Math.Floor((Decimal)(jumlahTrxIFT / 25000)).ToString()); } /*Native update*/ temp_query = @"update trxpayrolls p set p.status = 11, p.filemassinq = '" + outFileName + "', p.lastupdate = '" + DateTime.Now.AddMinutes(tambahMenit).ToString("yyyy-MM-dd HH:mm:ss") + "' where p.id = '" + trx.Id + "';"; if (!PayrollHelper.ExecuteQuery(session, temp_query, out msg)) { log.Error("Failed Execute query. " + msg.ToString()); } else log.Info("Trx Id = " + trx.Id + ", mempunyai transaksi IFT: " + jumlahTrxIFT + "||Akan set Lastupdate ::" + tambahMenit + "Minutes"); } else { /*Native update*/ temp_query = @"update trxpayrolls p set p.lastupdate = " + DateTime.Now.AddMinutes(2).ToString() + " where p.id = '" + trx.Id + "';"; if (!PayrollHelper.ExecuteQuery(session, temp_query, out msg)) { log.Error("Failed Execute query. " + msg.ToString()); } else log.Error("Something Wrong in send :( and try agagain in 2 minutes"); } } else { /*Native update*/ temp_query = @"update trxpayrolls p set p.lastupdate = " + DateTime.Now.AddMinutes(2).ToString() + " where p.id = '" + trx.Id + "';"; if (!PayrollHelper.ExecuteQuery(session, temp_query, out msg)) { log.Error("Failed Execute query. " + msg.ToString()); } else log.Error("Something Wrong in generate :( and try agagain in 2 minutes"); } } else { trx.Status = ParameterHelper.TRXSTATUS_INQUIRYNAMEPROCESS_FINISH;//17 trx.ErrorDescription = ""; //update transactions Transaction trans = session.CreateCriteria(typeof(Transaction)) .Add(Expression.In("TransactionId", new int[] { 101, 102, 103 })) .Add(Expression.Like("TObject", trx.Id, MatchMode.Anywhere)) .UniqueResult<Transaction>(); if (trans != null)//avoid Payroll Musimas { trans.Status = ParameterHelper.TRXSTATUS_WAITING_SCHEDULLER;//15 //string feeIFT = PayrollHelper.getFeeTransaction(session, trx.Id, TotalOBHelper.IFT, log); //string feeRTG = PayrollHelper.getFeeTransaction(session, trx.Id, TotalOBHelper.RTGS, log); //string feeLLG = PayrollHelper.getFeeTransaction(session, trx.Id, TotalOBHelper.LLG, log); //string reject = PayrollHelper.getCountRejectTransaction(session, trx.Id, TotalOBHelper.IFT, log); ///*Nilai Total*/ //string totalTrx = PayrollHelper.getTotalTransaction(session, trx.Id, log); /*Ini nih kunci utnuk laporan query dll nyaaa*/ trx.TotalTrx = "|0:0|0:0|0:0|0:0|0:0|";// "|" + feeIFT + "|" + reject + "|" + totalTrx + "|" + feeRTG + "|" + feeLLG + "|"; //trx.TotalTrx = "|" + _countSuccess + ":" + _sumSuccess + "|" + _countInvalid + ":" + _sumInvalid + "|" + _countTotal + ":" + _sumTotal + "|"; log.Info("Trx Id = " + trx.Id + ", Total Trx : " + trx.TotalTrx); session.Update(trans); session.Flush(); log.Info("Trx Id = " + trx.Id + " Update transactions success"); session.Update(trx); session.Flush(); } } } }
private void Commitjob_transaction(ILog log) { try { DateTime tglEkse = DateTime.ParseExact(ParameterHelper.GetString("PAYROLL_NEXTTIME_SEND_NOTIF_IA", session), "ddMMyyyyHHmm", System.Globalization.CultureInfo.InvariantCulture); if (tglEkse < DateTime.Now) { log.Info(SchCode + " === Mulai Ekse ==="); int result1 = 0; double aBal1 = 0; double hBal1 = 0; double cBal1 = 0; int statRek1 = 0; string namaRek1 = ""; int result2 = 0; double aBal2 = 0; double hBal2 = 0; double cBal2 = 0; int statRek2 = 0; string namaRek2 = ""; string msg = ""; string rekIADebet = ParameterHelper.GetString("PAYROLL_IA_DEBET", session); result1 = PayrollHelper.InquiryHoldAmt(rekIADebet, out aBal1, out hBal1, out cBal1, out statRek1, out namaRek1, out msg); if (result1 != 1) { log.Error(SchCode + " === Gagal Inquiry rekIADebet (" + rekIADebet + ") result: " + result1 + ", msg: " + msg + " ==== Retry in 2 Min"); Thread.Sleep(120000); log.Info(SchCode + " === Kelar Ekse ==="); return; } string rekIAKredit = ParameterHelper.GetString("PAYROLL_IA_KREDIT", session); result2 = PayrollHelper.InquiryHoldAmt(rekIAKredit, out aBal2, out hBal2, out cBal2, out statRek2, out namaRek2, out msg); if (result2 != 1) { log.Error(SchCode + " === Gagal Inquiry rekIAKredit (" + rekIADebet + ") result: " + result2 + ", msg: " + msg + " ==== Retry in 2 Min"); Thread.Sleep(120000); log.Info(SchCode + " === Kelar Ekse ==="); return; } string email_content = EmailHelperUniversal.EmailTemplateIADebetKredit(rekIADebet, namaRek1, "IA DEBET", aBal1, hBal1, cBal1, statRek1, rekIAKredit, namaRek2, "IA KREDIT", aBal2, hBal2, cBal2, statRek2); string receiver = ParameterHelper.GetString("PAYROLL_EMAIL_TARGET_MON_IADEBETKREDIT", session); int idEmailTransaction = 0; if (!EmailHelperUniversal.AddEmailTransaction(session, 0, 100, "PAYROLL IADEBETKREDIT MONITORING", 1705, receiver, "Payroll IADebetKredit Daily Monitoring", email_content, "", 2, out idEmailTransaction, out msg)) { log.Error(SchCode + " === Gagal Kirim Email, msg: " + msg + " ==== Retry in 2 Min"); Thread.Sleep(120000); log.Info(SchCode + " === Kelar Ekse ==="); return; } log.Info(SchCode + " === Sukses Kirim Email id : " + idEmailTransaction.ToString() + " ==="); int next = ParameterHelper.GetInteger("PAYROLL_NEXTTIME_PARAM", session); Parameter par = session.Load <Parameter>("PAYROLL_NEXTTIME_SEND_NOTIF_IA"); par.Data = tglEkse.AddHours(next).ToString("ddMMyyyyHHmm"); session.Update(par); session.Flush(); log.Info(SchCode + " === Kelar Ekse ==="); } else { Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + SchCode + " === Belum waktu diekse vroh"); } } catch (Exception e) { log.Error("Exception Send Email >>" + e.Message + ">>" + e.InnerException + ">>" + e.StackTrace); } }