public PurchaseNewEntryVM(PurchaseVM parentVM) { _parentVM = parentVM; }
public PurchaseView() { InitializeComponent(); var vm = new PurchaseVM(); DataContext = vm; }
// 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)); }
// 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)); } }