Example #1
0
        private void Producer()
        {
            EtzbkDataContext     db     = new EtzbkDataContext();
            List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.TRANS_CODE == "P" && (a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null)).Take(Settings.number_of_record_perround).ToList();

            try
            {
                Parallel.ForEach(etzTrx, item =>
                {
                    bool successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE);

                    if (successful)
                    {
                        enqueData.Add(item);
                        Console.WriteLine("Equeued Payment Data " + item.UNIQUE_TRANSID);
                    }
                    else
                    {
                        itemsToRemove.Add(item);
                    }
                });
            }
            catch (Exception ex)
            {
                Logger logger = new Logger();
                Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex));
                logger.LogInfoMessage(nameof(PaymentProducer) + " " + ExceptionExtensions.GetFullMessage(ex));
            }
            enqueData.CompleteAdding();
            DataManupulation.RemoveTransactionFromSettlement(itemsToRemove);
            DataManupulation.UpdateTransactionAsProcccessed(etzTrx);
        }
Example #2
0
        private static void Producer()

        {
            EtzbkDataContext db = new EtzbkDataContext();

            var etzTrx = db.E_TRANSACTION.ToList();

            Parallel.ForEach(etzTrx, item =>
            {
                // Check TMC if transaction has been reversed.

                bool successful = CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE);

                if (successful)
                {
                    enqueData.Add(item);
                }
                else
                {
                    itemsToRemove.Add(item);
                }
            });

            db.E_TRANSACTION.RemoveRange(itemsToRemove);
        }
Example #3
0
        public static void RemoveTransactionFromSettlement(List <E_TRANSACTION> itemsToRemove)
        {
            using (EtzbkDataContext etz = new EtzbkDataContext())
            {
                etz.E_TRANSACTION.AddRange(itemsToRemove);
                //etz.Entry(itemsToRemove).State = System.Data.Entity.EntityState.Deleted;
                itemsToRemove.ForEach(p => etz.Entry(p).State = EntityState.Deleted);
                etz.E_TRANSACTION.RemoveRange(itemsToRemove);

                bool saveFailed;
                do
                {
                    saveFailed = false;
                    try
                    {
                        etz.SaveChanges();
                    }
                    catch (DbUpdateConcurrencyException ex)
                    {
                        saveFailed = true;
                        ex.Entries.Single().Reload();

                        Console.WriteLine(nameof(DataManupulation) + " " + ExceptionExtensions.GetFullMessage(ex));
                        logger.LogInfoMessage(nameof(DataManupulation) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex));
                    }
                } while (saveFailed);
            }
        }
Example #4
0
        DateTime startdate;//= DateTime.Today.AddDays(-number_of_backlogdays);

        public Application()
        {
            // this.logger = logger;
            this.startdate = DateTime.Today.AddDays(-number_of_backlogdays);


            EtzbkDataContext etzbk = new EtzbkDataContext();

            Settings.LoadSettings();
        }
Example #5
0
        private void Consumer()

        {
            List <E_TRANSFER_COMMISSION_SPLIT> splitFormular         = CachingProvider.GetCachedData <List <E_TRANSFER_COMMISSION_SPLIT> >("Transfer");
            List <E_FUNDGATE_COMMISSION_SPLIT> fundGatesplitFormular = CachingProvider.GetCachedData <List <E_FUNDGATE_COMMISSION_SPLIT> >("FundGate");

            List <CommissionMapViewModel> commission         = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(splitFormular);
            List <CommissionMapViewModel> fundGatecommission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(fundGatesplitFormular);

            using (EtzbkDataContext etzbk = new EtzbkDataContext())
            {
                try
                {
                    etzbk.Configuration.AutoDetectChangesEnabled = false;

                    int i = 0;
                    foreach (var item in enqueData.GetConsumingEnumerable())
                    {
                        List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>();
                        if (item.CHANNELID == "09")
                        {
                            feeDetailList = FeeProcessing.ProcessCardloadSplit(item, fundGatecommission);
                        }
                        else
                        {
                            feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission);
                        }

                        etzbk.E_FEE_DETAIL_BK.AddRange(feeDetailList);

                        E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item);
                        decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault();
                        e_settlement.BANK_FEE = bankFee;
                        etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement);


                        if (i % 50 == 0)
                        {
                            etzbk.SaveChanges();
                        }
                        i++;
                    }
                    etzbk.SaveChanges();
                }
                catch (Exception ex)
                {
                    Logger logger = new Logger();
                    Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogInfoMessage("Exception from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
            }
        }
        private void Producer()
        {
            using (EtzbkDataContext db = new EtzbkDataContext())
            {
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();

                try
                {
                    List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null).ToList();


                    Parallel.ForEach(etzTrx, new ParallelOptions {
                        MaxDegreeOfParallelism = Settings.settlementThreadNumber
                    }, item =>
                    {
                        SettleOption successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE);

                        if (successful.Equals(SettleOption.Valid))
                        {
                            enqueData.Add(item);
                            Console.WriteLine("Equeued Data  " + item.UNIQUE_TRANSID);
                            logger.LogInfoMessage("Equeued Data " + item.UNIQUE_TRANSID);
                        }
                        else if (successful.Equals(SettleOption.Invalid))
                        {
                            itemsToRemove.Add(item);
                        }
                    });


                    enqueData.CompleteAdding();
                    DataManupulation.RemoveTransactionFromSettlement(itemsToRemove);

                    //DataManupulation.UpdateTransactionAsProcccessed(etzTrx);
                }
                catch (Exception ex)
                {
                    Logger logger = new Logger();
                    Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogInfoMessage("Exception from Run TaskProducerConsumer Procuder Method" + ExceptionExtensions.GetFullMessage(ex));
                }

                stopwatch.Stop();


                Console.WriteLine("Round completed in " + stopwatch.Elapsed);
                Console.ReadLine();
            }
        }
