public async Task <IActionResult> PutSaleContractItem(long id, SaleContractItem saleContractItem) { if (id != saleContractItem.SaleContractItemId) { return(BadRequest()); } _context.Entry(saleContractItem).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SaleContractItemExists(id)) { return(NotFound()); } else { throw; } } var allSaleContractItems = _context.SaleContractItems.Where(x => x.SaleContractId == saleContractItem.SaleContractId).ToList(); var saleContract = await _context.SaleContracts.FindAsync(saleContractItem.SaleContractId); saleContract.TotalAmount = 0; foreach (var item in allSaleContractItems) { saleContract.TotalAmount = saleContract.TotalAmount + item.Amount; } decimal?TotalFabric = 0; foreach (var item in allSaleContractItems) { TotalFabric = TotalFabric + item.Quantity; } saleContract.TotalFabric = TotalFabric.ToString(); _context.Entry(saleContract).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SaleContractItemExists(id)) { return(NotFound()); } else { throw; } } // Get Receivable and Add Credit Entry in Account var receivableExist = _context.Receivables.Where(x => x.CustomerId == saleContract.CustomerId).FirstOrDefault(); var payableExist = _context.Payables.Where(x => x.PayableName == saleContract.SaleContractNumber && x.IsActive == true).FirstOrDefault(); var tblAccountReceivable = _context.TblAccounts.Where(x => x.ReceivablesId == receivableExist.ReceivableId).FirstOrDefault(); var tblAccountSaleContractExist = _context.TblAccounts.Where(x => x.AccountCode == saleContract.SaleContractNumber && x.PayableId == payableExist.PayableId).FirstOrDefault(); // Add Double Entry of Receivable (DR) and Sale Contract Account (CR) => Update only Amount Debit and Credit var accountTransaction = _context.AccountTransactions.Where(x => x.AccountDebitId == tblAccountReceivable.AccountId && x.AccountCreditId == tblAccountSaleContractExist.AccountId && x.AccountCreditCode == tblAccountSaleContractExist.AccountCode).FirstOrDefault(); accountTransaction.AmountDebit = saleContract.TotalAmount; accountTransaction.AmountCredit = saleContract.TotalAmount; _context.Entry(accountTransaction).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SaleContractItemExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <ActionResult <SaleContractItem> > PostSaleContractItem(SaleContractItem saleContractItem) { try { _context.SaleContractItems.Add(saleContractItem); await _context.SaveChangesAsync(); // Add/Update Sale Contract Total Amount var saleContract = await _context.SaleContracts.FindAsync(saleContractItem.SaleContractId); decimal?TotalAmount = 0; if (saleContract.TotalAmount != null && saleContract.TotalAmount != 0) { TotalAmount = saleContract.TotalAmount; } TotalAmount = TotalAmount + saleContractItem.Amount; saleContract.TotalAmount = TotalAmount; var allSaleContractItems = _context.SaleContractItems.Where(x => x.SaleContractId == saleContractItem.SaleContractId).ToList(); decimal?TotalFabric = 0; foreach (var item in allSaleContractItems) { TotalFabric = TotalFabric + item.Quantity; } saleContract.TotalFabric = TotalFabric.ToString(); _context.Entry(saleContract).State = EntityState.Modified; await _context.SaveChangesAsync(); // Get Receivable and Add Credit Entry in Account var receivableExist = _context.Receivables.Where(x => x.CustomerId == saleContract.CustomerId).FirstOrDefault(); //if(receivableExist==null) //{ // var customer = await _context.Customer.FindAsync(saleContract.CustomerId); // receivableExist = new Receivable(); // receivableExist.ReceivableName = saleContract.Customer.CustomerName; // receivableExist.ReceivablePhone = saleContract.Customer.Contact; // receivableExist.ReceivableAddress = saleContract.Customer.Address; // receivableExist.ReceivableDescription = saleContract.Customer.CustomerDescription; // receivableExist.Customer = saleContract.Customer; // receivableExist.CustomerId = saleContract.CustomerId; // receivableExist.DateAdded = DateTime.Now; // receivableExist.IsActive = true; // _context.Receivables.Add(receivableExist); //} var tblAccountReceivable = _context.TblAccounts.Where(x => x.ReceivablesId == receivableExist.ReceivableId).FirstOrDefault(); var payableExist = _context.Payables.Where(x => x.PayableName == saleContract.SaleContractNumber && x.IsActive == true).FirstOrDefault(); var tblAccountSaleContractExist = _context.TblAccounts.Where(x => x.AccountCode == saleContract.SaleContractNumber && x.PayableId == payableExist.PayableId).FirstOrDefault(); // Add Double Entry of Receivable (DR) and Sale Contract Account (CR) => Update only Amount Debit and Credit var accountTransaction = _context.AccountTransactions.Where(x => x.AccountDebitId == tblAccountReceivable.AccountId && x.AccountCreditId == tblAccountSaleContractExist.AccountId && x.AccountCreditCode == tblAccountSaleContractExist.AccountCode).FirstOrDefault(); accountTransaction.AmountDebit = saleContract.TotalAmount; accountTransaction.AmountCredit = saleContract.TotalAmount; _context.Entry(accountTransaction).State = EntityState.Modified; await _context.SaveChangesAsync(); return(CreatedAtAction("GetSaleContractItem", new { id = saleContractItem.SaleContractItemId }, saleContractItem)); } catch (Exception ex) { return(CreatedAtAction("GetSaleContractItem", new { id = saleContractItem.SaleContractItemId }, saleContractItem)); } }