using BuddyFinance.Integration; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Model; using System; using System.Linq; namespace BuddyFinance.Billing { public class Program : BaseIntegrator { private static TransactionsIntegrator integrator = new TransactionsIntegrator(); public static void Main(string[] args) { //Tumelo : 22 January 18 | Get all users signup date ,get "day" from sign up //user will be used to get name,surname and email address to send notification of monthly fee. (optional) //this code should exclude budddy finance account when debiting monthly fees //code should debit all lenders and credit buddy finance profile. //code should accomodate 28 ,29 30 and 31 using (var db = new BuddyFinanceDBEntities()) { Console.WriteLine("Buddy Finance auto billing processor started at " + DateTime.Now.ToString() + "..."); var servicefee = integrator._fees[FeeTypesEnum.ServiceFee]; var buddyprofile = db.Profiles.FirstOrDefault(p => p.ProfileTypeId == (int)ProfileTypeEnum.BuddyFinance); var activeprofiles = db.Profiles.Where(m => m.ProfileTypeId == (int)ProfileTypeEnum.Lender && m.StatusId == (int)ProfileStatusEnum.Approved).ToList(); foreach (var profile in activeprofiles) { Transaction transaction; try { if (profile.BillingDate.Day == DateTime.Now.Day) { profile.AvailableFunds -= servicefee.Amount; //Tumelo :not sure about this : doesnt debit availble funds :( transaction = new Transaction { Description = servicefee.Description.ToUpper(), Amount = servicefee.Amount, TransactionStatusId = (int)TransactionStatusEnum.Success, ProfileId = profile.Id, Reference = profile.ProfileNumber, TransactionDate = System.DateTime.Now, TransactionTypeId = (int)TransactionTypeEnum.Debit }; db.Transactions.Add(transaction); Console.WriteLine(profile.FullNames + " has been debited for " + transaction.Description); buddyprofile.AvailableFunds += servicefee.Amount; transaction = new Transaction { Description = $"{servicefee.Description} recieved".ToUpper(), Amount = servicefee.Amount, TransactionStatusId = (int)TransactionStatusEnum.Success, ProfileId = buddyprofile.Id, Reference = profile.ProfileNumber, TransactionDate = System.DateTime.Now, TransactionTypeId = (int)TransactionTypeEnum.Credit }; db.Transactions.Add(transaction); db.SaveChanges(); Console.WriteLine("Buddy Finance has been credited"); //optional :send email to user that they got billed } } catch (Exception ex) { Console.WriteLine("Exception has occurred..." + ex.Message); // TODO: log to database } } Console.WriteLine("Buddy Finance auto billing processor ended at " + DateTime.Now.ToString() + "..."); } } } }