Example #7
0
        public static E_SETTLE_BATCH GetSettleBatch()
        {
            E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH();

            try
            {
                using (EtzbkDataContext etzbk = new EtzbkDataContext())
                {
                    settle_batch = etzbk.E_SETTLE_BATCH.Where(c => c.CLOSED == "0").OrderBy(c => c.BATCH_DATE).LastOrDefault();
                }
            }
            catch { }

            return(settle_batch);
        }
        private string MapTables(List <string> list)
        {
            var db   = new EtzbkDataContext();
            var objs = db.E_MERCHANT.Where(a => list.Contains(a.MERCHANT_CODE)).ToList();

            var table = "<table><th>Merchant Code </th><th>Account Number</th><th>Merchant Name </th>";

            foreach (var itm in objs)
            {
                table += "<tr><td>" + itm.MERCHANT_CODE + "</td><td>" + itm.MERCHANT_ACCT + "</td><td>" + itm.MERCHANT_NAME + "</td></tr>";
            }
            table += "</table>";

            return(table);
        }
Example #9
0
        internal static void ProcessTransferSettlement(E_TRANSACTION item)
        {
            List <E_TRANSFER_COMMISSION_SPLIT> splitFormular         = CachingProvider.GetCachedData <List <E_TRANSFER_COMMISSION_SPLIT> >("Transfer");
            List <E_FUNDGATE_COMMISSION_SPLIT> fundGatesplitFormular = CachingProvider.GetCachedData <List <E_FUNDGATE_COMMISSION_SPLIT> >("FundGate");

            List <CommissionMapViewModel> commission         = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(splitFormular);
            List <CommissionMapViewModel> fundGatecommission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(fundGatesplitFormular);

            using (EtzbkDataContext etzbk = new EtzbkDataContext())
            {
                try
                {
                    List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>();
                    if (item.CHANNELID == "09")
                    {
                        feeDetailList = FeeProcessing.ProcessCardloadSplit(item, fundGatecommission);
                    }
                    else
                    {
                        feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission);
                    }

                    var e_Fee_detail = RemoveSettledFeeDetails(feeDetailList);
                    etzbk.E_FEE_DETAIL_BK.AddRange(e_Fee_detail);

                    E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item);
                    decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault();
                    e_settlement.BANK_FEE = bankFee;

                    if (!CheckSettledFee(e_settlement))
                    {
                        etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement);
                    }

                    item.PROCESS_STATUS = "1";
                    etzbk.E_TRANSACTION.Add(item);
                    etzbk.Entry(item).State = System.Data.Entity.EntityState.Modified;

                    etzbk.SaveChanges();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + nameof(Settlement) + " " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogInfoMessage("Exception from Run " + nameof(Settlement) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex));
                }
            }
        }
Example #10
0
 public static bool CheckSettledFee(E_SETTLEMENT_DOWNLOAD_BK e_settlement)
 {
     using (EtzbkDataContext db = new EtzbkDataContext())
     {
         // var etrxData = new E_SETTLEMENT_DOWNLOAD_BK();
         try
         {
             var etrxData = db.E_SETTLEMENT_DOWNLOAD_BK.Where(s => s.UNIQUE_TRANSID == e_settlement.UNIQUE_TRANSID).ToList();
             if (etrxData.Count() > 0)
             {
                 return(true);
             }
         }
         catch (Exception ex)
         {
             return(false);
         }
         return(false);
     }
 }
Example #11
0
        public static List <E_FEE_DETAIL_BK> RemoveSettledFeeDetails(List <E_FEE_DETAIL_BK> allTmcData)
        {
            using (EtzbkDataContext db = new EtzbkDataContext())
            {
                var etrxData = new List <E_FEE_DETAIL_BK>();
                try
                {
                    var uniqueIDs     = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray();
                    var uniqueIDsOnDB = db.E_FEE_DETAIL_BK.Where(u => uniqueIDs.Contains(u.EXTERNAL_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray();
                    etrxData = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID)).ToList();


                    return(etrxData);
                }
                catch (Exception ex)
                {
                    return(etrxData);
                }
            }
        }
