public async Task FindAsync_given_existing_id_returns_mapped_EventStockDTO() { using (var connection = await CreateConnectionAsync()) using (var context = await CreateContextAsync(connection)) { var entity = new EventStock { EventId = 1, PersonId = 1, WineId = 1 }; context.EventStocks.Add(entity); await context.SaveChangesAsync(); var id = entity.Id; var repository = new EventStockRepository(context); var eventStock = await repository.FindAsync(id); Assert.Equal(1, eventStock.EventId); Assert.Equal(1, eventStock.PersonId); Assert.Equal(1, eventStock.WineId); } }
public void Delete_Event() { EventManager eventManager = (EventManager)container["EventManager"]; //I choose LoanInterestAccruingEvent, but delete work with any event AccruedInterestEvent loanInterestAccruingEvent = new AccruedInterestEvent { Id = 15, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), Interest = 99, AccruedInterest = 3, Rescheduled = true, InstallmentNumber = 4 }; eventManager.AddLoanEvent(loanInterestAccruingEvent, 3); loanInterestAccruingEvent.CancelDate = DateTime.Now; eventManager.DeleteLoanEvent(loanInterestAccruingEvent); EventStock eventStock = eventManager.SelectEvents(3); foreach (Event e in eventStock.GetEvents()) { if (e is AccruedInterestEvent) _AssertLoanInterestAccruingEvent(e as AccruedInterestEvent, new DateTime(2006, 7, 21), 99, 3, true, 4,true); } }
public void Select_Added_ReschedulingLoanEvent() { EventManager eventManager = (EventManager)container["EventManager"]; RescheduleLoanEvent rescheduleLoanEvent = new RescheduleLoanEvent { Id = 14, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), Amount = 2345, NbOfMaturity = 4, DateOffset = 0, Interest = 100 }; eventManager.AddLoanEvent(rescheduleLoanEvent, 1); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is RescheduleLoanEvent) { _AssertReschedulingLoanEvent(e as RescheduleLoanEvent, new DateTime(2006, 7, 21), 2345, 3, 4); } } }
public void Select_Added_WriteOffEvent() { EventManager eventManager = (EventManager)container["EventManager"]; WriteOffEvent writeOffEvent = new WriteOffEvent { Id = 15, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), OLB = 34, AccruedInterests = 355, AccruedPenalties = 433, PastDueDays = 3, OverduePrincipal = 0 }; eventManager.AddLoanEvent(writeOffEvent, 1); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is WriteOffEvent) _AssertWriteOffEvent(e as WriteOffEvent, new DateTime(2006, 7, 21), 34, 355, 433, 3); } }
public void Select_Added_RepaymentEvent() { EventManager eventManager = (EventManager)container["EventManager"]; RepaymentEvent repaymentEvent = new RepaymentEvent { Id = 130, Code = "RGLE", User = new User {Id = 1}, Date = new DateTime(2006, 7, 21), PastDueDays = 3, Principal = 1999, Interests = 2333, Commissions = 23, InstallmentNumber = 3, PaymentMethod = new PaymentMethod(1, "Cash", "", false) }; using (SqlTransaction tran = eventManager.GetConnection().BeginTransaction()) eventManager.AddLoanEvent(repaymentEvent, 1, tran); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is RepaymentEvent) _AssertRepaymentEvent(e as RepaymentEvent, "RGLE", new DateTime(2006, 7, 21), 3, 1999, 2333, 23, 3); } }
public void Select_Added_loanDisbursmentEvent() { EventManager eventManager = (EventManager)container["EventManager"]; LoanDisbursmentEvent loanDisbursmentEvent = new LoanDisbursmentEvent { Id = 100, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), Amount = 100, }; var commission = new LoanEntryFeeEvent(); commission.Fee = 10; loanDisbursmentEvent.Commissions = new List<LoanEntryFeeEvent>(); loanDisbursmentEvent.Commissions.Add(commission); PaymentMethod method = new PaymentMethod(1, "Savings", "Savings method", false); loanDisbursmentEvent.PaymentMethod = method; eventManager.AddLoanEvent(loanDisbursmentEvent, 2); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is LoanDisbursmentEvent) _AssertLoanDisbursmentEvent(e as LoanDisbursmentEvent, new DateTime(2006, 7, 21), 100, 10); } }
public void Select_Added_LoanInterestAccruingEvent() { EventManager eventManager = (EventManager)container["EventManager"]; AccruedInterestEvent loanInterestAccruingEvent = new AccruedInterestEvent { Id = 15, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21), Interest = 99, AccruedInterest = 3, Rescheduled = true, InstallmentNumber = 4 }; eventManager.AddLoanEvent(loanInterestAccruingEvent, 1); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is AccruedInterestEvent) { _AssertLoanInterestAccruingEvent(e as AccruedInterestEvent, new DateTime(2006, 7, 21), 99, 3, true, 4, false); } } }
public async Task Read_returns_mapped_EventStockDTO() { using (var connection = await CreateConnectionAsync()) using (var context = await CreateContextAsync(connection)) { var entity = new EventStock { EventId = 1, PersonId = 1, WineId = 1 }; context.EventStocks.Add(entity); await context.SaveChangesAsync(); var id = entity.Id; var repository = new EventStockRepository(context); var eventStocks = await repository.ReadAsync(); var eventStock = eventStocks.FirstOrDefault(); Assert.Equal(1, eventStocks.Count); Assert.Equal(entity.EventId, eventStock.EventId); Assert.Equal(entity.PersonId, eventStock.PersonId); Assert.Equal(entity.WineId, eventStock.WineId); } }
public async Task DeleteAsync_given_existing_eventStockId_deletes_it() { using (var connection = await CreateConnectionAsync()) using (var context = await CreateContextAsync(connection)) { var entity = new EventStock { EventId = 2, PersonId = 3, WineId = 4 }; context.EventStocks.Add(entity); await context.SaveChangesAsync(); var id = entity.Id; var repository = new EventStockRepository(context); var deleted = await repository.DeleteAsync(id); Assert.True(deleted); var deletedEntity = await context.EventStocks.FindAsync(id); Assert.Null(deletedEntity); } }
public void TestFixtureSetUp() { _eventStock = new EventStock(); _eventStock.Add(new RepaymentEvent()); _eventStock.Add(new BadLoanRepaymentEvent()); _eventStock.Add(new StatisticalProvisionningEvent()); _eventStock.Add(new LoanDisbursmentEvent()); _eventStock.Add(new RescheduleLoanEvent()); _eventStock.Add(new WriteOffEvent()); }
public void TestClosureEventWithCurrency() { EventStock eventStock = new EventStock { new LoanDisbursmentEvent { Id = 1, Date = new DateTime(2000, 1, 1), Amount = 100, PaymentMethod = new PaymentMethod { Id = 0 }, ClientType = OClientTypes.Person, EconomicActivity = new EconomicActivity(1, "Agriculture", null, false), Currency = new Currency { Id = 1 } }, new RepaymentEvent { Id = 2, Principal = 100, Interests = 5, Penalties = 1, Commissions = 0, Date = new DateTime(2000, 1, 1), Currency = new Currency { Id = 1 }, ClientType = OClientTypes.Person }, }; eventStock.GetRepaymentEvents()[0].LoanProduct = new LoanProduct { Id = 2, Code = "EDE60", Name = "EDEN 60", Currency = new Currency { Id = 1 } }; AccountingClosure closure = new AccountingClosure(); List <FiscalYear> fYears = new List <FiscalYear> { new FiscalYear { OpenDate = new DateTime(1900, 1, 1) } }; List <Booking> bookings = closure.GetBookings(_rules, eventStock, null, null, null, fYears); Assert.AreEqual(bookings[0].Amount, 100); Assert.AreEqual(bookings[0].DebitAccount.Number, "1052"); Assert.AreEqual(bookings[0].CreditAccount.Number, "1020"); }
public void SelectEvents() { EventManager eventManager = (EventManager)container["EventManager"]; EventStock eventStock = eventManager.SelectEvents(1); eventStock.SortEventsByDate(); Assert.AreEqual(8, eventStock.GetNumberOfEvents); _AssertLoanDisbursmentEvent((LoanDisbursmentEvent)eventStock.GetEvent(0), new DateTime(2009, 1, 1), 1000, 10); _AssertBadLoanRepaymentEvent((BadLoanRepaymentEvent)eventStock.GetEvent(1), new DateTime(2009, 2, 1), 10, 1000, 24, 2, 1); _AssertRepaymentEvent((RepaymentEvent)eventStock.GetEvent(3), "RGLE", new DateTime(2009, 4, 1), 10, 1000, 24, 2, 1); _AssertWriteOffEvent((WriteOffEvent)eventStock.GetEvent(4), new DateTime(2009, 5, 1), 1000, 20, 24, 1); _AssertReschedulingLoanEvent((RescheduleLoanEvent)eventStock.GetEvent(5), new DateTime(2009, 6, 1), 1000, 2, 0); _AssertLoanInterestAccruingEvent((AccruedInterestEvent) eventStock.GetEvent(6), new DateTime(2009, 7, 1), 342, 22, true, 3,false); }
public async Task <int> CreateAsync(EventStockDTO eventStock) { var eventStockEntity = new EventStock { EventId = eventStock.EventId, PersonId = eventStock.PersonId, WineId = eventStock.WineId }; await _context.EventStocks.AddAsync(eventStockEntity); await _context.SaveChangesAsync(); return(eventStockEntity.Id); }
public void TestClosureTellerEvents() { EventStock eventStock = new EventStock { new TellerCashInEvent { Id = 1, Amount = 1000, Currency = new Currency { Id = 1 }, Date = new DateTime(2000, 1, 1), TellerId = 2 } }; eventStock.Add(new EventStock { new TellerCashOutEvent { Id = 2, Amount = 267, Currency = new Currency { Id = 1 }, Date = new DateTime(2000, 1, 1), TellerId = 3 } }); List <FiscalYear> fYears = new List <FiscalYear> { new FiscalYear { OpenDate = new DateTime(1900, 1, 1) } }; AccountingClosure closure = new AccountingClosure(); List <Booking> bookings = closure.GetBookings(_rules, eventStock, _tellers, null, null, fYears); Assert.AreEqual(bookings[0].Amount, 1000); Assert.AreEqual(bookings[0].CreditAccount.Number, "1991"); Assert.AreEqual(bookings[0].DebitAccount.Number, "1999"); Assert.AreEqual(bookings[1].Amount, 267); Assert.AreEqual(bookings[1].CreditAccount.Number, "1999"); Assert.AreEqual(bookings[1].DebitAccountNumber, "1992"); }
public void Select_Added_RegEvent() { EventManager eventManager = (EventManager)container["EventManager"]; RegEvent regEvent = new RegEvent { Id = 15, User = new User { Id = 1 }, Date = new DateTime(2006, 7, 21) }; eventManager.AddLoanEvent(regEvent, 1); EventStock eventStock = eventManager.SelectEvents(2); foreach (Event e in eventStock.GetEvents()) { if (e is RegEvent) _AssertRegEvent(e as RegEvent, new DateTime(2006, 7, 21),false); } }
public void TestClosureLodeEvent() { EventStock eventStock = new EventStock { new LoanDisbursmentEvent { Id = 1, Amount = 100, Date = new DateTime(2000, 1, 1), EconomicActivity = new EconomicActivity(1, "Agriculture", null, false), ClientType = OClientTypes.Person, PaymentMethod = new PaymentMethod { Id = 0 }, LoanProduct = new LoanProduct { Id = 1, Code = "EDE34", Name = "EDEN 34", Currency = new Currency { Id = 1 } }, Currency = new Currency { Id = 0 } } }; List <FiscalYear> fYears = new List <FiscalYear> { new FiscalYear { OpenDate = new DateTime(1900, 1, 1) } }; AccountingClosure closure = new AccountingClosure(); List <Booking> bookings = closure.GetBookings(_rules, eventStock, null, null, null, fYears); Assert.AreEqual(bookings[0].Amount, 100); Assert.AreEqual(bookings[0].DebitAccount.Number, "1052"); Assert.AreEqual(bookings[0].CreditAccount.Number, "1020"); }
public async Task UpdateAsync_given_eventStock_updates_it() { using (var connection = await CreateConnectionAsync()) using (var context = await CreateContextAsync(connection)) { var entity = new EventStock { EventId = 1, PersonId = 1, WineId = 1 }; context.EventStocks.Add(entity); await context.SaveChangesAsync(); var id = entity.Id; var repository = new EventStockRepository(context); var eventStock = new EventStockDTO { Id = id, EventId = 2, PersonId = 3, WineId = 4 }; var updated = await repository.UpdateAsync(eventStock); Assert.True(updated); var updatedEntity = await context.EventStocks.FindAsync(id); Assert.Equal(2, updatedEntity.EventId); Assert.Equal(3, updatedEntity.PersonId); Assert.Equal(4, updatedEntity.WineId); } }
public EventStock SelectEventsForClosure(DateTime beginDate, DateTime endDate, Branch branch) { EventStock eventStock = _eventManagement.SelectEventsForClosure(beginDate, endDate, branch); return(eventStock); }
public List <Booking> GetBookings(AccountingRuleCollection rules, EventStock eventStock, List <Teller> tellers, List <PaymentMethod> paymentMethods, List <ExchangeRate> rates, List <FiscalYear> fiscalYears) { if (eventStock == null) { return(new List <Booking>()); } rules.SortByOrder(); eventStock.SortEventsById(); bool isExported = false; var bookings = new List <Booking>(); foreach (Event eventItem in eventStock) { ClosureStatus = "Closure"; ClosureStatusInfo = " ->" + eventItem.Code + "-" + eventItem.Id; var attributes = new List <EventAttribute>(); List <ContractAccountingRule> rulesToApply = rules.GetContractAccountingRules().Where(item => item.EventType.EventCode == eventItem.Code).ToList(); rules.SortByOrder(); List <ContractAccountingRule> orders = rulesToApply.GroupBy(a => a.Order).Select(g => g.Last()).ToList(); foreach (ContractAccountingRule orderRule in orders) { foreach (ContractAccountingRule rule in rulesToApply.Where(r => r.Order == orderRule.Order).ToList()) { List <EventAttribute> evtAttributes = (from eventAtt in attributes where eventAtt.Name == rule.EventAttribute.Name select eventAtt).ToList(); if (rule.EventType.EventCode == eventItem.Code && evtAttributes.Count <= rulesToApply.Count(r => r.Order == orderRule.Order) - 1) { ContractAccountingRule tempRule = rule.Copy(); if (paymentMethods != null && eventItem.PaymentMethod != null) { tempRule = GetParentPaymentAccount(eventItem.PaymentMethod.Id, tempRule, paymentMethods); } // teller must be last if (tellers != null && eventItem.TellerId != null) { //that copy is very important because the rule might be over written by payment method tempRule = rule.Copy(); tempRule = GetParentTellerAccount(eventItem.TellerId, tempRule, tellers); } Booking b = GetBooking(tempRule, eventItem); if (b != null && b.Amount > 0) { //setting fiscal year if (fiscalYears != null) { b.FiscalYear = fiscalYears .First( f => f.OpenDate <= b.Date.Date && (f.CloseDate == null || f.CloseDate >= b.Date.Date) ); } //setting xrate ExchangeRate rate = null; if (rates != null) { rate = rates.FirstOrDefault(r => r.Date.Date == b.Date.Date); } b.ExchangeRate = b.Currency.IsPivot ? 1 : rate == null ? 0 : rate.Rate; isExported = true; attributes.Add(tempRule.EventAttribute); bookings.Add(b); } } } } if (eventItem is TellerCashInEvent || eventItem is TellerCashOutEvent) { bookings.Add(GetTellerBooking((TellerEvent)eventItem, tellers, fiscalYears)); } eventItem.IsFired = false; eventItem.IsFired = isExported; } return(bookings); }
private void GetBookings(ClosureOptions options) { List <Booking> bookings = new List <Booking>(); EventStock eventStock = new EventStock(); AccountingRuleCollection rules = ServicesProvider.GetInstance().GetAccountingRuleServices().SelectAll(); rules.SortByOrder(); if (options.DoLoanClosure) { UpdateStatus("LoanClosureProcessing", ""); eventStock = ServicesProvider.GetInstance().GetEventProcessorServices().SelectEventsForClosure(_beginDate, _endDate, _branch); UpdateStatus("LoanClosureProcessing", eventStock.GetEvents().Count.ToString()); //add generated events for processing } if (options.DoSavingClosure) { UpdateStatus("SavingsClosureProcessing", ""); eventStock.AddRange( ServicesProvider.GetInstance().GetSavingServices().SelectEventsForClosure( _beginDate, _endDate, _branch)); UpdateStatus("SavingsClosureProcessing", eventStock.GetEvents().Count.ToString()); } if (options.DoTellerManagementClosure) { UpdateStatus("TellerManagementProcessing", ""); eventStock.AddRange(ServicesProvider.GetInstance().GetEventProcessorServices().GetTellerEventsForClosure( _beginDate, _endDate)); UpdateStatus("EventClosureProcessing", eventStock.GetEvents().Count.ToString()); } //important to have sorted list eventStock.SortEventsById(); //closure procesing timerClosure.Start(); timerClosure.Enabled = true; //set ex rate List <ExchangeRate> rates = ServicesProvider.GetInstance().GetExchangeRateServices().SelectRatesByDate(_beginDate, _endDate); List <CoreDomain.Accounting.FiscalYear> fiscalYears = ServicesProvider.GetInstance().GetChartOfAccountsServices().SelectFiscalYears(); bookings.AddRange( _accountingClosure.GetBookings( rules, eventStock, ServicesProvider.GetInstance().GetTellerServices().FindAllTellers(), ServicesProvider.GetInstance().GetPaymentMethodServices().GetAllPaymentMethodsForClosure(), rates, fiscalYears)); timerClosure.Stop(); timerClosure.Enabled = false; //manual transactions if (options.DoManualEntries) { bookings.AddRange(ServicesProvider.GetInstance().GetAccountingServices().SelectMovements(false, rates, fiscalYears)); } #region Reversal if (options.DoReversalTransactions) { UpdateStatus("ReversalTransactionProcessing", ""); bookings.AddRange(ServicesProvider.GetInstance().GetAccountingServices().SelectMovementsForReverse( rates, fiscalYears)); } #endregion //add reversal provision booking if (options.DoLoanClosure) { bookings.AddRange( _generatedEvents.GetProvisionEvents().Select( provisionEvent => ServicesProvider.GetInstance().GetAccountingServices().SelectProvisionMovments( provisionEvent.ContracId, rates, fiscalYears)).Where(b => b != null)); } SortBookingsByDate(bookings); FillListView(bookings); }