Exemple #1
0
        public void TestUpdateMerchantDailyActivityMoreXcts()
        {
            int      merchant_id      = _merchantTestsGlobal.MERCHANT_ID;
            DateTime xct_posting_date = _merchantTestsGlobal.XCT_POSTING_DATE;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            Assert.NotNull(merchant);

            Assert.NotNull(merchant.terminals);

            int    xctCntToGenerate = new Random().Next(1, 10);
            Random amountGenerator  = new Random();

            var transactions = new List <TransactionMBE>();

            for (int loopCtr = 1; loopCtr <= xctCntToGenerate; loopCtr++)
            {
                transactions.Add(new TransactionMBE()
                {
                    terminal_id = merchant.terminals.OrderBy(t => Guid.NewGuid()).First().terminal_id,
                    card_data   = _merchantTestsGlobal.PAYMENT_CARDS.OrderBy(t => Guid.NewGuid()).First(),
                    xct_amount  = Math.Round(new decimal(amountGenerator.NextDouble() * 1000.0), 2),
                    xct_dt      = DateTime.Now,
                    xct_id      = Guid.NewGuid(),
                    xct_type    = Enums.TRANSACTION_TYPE.cp_sale
                });
            }

            MongoDBContext.UpsertMerchantDailyActivity(merchant_id, xct_posting_date, transactions);
        }
Exemple #2
0
        public void TestUpdateMerchantDailyActivity1stXct()
        {
            int      merchant_id      = _merchantTestsGlobal.MERCHANT_ID;
            DateTime xct_posting_date = _merchantTestsGlobal.XCT_POSTING_DATE;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            Assert.NotNull(merchant);

            var terminal = merchant.terminals.OrderBy(t => t.terminal_id).FirstOrDefault();

            Assert.NotNull(terminal);

            var transactions = new List <TransactionMBE>()
            {
                new TransactionMBE()
                {
                    terminal_id = terminal.terminal_id,
                    card_data   = _merchantTestsGlobal.PAYMENT_CARDS.First(),
                    xct_amount  = 1234.56M,
                    xct_dt      = DateTime.Now,
                    xct_id      = Guid.NewGuid(),
                    xct_type    = Enums.TRANSACTION_TYPE.cp_sale
                }
            };

            MongoDBContext.UpsertMerchantDailyActivity(merchant_id, xct_posting_date, transactions);
        }
        public static string BuildFAFMessage(int merchantId, DateTime xctPostingDate)
        {
            string response = string.Empty;

            var merchant = MongoDBContext.FindMerchantById(merchantId);
            var merchantDailyActivity = MongoDBContext.FindMerchantDailyActivity(merchantId, xctPostingDate);

            if (merchantDailyActivity == null)
            {
                merchantDailyActivity = new MerchantDailyActivityMBE()
                {
                    merchant_id = merchantId, xct_posting_date = xctPostingDate
                };
                MongoDBContext.InsertMerchantDailyActivity(merchantDailyActivity);
            }

            if (!merchantDailyActivity.is_fast_access_funding_enabled.HasValue ||
                !merchantDailyActivity.is_fast_access_funding_enabled.Value)
            {
                response = $"Reply CONFIRM to have today's settlement deposited into debit card account ending in {merchant.setup_options.debit_card_no.Right(4)} tomorrow morning upon batch close.";
            }
            else
            {
                response = $"Reply UNDO to NOT use Fast Access Funding for today's settlement and have it deposited on the normal schedule.";
            }

            return(response);
        }
        public static string TestWelcomeAccept(int merchantId)
        {
            // get merchant metadata (MDB ??)
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            var welcomeTestMsg = $"Accepted?: [{merchant.setup_options.is_accepted_welcome_agreement}]";

            return(welcomeTestMsg);
        }