Example #12
0
        private void Producer()
        {
            using (EtzbkDataContext db = new EtzbkDataContext())
            {
                try
                {
                    List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.TRANS_CODE == "T" && (a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null)).Take(Settings.number_of_record_perround).ToList();


                    Parallel.ForEach(etzTrx, item =>
                    {
                        bool successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE);

                        if (successful)
                        {
                            enqueData.Add(item);
                            Console.WriteLine("Equeued Data" + item.UNIQUE_TRANSID);
                        }
                        else
                        {
                            itemsToRemove.Add(item);
                            logger.LogInfoMessage(nameof(TransferProducer) + " round saved to database ");
                        }
                    });


                    enqueData.CompleteAdding();
                    DataManupulation.RemoveTransactionFromSettlement(itemsToRemove);
                    DataManupulation.UpdateTransactionAsProcccessed(etzTrx);
                }
                catch (Exception ex)
                {
                    Logger logger = new Logger();
                    Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogInfoMessage("Exception from Run " + nameof(TransferProducer) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
            }
        }
Example #13
0
        public static string SetSettleBatch()
        {
            string settleBatch = GenerateBatch();

            try
            {
                using (EtzbkDataContext etzbk = new EtzbkDataContext())
                {
                    E_SETTLE_BATCH batch = new E_SETTLE_BATCH()
                    {
                        BATCH_DATE = DateTime.Now, BATCH_ID = settleBatch, CLOSED = "0", START_DATE = DateTime.Today, END_DATE = DateTime.Today.AddDays(1).AddTicks(-1)
                    };

                    etzbk.E_SETTLE_BATCH.Add(batch);

                    etzbk.SaveChanges();
                }
            }
            catch
            {
            }
            return(settleBatch);
        }
Example #14
0
        public static String GenerateBatch()
        {
            using (EtzbkDataContext etzbk = new EtzbkDataContext())
            {
                string   currentTime = DateTime.Now.ToString("yyMMddHHmm");
                string[] month       = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
                                         "K",       "L" };
                string[] day = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
                                 "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W",
                                 "X", "Y", "Z", "1", "2", "3", "4", "5" };
                string[] hour = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
                                  "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T","U",  "V",
                                  "W", "X" };
                string   finalkey = "";
                try
                {
                    int keyID       = 0;
                    var batchnumber = etzbk.E_FEEBATCH.FirstOrDefault();
                    if (batchnumber != null)
                    {
                        keyID = batchnumber.KEYID + 1;

                        if (keyID == 999998)
                        {
                            keyID = 1;
                        }
                        batchnumber = new E_FEEBATCH()
                        {
                            KEYID = keyID
                        };
                        etzbk.E_FEEBATCH.Add(batchnumber);
                    }
                    else
                    {
                        keyID       = 1;
                        batchnumber = new E_FEEBATCH()
                        {
                            KEYID = 1
                        };
                        etzbk.E_FEEBATCH.Add(batchnumber);
                    }

                    String key = keyID.ToString("D6");
                    int    mm  = int.Parse(currentTime.Substring(2, 2));
                    int    dd  = int.Parse(currentTime.Substring(4, 2));
                    int    hh  = int.Parse(currentTime.Substring(6, 2));
                    if (mm == 0)
                    {
                        mm = 1;
                    }
                    if (dd == 0)
                    {
                        dd = 1;
                    }
                    if (hh == 0)
                    {
                        hh = 1;
                    }
                    finalkey = currentTime.Substring(0, 2) + month[mm - 1]
                               + day[dd - 1] + hour[hh - 1] + currentTime.Substring(8)
                               + key;
                    etzbk.SaveChanges();
                }
                catch (Exception _e)
                {
                    Console.WriteLine(_e.Message);
                }
                return(finalkey);
            }
        }
