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; }
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); }
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); }); }
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); }
public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated) { generalLedgerEntry.ApplyTransaction(this); }
public void Apply(GeneralLedgerEntry generalLedgerEntry, AccountIsDeactivated accountIsDeactivated) { generalLedgerEntry.ApplyCredit(new Credit(Account, new Money(1m)), accountIsDeactivated); }