public async Task <IActionResult> PutFabricPurchase(long id, FabricPurchase fabricPurchase)
        {
            if (id != fabricPurchase.FabricPurchaseId)
            {
                return(BadRequest());
            }

            _context.Entry(fabricPurchase).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();

                var payableExist = _context.Payables.Where(x => x.PayableId == fabricPurchase.Weaver && x.IsActive == true).FirstOrDefault();

                if (payableExist != null)
                {
                    var tblAccountPayableExist = _context.TblAccounts.Where(x => x.AccountCode == payableExist.PayableId.ToString() && x.AccountTitle == payableExist.PayableName && x.PayableId == payableExist.PayableId).FirstOrDefault();
                    if (tblAccountPayableExist != null)
                    {
                        var tblAccountSaleContractExist = _context.TblAccounts.Where(x => x.AccountCode == fabricPurchase.SaleContractNumber).FirstOrDefault();
                        // Edit Double Entry of Payable (CR) and Sale Contract Account (DR)

                        var accountTransactionExist = _context.AccountTransactions.Where(x => x.AccountCreditCode == tblAccountPayableExist.AccountCode && x.AccountCreditId == tblAccountPayableExist.AccountId && x.Type == _context.TransactionTypes.Where(x => x.TransactionTypeName == "FabricPurchase").Select(x => x.TransactionTypeId).FirstOrDefault()).FirstOrDefault();


                        accountTransactionExist.Type = _context.TransactionTypes.Where(x => x.TransactionTypeName == "FabricPurchase").Select(x => x.TransactionTypeId).FirstOrDefault();
                        //accountTransactionExist.AccountDebitId = tblAccountSaleContractExist.AccountId;
                        //accountTransactionExist.AccountCreditId = tblAccountPayableExist.AccountId;
                        //accountTransactionExist.AccountDebitCode = tblAccountSaleContractExist.AccountCode;
                        //accountTransactionExist.AccountCreditCode = tblAccountPayableExist.AccountCode;
                        accountTransactionExist.Narration    = "Fabric Purchase Contract Update";
                        accountTransactionExist.AmountDebit  = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate;
                        accountTransactionExist.AmountCredit = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate;
                        //accountTransactionExist.SaleContractNumber = fabricPurchase.SaleContractNumber;
                        accountTransactionExist.DateUpdated = DateTime.Now;
                        accountTransactionExist.IsActive    = true;


                        _context.Entry(accountTransactionExist).State = EntityState.Modified;
                        try
                        {
                            await _context.SaveChangesAsync();
                        }
                        catch (Exception ex)
                        {
                            var x = 0;
                        }
                    }
                }
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!FabricPurchaseExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <FabricPurchase> > PostFabricPurchase(FabricPurchase fabricPurchase)
        {
            _context.FabricPurchases.Add(fabricPurchase);
            await _context.SaveChangesAsync();

            //if (fabricPurchase.IsConversionContract == false)
            //{
            // For Fabric Purchase Contract
            var payableExist = _context.Payables.Where(x => x.PayableId == fabricPurchase.Weaver && x.IsActive == true).FirstOrDefault();

            if (payableExist != null)
            {
                var tblAccountPayableExist = _context.TblAccounts.Where(x => x.AccountCode == payableExist.PayableId.ToString() && x.AccountTitle == payableExist.PayableName && x.PayableId == payableExist.PayableId).FirstOrDefault();
                if (tblAccountPayableExist != null)
                {
                    var tblAccountSaleContractExist = _context.TblAccounts.Where(x => x.AccountCode == fabricPurchase.SaleContractNumber).FirstOrDefault();

                    // Add Double Entry of PAYABLE (CR) and Sale Contract Account (DR)
                    AccountTransaction accountTransaction = new AccountTransaction()
                    {
                        Type               = _context.TransactionTypes.Where(x => x.TransactionTypeName == "FabricPurchase").Select(x => x.TransactionTypeId).FirstOrDefault(),
                        AccountDebitId     = tblAccountSaleContractExist.AccountId,
                        AccountCreditId    = tblAccountPayableExist.AccountId,
                        AccountDebitCode   = tblAccountSaleContractExist.AccountCode,
                        AccountCreditCode  = tblAccountPayableExist.AccountCode,
                        Narration          = "Fabric Purchase Contract Creation",
                        AmountDebit        = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate,
                        AmountCredit       = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate,
                        SaleContractNumber = fabricPurchase.SaleContractNumber,
                        DateAdded          = DateTime.Now,
                        IsActive           = true
                    };
                    _context.AccountTransactions.Add(accountTransaction);
                    try
                    {
                        await _context.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        var x = 0;
                    }
                }
                else
                {
                    //Add Payable Account
                    TblAccount tblAccountPayable = new TblAccount()
                    {
                        AccountCode        = payableExist.PayableId.ToString(),
                        AccountDescription = fabricPurchase.SaleContractNumber,
                        AccountTitle       = payableExist.PayableName,
                        AccountTypeId      = _context.AccountTypes.Where(x => x.AccountTypeName == "Payable").Select(x => x.AccountTypeId).FirstOrDefault(),
                        DateAdded          = DateTime.Now,
                        IsActive           = true,
                        ReceivablesId      = payableExist.PayableId
                    };
                    _context.TblAccounts.Add(tblAccountPayable);
                    try
                    {
                        await _context.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        var x = 0;
                    }

                    var tblAccountSaleContractExist = _context.TblAccounts.Where(x => x.AccountCode == fabricPurchase.SaleContractNumber).FirstOrDefault();


                    // Add Double Entry of PAYABLE (CR) and Sale Contract Account (DR)
                    AccountTransaction accountTransaction = new AccountTransaction()
                    {
                        Type               = _context.TransactionTypes.Where(x => x.TransactionTypeName == "FabricPurchase").Select(x => x.TransactionTypeId).FirstOrDefault(),
                        AccountDebitId     = tblAccountSaleContractExist.AccountId,
                        AccountCreditId    = tblAccountPayable.AccountId,
                        AccountDebitCode   = tblAccountSaleContractExist.AccountCode,
                        AccountCreditCode  = tblAccountPayable.AccountCode,
                        Narration          = "Fabric Purchase Contract Creation",
                        AmountDebit        = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate,
                        AmountCredit       = fabricPurchase.QuantityInMeters * fabricPurchase.PerMeterRate,
                        SaleContractNumber = fabricPurchase.SaleContractNumber,
                        DateAdded          = DateTime.Now,
                        IsActive           = true
                    };
                    _context.AccountTransactions.Add(accountTransaction);
                    try
                    {
                        await _context.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        var x = 0;
                    }
                }
            }
            //}
            //else
            //{
            //    //programming for conversion contract
            //}
            return(CreatedAtAction("GetFabricPurchase", new { id = fabricPurchase.FabricPurchaseId }, fabricPurchase));
        }