public async Task <IActionResult> Edit(string id, [Bind("AutoId,Id,VendorId,PurchaseId,SalesId,EntryId,EntryDate,EntryType,Amount,Status,CreatedDatetime,TransactionType,TransactionRef,PaymentId")] TblTransaction tblTransaction)
        {
            if (id != tblTransaction.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(tblTransaction);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TblTransactionExists(tblTransaction.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["PaymentId"]  = new SelectList(_context.TblPayment, "Id", "Id", tblTransaction.PaymentId);
            ViewData["PurchaseId"] = new SelectList(_context.TblPurchase, "Id", "Id", tblTransaction.PurchaseId);
            ViewData["SalesId"]    = new SelectList(_context.TblSale, "SaleId", "SaleId", tblTransaction.SalesId);
            ViewData["VendorId"]   = new SelectList(_context.TblVendor, "Id", "Id", tblTransaction.VendorId);
            return(View(tblTransaction));
        }
        public async Task <IActionResult> Create([Bind("AutoId,Id,VendorId,PurchaseId,SalesId,EntryId,EntryDate,EntryType,Amount,Status,CreatedDatetime,TransactionType,TransactionRef,PaymentId")] TblTransaction tblTransaction)
        {
            if (ModelState.IsValid)
            {
                _context.Add(tblTransaction);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["PaymentId"]  = new SelectList(_context.TblPayment, "Id", "Id", tblTransaction.PaymentId);
            ViewData["PurchaseId"] = new SelectList(_context.TblPurchase, "Id", "Id", tblTransaction.PurchaseId);
            ViewData["SalesId"]    = new SelectList(_context.TblSale, "SaleId", "SaleId", tblTransaction.SalesId);
            ViewData["VendorId"]   = new SelectList(_context.TblVendor, "Id", "Id", tblTransaction.VendorId);
            return(View(tblTransaction));
        }
示例#3
0
        public async Task <WrapperPaymentListVM> PayToSupplier(PaymentVM paymentVM)
        {
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <PaymentVM, Invoice>(paymentVM);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);

            paymentVM.InvoiceId = invoiceToAdd.Id;

            Expense expenseToAdd = new Expense();

            expenseToAdd = _utilService.Mapper.Map <PaymentVM, Expense>(paymentVM);
            //expenseToAdd.SupplierId = paymentVM.ClientId;
            _repositoryWrapper.Expense.Create(expenseToAdd);

            TblTransaction transactionToAdd = new TblTransaction();

            transactionToAdd = _utilService.Mapper.Map <PaymentVM, TblTransaction>(paymentVM);
            transactionToAdd.PaymentStatus   = PAYMENT_STATUS.CASH_PAID.ToString();
            transactionToAdd.TransactionType = TRANSACTION_TYPE.DEBIT.ToString();
            transactionToAdd.Description     = "Paid to " + paymentVM.ClientName;
            _repositoryWrapper.Transaction.Create(transactionToAdd);

            Task <int> t1 = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> t2 = _repositoryWrapper.Expense.SaveChangesAsync();
            Task <int> t3 = _repositoryWrapper.Transaction.SaveChangesAsync();

            await Task.WhenAll(t1, t2, t3);

            var item = new GetPaymentDataListVM();

            item.ClientId   = paymentVM.ClientId;
            item.FactoryId  = paymentVM.FactoryId;
            item.PageNumber = 1;
            item.PageSize   = 10;

            return(await GetSupplierPaymentList(item));
        }
        public async Task <WrapperPaymentListVM> RecieveFromCustomer(PaymentVM paymentVM)
        {
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <PaymentVM, Invoice>(paymentVM);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);
            paymentVM.InvoiceId = invoiceToAdd.Id;


            Income incomeToAdd = new Income();

            incomeToAdd = _utilService.Mapper.Map <PaymentVM, Income>(paymentVM);
            _repositoryWrapper.Income.Create(incomeToAdd);

            TblTransaction transactionToAdd = new TblTransaction();

            transactionToAdd = _utilService.Mapper.Map <PaymentVM, TblTransaction>(paymentVM);
            transactionToAdd.PaymentStatus   = PAYMENT_STATUS.CASH_RECIEVED.ToString();
            transactionToAdd.Description     = " Recieved from " + paymentVM.ClientName;
            transactionToAdd.TransactionType = TRANSACTION_TYPE.CREDIT.ToString();
            _repositoryWrapper.Transaction.Create(transactionToAdd);

            Task <int> t1 = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> t2 = _repositoryWrapper.Income.SaveChangesAsync();
            Task <int> t3 = _repositoryWrapper.Transaction.SaveChangesAsync();

            await Task.WhenAll(t1, t2, t3);

            var item = new GetPaymentDataListVM();

            item.ClientId   = paymentVM.ClientId;
            item.FactoryId  = paymentVM.FactoryId;
            item.PageNumber = 1;
            item.PageSize   = 10;

            return(await GetCustomerPaymentList(item));
        }
        // Invoice
        // Income
        // Recievable
        // Sales
        // Stock
        // StockOut
        // Transaction
        public async Task <WrapperSalesListVM> AddSalesAsync(SalesVM salesVM)
        {
            // Invoice
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <SalesVM, Invoice>(salesVM);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);

            // Setting Up Invoice Id
            salesVM.InvoiceId = invoiceToAdd.Id;
            foreach (var item in salesVM.ItemList)
            {
                item.InvoiceId = invoiceToAdd.Id;
            }

            // Income
            Income incomeToAdd = new Income();

            incomeToAdd = this._utilService.Mapper.Map <SalesVM, Income>(salesVM);
            _repositoryWrapper.Income.Create(incomeToAdd);

            // Recievable
            Recievable recievableToAdd = new Recievable();

            recievableToAdd = _utilService.Mapper.Map <SalesVM, Recievable>(salesVM);
            _repositoryWrapper.Recievable.Create(recievableToAdd);

            // Sales
            List <Sales> listOfSalesToAdd = new List <Sales>();

            listOfSalesToAdd = _utilService.Mapper.Map <List <SalesItemVM>, List <Sales> >(salesVM.ItemList);
            _repositoryWrapper.Sales.CreateAll(listOfSalesToAdd);


            // Stock
            Stock stockToAdd = new Stock();
            IEnumerable <Stock> stockList = await _repositoryWrapper.Stock.FindByConditionAsync(x => x.FactoryId == salesVM.FactoryId);

            for (int i = 0; i < salesVM.ItemList.Count; i++)
            {
                Stock existingStock = stockList.ToList().Where(x => x.ItemId == salesVM.ItemList[i].Item.Id && x.ItemStatusId == salesVM.ItemList[i].ItemStatus.Id).FirstOrDefault();

                if (existingStock == null)
                {
                    var getDatalistVM2 = new GetDataListVM()
                    {
                        FactoryId  = salesVM.FactoryId,
                        PageNumber = 1,
                        PageSize   = 10
                    };
                    WrapperSalesListVM dataToReturn = await GetAllSalesAsync(getDatalistVM2);

                    dataToReturn.HasMessage = true;
                    dataToReturn.Message    = "Stock Is Empty";
                    return(dataToReturn);
                    // _utilService.Log("Stock Is Empty. Not Enough Stock available");
                    // throw new StockEmptyException();
                }
                else
                {
                    if (existingStock.Quantity >= salesVM.ItemList[i].Quantity)
                    {
                        existingStock.Quantity -= salesVM.ItemList[i].Quantity;
                        _repositoryWrapper.Stock.Update(existingStock);
                    }
                    else
                    {
                        _utilService.Log("Stock Is Empty");
                        return(new WrapperSalesListVM());
                    }
                }
            }

            // StockOut
            List <StockOut> stockOutsToAdd = new List <StockOut>();

            stockOutsToAdd = _utilService.Mapper.Map <List <SalesItemVM>, List <StockOut> >(salesVM.ItemList);
            _repositoryWrapper.StockOut.CreateAll(stockOutsToAdd);


            // Transaction
            TblTransaction transactionRecieved = new TblTransaction();

            transactionRecieved                 = _utilService.Mapper.Map <SalesVM, TblTransaction>(salesVM);
            transactionRecieved.Amount          = salesVM.PaidAmount;
            transactionRecieved.PaymentStatus   = PAYMENT_STATUS.CASH_RECIEVED.ToString();
            transactionRecieved.TransactionType = TRANSACTION_TYPE.CREDIT.ToString();
            _repositoryWrapper.Transaction.Create(transactionRecieved);


            //TblTransaction transactionRecievable = new TblTransaction();
            //transactionRecievable = _utilService.Mapper.Map<SalesVM, TblTransaction>(salesVM);
            //transactionRecievable.Amount = salesVM.DueAmount;
            //transactionRecievable.PaymentStatus = PAYMENT_STATUS.CASH_RECIEVABLE.ToString();
            //transactionRecievable.TransactionType = TRANSACTION_TYPE.NOT_YET_EXECUTED.ToString();
            //transactionRecievable.TransactionId = transactionRecieved.TransactionId;
            //_repositoryWrapper.Transaction.Create(transactionRecievable);

            Task <int> Invoice     = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> Income      = _repositoryWrapper.Income.SaveChangesAsync();
            Task <int> Recievable  = _repositoryWrapper.Recievable.SaveChangesAsync();
            Task <int> Sales       = _repositoryWrapper.Sales.SaveChangesAsync();
            Task <int> Stock       = _repositoryWrapper.Stock.SaveChangesAsync();
            Task <int> StockOut    = _repositoryWrapper.StockOut.SaveChangesAsync();
            Task <int> Transaction = _repositoryWrapper.Transaction.SaveChangesAsync();
            await Task.WhenAll(Invoice, Income, Recievable, Sales, Stock, StockOut, Transaction);



            var getDatalistVM = new GetDataListVM()
            {
                FactoryId  = salesVM.FactoryId,
                PageNumber = 1,
                PageSize   = 10
            };


            return(await GetAllSalesAsync(getDatalistVM));
        }
        public async Task <WrapperSalesReturnVM> AddSalesReturn(SalesReturnVM vm)
        {
            // StockIn
            // Invoice
            // Payable
            // Stock
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <SalesReturnVM, Invoice>(vm);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);
            vm.InvoiceId = invoiceToAdd.Id;


            Stock stockToAdd = new Stock();

            stockToAdd = _utilService.Mapper.Map <SalesReturnVM, Stock>(vm);

            // Stock
            IEnumerable <Stock> stockList = await _repositoryWrapper.Stock.FindByConditionAsync(x => x.FactoryId == vm.FactoryId);

            Stock existingStock = stockList.ToList().Where(x => x.ItemId == vm.ItemId).FirstOrDefault();

            // IF NOT PRESENT ADD
            if (existingStock == null)
            {
                _utilService.Log("Stock Is Empty. Not Enough Stock available");
                throw new StockEmptyException();
                //stockToAdd = _utilService.Mapper.Map<SalesItemVM, Stock>(salesVM.ItemList[i]);
                //_repositoryWrapper.Stock.Create(stockToAdd);
            }
            // IF PRESENT UPDATE
            else
            {
                existingStock.Quantity += vm.Quantity;
                _repositoryWrapper.Stock.Update(existingStock);
            }

            StockIn stockInToAdd = new StockIn();

            stockInToAdd = _utilService.Mapper.Map <SalesReturnVM, StockIn>(vm);


            if (!vm.IsFullyPaid)
            {
                Payable payableToAdd = new Payable();
                payableToAdd = _utilService.Mapper.Map <SalesReturnVM, Payable>(vm);
                _repositoryWrapper.Payable.Create(payableToAdd);
            }

            _repositoryWrapper.StockIn.Create(stockInToAdd);

            if (vm.AmountPaid > 0)
            {
                TblTransaction tblTransactionToAdd = new TblTransaction();
                tblTransactionToAdd = _utilService.Mapper.Map <SalesReturnVM, TblTransaction>(vm);
                _repositoryWrapper.Transaction.Create(tblTransactionToAdd);

                Expense expenseToAdd = new Expense();
                expenseToAdd = _utilService.Mapper.Map <SalesReturnVM, Expense>(vm);
                _repositoryWrapper.Expense.Create(expenseToAdd);
            }


            Task <int> invT         = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> stockInT     = _repositoryWrapper.StockIn.SaveChangesAsync();
            Task <int> stockT       = _repositoryWrapper.Stock.SaveChangesAsync();
            Task <int> payableT     = _repositoryWrapper.Payable.SaveChangesAsync();
            Task <int> transactionT = _repositoryWrapper.Transaction.SaveChangesAsync();
            Task <int> expenseT     = _repositoryWrapper.Expense.SaveChangesAsync();

            await Task.WhenAll(invT, stockInT, stockT, payableT, transactionT, expenseT);



            var data = new GetDataListVM()
            {
                FactoryId  = vm.FactoryId,
                PageSize   = 15,
                PageNumber = 1
            };

            return(await GetAllSalesReturn(data));
        }
