public async Task <ApiResponse> AddEditTransactionList([FromBody] AddEditTransactionListCommand model) { var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; model.ModifiedById = userId; model.ModifiedDate = DateTime.UtcNow; return(await _mediator.Send(model)); }
public async Task <ApiResponse> Handle(ExchangeGainLossVoucherDetailsCommand model, CancellationToken cancellationToken) { ApiResponse response = new ApiResponse(); try { #region "Generate Voucher" AddVoucherDetailCommand voucherModel = new AddVoucherDetailCommand { VoucherNo = model.VoucherNo, CurrencyId = model.CurrencyId, Description = model.Description, JournalCode = model.JournalId, VoucherTypeId = model.VoucherType, OfficeId = model.OfficeId, ProjectId = model.ProjectId, BudgetLineId = model.BudgetLineId, IsExchangeGainLossVoucher = true, TimezoneOffset = model.TimezoneOffset, }; var responseVoucher = await _iAccountingServices.AddVoucherDetail(voucherModel); #endregion #region "Generate Transaction" if (responseVoucher != null) { List <VoucherTransactionsModel> transactions = new List <VoucherTransactionsModel>(); // Credit transactions.Add(new VoucherTransactionsModel { TransactionId = 0, VoucherNo = responseVoucher.VoucherNo, AccountNo = model.CreditAccount, Debit = 0, Credit = Math.Abs(model.Amount), Description = "Gain-Loss-Voucher-Credit", IsDeleted = false }); // Debit transactions.Add(new VoucherTransactionsModel { TransactionId = 0, VoucherNo = responseVoucher.VoucherNo, AccountNo = model.DebitAccount, Debit = Math.Abs(model.Amount), Credit = 0, Description = "Gain-Loss-Voucher-Debit", IsDeleted = false }); AddEditTransactionListCommand transactionVoucherDetail = new AddEditTransactionListCommand { VoucherNo = responseVoucher.VoucherNo, VoucherTransactions = transactions }; bool isTransactionSaved = _iAccountingServices.AddEditTransactionList(transactionVoucherDetail); if (isTransactionSaved) { string journalName = _dbContext.VoucherDetail.FirstOrDefault(x => x.JournalCode == responseVoucher.JournalCode)?.JournalDetails.JournalName; response.data.GainLossVoucherDetail = new GainLossVoucherListModel { VoucherId = responseVoucher.VoucherNo, JournalName = string.IsNullOrEmpty(journalName) ? journalName : "", VoucherName = responseVoucher.ReferenceNo, VoucherDate = responseVoucher.VoucherDate }; } else { throw new Exception(StaticResource.TransactionsNotSaved); } response.StatusCode = StaticResource.successStatusCode; response.Message = StaticResource.SuccessText; } else { response.StatusCode = StaticResource.failStatusCode; response.Message = StaticResource.VoucherNotSaved; } #endregion } catch (Exception ex) { response.StatusCode = StaticResource.failStatusCode; response.Message = ex.Message; } return(response); }
/// <summary> /// Add/Edit Transaction /// </summary> /// <param name="request"></param> /// <param name="_dbContext"></param> /// <returns>true/Exception</returns> public bool AddEditTransactionList(AddEditTransactionListCommand request) { List <VoucherTransactions> transactionsListAdd = new List <VoucherTransactions>(); List <VoucherTransactions> transactionsListEdit = new List <VoucherTransactions>(); try { if (!request.VoucherTransactions.Any()) { throw new Exception(StaticResource.NoTransactionToUpDate); } var editList = request.VoucherTransactions.Where(w => w.TransactionId != 0) .Select(s => s.TransactionId); var editTransactionList = _dbContext.VoucherTransactions .Where(x => editList.Contains(x.TransactionId)) .ToList(); var voucherDetail = _dbContext.VoucherDetail.FirstOrDefault(x => x.IsDeleted == false && x.VoucherNo == request.VoucherNo); if (voucherDetail == null) { throw new Exception(StaticResource.VoucherNotPresent); } foreach (VoucherTransactionsModel item in request.VoucherTransactions) { // Add if (item.TransactionId == 0 && item.IsDeleted == false) { //new voucher transaction object VoucherTransactions transaction = new VoucherTransactions(); transaction.ChartOfAccountNewId = item.AccountNo; transaction.Debit = item.Debit; transaction.Credit = item.Credit; transaction.Description = item.Description; transaction.BudgetLineId = item.BudgetLineId; transaction.ProjectId = item.ProjectId; transaction.CreatedById = request.ModifiedById; transaction.CreatedDate = DateTime.UtcNow; transaction.IsDeleted = false; transaction.VoucherNo = item.VoucherNo; transaction.CurrencyId = voucherDetail.CurrencyId; transaction.TransactionDate = voucherDetail.VoucherDate; transaction.JobId = item.JobId == 0 ? null : item.JobId; transactionsListAdd.Add(transaction); } // edit else { VoucherTransactions transaction = editTransactionList.FirstOrDefault(x => x.TransactionId == item.TransactionId); if (transaction != null) { if (item.IsDeleted == false) { transaction.IsDeleted = false; } else { transaction.IsDeleted = true; } transaction.TransactionId = item.TransactionId; transaction.ChartOfAccountNewId = item.AccountNo; transaction.Debit = item.Debit; transaction.Credit = item.Credit; transaction.Description = item.Description; transaction.BudgetLineId = item.BudgetLineId; transaction.ProjectId = item.ProjectId; transaction.JobId = item.JobId == 0 ? null : item.JobId; transaction.CurrencyId = voucherDetail.CurrencyId; transaction.TransactionDate = voucherDetail.VoucherDate; transaction.ModifiedById = request.ModifiedById; transaction.ModifiedDate = DateTime.UtcNow; transactionsListEdit.Add(transaction); } } } using (IDbContextTransaction tran = _dbContext.Database.BeginTransaction()) { try { _dbContext.VoucherTransactions.AddRange(transactionsListAdd); _dbContext.VoucherTransactions.UpdateRange(transactionsListEdit); _dbContext.SaveChanges(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); throw new Exception(ex.Message); } } return(true); } catch (Exception ex) { throw new Exception(ex.Message); } }