Exemple #5
0
        public void TestFindMerchantById()
        {
            int merchant_id = _merchantTestsGlobal.MERCHANT_ID;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            Assert.NotNull(merchant);
            Assert.Equal(merchant_id, merchant.merchant_id);
        }
        public static void FireAllTerminalsClosedEvent(int merchantId)
        {
            var      merchant       = MongoDBContext.FindMerchantById(merchantId);
            DateTime xctPostingDate = DateTime.Today;

            var xctSummaryMsg = BuildSummaryMessage(merchantId, xctPostingDate);

            TwilioController.SendSMSMessage(merchant.primary_contact.phone_no, xctSummaryMsg);
        }
        public static void SendWelcomeMessage(int merchantId)
        {
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            var welcomeMsg = BuildWelcomeMessage(merchant);
            var configMsg  = BuildConfigMessage(merchant.merchant_id);

            //TwilioController.SendSMSMessage(merchant.primary_contact.phone_no, $"{welcomeMsg}\n{configMsg}");
            TwilioController.SendSMSMessage(merchant.primary_contact.phone_no, $"{welcomeMsg}");
        }
        public static void FireClosedEventsForAllMerchants()
        {
            for (int merchantId = 1; merchantId <= 8; merchantId++)
            {
                var      merchant       = MongoDBContext.FindMerchantById(merchantId);
                DateTime xctPostingDate = DateTime.Today;

                var xctSummaryMsg = BuildSummaryMessage(merchantId, xctPostingDate);

                TwilioController.SendSMSMessage(merchant.primary_contact.phone_no, xctSummaryMsg);
            }
        }
        public static string ResetAcceptedJoin(int merchantId)
        {
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            merchant.setup_options.is_accepted_welcome_agreement = false;

            MongoDBContext.UpdateMerchant(merchant);

            string returnMsg = "Welcome Acceptance reset";

            return(returnMsg);
        }
Exemple #10
0
        public static void GenerateChargebacksXcts(int merchantId)
        {
            DateTime xctPostingDate = DateTime.Today;

            // get merchant metadata (MDB ??)
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            #region Optionally Create MerchantDailyActivity record (if reqd)
            var merchantActivity = MongoDBContext.FindMerchantDailyActivity(merchantId, xctPostingDate);

            if (merchantActivity == null)
            {
                merchantActivity = new MerchantDailyActivityMBE()
                {
                    merchant_id      = merchantId,
                    xct_posting_date = xctPostingDate
                };

                MongoDBContext.InsertMerchantDailyActivity(merchantActivity);
            }
            #endregion

            int    xctCntToGenerate   = new Random().Next(1, 2);
            Random amountGenerator    = new Random();
            Random deltaDaysGenerator = new Random();

            var transactions = new List <TransactionMBE>();

            // create a random # of purchase xcts
            for (int loopCtr = 1; loopCtr <= xctCntToGenerate; loopCtr++)
            {
                int deltaDays = -1 * deltaDaysGenerator.Next(1, 3); // creates a number between 1 and 12

                DateTime xctDate = DateTime.Now.AddDays(deltaDays);

                transactions.Add(new TransactionMBE()
                {
                    terminal_id = merchant.terminals.OrderBy(t => Guid.NewGuid()).First().terminal_id,
                    card_data   = _paymentCards.OrderBy(t => Guid.NewGuid()).First(),
                    xct_amount  = Math.Round(new decimal(amountGenerator.NextDouble() * -50.0), 2),
                    xct_dt      = xctDate,
                    xct_id      = Guid.NewGuid(),
                    xct_type    = Enums.TRANSACTION_TYPE.chargeback
                });
            }

            // store xcts
            MongoDBContext.UpsertMerchantDailyActivity(merchantId, xctPostingDate, transactions);
        }
