private async Task <JournalEntryDocumentDetailUnit> CreditEntry(List <JournalEntryDetailInputUnit> journalEntryDetails, long debitParentId, JournalEntryDetailInputUnit creditJournalItem) { JournalEntryDocumentDetailUnit journalDetail = new JournalEntryDocumentDetailUnit(); if (debitParentId != 0) { creditJournalItem.DebitAccountingItemId = debitParentId; } else { creditJournalItem.DebitAccountingItemId = null; } if (creditJournalItem.AccountingItemId != 0) { journalDetail = await _journalEntryDocumentDetailUnitRepository.GetAsync(creditJournalItem.AccountingItemId); Mapper.Map(creditJournalItem, journalDetail); await _journalEntryDocumentDetailUnitManager.UpdateAsync(journalDetail); } else { journalDetail = creditJournalItem.MapTo <JournalEntryDocumentDetailUnit>(); journalDetail.AccountingItemOrigAmount = journalDetail.Amount; await _journalEntryDocumentDetailUnitManager.CreateAsync(journalDetail); } journalEntryDetails.Remove(creditJournalItem); return(journalDetail); }
private async Task JournalEntryDetails(List <JournalEntryDetailInputUnit> journalEntryDetails) { //adding/Update journalDocDetails for (var i = 0; i < journalEntryDetails.Count; i++) { JournalEntryDocumentDetailUnit journalDetail; long debitParentId = 0; if (journalEntryDetails[i].AccountingItemId == 0) { if (journalEntryDetails[i].Amount.Value > 0) { //Debit Journal Entry journalDetail = journalEntryDetails[i].MapTo <JournalEntryDocumentDetailUnit>(); if (journalDetail.Id == 0) { journalDetail.AccountingItemOrigAmount = journalDetail.Amount; } journalDetail.DebitAccountingItemId = null; await _journalEntryDocumentDetailUnitManager.CreateAsync(journalDetail); debitParentId = journalDetail.Id; JournalEntryDetailInputUnit creditJournalItem = !string.IsNullOrEmpty(journalEntryDetails[i].DebitCreditGroup) ? journalEntryDetails.Find(u => u.DebitCreditGroup.Trim() == journalEntryDetails[i].DebitCreditGroup.Trim() && u.Amount < 0) : null; //credit Journal Entry if (!ReferenceEquals(creditJournalItem, null)) { await CreditEntry(journalEntryDetails, debitParentId, creditJournalItem); } else { //delete credit Entry if (journalDetail.Id != 0) { _journalEntryDocumentDetailUnitRepository.Delete( u => u.DebitAccountingItemId == journalDetail.Id); } } } else { //credit Journal Entry journalDetail = journalEntryDetails[i].MapTo <JournalEntryDocumentDetailUnit>(); if (journalEntryDetails[i].AccountingItemId == 0) { journalDetail.AccountingItemOrigAmount = journalDetail.Amount; await _journalEntryDocumentDetailUnitManager.CreateAsync(journalDetail); } } } else//AccountingItemId is not zero { journalDetail = await _journalEntryDocumentDetailUnitRepository.GetAsync(journalEntryDetails[i].AccountingItemId); if (!ReferenceEquals(journalDetail, null) && journalDetail.Amount.Value > 0) { if (journalEntryDetails[i].Amount.Value > 0) { debitParentId = 0; Mapper.Map(journalEntryDetails[i], journalDetail); journalDetail.DebitAccountingItemId = null; await _journalEntryDocumentDetailUnitManager.UpdateAsync(journalDetail); debitParentId = journalDetail.Id; JournalEntryDetailInputUnit creditJournalItem = !string.IsNullOrEmpty(journalEntryDetails[i].DebitCreditGroup) ? journalEntryDetails.Find(u => u.DebitCreditGroup.Trim() == journalEntryDetails[i].DebitCreditGroup.Trim() && u.Amount < 0) : null; //credit Journal Entry if (!ReferenceEquals(creditJournalItem, null)) { await CreditEntry(journalEntryDetails, debitParentId, creditJournalItem); } else { //delete credit Entry if (journalDetail.Id != 0) { _journalEntryDocumentDetailUnitRepository.Delete( u => u.DebitAccountingItemId == journalDetail.Id); } } } else if (journalEntryDetails[i].Amount.Value < 0) { Mapper.Map(journalEntryDetails[i], journalDetail); journalDetail.DebitAccountingItemId = null; await _journalEntryDocumentDetailUnitManager.UpdateAsync(journalDetail); } } else if (!ReferenceEquals(journalDetail, null) && journalDetail.Amount.Value < 0) { //delete debit Entry if (journalEntryDetails[i].Amount.Value < 0) { Mapper.Map(journalEntryDetails[i], journalDetail); if (journalDetail.DebitAccountingItemId != null && journalDetail.DebitAccountingItemId != 0) { _journalEntryDocumentDetailUnitRepository.Delete( u => u.Id == journalDetail.DebitAccountingItemId); journalDetail.DebitAccountingItemId = null; } await _journalEntryDocumentDetailUnitManager.UpdateAsync(journalDetail); } else { journalDetail.DebitAccountingItemId = null; Mapper.Map(journalEntryDetails[i], journalDetail); await _journalEntryDocumentDetailUnitManager.UpdateAsync(journalDetail); } } await CurrentUnitOfWork.SaveChangesAsync(); } } }