示例#7
0
        public ActionResult AddSales(string request)
        {
            //using (var transaction = _context.Database.BeginTransaction())
            //{
            TblSale tbl_Sale = JsonConvert.DeserializeObject <TblSale>(request);

            if (SalesItemStock.Count > 0)
            {
                var saved = false;

                try
                {
                    var t = JsonConvert.SerializeObject(tbl_Sale);

                    _context.TblSale.Add(tbl_Sale);
                    _context.SaveChanges();

                    SalesItemStock.ForEach(q => q.Item = null);

                    _context.TblItemStock.AddRange(SalesItemStock);
                    _context.SaveChanges();

                    TblSequence NewSequenceValue = GenericHelper.GetNextUpdatedData("tbl_Sale");
                    _context.Entry(NewSequenceValue).State = EntityState.Modified;
                    //_context.SaveChanges();

                    TblSequence NewSequenceValuetbl_SalesInvoice = GenericHelper.GetNextUpdatedData("tbl_SalesInvoice");
                    _context.Entry(NewSequenceValuetbl_SalesInvoice).State = EntityState.Modified;
                    //_context.SaveChanges();

                    TblSequence NewSequenceValueItemStock = GenericHelper.GetNextUpdatedData("tbl_ItemStock");
                    _context.Entry(NewSequenceValueItemStock).State = EntityState.Modified;
                    //_context.SaveChanges();
                    //_context.SaveChanges();

                    // 1 hold --  only save Sales & Item with status hold

                    // 2  CREDIT PURCHASE --  one transaction entry with Debit (In) with unpaid status

                    // 3  CASH PAY  -- one transaction entry with  Debit (In)/ Paid
                    //             one payment Entry with full amount
                    //             one transaction entry with credit (out) with payment ID

                    // 4 MULTI MODE PAY -- one transaction entry with Debit (In)
                    //             one payment Entry
                    //             one transaction entry with credit (out)

                    if (tbl_Sale.PaymentMode != null && tbl_Sale.PaymentMode.Value != PaymentMode.HOLD
                        ) // not hold
                    {
                        var amount    = tbl_Sale.Amount;
                        var creditTID = GenericHelper.GetMaxValue(SequenceTable.tbl_TransactionCredit);
                        var tbl_Transaction_Credit = new TblTransaction
                        {
                            Id = creditTID,

                            CreatedDatetime = tbl_Sale.CreatedDatetime,
                            EntryDate       = tbl_Sale.InvoiceDate.ToString(),

                            EntryType = TransactionEntryType.Sales
                                        .ToString(), //"Purchase", // Purchase/Sales/Recipt/Payment
                            Status = TransactionStatus
                                     .Unpaid,        //Paid/Unpaid/Pending/Paid Against entries : // Recive  Against entries
                            TransactionType =
                                TransactionType.Debit
                                .ToString(),     //Debit/ credit --  For Real: Debit what comes in, credit what goes out.
                            //TransactionRef = null,

                            EntryId = tbl_Sale.SaleId,
                            //PurchaseId = tbl_Sale.Id,
                            SalesId = tbl_Sale.SaleId,

                            Amount = tbl_Sale.GrandTotal,

                            VendorId = tbl_Sale.CustomerId
                        };
                        _context.TblTransaction.Add(tbl_Transaction_Credit);
                        //_context.SaveChanges();

                        var NewSequenceValueTbl_Transaction = GenericHelper.GetNextUpdatedData("tbl_TransactionCredit");
                        _context.Entry(NewSequenceValueTbl_Transaction).State = EntityState.Modified;

                        //_context.SaveChanges();
                        if (tbl_Sale.PaymentMode == 2) //CREDIT PURCHASE
                        {
                        }
                        else if (tbl_Sale.PaymentMode == 3) //CASH PAY
                        {
                            var tbl_PaymentID = GenericHelper.GetMaxValue("tbl_Payment");
                            var tbl_Payment   = new TblPayment
                            {
                                Id              = tbl_PaymentID,
                                Amount          = tbl_Sale.GrandTotal,
                                CreatedDatetime = tbl_Sale.CreatedDatetime,

                                PartyName   = tbl_Sale.SaleId,
                                PaymentDate = tbl_Sale.InvoiceDate.ToString(),
                                PaymentMode = "CASH"
                                              //Remark = "",
                                              //TransactionID = creditTID,
                            };
                            _context.TblPayment.Add(tbl_Payment);

                            var NewSequenceValueTbl_Payment = GenericHelper.GetNextUpdatedData("tbl_Payment");
                            _context.Entry(NewSequenceValueTbl_Payment).State = EntityState.Modified;
                            //_context.SaveChanges();

                            var tbl_TransactionDebit = new TblTransaction
                            {
                                Id = GenericHelper.GetMaxValue("tbl_TransactionDebit"),

                                CreatedDatetime = tbl_Sale.CreatedDatetime,
                                EntryDate       = tbl_Sale.InvoiceDate.ToString(),

                                EntryType = TransactionEntryType.Sales
                                            .ToString(), // "Purchase", // Purchase/Sales/Recipt/Payment
                                Status = TransactionStatus.PaidAgainstEntries +
                                         tbl_Sale
                                         .SaleId,     //Paid/Unpaid/Pending/Paid Against entries : // Recive  Against entries
                                TransactionType =
                                    TransactionType.Credit
                                    .ToString(),     //Debit/ credit --  For Real: Debit what comes in, credit what goes out.
                                TransactionRef = tbl_Sale.SaleId,

                                EntryId = tbl_PaymentID,
                                //PurchaseID = null,
                                //SalesID = null,
                                PaymentId = tbl_PaymentID,

                                Amount = tbl_Sale.GrandTotal,

                                VendorId = tbl_Sale.CustomerId
                            };
                            _context.TblTransaction.Add(tbl_TransactionDebit);

                            var NewSequenceValuetbl_Transaction2 =
                                GenericHelper.GetNextUpdatedData("tbl_TransactionDebit");
                            _context.Entry(NewSequenceValuetbl_Transaction2).State = EntityState.Modified;

                            //_context.SaveChanges();

                            //var tbl_Transaction result = _context.tbl_Transaction.Where(q => q.ID == creditTID).FirstOrDefault();
                            tbl_Transaction_Credit.Status = TransactionStatus.Paid;
                            //_context.Entry(tbl_Transactionresult).State = EntityState.Modified;
                            //_context.SaveChanges();
                        }
                        else if (tbl_Sale.PaymentMode == 4) //MULTI MODE PAY
                        {
                            var tbl_PaymentID = GenericHelper.GetMaxValue("tbl_Payment");
                            var tbl_Payment   = new TblPayment
                            {
                                Id              = tbl_PaymentID,
                                Amount          = amount,
                                CreatedDatetime = tbl_Sale.CreatedDatetime,

                                PartyName   = tbl_Sale.CustomerId,
                                PaymentDate = tbl_Sale.InvoiceDate.ToString(),
                                PaymentMode = "CASH"
                                              //Remark = "",
                                              //TransactionID = creditTID,
                            };
                            _context.TblPayment.Add(tbl_Payment);

                            var NewSequenceValueTbl_Payment = GenericHelper.GetNextUpdatedData("tbl_Payment");
                            _context.Entry(NewSequenceValueTbl_Payment).State = EntityState.Modified;
                            //_context.SaveChanges();

                            var tbl_TransactionDebit = new TblTransaction
                            {
                                Id = GenericHelper.GetMaxValue("tbl_TransactionDebit"),

                                CreatedDatetime = tbl_Sale.CreatedDatetime,
                                EntryDate       = tbl_Sale.InvoiceDate.ToString(),

                                EntryType = TransactionEntryType.Purchase
                                            .ToString(), // "Purchase", // Purchase/Sales/Recipt/Payment
                                Status = TransactionStatus.PaidAgainstEntries +
                                         tbl_Sale
                                         .SaleId,     //Paid/Unpaid/Pending/Paid Against entries : // Recive  Against entries
                                TransactionType =
                                    TransactionType.Debit
                                    .ToString(),     //Debit/ credit --  For Real: Debit what comes in, credit what goes out.
                                TransactionRef = tbl_Sale.SaleId,

                                EntryId = tbl_PaymentID,
                                //PurchaseID = null,
                                //SalesID = null,
                                PaymentId = tbl_PaymentID,

                                Amount = amount,

                                VendorId = tbl_Sale.CustomerId
                            };
                            _context.TblTransaction.Add(tbl_TransactionDebit);

                            var NewSequenceValueTbl_Transaction2 =
                                GenericHelper.GetNextUpdatedData("tbl_TransactionDebit");
                            _context.Entry(NewSequenceValueTbl_Transaction2).State = EntityState.Modified;
                        }
                    }


                    _context.SaveChanges();
                    saved = true;
                }
                catch (Exception e)
                {
                    throw new InvalidOperationException(e.Message);
                }
                finally
                {
                    //if (saved) transaction.Commit();
                }

                //if (tbl_Sale.PaymentMode == 4)  //MULTI MODE PAY
                //    return JavaScript("window.location = '/Purchases/index'");
                //else



                //return RedirectToAction("Index");
                return(Content("window.location = '/Sale/index'"));
            }
            else
            {
                ViewBag.CustomerID = new SelectList(_context.TblVendor, "ID", "Name", tbl_Sale.CustomerId);
                throw new InvalidOperationException("Please add item to continue!!");
            }

            //return RedirectToAction("Index");
            //}
        }