Example #15
0
        public static void LoadSettings()
        {
            using (EtzbkDataContext etzTrx = new EtzbkDataContext())
            {
                try
                {
                    // var etzTrx = db.E_CARDLOAD_COMMISSION_SPLIT.ToList();
                    List <E_CARDLOAD_COMMISSION_SPLIT> cardLoadSplitList = new List <E_CARDLOAD_COMMISSION_SPLIT>()
                    {
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 40, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 60, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 30, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 70, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "1", RATIO = 0, SPLIT_CARD = "0447777567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_CARDLOAD_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission"
                        }
                    };

                    //EtzbkDataContext etzTrx = new EtzbkDataContext();
                    // var etzTrx = db.E_CARDLOAD_COMMISSION_SPLIT.ToList();
                    List <E_TRANSFER_COMMISSION_SPLIT> transferSplitList = new List <E_TRANSFER_COMMISSION_SPLIT>()
                    {
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 40, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 60, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 30, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE"
                        },
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 70, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE"
                        },
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission"
                        },
                        new E_TRANSFER_COMMISSION_SPLIT()
                        {
                            BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission"
                        }
                    };

                    //            EtzbkDataContext etzTrx = new EtzbkDataContext();
                    List <E_FUNDGATE_COMMISSION_SPLIT> fundGateSplitList = etzTrx.E_FUNDGATE_COMMISSION_SPLIT.ToList();

                    CachingProvider.AddItem("CardLoad", cardLoadSplitList);
                    CachingProvider.AddItem("Transfer", transferSplitList);
                    CachingProvider.AddItem("FundGate", fundGateSplitList);
                }
                catch (Exception ex)
                {
                    Logger logger = new Logger();
                    Console.WriteLine("Exception loading settings" + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogDebugMessage("Exception loading settings " + nameof(Settings) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
            }
        }
Example #16
0
        protected override void OnStart(string[] args)
        {
            //Check for Time Processing
            if (DateTime.Now.Hour >= 1 && DateTime.Now.Hour < 4)
            {
                //Check if there is  a closed SettleBatch--- if Closed for the day, settlement has been completed.Assumed
                // E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH();

                var settle_batch = Settlement.GetSettleBatch();

                if (settle_batch.CLOSED == null || settle_batch == null)
                {
                    string batchID = Settlement.SetSettleBatch();

                    using (var db = new EtzbkDataContext())
                    {
                        db.Database.ExecuteSqlCommand("UPDATE E_SETTLEMENT_DOWNLOAD_BK SET  SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL");
                        db.Database.ExecuteSqlCommand("UPDATE E_FEE_DETAIL_BK SET  SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL");
                        db.Database.ExecuteSqlCommand("UPDATE E_SETTLE_BATCH SET CLOSED='1' WHERE BATCH_ID='" + batchID + "'");
                    }

                    //Set settlebatch on strations with Settlebatch null and less than today's date
                }
            }
            //

            logger.LogInfoMessage("Service Time started at" + DateTime.Now.ToString());
            // System.IO.Directory.CreateDirectory("C:/Users/ope/Documents/tmc/tmc/Opeyemi Folder");
            // Update the service state to Start Pending.
            ServiceStatus serviceStatus = new ServiceStatus();

            serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
            serviceStatus.dwWaitHint     = 100000;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);

            logger.LogInfoMessage(nameof(TmcWinService) + "  starting TMC settler.....");
            logger.LogInfoMessage(nameof(TmcWinService) + "  Start Job schedule for ");


            this.timer           = new System.Timers.Timer();
            this.timer.AutoReset = true;
            this.timer.Interval  = this.timer.Interval = Settings.timer_interval * 60000;
            this.timer.Elapsed  += new System.Timers.ElapsedEventHandler(this.Timer_Elapsed);

            this.timer.Enabled = true;
            this.timer.Start();


            this.timer2           = new System.Timers.Timer();
            this.timer2.AutoReset = true;
            this.timer2.Interval  = this.timer.Interval = Settings.timer_interval * 60000;
            this.timer2.Elapsed  += new System.Timers.ElapsedEventHandler(this.Timer2_Elapsed);

            this.timer2.Enabled = true;
            this.timer2.Start();

            StartMethod();
            StartSettler();

            logger.LogInfoMessage(nameof(TmcWinService) + "  Timer Started ");

            // Update the service state to Running.
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }
Example #17
0
        public void Run()
        {
            //Check for Time Processing
            if (DateTime.Now.Hour >= 1 && DateTime.Now.Hour < 4)
            {
                //Check if there is  a closed SettleBatch--- if Closed for the day, settlement has been completed.Assumed
                // E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH();

                var settle_batch = Settlement.GetSettleBatch();

                if (settle_batch.CLOSED == null || settle_batch == null)
                {
                    string batchID = Settlement.SetSettleBatch();

                    using (var db = new EtzbkDataContext())
                    {
                        db.Database.ExecuteSqlCommand("UPDATE E_SETTLEMENT_DOWNLOAD_BK SET  SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL");
                        db.Database.ExecuteSqlCommand("UPDATE E_FEE_DETAIL_BK SET  SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL");
                        db.Database.ExecuteSqlCommand("UPDATE E_SETTLE_BATCH SET CLOSED='1' WHERE BATCH_ID='" + batchID + "'");
                    }

                    //Set settlebatch on strations with Settlebatch null and less than today's date
                }
            }
            //



            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            logger.LogInfoMessage(nameof(TmcSettler) + " starting TMC settler.....");
            logger.LogInfoMessage(nameof(TmcSettler) + " Start Job schedule for ");

            logger.LogInfoMessage(nameof(TmcSettler) + "Creating multithreading Threads to spool from 145 to e_transaction for each channel");


            logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating EtranzactChannelTransaction  Threads ");
            EtranzactChannelTransaction etzTrx = new EtranzactChannelTransaction();
            Thread etzTrxThread = new Thread(new ThreadStart(etzTrx.Run));

            logger.LogInfoMessage(nameof(TmcSettler) + "Starting the EtranzactChannelTransaction  Threads ");
            etzTrxThread.Start();

            logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating NonEtzCardTransaction  Threads ");
            NonEtzCardTransaction nonEtzCard = new NonEtzCardTransaction();
            Thread nonEtzCardThread          = new Thread(new ThreadStart(nonEtzCard.Run));

            logger.LogInfoMessage(nameof(TmcSettler) + "Starting the NonEtzCardTransaction  Threads ");
            nonEtzCardThread.Start();

            logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating MastercardTransactions  Threads ");
            MastercardTransactions mastercardTrx = new MastercardTransactions();
            Thread mastercardTrxThread           = new Thread(new ThreadStart(mastercardTrx.Run));

            logger.LogInfoMessage(nameof(TmcSettler) + "Starting the MastercardTransactions  Threads ");
            mastercardTrxThread.Start();


            //mastercardTrxThread.Join();
            //nonEtzCardThread.Join();
            //etzTrxThread.Join();

            stopwatch.Stop();



            logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating TaskProducerConsumer  Threads ");
            TaskProducerConsumer taskProducerConsumer = new TaskProducerConsumer();
            Thread taskProducerConsumerThread         = new Thread(new ThreadStart(taskProducerConsumer.Run));

            logger.LogInfoMessage(nameof(TmcSettler) + "Starting the TaskProducerConsumer  Threads ");
            taskProducerConsumerThread.Start();
            //taskProducerConsumerThread.Join();

            /*
             * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating CardloadProducer  Threads ");
             * CardloadProducer cardloadProducer = new CardloadProducer();
             * Thread cardloadProducerThread = new Thread(new ThreadStart(cardloadProducer.Run));
             * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the CardloadProducer  Threads ");
             * cardloadProducerThread.Start();
             *
             * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating TransferProducer  Threads ");
             * TransferProducer transferdProducer = new TransferProducer();
             * Thread transferProducerThread = new Thread(new ThreadStart(transferdProducer.Run));
             * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the TransferProducer  Threads ");
             * transferProducerThread.Start();
             *
             *
             *
             * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating PaymentProducer  Threads ");
             * PaymentProducer paymentProducer = new PaymentProducer();
             * Thread paymentProducerThread = new Thread(new ThreadStart(paymentProducer.Run));
             * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the PaymentProducer  Threads ");
             * paymentProducerThread.Start();
             *
             * paymentProducerThread.Join();
             * transferProducerThread.Join();
             * cardloadProducerThread.Join();
             *
             * mastercardTrxThread.Join();
             * nonEtzCardThread.Join();
             * etzTrxThread.Join();
             *
             */
            Console.WriteLine("Round completed in " + stopwatch.Elapsed);
            Console.ReadLine();
        }
