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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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()); }
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()); }
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); }
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); }