Exemple #1
0
        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");
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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");
            }
        }
Exemple #8
0
    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);
    }
Exemple #9
0
        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");
            }
        }
Exemple #10
0
        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);
            }
        }