Example #18
0
        private void Consumer()
        {
            List <string> McNoSplit = new List <string>();

            using (EtzbkDataContext etzbk = new EtzbkDataContext())
            {
                try
                {
                    etzbk.Configuration.AutoDetectChangesEnabled = false;
                    int i = 0;
                    foreach (var item in enqueData.GetConsumingEnumerable())
                    {
                        string Merchant_Code = item.MERCHANT_CODE;
                        List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>();

                        var merchantScaleQuery = from A in etzbk.E_MERCHANT
                                                 join B in etzbk.E_CATSCALE
                                                 on new { X = A.CAT_ID } equals new { X = B.CAT_ID } into jointData
                        from joinRecord in jointData.DefaultIfEmpty()
                        where (A.MERCHANT_CODE == Merchant_Code)
                        select new
                        {
                            A.FEE_STATUS,
                            A.SPECIAL_SPLIT,
                            joinRecord.SCALE_VALUE,
                            joinRecord.SCALE_TYPE,
                            joinRecord.CAT_ID
                        };

                        var merchantScale = merchantScaleQuery.FirstOrDefault();
                        if (merchantScale == null)
                        {
                            if (!McNoSplit.Contains(Merchant_Code))
                            {
                                McNoSplit.Add(Merchant_Code);
                            }
                            continue;
                            ///Write Code to handle No Merchant Code or Split category configured
                        }
                        if (merchantScale.SPECIAL_SPLIT == "0")
                        {
                            // Check If Fee is Charged if not, ignore and comparee value
                            if (merchantScale.SCALE_TYPE == "1" & item.FEE == 0)
                            {
                                item.FEE = FeeProcessing.CalculateFeeBeneficiary(merchantScale.SCALE_VALUE, item.TRANS_AMOUNT);
                            }
                            var query = from A in etzbk.E_MERCHANT_COMMISSION_SPLIT
                                        where (A.MERCHANT_CODE == item.MERCHANT_CODE)
                                        select new CommissionMapViewModel
                            {
                                AGENT         = "",
                                MAIN_FLAG     = A.MAIN_FLAG,
                                SPLIT_CARD    = A.SPLIT_CARD,
                                RATIO         = A.RATIO,
                                SPLIT_DESCR   = A.SPLIT_DESCR,
                                COMM_SUSPENCE = item.MERCHANT_CODE
                            };
                            List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList());

                            var e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item);

                            feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission);
                            decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.TRANS_AMOUNT).FirstOrDefault();
                            e_settlement.BANK_FEE = bankFee;
                            etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement);
                        }
                        else
                        {
                            var query = from A in etzbk.E_MERCHANT_SPECIAL_SPLIT
                                        where (A.MERCHANT_CODE == item.MERCHANT_CODE)
                                        select new CommissionMapViewModel
                            {
                                AGENT         = "",
                                MAIN_FLAG     = A.MAIN_FLAG,
                                SPLIT_CARD    = A.SPLIT_CARD,
                                RATIO         = A.SVALUE,
                                SPLIT_DESCR   = A.SPLIT_DESCR,
                                COMM_SUSPENCE = item.MERCHANT_CODE
                            };

                            List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList());

                            E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item);

                            feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission);

                            decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault();
                            e_settlement.BANK_FEE = bankFee;
                            etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement);
                        }



                        // feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission);
                        etzbk.E_FEE_DETAIL_BK.AddRange(feeDetailList);
                        if (i % 50 == 0)
                        {
                            //var uniqueIDs = feeDetailList.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray();
                            //var uniqueIDsOnDB = etzbk.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray();
                            //var feeForDBata = feeDetailList.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID));

                            etzbk.SaveChanges();
                            logger.LogInfoMessage(nameof(PaymentProducer) + " round saved to database ");
                        }
                        i++;
                    }


                    etzbk.SaveChanges();
                    logger.LogInfoMessage(nameof(PaymentProducer) + " FInal round saved to database ");
                }
                catch (Exception ex)
                {
                    Logger logger = new Logger();
                    Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogInfoMessage("Exception from Run " + nameof(PaymentProducer) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
                //Act on MC without Split

                Console.WriteLine("List of MC without split");
                foreach (string item in McNoSplit)
                {
                    Console.WriteLine(item);
                }
            }
        }