Exemple #11
0
        /// <summary>
        /// Create and store a set of random transactions on the specified merchant
        /// </summary>
        /// <remarks>
        /// Used to drive demos
        /// </remarks>
        public static void GenerateRandomPurchaseXcts(int merchantId)
        {
            DateTime xctPostingDate = DateTime.Today;

            // get merchant metadata (MDB ??)
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            #region Optionally Create MerchantDailyActivity record (if reqd)
            var merchantActivity = MongoDBContext.FindMerchantDailyActivity(merchantId, xctPostingDate);

            if (merchantActivity == null)
            {
                merchantActivity = new MerchantDailyActivityMBE()
                {
                    merchant_id      = merchantId,
                    xct_posting_date = xctPostingDate
                };

                MongoDBContext.InsertMerchantDailyActivity(merchantActivity);
            }
            #endregion

            int    xctCntToGenerate = new Random().Next(5, 25);
            Random amountGenerator  = new Random();

            var transactions = new List <TransactionMBE>();

            // create a random # of purchase xcts
            for (int loopCtr = 1; loopCtr <= xctCntToGenerate; loopCtr++)
            {
                int cardPresentIndicator = new Random().Next(1, 100);

                transactions.Add(new TransactionMBE()
                {
                    terminal_id = merchant.terminals.OrderBy(t => Guid.NewGuid()).First().terminal_id,
                    card_data   = _paymentCards.OrderBy(t => Guid.NewGuid()).First(),
                    xct_amount  = Math.Round(new decimal(amountGenerator.NextDouble() * 1000.0), 2),
                    xct_dt      = DateTime.Now,
                    xct_id      = Guid.NewGuid(),
                    xct_type    = (cardPresentIndicator % 2 == 0) ?
                                  Enums.TRANSACTION_TYPE.cp_sale : Enums.TRANSACTION_TYPE.cnp_sale
                });
            }

            // store xcts
            MongoDBContext.UpsertMerchantDailyActivity(merchantId, xctPostingDate, transactions);
        }
Exemple #12
0
        public static DateTime DetermineActivityDate(int merchant_id, DateTime xct_dt)
        {
            DateTime activityDate = DateTime.Today;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            if (merchant.setup_options.is_host_data_capture_enabled)
            {
                TimeSpan xct_dt_ts = new TimeSpan(xct_dt.Hour, xct_dt.Minute, xct_dt.Second);
                if (xct_dt_ts > merchant.setup_options.auto_close_hh_mm.Value)
                {
                    activityDate = activityDate.AddDays(1);
                }
            }

            return(activityDate);
        }
Exemple #13
0
        public static string AcceptWelcomeMessage(int merchantId, bool isAccepted)
        {
            // get merchant metadata (MDB ??)
            var merchant = MongoDBContext.FindMerchantById(merchantId);

            string returnMsg = string.Empty;

            if (merchant.setup_options.is_accepted_welcome_agreement)
            {
                returnMsg = "Thanks for replying, you have already accepted!, Hint: You can always text HELP? or ??? to see a list of commands.";
            }
            else
            {
                merchant.setup_options.is_accepted_welcome_agreement = isAccepted;
                MongoDBContext.UpdateMerchant(merchant);

                returnMsg = isAccepted ? $"Welcome to {GeneralConstants.APP_NAME}, you are all setup! Hint: You can always text HELP? or ??? to see a list of commands." : "We are sorry you choose not to join, text JOIN at any time to have an opportunity to accept.";
            }

            return(returnMsg);
        }
Exemple #14
0
        public void TestUpdateMerchantDailyActivityMoreTerminals()
        {
            int      merchant_id      = _merchantTestsGlobal.MERCHANT_ID;
            DateTime xct_posting_date = _merchantTestsGlobal.XCT_POSTING_DATE;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            Assert.NotNull(merchant);

            var terminals = merchant.terminals.OrderBy(t => t.terminal_id).Skip(1).ToList();

            Assert.NotNull(terminals);

            var terminalsStatus = from t in terminals
                                  select new TerminalStatusMBE()
            {
                terminal_id = t.terminal_id,
                open_dt     = xct_posting_date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute)
            };

            MongoDBContext.UpsertMerchantDailyActivity(merchant_id, xct_posting_date, terminalsStatus.ToList());
        }
Exemple #15
0
        public static string BuildSummaryMessage(int merchantId, DateTime xctPostingDate)
        {
            MerchantMBE merchant = MongoDBContext.FindMerchantById(merchantId);

            XctDailySummaryBE xctSummary = MerchantController.GetXctDailySummary(merchantId, xctPostingDate);

            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"Merchant Account Summary for: {xctPostingDate:ddd MMM dd, yyyy} as of {DateTime.Now.ToString("h:mm tt")} ");
            sb.AppendLine("\n");

            if (xctSummary != null)
            {
                foreach (var xctType in xctSummary.SummaryByXctType)
                {
                    sb.AppendLine($"{xctType.XctTypeDesc}:");
                    sb.AppendLine($"{xctType.XctTotalValue:C} [{xctType.XctCount} txns]");

                    if (xctType.XctType == Enums.TRANSACTION_TYPE.chargeback)
                    {
                        sb.AppendLine("  (text CBACK for details)");
                    }

                    sb.AppendLine("\n");
                }
                sb.AppendLine($"Net Total:  {xctSummary.SummaryByXctType.Sum(x => x.XctTotalValue):C}");
                sb.AppendLine("(all Card Transactions)");
                sb.AppendLine("\n");
                sb.AppendLine($"Final settlement amount will be deposited into your checking account ending in {merchant.setup_options.debit_card_no.Substring(1,4)} on {DateTime.Now.AddBusinessDays(2).ToString("ddd MMM dd, yyyy")} -- to" +
                              " receive these funds tomorrow morning reply FAF");
            }
            else
            {
                sb.AppendLine(@"No activity yet for today.");
            }

            return(sb.ToString());
        }
