public CustomerInvoiceModel AddSalesInvoice(CustomerInvoiceModel customerInvoiceModel) { int Id = 0; int ARTradeKey = appSettings.Value.AR_TRADE_KEY; //int SalesIncomeKey = appSettings.Value.SALES_INCOME_KEY; int SalesTaxKey = appSettings.Value.SALES_TAX_KEY; int ledgerMasterId = 0; _serverContext.Database.BeginTransaction(); bool stocksAvailable = true; try { ledgerMasterId = UpdateLedger(customerInvoiceModel, true); UpdateGeneralLedger(customerInvoiceModel, ledgerMasterId, ARTradeKey, SalesTaxKey); // collectively sum all qty per itemid inorder to check items availability var results = customerInvoiceModel.Items.GroupBy(x => x.SalesItem.Value).Select(g => new { Id = g.Key, Value = g.Sum(s => s.Qty) }); foreach (var item in results) { var Quantity = (from a in _serverContext.ViewInventoryBalances where a.Id == item.Id select new { balance = a.Balance }).FirstOrDefault(); if (Quantity == null) { continue; } if (Quantity.balance < item.Value) { /* _serverContext.InvoiceWithoutCosts.Add(new InvoiceWithoutCost * { * InvoiceWithoutCostInvoiceNo = customerInvoiceModel.InvoiceNo, * InvoiceWithoutCostDate = customerInvoiceModel.Date * }); * _serverContext.SaveChanges(); */ stocksAvailable = false; break; } } _serverContext.Database.CommitTransaction(); } catch (Exception ex) { _serverContext.Database.RollbackTransaction(); } customerInvoiceModel.Id = ledgerMasterId; return(customerInvoiceModel); }
public CustomerInvoiceModel Create(int Id, string InvoiceNo, DateTime InvoiceDate, DateTime?ShipperdOn, double grandTotal, string InvoiceStatus) { CustomerInvoiceModel invoice = new CustomerInvoiceModel() { InvoiceId = Id, InvoiceNo = InvoiceNo, InvoiceDate = InvoiceDate, ShippedOn = ShipperdOn, InvoiceStatus = InvoiceStatus, InvoiceTotal = grandTotal }; return(invoice); }
public CustomerInvoiceModel EditSalesInvoice(CustomerInvoiceModel customerInvoiceModel) { _serverContext.Database.BeginTransaction(); try { int ledgerMasterId = UpdateLedger(customerInvoiceModel, false); UpdateGeneralLedger(customerInvoiceModel, ledgerMasterId, ARTradeKey, SalesTaxKey); // collectively sum all qty per itemid inorder to check items availability var results = customerInvoiceModel.Items.GroupBy(x => x.SalesItem.Value).Select(g => new { Id = g.Key, Value = g.Sum(s => s.Qty) }); foreach (var item in results) { var Quantity = (from a in _serverContext.ViewInventoryBalances where a.Id == item.Id select new { balance = a.Balance }).FirstOrDefault(); if (Quantity == null) { continue; } if (Quantity.balance < item.Value) { _serverContext.InvoiceWithoutCosts.Add(new InvoiceWithoutCost { InvoiceWithoutCostInvoiceNo = customerInvoiceModel.InvoiceNo, InvoiceWithoutCostDate = customerInvoiceModel.Date }); _serverContext.SaveChanges(); break; } } _serverContext.Database.CommitTransaction(); } catch (Exception ex) { _serverContext.Database.RollbackTransaction(); } return(customerInvoiceModel); }
bool StocksAvailable(CustomerInvoiceModel customerInvoiceModel) { // collectively sum all qty per itemid inorder to check items availability var results = customerInvoiceModel.Items.GroupBy(x => x.SalesItem.Value).Select(g => new { Id = g.Key, Value = g.Sum(s => s.Qty) }); foreach (var item in results) { var Quantity = (from a in _serverContext.ViewInventoryBalances where a.Id == item.Id select new { balance = a.Balance }).FirstOrDefault(); if (Quantity == null) { continue; } if (Quantity.balance < item.Value) { return(false); } } return(true); }
public ActionResult EditAccount([FromBody] CustomerInvoiceModel customerInvoiceModel) { return(Ok(_salesService.EditSalesInvoice(customerInvoiceModel))); }
void UpdateGeneralLedger(CustomerInvoiceModel customerInvoiceModel, int ledgerMasterId, int ARTradeKey, int SalesTaxKey) { GeneralLedger generalLedger = new GeneralLedger { SubsidiaryLedgerAccountId = customerInvoiceModel.Customer.Value, GeneralLedgerInvoiceNo = customerInvoiceModel.InvoiceNo, GeneralLedgerDate = customerInvoiceModel.Date, GeneralLedgerReferenceNo = customerInvoiceModel.Reference, GeneralLedgerType = "INV", LedgerMasterId = ledgerMasterId }; _serverContext.GeneralLedgers.Add(generalLedger); _serverContext.SaveChanges(); var ARAmount = customerInvoiceModel.Amount; GeneralLedgerDetail ARGeneralLedgerDetail = new GeneralLedgerDetail(); ARGeneralLedgerDetail.GeneralLedgerId = generalLedger.Id; ARGeneralLedgerDetail.GeneralLedgerDetailDescription = ""; ARGeneralLedgerDetail.ChartOfAccountId = ARTradeKey; ARGeneralLedgerDetail.GeneralLedgerDetailMode = "D"; ARGeneralLedgerDetail.GeneralLedgerId = generalLedger.Id; ARGeneralLedgerDetail.GeneralLedgerDetailAmount = ARAmount; _serverContext.GeneralLedgerDetails.Add(ARGeneralLedgerDetail); _serverContext.SaveChanges(); //var invoiceDetail = customerInvoiceModel.Items.GroupBy(x => x.SalesItem.Value).Select(g => new { Id = g.Key, Value = g.Sum(s => Convert.ToDecimal(s.Amount)) }); foreach (CustomerInvoiceItemModel item in customerInvoiceModel.Items) { GeneralLedgerDetail generalLedgerDetail = new GeneralLedgerDetail(); var temp = _serverContext.Inventories.Where(x => x.Id == item.SalesItem.Value).FirstOrDefault(); generalLedgerDetail.ChartOfAccountId = Convert.ToInt32(temp.InventoryProductServiceIncomeAccountId); generalLedgerDetail.GeneralLedgerDetailMode = "C"; generalLedgerDetail.GeneralLedgerId = generalLedger.Id; generalLedgerDetail.GeneralLedgerDetailAmount = Convert.ToDecimal(item.Amount); generalLedgerDetail.GeneralLedgerDetailDescription = item.Description; _serverContext.GeneralLedgerDetails.Add(generalLedgerDetail); _serverContext.SaveChanges(); } if (customerInvoiceModel.TotalTaxes > 0) { GeneralLedgerDetail generalLedgerDetail = new GeneralLedgerDetail(); generalLedgerDetail.ChartOfAccountId = SalesTaxKey; generalLedgerDetail.GeneralLedgerDetailMode = "C"; generalLedgerDetail.GeneralLedgerId = generalLedger.Id; generalLedgerDetail.GeneralLedgerDetailAmount = customerInvoiceModel.TotalTaxes; generalLedgerDetail.GeneralLedgerDetailDescription = ""; _serverContext.GeneralLedgerDetails.Add(generalLedgerDetail); _serverContext.SaveChanges(); } //if (StocksAvailable(customerInvoiceModel)) //{ var results = customerInvoiceModel.Items; // collectively sum all qty per itemid inorder to check items availability //var results = customerInvoiceModel.Items.GroupBy(x => x.SalesItem.Value).Select(g => new { Id = g.Key, Value = g.Sum(s => s.Qty) }); //decimal costs = 0; foreach (var item in results) { var inventoryProductType = (_serverContext.Inventories.Where(x => x.Id == item.SalesItem.Value && x.InventoryProductServiceType == "P").Select(x => new { x.InventoryProductServiceType, x.Id }).SingleOrDefault()); if (inventoryProductType.InventoryProductServiceType == "P") { /*var balance = (from a in _serverContext.ViewInventoryBalances * where a.Id == item.SalesItem.Value * select new { balance = a.Balance }).FirstOrDefault(); * * var unitCost = (from a in _serverContext.ViewInventoryBalances * where a.Id == item.SalesItem.Value * select new { unitCost = a.UnitCost }).FirstOrDefault();*/ //decimal costs = Math.Round(Convert.ToDecimal(balance) * Convert.ToDecimal(unitCost), 7); //var costOfSalesAccountId = _serverContext.Inventories.Where(x => x.Id == item.Id).Select(x => x.InventoryProductServiceExpenseAccountId).SingleOrDefault(); //var inventoryAccountId = _serverContext.Inventories.Where(x => x.Id == item.Id).Select(x => x.InventoryProductServiceAssetAccountId).SingleOrDefault(); var costs = (from a in _serverContext.ViewInventoryBalances where a.Id == item.SalesItem.Value select new { costBalance = a.Balance * a.UnitCost }).FirstOrDefault(); GeneralLedgerDetail generalLedgerDetailDebit = new GeneralLedgerDetail(); var tempDebit = _serverContext.Inventories.Where(x => x.Id == item.SalesItem.Value).FirstOrDefault(); generalLedgerDetailDebit.ChartOfAccountId = Convert.ToInt32(tempDebit.InventoryProductServiceExpenseAccountId); generalLedgerDetailDebit.GeneralLedgerDetailMode = "D"; generalLedgerDetailDebit.GeneralLedgerId = generalLedger.Id; generalLedgerDetailDebit.GeneralLedgerDetailAmount = Convert.ToDecimal(costs.costBalance); generalLedgerDetailDebit.GeneralLedgerDetailDescription = item.Description; _serverContext.GeneralLedgerDetails.Add(generalLedgerDetailDebit); _serverContext.SaveChanges(); GeneralLedgerDetail generalLedgerDetailCredit = new GeneralLedgerDetail(); var tempCredit = _serverContext.Inventories.Where(x => x.Id == item.SalesItem.Value).FirstOrDefault(); generalLedgerDetailCredit.ChartOfAccountId = Convert.ToInt32(tempCredit.InventoryProductServiceAssetAccountId); generalLedgerDetailCredit.GeneralLedgerDetailMode = "C"; generalLedgerDetailCredit.GeneralLedgerId = generalLedger.Id; generalLedgerDetailCredit.GeneralLedgerDetailAmount = Convert.ToDecimal(costs.costBalance); generalLedgerDetailDebit.GeneralLedgerDetailDescription = item.Description; _serverContext.GeneralLedgerDetails.Add(generalLedgerDetailCredit); _serverContext.SaveChanges(); } } }
int UpdateLedger(CustomerInvoiceModel customerInvoiceModel, bool addMode) { LedgerMaster ledgerMaster = null; if (addMode) { ledgerMaster = new LedgerMaster(); ledgerMaster.SubsidiaryLedgerAccountId = customerInvoiceModel.Customer.Value; ledgerMaster.InvoiceBillingAddress = customerInvoiceModel.BillingAddress; ledgerMaster.InvoiceNo = customerInvoiceModel.InvoiceNo; ledgerMaster.InvoiceDate = customerInvoiceModel.Date; ledgerMaster.InvoiceDueDate = customerInvoiceModel.DueDate; ledgerMaster.InvoiceTerms = customerInvoiceModel.Terms; ledgerMaster.InvoiceReference = customerInvoiceModel.Reference; ledgerMaster.InvoiceCreatedDate = DateTime.Now; ledgerMaster.InvoiceAmount = customerInvoiceModel.Amount; ledgerMaster.TransactionType = "INV"; _serverContext.LedgerMasters.Add(ledgerMaster); _serverContext.SaveChanges(); /* LedgerDetail ledgerDetail = new LedgerDetail(); * foreach (CustomerInvoiceItemModel item in customerInvoiceModel.Items) * { * ledgerDetail.Id = 0; * ledgerDetail.LedgerMasterId = ledgerMaster.Id; * ledgerDetail.InvoiceSalesItemId = item.SalesItem.Value; * ledgerDetail.InvoiceDescription = item.Description; * ledgerDetail.InvoiceQuantity = item.Qty; * ledgerDetail.InvoiceUnitPrice = item.UnitPrice; * ledgerDetail.InvoiceTaxRateId = item.TaxRateItem.Value; * ledgerDetail.InvoiceTrackingId = item.TrackingItem.Value; * _serverContext.LedgerDetails.Add(ledgerDetail); * _serverContext.SaveChanges(); * } */ } else { ledgerMaster = _serverContext.LedgerMasters.Find(customerInvoiceModel.Id); ledgerMaster.SubsidiaryLedgerAccountId = customerInvoiceModel.Customer.Value; ledgerMaster.InvoiceBillingAddress = customerInvoiceModel.BillingAddress; ledgerMaster.InvoiceNo = customerInvoiceModel.InvoiceNo; ledgerMaster.InvoiceAmount = customerInvoiceModel.Amount; ledgerMaster.InvoiceDate = customerInvoiceModel.Date; ledgerMaster.InvoiceDueDate = customerInvoiceModel.DueDate; ledgerMaster.InvoiceTerms = customerInvoiceModel.Terms; ledgerMaster.InvoiceReference = customerInvoiceModel.Reference; ledgerMaster.InvoiceModifiedDate = DateTime.Now; ledgerMaster.TransactionType = "INV"; _serverContext.SaveChanges(); } if (!addMode) { foreach (var item in _serverContext.LedgerDetails.Where(x => x.LedgerMasterId == customerInvoiceModel.Id).ToList()) { LedgerDetail ledgerDetail = new LedgerDetail(); ledgerDetail = _serverContext.LedgerDetails.Find(item.Id); if (ledgerDetail != null) { _serverContext.LedgerDetails.Remove(ledgerDetail); _serverContext.SaveChanges(); } } } foreach (CustomerInvoiceItemModel item in customerInvoiceModel.Items) { LedgerDetail ledgerDetail = new LedgerDetail(); ledgerDetail.Id = 0; ledgerDetail.LedgerMasterId = ledgerMaster.Id; ledgerDetail.InvoiceSalesItemId = item.SalesItem.Value; ledgerDetail.InvoiceDescription = item.Description; ledgerDetail.InvoiceQuantity = item.Qty; ledgerDetail.InvoiceUnitPrice = item.UnitPrice; ledgerDetail.InvoiceTaxRateId = item.TaxRateItem.Value; ledgerDetail.InvoiceTrackingId = item.TrackingItem.Value; _serverContext.LedgerDetails.Add(ledgerDetail); _serverContext.SaveChanges(); } if (!addMode) { var tempGl = _serverContext.GeneralLedgers.Where(x => x.LedgerMasterId == customerInvoiceModel.Id).SingleOrDefault(); _serverContext.GeneralLedgers.Remove(tempGl); } return(ledgerMaster.Id); }