Example #19
0
        public static ResponseViewModel ProcessPaymentSettlement(E_TRANSACTION item)
        {
            ResponseViewModel response = new ResponseViewModel();


            using (EtzbkDataContext etzbk = new EtzbkDataContext())
            {
                //item = etzbk.E_TRANSACTION.Where(a => a.UNIQUE_TRANSID == "0327002364000289256353").FirstOrDefault();
                if (item.UNIQUE_TRANSID.Contains("#"))
                {
                    item.UNIQUE_TRANSID = item.UNIQUE_TRANSID.Substring(0, item.UNIQUE_TRANSID.IndexOf("#"));
                }
                try
                {
                    var merchantIntercept = etzbk.E_MERCHANT_CODE_INTERCEPT.Where(a => a.INITIATOR_CODE == item.CARD_NUM.Substring(0, 3) && a.MERCHANT_CODE == item.MERCHANT_CODE && a.CHANNELID == item.CHANNELID && a.TRANS_CODE == item.TRANS_CODE && a.INTERCEPT_STATUS == "1").FirstOrDefault();

                    if (merchantIntercept != null)
                    {
                        if (merchantIntercept.INTERCEPT_MERCHANT_CODE != null || merchantIntercept.INTERCEPT_MERCHANT_CODE.Trim() != "")
                        {
                            item.MERCHANT_CODE = merchantIntercept.INTERCEPT_MERCHANT_CODE;
                        }
                        if (merchantIntercept.CARD_NUM != null || merchantIntercept.CARD_NUM.Trim() != "")
                        {
                            item.CARD_NUM = merchantIntercept.CARD_NUM;
                        }
                    }

                    if (item.CHANNELID == "09")
                    {
                        using (FundGateDataContext fundGate = new FundGateDataContext())
                        {
                            var fundGateQuery = from A in fundGate.FUNDGATE_RESPONSE
                                                join B in fundGate.FUNDGATE_REQUEST
                                                on new { X = A.clientRef, Y = A.terminal } equals new { X = B.clientRef, Y = B.terminal } into jointData
                            from joinRecord in jointData.DefaultIfEmpty()
                            where (joinRecord.action == "VT" && A.etzRef == item.UNIQUE_TRANSID)
                            select new
                            {
                                joinRecord.lineType
                            };

                            var fundGateTrx = fundGateQuery.FirstOrDefault();
                            if (fundGateTrx != null)
                            {
                                var swicthData = etzbk.E_SWITCHIT_TRANSFORMER.Where(a => a.CARD_NUM == item.CARD_NUM && a.PROVIDER_ID == fundGateTrx.lineType).FirstOrDefault();
                                if (swicthData != null)
                                {
                                    item.CARD_NUM      = swicthData.TRANSFORM_CARD;
                                    item.MERCHANT_CODE = swicthData.MERCHANT_CODE;
                                }
                            }
                        }
                    }
                    string merchantCode = item.MERCHANT_CODE;
                    List <E_FEE_DETAIL_BK>   feeDetailList = new List <E_FEE_DETAIL_BK>();
                    E_SETTLEMENT_DOWNLOAD_BK e_settlement  = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item);

                    var merchantScaleQuery = from A in etzbk.E_MERCHANT
                                             join B in etzbk.E_CATSCALE
                                             on new { X = A.CAT_ID } equals new { X = B.CAT_ID } into jointData
                    from joinRecord in jointData.DefaultIfEmpty()
                    where (A.MERCHANT_CODE == merchantCode)
                    select new
                    {
                        A.FEE_STATUS,
                        A.SPECIAL_SPLIT,
                        A.MERCHANT_NAME,
                        joinRecord.SCALE_VALUE,
                        joinRecord.SCALE_TYPE,
                        joinRecord.CAT_ID
                    };

                    var merchantScale = merchantScaleQuery.FirstOrDefault();
                    if (merchantScale == null)
                    {
                        response = new ResponseViewModel()
                        {
                            ErrorType = ErrorType.NoMerchantCode, MerchantCode = merchantCode, Response = false
                        };

                        //return response;

                        ///Write Code to handle No Merchant Code or Split category configured
                    }
                    else
                    {
                        List <CommissionMapViewModel> commission = new List <CommissionMapViewModel>();
                        if (merchantScale.SPECIAL_SPLIT == "0")
                        {
                            // Check If Fee is Charged if not, ignore and comparee value
                            if (merchantScale.SCALE_TYPE == "1" & item.FEE == 0)
                            {
                                item.FEE = FeeProcessing.CalculateFeeBeneficiary(merchantScale.SCALE_VALUE, item.TRANS_AMOUNT);
                            }
                            var query = from A in etzbk.E_MERCHANT_COMMISSION_SPLIT
                                        where (A.MERCHANT_CODE == item.MERCHANT_CODE)
                                        select new CommissionMapViewModel
                            {
                                AGENT         = "",
                                MAIN_FLAG     = A.MAIN_FLAG,
                                SPLIT_CARD    = A.SPLIT_CARD,
                                RATIO         = A.RATIO,
                                SPLIT_DESCR   = A.SPLIT_DESCR,
                                COMM_SUSPENCE = item.MERCHANT_CODE
                            };
                            commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList());
                        }
                        else if (merchantScale.SPECIAL_SPLIT == "1")
                        {
                            var query = from A in etzbk.E_MERCHANT_SPECIAL_SPLIT
                                        where (A.MERCHANT_CODE == item.MERCHANT_CODE)
                                        select new CommissionMapViewModel
                            {
                                AGENT         = "",
                                MAIN_FLAG     = A.MAIN_FLAG,
                                SPLIT_CARD    = A.SPLIT_CARD,
                                RATIO         = A.SVALUE,
                                SPLIT_DESCR   = A.SPLIT_DESCR,
                                COMM_SUSPENCE = item.MERCHANT_CODE
                            };
                            commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList());
                        }
                        else
                        {
                            response = new ResponseViewModel()
                            {
                                ErrorType = ErrorType.InvalidSplitType, MerchantCode = merchantCode, Response = false
                            };
                            // return response;
                        }

                        if (merchantScale.SPECIAL_SPLIT == "1" || merchantScale.SPECIAL_SPLIT == "0")
                        {
                            feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission);

                            var e_Fee_detail = RemoveSettledFeeDetails(feeDetailList);
                            etzbk.E_FEE_DETAIL_BK.AddRange(e_Fee_detail);

                            decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault();
                            e_settlement.BANK_FEE = bankFee;
                        }
                    }


                    if (!CheckSettledFee(e_settlement))
                    {
                        etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement);
                    }

                    item.PROCESS_STATUS = "1";
                    etzbk.E_TRANSACTION.Add(item);
                    etzbk.Entry(item).State = System.Data.Entity.EntityState.Modified;


                    etzbk.SaveChanges();
                    // Console.WriteLine(nameof(PaymentProducer) + " Final round saved to database ");
                    return(new ResponseViewModel()
                    {
                        ErrorType = ErrorType.Valid, MerchantCode = merchantCode, Response = true
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + nameof(Settlement) + " " + ExceptionExtensions.GetFullMessage(ex) + item.UNIQUE_TRANSID);
                    logger.LogInfoMessage("Exception from Run " + nameof(Settlement) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex) + item.UNIQUE_TRANSID);
                    return(new ResponseViewModel()
                    {
                        ErrorType = ErrorType.Exception, MerchantCode = item.UNIQUE_TRANSID, Message = ex.Message, Response = false
                    });
                }
            }
        }
        public void Run()
        {
            logger = new Logger();


            Task <List <E_TRANSACTION> > t1 = Task.Factory.StartNew(MastercardTrx1);
            Task <List <E_TRANSACTION> > t2 = Task.Factory.StartNew(MastercardTrx2);
            Task <List <E_TRANSACTION> > t3 = Task.Factory.StartNew(MastercardTrx3);

            Console.WriteLine("  MastercardTransactions waiting for Merging ");

            List <Task> taskList = new List <Task> {
                t1, t2, t3
            };

            Task.WaitAll(taskList.ToArray());
            Console.WriteLine("  MastercardTransactions Merged");

            using (EtzbkDataContext db = new EtzbkDataContext())
            {
                try
                {
                    var allTmcData = DataManupulation.MergeEntityList(new List <List <E_TRANSACTION> >()
                    {
                        t1.Result.ToList(), t2.Result.ToList(), t3.Result.ToList()
                    });


                    //PROCESS DATA

                    Console.WriteLine(" Merge All Data Spooled... Removing Duplicate record");


                    var uniqueIDs     = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray();
                    var uniqueIDsOnDB = db.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray();
                    var etrxData      = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID));
                    Console.WriteLine(uniqueIDsOnDB.Count() + " Duplicate record removed--NonEtzCardTransaction");

                    logger.LogInfoMessage(nameof(MastercardTransactions) + " " + etrxData.Count() + " Record ready to be Inserted");
                    db.E_TRANSACTION.AddRange(etrxData);
                    db.SaveChanges();

                    logger.LogInfoMessage(nameof(MastercardTransactions) + " " + etrxData.Count() + " Record Inserted for Settlement");

                    Console.WriteLine(etrxData.Count() + " Record Inserted for Settlement");
                    Console.WriteLine("Marking Transaction as spooled transaction");
                    if (uniqueIDs.Count() > 0)
                    {
                        DataManupulation.UpdateTMCProcccessedTransaction(uniqueIDs);
                    }
                    Console.WriteLine("Spooled transactions Marked");
                    Console.WriteLine("Spooled transactions Marked");
                }
                catch (SqlException ex)
                {
                    Console.WriteLine("SQLException from MastercardTransactions Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogDebugMessage("SQLException from Run " + nameof(MastercardTransactions) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception from Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogDebugMessage("Exception from Run " + nameof(MastercardTransactions) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
            }
            logger.LogInfoMessage(nameof(MastercardTransactions) + " Merged ");



            Console.WriteLine("MastercardTransactions Transaction spool Completed");
        }
        public void Run()
        {
            logger = new Logger();

            logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " Starting  EtranzactChannelTransaction ");

            Task <List <E_TRANSACTION> > t1 = Task.Factory.StartNew(Channel1);
            Task <List <E_TRANSACTION> > t2 = Task.Factory.StartNew(Channel2);
            Task <List <E_TRANSACTION> > t3 = Task.Factory.StartNew(Channel3);
            Task <List <E_TRANSACTION> > t4 = Task.Factory.StartNew(Channel4);
            Task <List <E_TRANSACTION> > t5 = Task.Factory.StartNew(Channel5);
            Task <List <E_TRANSACTION> > t6 = Task.Factory.StartNew(Channel6);
            Task <List <E_TRANSACTION> > t7 = Task.Factory.StartNew(Channel7);
            Task <List <E_TRANSACTION> > t8 = Task.Factory.StartNew(Channel8);


            logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + "  EtranzactChannelTransaction waiting for Merging ");
            Console.WriteLine("  EtranzactChannelTransaction waiting for Merging ");
            using (EtzbkDataContext db = new EtzbkDataContext())
            {
                try
                {
                    List <Task> taskList = new List <Task> {
                        t1, t2, t3, t4, t5, t6, t7, t8
                    };
                    Task.WaitAll(taskList.ToArray());
                    Console.WriteLine("  EtranzactChannelTransaction Merged");

                    //Merge All Data Spooled
                    var allTmcData = DataManupulation.MergeEntityList(new List <List <E_TRANSACTION> >()
                    {
                        t1.Result.ToList(), t2.Result.ToList(), t3.Result.ToList(), t4.Result.ToList(), t5.Result.ToList(), t6.Result.ToList(), t7.Result.ToList(), t8.Result.ToList()
                    });

                    Console.WriteLine(" Merge All Data Spooled... Removing Duplicate record");

                    //Remove duplicate value
                    var uniqueIDs     = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray();
                    var uniqueIDsOnDB = db.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray();
                    var etrxData      = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID));

                    Console.WriteLine(uniqueIDsOnDB.Count() + " Duplicate record removed--NonEtzCardTransaction");

                    logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " " + etrxData.Count() + " Record ready to be Inserted");

                    db.E_TRANSACTION.AddRange(etrxData);
                    db.SaveChanges();

                    logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " " + etrxData.Count() + " Record Inserted for Settlement");

                    Console.WriteLine(etrxData.Count() + " Record Inserted for Settlement");
                    Console.WriteLine("Marking Transaction as spooled transaction");
                    if (uniqueIDs.Count() > 0)
                    {
                        DataManupulation.UpdateTMCProcccessedTransaction(uniqueIDs);
                    }
                    Console.WriteLine("Spooled transactions Marked");
                }
                catch (SqlException ex)
                {
                    Console.WriteLine("SQLException from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogDebugMessage("SQLException from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex));
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex));
                    logger.LogDebugMessage("Exception from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex));
                }

                logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " Merged ");


                Console.WriteLine("ETZ Channel Transaction Completed");

                logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " ETZ Channel  Transaction Completed ");
            }
        }