public PurchaseNewEntryVM(PurchaseVM parentVM)
 {
     _parentVM = parentVM;
 }
 public PurchaseView()
 {
     InitializeComponent();
     var vm = new PurchaseVM();
     DataContext = vm;
 }
Exemple #3
0
        // Invoice
        // Expense
        // Payable
        // Purchase
        // Stock
        // StockIn
        // Transaction
        public async Task <WrapperPurchaseListVM> DeletePurchaseAsync(PurchaseVM vm)
        {
            Task <List <Invoice> > invoiceToDelete = _repositoryWrapper
                                                     .Invoice
                                                     .FindAll()
                                                     .Where(x => x.Id == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                     .ToListAsync();
            Task <List <Expense> > expenseToDelete = _repositoryWrapper
                                                     .Expense
                                                     .FindAll()
                                                     .Where(x => x.InvoiceId == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                     .ToListAsync();
            Task <List <Payable> > payableToDelete = _repositoryWrapper
                                                     .Payable
                                                     .FindAll()
                                                     .Where(x => x.InvoiceId == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                     .ToListAsync();
            Task <List <Purchase> > purchaseToDelete = _repositoryWrapper
                                                       .Purchase
                                                       .FindAll()
                                                       .Where(x => x.InvoiceId == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                       .ToListAsync();

            await Task.WhenAll(invoiceToDelete, expenseToDelete, payableToDelete, purchaseToDelete);

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

            //&& purchaseToDelete
            //.Result
            //.ToList()
            //.FirstOrDefault(d => d.ItemId == x.ItemId) != null);

            for (int i = 0; i < purchaseToDelete.Result.Count(); i++)
            {
                Purchase purchaseItem  = purchaseToDelete.Result.ElementAt(i);
                Stock    existingStock = stockList.ToList().Where(x => x.ItemId == purchaseItem.ItemId).FirstOrDefault();
                if (existingStock == null)
                {
                    // _utilService.Log("Stock Is Empty. Not Enough Stock available");
                    // throw new StockEmptyException();
                }
                else
                {
                    if (existingStock.Quantity < purchaseItem.Quantity)
                    {
                        var getDatalistVM2 = new GetDataListVM()
                        {
                            FactoryId  = vm.FactoryId,
                            PageNumber = 1,
                            PageSize   = 10
                        };


                        WrapperPurchaseListVM vm2 = await GetAllPurchaseAsync(getDatalistVM2);

                        vm2.HasMessage = true;
                        vm2.Message    = "Stock hasn't enough item";
                        return(vm2);
                    }
                    else
                    {
                        existingStock.Quantity -= purchaseItem.Quantity;
                        _repositoryWrapper.Stock.Update(existingStock);
                    }
                }
            }


            Task <List <StockIn> > stockInToDelete = _repositoryWrapper
                                                     .StockIn
                                                     .FindAll()
                                                     .Where(x => x.InvoiceId == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                     .ToListAsync();

            Task <List <TblTransaction> > transactionToDelete = _repositoryWrapper
                                                                .Transaction
                                                                .FindAll()
                                                                .Where(x => x.InvoiceId == vm.InvoiceId && x.FactoryId == vm.FactoryId)
                                                                .ToListAsync();



            _repositoryWrapper.Invoice.DeleteAll(invoiceToDelete.Result.ToList());
            _repositoryWrapper.Expense.DeleteAll(expenseToDelete.Result.ToList());
            _repositoryWrapper.Payable.DeleteAll(payableToDelete.Result.ToList());
            _repositoryWrapper.Purchase.DeleteAll(purchaseToDelete.Result.ToList());
            _repositoryWrapper.StockIn.DeleteAll(stockInToDelete.Result.ToList());
            _repositoryWrapper.Transaction.DeleteAll(transactionToDelete.Result.ToList());



            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> StockIn        = _repositoryWrapper.StockIn.SaveChangesAsync();
            Task <int> TblTransaction = _repositoryWrapper.Transaction.SaveChangesAsync();
            Task <int> Stock          = _repositoryWrapper.Stock.SaveChangesAsync();

            await Task.WhenAll(Invoice, Expense, Payable, Purchase, StockIn, TblTransaction, Stock);


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


            return(await GetAllPurchaseAsync(getDatalistVM));
        }
Exemple #4
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));
        }
        public ActionResult Purchase(PurchaseVM model)
        {
            if (ModelState.IsValid)
            {
                //recebe o event
                var ev = _db.Coffees.FirstOrDefault(m => m.Id == model.Coffees.Id);

                //cria ticket
                var ticket = new Ticket()
                {
                    Name          = model.Tickets.Name,
                    Email         = model.Tickets.Email,
                    ZipCode       = model.Tickets.ZipCode,
                    Street        = model.Tickets.Street,
                    AddressNumber = model.Tickets.AddressNumber,
                    City          = model.Tickets.City,
                    Country       = model.Tickets.Country,
                    CoffeeId      = model.Coffees.Id
                };

                _db.Tickets.Add(ticket);
                _db.SaveChanges();

                //cria objeto pagamento
                var payment = new Payment
                {
                    //id gerado pelo controller WebExperience
                    experience_profile_id = "XP-ZPYR-5PG7-UPN3-QBJQ",
                    intent = "sale",
                    payer  = new Payer
                    {
                        payment_method = "paypal"
                    },
                    transactions = new List <Transaction>
                    {
                        new Transaction
                        {
                            description = "User: [email protected] Senha:mar982836",
                            amount      = new Amount
                            {
                                currency = "BRL",
                                total    = ev.Price.ToString()
                            },
                            item_list = new ItemList()
                            {
                                items = new List <Item>()
                                {
                                    new Item
                                    {
                                        description = $"Evento: {model.Coffees.Name} Preço: {model.Coffees.Price.ToString()}",
                                        currency    = "BRL",
                                        quantity    = "1",
                                        price       = ev.Price.ToString()
                                    }
                                }
                            }
                        }
                    },
                    redirect_urls = new RedirectUrls
                    {
                        return_url = Url.Action("Return", "SimplePayment", null, Request.Url.Scheme),
                        cancel_url = Url.Action("Cancel", "SimplePayment", null, Request.Url.Scheme)
                    }
                };

                //cria api context do paypal com as credências(paypal developer site) em web.config
                var apiContext = GetAPIContext();

                //envia o objeto pagamento para o paypal api
                var createdPayment = payment.Create(apiContext);

                //salva a referência do pagamento no ticket, referência criada pelo paypal api, e salva no DB
                ticket.PaypalReference = createdPayment.id;
                _db.SaveChanges();

                //procura a url no createdPayment(objeto pagamento paypal), o mesmo retorna Return ou Cancel, se ok envia para page de login do paypal :)
                var approvalUrl = createdPayment.links.FirstOrDefault(m => m.rel.Equals("approval_url", StringComparison.OrdinalIgnoreCase));

                //envia tela para validar dados do user, e finalizar compra com o paypal
                return(Redirect(approvalUrl.href));
            }
            else
            {
                var c = _db.Coffees.Find(model.Coffees.Id);
                var m = new PurchaseVM
                {
                    Coffees = c
                };
                return(View(m));
            }
        }