Example #1
0
        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);
                }
        }
Example #2
0
        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);
                }
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
                }
            }
        }
Example #8
0
        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);
                }
        }
Example #9
0
        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);
                }
        }
Example #10
0
 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");
        }
Example #12
0
        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");
        }
Example #15
0
        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");
        }
Example #17
0
        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);
                }
        }
Example #18
0
        public EventStock SelectEventsForClosure(DateTime beginDate, DateTime endDate, Branch branch)
        {
            EventStock eventStock = _eventManagement.SelectEventsForClosure(beginDate, endDate, branch);

            return(eventStock);
        }
Example #19
0
        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);
        }
Example #20
0
        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);
        }