Exemplo n.º 1
0
        public GeneralLedgerEntry GetClosingEntry(AccountIsDeactivated accountIsDeactivated,
                                                  EquityAccount retainedEarningsAccount, LocalDateTime closedOn,
                                                  GeneralLedgerEntryIdentifier closingGeneralLedgerEntryIdentifier)
        {
            var entry = new GeneralLedgerEntry(closingGeneralLedgerEntryIdentifier,
                                               new GeneralLedgerEntryNumber("jec", int.Parse(_accountingPeriod.ToString())), _accountingPeriod,
                                               closedOn);

            foreach (var account in _current.Where(x => x.Balance != Money.Zero)
                     .OrderBy(x => x.AccountNumber.ToInt32()))
            {
                switch (account)
                {
                case IncomeAccount: {
                    if (account.Balance > Money.Zero)
                    {
                        entry.ApplyDebit(new(account.AccountNumber, account.Balance), IgnoreInactiveAccount);
                    }
                    else
                    {
                        entry.ApplyCredit(new(account.AccountNumber, -account.Balance), IgnoreInactiveAccount);
                    }

                    continue;
                }

                case ExpenseAccount:
                    if (account.Balance > Money.Zero)
                    {
                        entry.ApplyCredit(new(account.AccountNumber, account.Balance), IgnoreInactiveAccount);
                    }
                    else
                    {
                        entry.ApplyDebit(new(account.AccountNumber, -account.Balance), IgnoreInactiveAccount);
                    }

                    continue;

                default:
                    continue;
                }
            }

            var retainedEarnings = entry.Debits.Select(x => x.Amount).Sum() -
                                   entry.Credits.Select(x => x.Amount).Sum();

            if (retainedEarnings < Money.Zero)
            {
                entry.ApplyDebit(new(retainedEarningsAccount.AccountNumber, -retainedEarnings), accountIsDeactivated);
            }
            else if (retainedEarnings > Money.Zero)
            {
                entry.ApplyCredit(new(retainedEarningsAccount.AccountNumber, retainedEarnings), accountIsDeactivated);
            }

            entry.Post();

            return(entry);
        }
 public GeneralLedgerEntryHandlers(IGeneralLedgerRepository generalLedger,
                                   IGeneralLedgerEntryRepository generalLedgerEntries,
                                   AccountIsDeactivated accountIsDeactivated)
 {
     _generalLedger        = generalLedger;
     _generalLedgerEntries = generalLedgerEntries;
     _accountIsDeactivated = accountIsDeactivated;
 }
 public AccountingPeriodClosingHandlers(IGeneralLedgerRepository generalLedger,
                                        IGeneralLedgerEntryRepository generalLedgerEntries,
                                        IChartOfAccountsRepository chartOfAccounts,
                                        AccountIsDeactivated accountIsDeactivated)
 {
     _generalLedger        = generalLedger;
     _generalLedgerEntries = generalLedgerEntries;
     _chartOfAccounts      = chartOfAccounts;
     _accountIsDeactivated = accountIsDeactivated;
 }
Exemplo n.º 4
0
        public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated)
        {
            var(accountsPayable, inventoryInTransit) =
                PurchaseOrderItems.Aggregate((new Credit(new AccountNumber(2150)), new Debit(new AccountNumber(1400))),
                                             Accumulate);

            generalLedgerEntry.ApplyCredit(accountsPayable, accountIsDeactivated);
            generalLedgerEntry.ApplyDebit(inventoryInTransit, accountIsDeactivated);
            generalLedgerEntry.ApplyTransaction(this);
        }
Exemplo n.º 5
0
            public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated)
            {
                foreach (var credit in _credits)
                {
                    generalLedgerEntry.ApplyCredit(credit, accountIsDeactivated);
                }

                foreach (var debit in _debits)
                {
                    generalLedgerEntry.ApplyDebit(debit, accountIsDeactivated);
                }
            }
        public AccountingPeriodClosingModule(EventStoreClient eventStore, IMessageTypeMapper messageTypeMapper,
                                             AccountIsDeactivated accountIsDeactivated)
        {
            var handlers = new AccountingPeriodClosingHandlers(
                new GeneralLedgerEventStoreRepository(eventStore, messageTypeMapper),
                new GeneralLedgerEntryEventStoreRepository(eventStore, messageTypeMapper),
                new ChartOfAccountsEventStoreRepository(eventStore, messageTypeMapper), accountIsDeactivated);

            Build <AccountingPeriodClosing>()
            .Log()
            .UnitOfWork(eventStore, messageTypeMapper)
            .Handle(async(command, ct) => {
                await handlers.Handle(command, ct);
                return(Checkpoint.None);
            });
        }
Exemplo n.º 7
0
 public AccountingPeriodClosingProcess(
     ChartOfAccounts chartOfAccounts,
     AccountingPeriod accountingPeriod,
     LocalDateTime closingOn,
     GeneralLedgerEntryIdentifier[] generalLedgerEntryIdentifiers,
     GeneralLedgerEntryIdentifier closingGeneralLedgerEntryIdentifier,
     EquityAccount retainedEarningsAccount,
     AccountIsDeactivated accountIsDeactivated)
 {
     _accountingPeriod = accountingPeriod;
     _closingOn        = closingOn;
     _closingGeneralLedgerEntryIdentifier = closingGeneralLedgerEntryIdentifier;
     _retainedEarningsAccount             = retainedEarningsAccount;
     _accountIsDeactivated          = accountIsDeactivated;
     _generalLedgerEntryIdentifiers = new HashSet <GeneralLedgerEntryIdentifier>(generalLedgerEntryIdentifiers);
     TrialBalance  = new TrialBalance(chartOfAccounts);
     ProfitAndLoss = new ProfitAndLoss(accountingPeriod, chartOfAccounts);
 }
Exemplo n.º 8
0
 public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated)
 {
     generalLedgerEntry.ApplyTransaction(this);
 }
Exemplo n.º 9
0
 public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated)
 {
     generalLedgerEntry.ApplyCredit(new Credit(Account, new Money(1m)), accountIsDeactivated);
 }