コード例 #1
0
        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());
        }
コード例 #2
0
        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));
            }
        }