示例#8
0
        // Invoice
        // Expense
        // Payable
        // Purchase
        // Stock
        // StockIn
        // Transaction
        public async Task <WrapperPurchaseListVM> AddPurchaseAsync(PurchaseVM purchaseVM)
        {
            // Invoice
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <PurchaseVM, Invoice>(purchaseVM);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);

            // Setting Up Invoice Id
            purchaseVM.InvoiceId = invoiceToAdd.Id;
            foreach (var item in purchaseVM.ItemList)
            {
                item.InvoiceId = invoiceToAdd.Id;
            }

            // Expense
            Expense expenseToAdd = new Expense();

            expenseToAdd = this._utilService.Mapper.Map <PurchaseVM, Expense>(purchaseVM);
            _repositoryWrapper.Expense.Create(expenseToAdd);

            // Payable
            Payable payableToAdd = new Payable();

            payableToAdd = _utilService.Mapper.Map <PurchaseVM, Payable>(purchaseVM);
            _repositoryWrapper.Payable.Create(payableToAdd);

            // Purchase
            List <Purchase> listOfPurchaseToAdd = new List <Purchase>();

            listOfPurchaseToAdd = _utilService.Mapper.Map <List <PurchaseItemVM>, List <Purchase> >(purchaseVM.ItemList);
            _repositoryWrapper.Purchase.CreateAll(listOfPurchaseToAdd);


            // Stock
            Stock stockToAdd = new Stock();
            IEnumerable <Stock> stockList = await _repositoryWrapper.Stock.FindByConditionAsync(x => x.FactoryId == purchaseVM.FactoryId);

            for (int i = 0; i < purchaseVM.ItemList.Count; i++)
            {
                Stock existingStock = stockList.ToList().Where(x => x.ItemId == purchaseVM.ItemList[i].Item.Id && x.ItemStatusId == purchaseVM.ItemList[i].ItemStatus.Id).FirstOrDefault();

                // IF NOT PRESENT ADD
                if (existingStock == null)
                {
                    stockToAdd = _utilService.Mapper.Map <PurchaseItemVM, Stock>(purchaseVM.ItemList[i]);
                    _repositoryWrapper.Stock.Create(stockToAdd);
                }
                // IF PRESENT UPDATE
                else
                {
                    existingStock.Quantity += purchaseVM.ItemList[i].Quantity;
                    _repositoryWrapper.Stock.Update(existingStock);
                }
            }

            // StockIn
            List <StockIn> stockInsToAdd = new List <StockIn>();

            stockInsToAdd = _utilService.Mapper.Map <List <PurchaseItemVM>, List <StockIn> >(purchaseVM.ItemList);
            _repositoryWrapper.StockIn.CreateAll(stockInsToAdd);


            // Transaction
            TblTransaction transactionPaid = new TblTransaction();

            transactionPaid                 = _utilService.Mapper.Map <PurchaseVM, TblTransaction>(purchaseVM);
            transactionPaid.Amount          = purchaseVM.PaidAmount;
            transactionPaid.PaymentStatus   = PAYMENT_STATUS.CASH_PAID.ToString();
            transactionPaid.TransactionType = TRANSACTION_TYPE.DEBIT.ToString();
            _repositoryWrapper.Transaction.Create(transactionPaid);


            //TblTransaction transactionPayable = new TblTransaction();
            //transactionPayable = _utilService.Mapper.Map<PurchaseVM, TblTransaction>(purchaseVM);
            //transactionPayable.Amount = purchaseVM.DueAmount;
            //transactionPayable.PaymentStatus = PAYMENT_STATUS.CASH_PAYABLE.ToString();
            //transactionPayable.TransactionType = TRANSACTION_TYPE.NOT_YET_EXECUTED.ToString();
            //transactionPayable.TransactionId = transactionPaid.TransactionId;
            //_repositoryWrapper.Transaction.Create(transactionPayable);

            Task <int> Invoice     = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> Expense     = _repositoryWrapper.Expense.SaveChangesAsync();
            Task <int> Payable     = _repositoryWrapper.Payable.SaveChangesAsync();
            Task <int> Purchase    = _repositoryWrapper.Purchase.SaveChangesAsync();
            Task <int> Stock       = _repositoryWrapper.Stock.SaveChangesAsync();
            Task <int> StockIn     = _repositoryWrapper.StockIn.SaveChangesAsync();
            Task <int> Transaction = _repositoryWrapper.Transaction.SaveChangesAsync();
            await Task.WhenAll(Invoice, Expense, Payable, Purchase, Stock, StockIn, Transaction);

            var getDatalistVM = new GetDataListVM()
            {
                FactoryId  = purchaseVM.FactoryId,
                PageNumber = 1,
                PageSize   = 10
            };


            return(await GetAllPurchaseAsync(getDatalistVM));
        }
