Example #1
0
        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);
        }
Example #2
0
        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();
                }
            }
        }