Exemple #16
0
        public void TestUpdateMerchantDailyActivity1stTerminal()
        {
            int      merchant_id      = _merchantTestsGlobal.MERCHANT_ID;
            DateTime xct_posting_date = _merchantTestsGlobal.XCT_POSTING_DATE;

            var merchant = MongoDBContext.FindMerchantById(merchant_id);

            Assert.NotNull(merchant);

            var terminal = merchant.terminals.OrderBy(t => t.terminal_id).FirstOrDefault();

            Assert.NotNull(terminal);

            var terminalsStatus = new List <TerminalStatusMBE>()
            {
                new TerminalStatusMBE()
                {
                    terminal_id = terminal.terminal_id, open_dt = xct_posting_date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute)
                }
            };

            MongoDBContext.UpsertMerchantDailyActivity(merchant_id, xct_posting_date, terminalsStatus);
        }
Exemple #17
0
        public static MerchantMBE CreateMerchant(int merchantId)
        {
            MerchantMBE merchant = null;

            try
            {
                merchant = MongoDBContext.FindMerchantById(merchantId);
                MongoDBContext.DeleteMerchant(merchantId);
                merchant = null;
            }
            catch { }

            switch (merchantId)
            {
            case 1:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Tom's Deli",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Tom",
                        last_name     = @"Bruns",
                        phone_no      = GeneralConstants.TOMS_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890123401"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 2:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Marcos Canoe Livery",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Marco",
                        last_name     = @"Fernandes",
                        phone_no      = GeneralConstants.MARCOS_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890126702"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 3:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Dusty's Cookies",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Dusty",
                        last_name     = @"Gomez",
                        phone_no      = GeneralConstants.DUSTYS_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890125203"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 4:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Byrne's Bar & Grill",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Josh",
                        last_name     = @"Byrne",
                        phone_no      = GeneralConstants.JOSHS_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890122704"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 5:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Dr. Boeding",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Alex",
                        last_name     = @"Boeding",
                        phone_no      = GeneralConstants.ALEXS_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890129905"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 6:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Pallavi's Robot Hobby Shop",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Pallavi",
                        last_name     = @"TBD",
                        phone_no      = GeneralConstants.PALLAVI_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890121106"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 7:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Joe's Java Hut",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Joe",
                        last_name     = @"Pellar",
                        phone_no      = GeneralConstants.JOES_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890121107"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;

            case 8:
                merchant = new MerchantMBE()
                {
                    merchant_id     = merchantId,
                    merchant_name   = @"Jake's State Farm",
                    primary_contact = new ContactMBE()
                    {
                        first_name    = @"Jianan",
                        last_name     = @"Hou",
                        phone_no      = GeneralConstants.JAKES_PHONE_NO,
                        email_address = @"*****@*****.**"
                    },
                    setup_options = new SetupOptionsMBE()
                    {
                        is_host_data_capture_enabled = true,
                        auto_close_hh_mm             = new TimeSpan(19, 0, 0),
                        is_fast_funding_enabled      = true,
                        debit_card_no = @"1234567890122208"
                    },
                    terminals = new List <TerminalMBE>()
                    {
                        new TerminalMBE()
                        {
                            terminal_id = "TID-001", terminal_type = @"610", terminal_desc = @"Checkout 1"
                        },
                        new TerminalMBE()
                        {
                            terminal_id = "TID-002", terminal_type = @"610", terminal_desc = @"Checkout 2"
                        },
                    }
                };
                break;
            }
            ;

            MongoDBContext.InsertMerchant(merchant);

            return(merchant);
        }