Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 public ActionResult EditAccount([FromBody] CustomerInvoiceModel customerInvoiceModel)
 {
     return(Ok(_salesService.EditSalesInvoice(customerInvoiceModel)));
 }
Пример #6
0
        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();
                }
            }
        }
Пример #7
0
        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);
        }