示例#9
0
        public async Task <WrapperPurchaseReturnVM> AddPurchaseReturnAsync(PurchaseReturnVM vm)
        {
            // StockOut
            // Invoice
            // Recievable
            // Stock
            Invoice invoiceToAdd = new Invoice();

            invoiceToAdd = _utilService.Mapper.Map <PurchaseReturnVM, Invoice>(vm);
            _repositoryWrapper.Invoice.Create(invoiceToAdd);
            vm.InvoiceId = invoiceToAdd.Id;

            if (!vm.IsFullyPaid)
            {
                Recievable RecievableToAdd = new Recievable();
                RecievableToAdd = _utilService.Mapper.Map <PurchaseReturnVM, Recievable>(vm);
                _repositoryWrapper.Recievable.Create(RecievableToAdd);
            }

            Stock stockToAdd = new Stock();

            stockToAdd = _utilService.Mapper.Map <PurchaseReturnVM, Stock>(vm);

            // Stock
            IEnumerable <Stock> stockList = await _repositoryWrapper.Stock.FindByConditionAsync(x => x.FactoryId == vm.FactoryId);

            Stock existingStock = stockList
                                  .ToList()
                                  .Where(x => x.ItemId == vm.ItemId && x.FactoryId == vm.FactoryId && x.ItemStatusId == vm.ItemStatusId)
                                  .FirstOrDefault();

            // IF NOT PRESENT ADD
            if (existingStock == null)
            {
                _utilService.Log("Stock Is Empty. Not Enough Stock available");
                throw new StockEmptyException();
                //stockToAdd = _utilService.Mapper.Map<SalesItemVM, Stock>(salesVM.ItemList[i]);
                //_repositoryWrapper.Stock.Create(stockToAdd);
            }
            // IF PRESENT UPDATE
            else
            {
                if (existingStock.Quantity < vm.Quantity)
                {
                    throw new StockEmptyException();
                }
                else
                {
                    existingStock.Quantity -= vm.Quantity;
                    _repositoryWrapper.Stock.Update(existingStock);
                }
            }

            StockOut stockOutToAdd = new StockOut();

            stockOutToAdd = _utilService.Mapper.Map <PurchaseReturnVM, StockOut>(vm);

            _repositoryWrapper.StockOut.Create(stockOutToAdd);


            if (vm.AmountRecieved > 0)
            {
                TblTransaction tblTransactionToAdd = new TblTransaction();
                tblTransactionToAdd = _utilService.Mapper.Map <PurchaseReturnVM, TblTransaction>(vm);
                _repositoryWrapper.Transaction.Create(tblTransactionToAdd);

                Income incomeToAdd = new Income();
                incomeToAdd = _utilService.Mapper.Map <PurchaseReturnVM, Income>(vm);
                _repositoryWrapper.Income.Create(incomeToAdd);
            }



            Task <int> invT         = _repositoryWrapper.Invoice.SaveChangesAsync();
            Task <int> stockInT     = _repositoryWrapper.StockOut.SaveChangesAsync();
            Task <int> stockT       = _repositoryWrapper.Stock.SaveChangesAsync();
            Task <int> payableT     = _repositoryWrapper.Recievable.SaveChangesAsync();
            Task <int> transactionT = _repositoryWrapper.Transaction.SaveChangesAsync();
            Task <int> incomeT      = _repositoryWrapper.Income.SaveChangesAsync();

            await Task.WhenAll(invT, stockInT, stockT, payableT, transactionT, incomeT);

            var data = new GetDataListVM()
            {
                FactoryId  = vm.FactoryId,
                PageSize   = 15,
                PageNumber = 1
            };

            return(await GetAllPurchaseReturnAsync(data));
        }