public ReceiptProduct MapReceiptProduct(Product product) { if (product == null) { throw new NullReferenceException($"Receveived product is null!"); } var productReceipt = new ReceiptProduct(); try { productReceipt.ProductName = product.ProductName; productReceipt.Barcode = product.Barcode; productReceipt.Amount = product.Amount; productReceipt.Discount = product.Discount; productReceipt.ProductPrice = product.Price; productReceipt.ProductPriceWithDiscount = _calculateProductPrice.Calculate(product, 1); productReceipt.Total = _calculateProductPrice.Calculate(product, product.Amount); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); Console.WriteLine(ex.Source); Console.WriteLine(ex.InnerException); throw; } return(productReceipt); }
private void CreateReceiptProduct(Guid receiptId, Guid productId, int productCount) { var receiptInQuestion = _dbCashierRegisterContext.Receipts.Find(receiptId); var productInQuestion = _dbCashierRegisterContext.Products.Single(product => product.Id == productId); if (receiptInQuestion == null || productInQuestion == null) { throw new Exception("Receipt or product not exists"); } if (productInQuestion.CountInStorage < productCount) { throw new Exception("Product count in storage less then product count."); } var newReceiptProduct = new ReceiptProduct { Product = productInQuestion, ProductId = productId, Receipt = receiptInQuestion, ReceiptId = receiptId, ProductCount = productCount, ProductDirectPercentageAtCreation = _dbCashierRegisterContext.Taxes.Single(tax => tax.TaxType == TaxType.Direct && tax.ProductTaxes.Any(product => product.ProductId == productId)).Percentage, ProductExcisePercentageAtCreation = _dbCashierRegisterContext.Taxes.Single(tax => tax.TaxType == TaxType.Excise && tax.ProductTaxes.Any(product => product.ProductId == productId)).Percentage, ProductPriceAtCreation = productInQuestion.Price }; _dbCashierRegisterContext.ReceiptProducts.Add(newReceiptProduct); _dbCashierRegisterContext.SaveChanges(); productInQuestion.CountInStorage -= productCount; _dbCashierRegisterContext.SaveChanges(); }
public async Task <IActionResult> PutReceiptProduct([FromRoute] int id, [FromBody] ReceiptProduct receiptProduct) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != receiptProduct.ID) { return(BadRequest()); } _context.Entry(receiptProduct).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ReceiptProductExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <IActionResult> AttivaCarta(CardDetailViewModel model) { SVCOperationViewModel svcBody = new SVCOperationViewModel(); svcBody.StoredValueCardCodeCollection.Add(model.SerialNumber); Issuer issuer = new Issuer(); issuer.Name = "Vittorio"; issuer.Address = "via centomani 11"; issuer.Telephone = "0000000"; issuer.EMail = "*****@*****.**"; issuer.VATNumber = "222222"; svcBody.StoredValueCardReceipt.IssuerData = issuer; ReceiptProduct receiptProduct = new ReceiptProduct(); receiptProduct.Code = model.SerialNumber; receiptProduct.Name = "VittorioCard"; receiptProduct.Price = 0; receiptProduct.Quantity = 1; receiptProduct.Family = ""; receiptProduct.Mode = ""; svcBody.StoredValueCardReceipt.Products.Add(receiptProduct); Payment payment = new Payment(); payment.CardCode = model.SerialNumber; svcBody.StoredValueCardReceipt.Payments.Add(payment); ShopReceipt shopReceipt = new ShopReceipt(); shopReceipt.IssueDate = DateTime.Now; shopReceipt.UserData = ""; svcBody.StoredValueCardReceipt.IssueDate = DateTime.Now; svcBody.StoredValueCardReceipt.UserData = ""; SenderData senderData = new SenderData(); senderData.Shop = Constants.SHOP; senderData.Terminal = Constants.TERMINAL; senderData.Type = 0; senderData.Number = 0; senderData.CashDrawer = 0; senderData.Operator = ""; svcBody.StoredValueCardReceipt.SenderData = senderData; SVCOperationResultViewModel result = await _svcService.Activate(svcBody); if (result.ResultStatus == Constants.MSG_RESULT_STATUS_OK) { model = await _svcService.Status(model.SerialNumber); } return(View("Status", model)); }
public async Task <IActionResult> ChargeSvc(string cardCode, decimal price) { SVCChargeOperationViewModel svcBody = new SVCChargeOperationViewModel(); svcBody.StoredValueCardCodeCollection.Add(cardCode); svcBody.CashbackType = SVCCashbackType.None; Issuer issuer = new Issuer(); issuer.Name = "Vittorio"; issuer.Address = "via centomani 11"; issuer.Telephone = "0000000"; issuer.EMail = "*****@*****.**"; issuer.VATNumber = "222222"; svcBody.StoredValueCardReceipt.IssuerData = issuer; ReceiptProduct receiptProduct = new ReceiptProduct(); receiptProduct.Code = cardCode; receiptProduct.Name = "VittorioCard"; receiptProduct.Price = price; receiptProduct.Quantity = 1; receiptProduct.Family = ""; receiptProduct.Mode = ""; svcBody.StoredValueCardReceipt.Products.Add(receiptProduct); Payment payment = new Payment(); payment.CardCode = cardCode; svcBody.StoredValueCardReceipt.Payments.Add(payment); ShopReceipt shopReceipt = new ShopReceipt(); shopReceipt.IssueDate = DateTime.Now; shopReceipt.UserData = ""; svcBody.StoredValueCardReceipt.IssueDate = DateTime.Now; svcBody.StoredValueCardReceipt.UserData = ""; SenderData senderData = new SenderData(); senderData.Shop = Constants.SHOP; senderData.Terminal = Constants.TERMINAL; senderData.Type = 0; senderData.Number = 0; senderData.CashDrawer = 0; senderData.Operator = ""; svcBody.StoredValueCardReceipt.SenderData = senderData; var charge = await _svcService.Charge(svcBody); return(View("AssociaCarta", charge)); }
public async Task SetProduct_WithInvalidData_ShouldReturnNull() { var category = await this.dbContext.Categories.FirstOrDefaultAsync(); var receiptProduct = new ReceiptProduct(); var actual = await this.productService.SetProductAsync(receiptProduct, "asd"); Assert.IsNull(actual); }
private bool CompareProperties(ReceiptProduct expected, ReceiptProduct actual) { return ( expected.Number == actual.Number && expected.PriceIn == actual.PriceIn && expected.ProductId == actual.ProductId && expected.ReceiptId == actual.ReceiptId ); }
private string PrintDiscount(ReceiptProduct product) { if (product.Discount == Discount.NoDiscount) { return(""); } else { return($"-{(product.Amount * product.ProductPrice) - (product.Amount * product.ProductPriceWithDiscount)} "); } }
public async Task <int> Create(ReceiptInputModel model) { var receiptProducts = new List <ReceiptProduct>(); foreach (var product in model.Products) { int productId = context.Products .Where(p => p.Barcode == product.Barcode) .Select(p => p.Id) .FirstOrDefault(); var receiptProduct = new ReceiptProduct() { Quantity = product.Quantity }; if (productId != default) { receiptProduct.ProductId = productId; } else { var newProduct = product.To <Product>(); receiptProduct.Product = newProduct; } receiptProducts.Add(receiptProduct); } var receipt = model.To <Receipt>(); int companyId = context.Companies .Where(c => c.Name == model.CompanyName) .Select(c => c.Id) .FirstOrDefault(); if (companyId != default) { receipt.CompanyId = companyId; } else { receipt.Company = new Company { Name = model.CompanyName }; } receipt.Products = receiptProducts; await context.Receipts.AddAsync(receipt); await context.SaveChangesAsync(); return(receipt.Id); }
public async Task <IActionResult> PostReceiptProduct([FromBody] ReceiptProduct receiptProduct) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } _context.ReceiptProducts.Add(receiptProduct); await _context.SaveChangesAsync(); return(CreatedAtAction("GetReceiptProduct", new { id = receiptProduct.ID }, receiptProduct)); }
public async Task <ProductServiceModel> SetProductAsync(ReceiptProduct receiptProduct, string id) { var product = await this.db.Products.FirstOrDefaultAsync(x => x.Id == id); if (product == null) { return(null); } receiptProduct.Product = product; return(product.MapTo <ProductServiceModel>()); }
public async Task SetProduct_WithValidData_ShouldReturnCorrectProduct() { var category = await this.dbContext.Categories.FirstOrDefaultAsync(); var expected = await this.productService.CreateAsync("product", 2m, 4, "81234567891131", category.Id, category.WareHouseId); var receiptProduct = new ReceiptProduct(); var actual = await this.productService.SetProductAsync(receiptProduct, expected.Id); Assert.AreEqual(expected.Id, actual.Id); }
public void UpdateReceipt(int userId, int id, ReceiptEdit receiptEdit) { var receipt = _context.Receipts.FirstOrDefault(r => r.UserID == userId && r.ID == id); receipt.PurchaseDate = DateTime.Parse(receiptEdit.Date); receipt.ShopID = receiptEdit.ShopId; //Check products //Current products var currentProducts = _context.ReceiptProducts.Where(rp => rp.ReceiptID == id).ToList(); foreach (var receiptProduct in receiptEdit.Products) { //Add if new if (receiptProduct.ReceiptProductId == -1) { var receiptProductObj = new ReceiptProduct() { Amount = receiptProduct.Amount, Price = receiptProduct.Price, ProductID = receiptProduct.ProductId, ReceiptID = id }; _context.ReceiptProducts.Add(receiptProductObj); _context.SaveChanges(); } //Only edit else { var current = _context.ReceiptProducts.FirstOrDefault(rp => rp.ID == receiptProduct.ReceiptProductId); current.Amount = receiptProduct.Amount; current.Price = receiptProduct.Price; current.ProductID = receiptProduct.ProductId; _context.SaveChanges(); } } //Look for products to delete foreach (var currentProduct in currentProducts) { if (receiptEdit.Products.All(p => p.ReceiptProductId != currentProduct.ID)) { _context.ReceiptProducts.Remove(currentProduct); _context.SaveChanges(); } } }
public async Task UpdateProduct_WithInvalidData_ShouldReturnNull() { var category = await this.dbContext.Categories.FirstOrDefaultAsync(); var result = await this.productService.CreateAsync("product", 2m, 4, "81234567891131", category.Id, category.WareHouseId); var receiptProduct = new ReceiptProduct(); var actual = await this.productService.UpdateAsync("asd", "updatedProduct", 2.2m, 200, "81234567891138", category.Id); Assert.IsNull(actual); }
public void CreateReceiptProducts(ICollection <ReceiptProductPost> products, int receiptId) { foreach (var product in products) { var receiptproduct = new ReceiptProduct() { ReceiptID = receiptId, ProductID = product.ProductId, Amount = product.Amount, Price = product.Price }; _context.ReceiptProducts.Add(receiptproduct); _context.SaveChanges(); } }
public async Task UpdateProduct_WithValidData_ShouldReturnCorrectProduct() { var category = await this.dbContext.Categories.FirstOrDefaultAsync(); var result = await this.productService.CreateAsync("product", 2m, 4, "81234567891131", category.Id, category.WareHouseId); var receiptProduct = new ReceiptProduct(); var actual = await this.productService.UpdateAsync(result.Id, "updatedProduct", 2.2m, 200, "81234567891138", category.Id); Assert.AreEqual(result.Id, actual.Id); Assert.AreEqual("updatedProduct", actual.Name); Assert.AreEqual(2.2m, actual.Price); Assert.AreEqual(200, actual.Quantity); Assert.AreEqual(category.Id, actual.CategoryId); }
public async Task <ReceiptProductServiceModel> AddProductToOpenedReceiptByUsernameAsync(string username, string productId, double quantity) { var receipt = await this.dbContext.Receipts .Include(x => x.User) .Include(x => x.ReceiptProducts) .ThenInclude(x => x.Product) .Where(x => x.User.UserName == username && x.IssuedOn == null) .FirstOrDefaultAsync(); if (receipt == null) { return(null); } var receiptProduct = new ReceiptProduct { AddedOn = DateTime.UtcNow, Receipt = receipt, Quantity = quantity, }; await this.productService.SetProductAsync(receiptProduct, productId); if (receiptProduct.Product == null) { return(null); } receiptProduct.Total = (decimal)quantity * receiptProduct.Product.Price; await this.dbContext.AddAsync(receiptProduct); await this.dbContext.SaveChangesAsync(); return(receiptProduct.MapTo <ReceiptProductServiceModel>()); }
partial void OnTypeChanging(ReceiptProduct.TypeX value);
private void detach_ReceiptProducts(ReceiptProduct entity) { this.SendPropertyChanging(); entity.Receipt = null; }
private void attach_ReceiptProducts(ReceiptProduct entity) { this.SendPropertyChanging(); entity.Receipt = this; }
partial void DeleteReceiptProduct(ReceiptProduct instance);
partial void UpdateReceiptProduct(ReceiptProduct instance);
partial void InsertReceiptProduct(ReceiptProduct instance);
public static void Seed(CashierRegisterContext dbContext) { var receiptCount = dbContext.Receipts.Count(); if (receiptCount != 0) { return; } var cashRegisterWithId = dbContext.CashRegisters.Find(1); var cashierWithId = dbContext.Cashiers.Find(1); var cashRegisterCount = dbContext.CashRegisterCashiers.Count(); CashRegisterCashier cashRegisterCashier; if (cashRegisterCount == 0) { var newCashRegisterCashier = new CashRegisterCashier { Cashier = cashierWithId, CashierId = cashierWithId.Id, CashRegister = cashRegisterWithId, CashRegisterId = cashRegisterWithId.Id, StartOfShift = DateTime.Now }; dbContext.Add(newCashRegisterCashier); dbContext.SaveChanges(); cashRegisterCashier = newCashRegisterCashier; } else { cashRegisterCashier = dbContext.CashRegisterCashiers.First(); } var allProducts = dbContext.Products.ToList(); for (var receiptIndex = 0; receiptIndex < 10; receiptIndex++) { var receipt = new Receipt { Id = new Guid(), DateTimeCreated = DateTime.Now, CashRegisterCashier = cashRegisterCashier }; dbContext.Add(receipt); dbContext.SaveChanges(); var productsOnReceipt = new List <Product>(); var productIndexes = new List <int>(); do { var randomIndex = new Random().Next(1, allProducts.Count); var any = productIndexes.Any(index => index == randomIndex); if (!any) { productIndexes.Add(randomIndex); } } while (productIndexes.Count < 3); foreach (var productIndex in productIndexes) { productsOnReceipt.Add(allProducts[productIndex]); } var receiptProductList = new List <ReceiptProduct>(); foreach (var product in productsOnReceipt) { var newReceiptProduct = new ReceiptProduct { Product = product, ProductId = product.Id, Receipt = receipt, ReceiptId = receipt.Id, ProductCount = 5, ProductDirectPercentageAtCreation = dbContext.Taxes.Single(tax => tax.TaxType == TaxType.Direct && tax.ProductTaxes.Any(prd => prd.ProductId == product.Id)) .Percentage, ProductExcisePercentageAtCreation = dbContext.Taxes.Single(tax => tax.TaxType == TaxType.Excise && tax.ProductTaxes.Any(prd => prd.ProductId == product.Id)) .Percentage, ProductPriceAtCreation = product.Price }; receiptProductList.Add(newReceiptProduct); dbContext.ReceiptProducts.Add(newReceiptProduct); dbContext.SaveChanges(); product.CountInStorage -= 5; dbContext.SaveChanges(); } var preTaxTotal = receiptProductList.Sum(product => product.Product.Price * product.ProductCount); var exciseTotal = receiptProductList.Sum(product => product.Product.Price * dbContext.Taxes.Single(tax => tax.TaxType == TaxType.Excise && tax.ProductTaxes.Any(prd => prd.ProductId == product.Product.Id)).Percentage / 100 * product.ProductCount); var directTotal = receiptProductList.Sum(product => product.Product.Price * dbContext.Taxes.Single(tax => tax.TaxType == TaxType.Direct && tax.ProductTaxes.Any(prd => prd.ProductId == product.Product.Id)).Percentage / 100 * product.ProductCount); var postTaxTotal = preTaxTotal + exciseTotal + directTotal; if (preTaxTotal != null) { receipt.PreTaxPriceAtCreation = (int)preTaxTotal; } if (exciseTotal != null) { receipt.ExciseTaxAtCreation = (int)exciseTotal; } if (directTotal != null) { receipt.DirectTaxAtCreation = (int)directTotal; } if (postTaxTotal != null) { receipt.PostTaxPriceAtCreation = (int)postTaxTotal; } dbContext.SaveChanges(); } }