public async Task <ActionResult <BillItems> > PostBillItems(BillItems billItems) { _context.BillItems.Add(billItems); await _context.SaveChangesAsync(); return(CreatedAtAction("GetBillItems", new { id = billItems.Id }, billItems)); }
internal static BillItems Generate5BillItems() { BillItems items = new BillItems { Products = new List <Product> { new Product { ProductType = ProductType.Automobiles, Price = 10, Quantity = 2 }, new Product { ProductType = ProductType.Clothing, Price = 20, Quantity = 2 }, new Product { ProductType = ProductType.Grocery, Price = 10, Quantity = 2 }, new Product { ProductType = ProductType.Appliances, Price = 20, Quantity = 2 }, new Product { ProductType = ProductType.Electronics, Price = 20, Quantity = 2 }, } }; return(items); }
public async Task <IActionResult> PutBillItems(int id, BillItems billItems) { if (id != billItems.Id) { return(BadRequest()); } _context.Entry(billItems).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!BillItemsExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public void Employee_Gets_30_Percent_Discount_Amount_Total() { var currentUser = new StoreUser { UserType = UserType.Employee }; BillItems items = FakeDataGenerator.Generate5BillItems(); decimal expectedDiscount = 47m; decimal expectedTotal = items.BillTotal - expectedDiscount; decimal actualTotal = _calculator.CalculateFinalPrice(currentUser, items); Assert.AreEqual(expectedTotal, actualTotal, "Actual and expected Total amount are same."); }
public decimal CalculateFinalPrice(StoreUser user, BillItems items) { decimal discount = 0m; foreach (IPriceDiscountRule rule in discountRules.Where(o => o.IsMandatory == false)) { discount = Math.Max(discount, CalculateDiscount(user, items, rule)); } foreach (IPriceDiscountRule rule in discountRules.Where(o => o.IsMandatory == true)) { discount += CalculateDiscount(user, items, rule); } return(items.BillTotal - discount); }
public void New_Customer_Did_Not_Gets_5_Percent_Discount() { var currentUser = new StoreUser { UserType = UserType.Customer, FirstPurchaseDate = DateTime.Now }; BillItems items = FakeDataGenerator.Generate5BillItems(); decimal expectedDiscount = 5m; decimal expectedTotal = items.BillTotal - expectedDiscount; decimal actualTotal = _calculator.CalculateFinalPrice(currentUser, items); Assert.AreEqual(expectedTotal, actualTotal, "Actual and expected Total amount are same."); }
public decimal GetApplicableDiscount(StoreUser user, BillItems items) { if (null == user) { return(0m); } DateTime currentDate = DateTime.Now; if (user.FirstPurchaseDate.HasValue) { if (currentDate.AddYears(-1 * memberSinceinYrs) > user.FirstPurchaseDate.Value) { return(0.05m); } } return(0m); }
public decimal CalculateFinalPrice(StoreUser user, BillItems items) { decimal percentageTotalDiscount = 0m, itemTotal = 0m; decimal discountRate = GetDiscountRate(user); if (discountRate > 0) { foreach (var item in items.Products) { if (item.ProductType != ProductType.Grocery) { itemTotal += (item.Quantity * item.Price); } } percentageTotalDiscount = (itemTotal * discountRate); } decimal fixedDiscount = Math.Floor(items.BillTotal / 100) * 5m; return(items.BillTotal - (percentageTotalDiscount + fixedDiscount)); }
private decimal CalculateDiscount(StoreUser user, BillItems items, IPriceDiscountRule rule) { decimal discount = 0m; if (rule.IsFixed) // When discount is fixed { discount = rule.GetApplicableDiscount(user, items); } else // when discount is in percentage { decimal itemTotal = 0m; decimal discountRate = rule.GetApplicableDiscount(user, items); foreach (Product product in items.Products) { if (product.ProductType != ProductType.Grocery) //Percentage discount doesn't apply on grocery items { itemTotal += (product.Quantity * product.Price); } } discount = itemTotal * discountRate; } return(discount); }
public ActionResult OnGet(int BhId) { try { COD = SD.COD; Bi = _db.BillItems .Include(bill => bill.BillHeader) .Include(bill => bill.BillHeader.Customer) .Include(bill => bill.ProdInfo) .Include(bill => bill.BillHeader.ApplicationUser) .Where(bill => bill.HeaderId == BhId).ToList(); BillItems BillItem = Bi[0]; BillHeader = BillItem.BillHeader; CustomerName = BillItem.BillHeader.Customer.CompanyName; CustomerId = BillItem.BillHeader.Customer.Id; Warehouse Wh = _db.Warehouse.FirstOrDefault(wh => wh.Id == BillItem.WhId); SelectedWh = Wh.WhName; WhId = Wh.Id; // Bi = new List<BillItems> { new BillItems { ProdId = 0, Qty = 0, UnitPrice = 0, TotalAmt = 0, Note = "" } }; UnitPriceTypesList = _db.PricingType.ToList(); PaymentTermsList.Add(SD.COD); PaymentTermsList.Add(SD.Postpaid); InvStockQtyList = _db.InvStockQty .Include(inv => inv.Warehouse) .Include(inv => inv.ProdInfo).ToList(); } catch { } return(Page()); }
public BillDetails Edit(BillDetails bill) { var entity = Bills.First(x => x.Id == bill.Id); entity.Created = bill.Created ?? DateTime.Now; entity.Partner = bill.Partner is null ? null: Partners.Single(x => x.Id == bill.Partner.Id); entity.Condominium = bill.Condominium is null ? null: Condominiums.Single(x => x.Id == bill.Condominium.Id); entity.Description = bill.Description; entity.Serial = bill.Serial; entity.PaymentDeadline = bill.PaymentDeadline; entity.Done = bill.Done; DbContext.RemoveRange(BillItems.Where(x => x.Bill == entity)); entity.Items = bill.Items .Select(x => new Entities.BillItem() { Description = x.Description, Price = x.Price }) .ToList(); DbContext.AddRange(entity.Items); DbContext.RemoveRange(DbContext.BillTags.Where(x => x.Bill == entity)); entity.Tags = bill.Tags .Select(x => new BillTag() { Label = x.Label, Ratio = x.Rate }) .ToList(); DbContext.AddRange(entity.Tags); DbContext.SaveChanges(); return(entity.ToModelWithItems()); }
//Retorna o item da fatura pelo id do item informado public async Task <BillItems> GetByIdAnythingAsync(BillItems Bill_Items) { var result = await SearchByIdAsync("bill_items", Bill_Items.Id); return(FromDynamicTo <BillItems>(result?.bill_item)); }
private void PrintMethod() { try { if (BillItems.Count == 0) { return; } using (var unitOfWork = new UnitOfWork(new GeneralDBContext())) { DateTime dt = DateTime.Now; _newBill.Date = dt; _newBill.RegistrationDate = dt; _newBill.UserID = UserData.ID; _newBill = unitOfWork.Bills.Add(_newBill); foreach (var item in BillItems) { unitOfWork.BillsItems.Add(new BillItem { BillID = _newBill.ID, ItemID = item.ItemID, Price = item.Item.Price, Qty = item.Qty, Total = item.Qty * item.Item.Price }); } unitOfWork.Complete(); Safe safe = new Safe { Amount = _newBill.Total, CanDelete = false, RegistrationDate = dt, Type = true, UserID = UserData.ID, Statement = $"فاتورة {_newBill.ID}" }; unitOfWork.Safes.Add(safe); unitOfWork.Complete(); Mouse.OverrideCursor = Cursors.Wait; int rnd = new Random().Next(1000, 9999); List <int?> categoriesId = _billItems.Select(s => s.Item.CategoryID).Distinct().ToList(); foreach (var categoryId in categoriesId) { DS ds = new DS(); ds.Bill.Rows.Clear(); int i = 0; foreach (var item in BillItems.Where(w => w.Item.CategoryID == categoryId)) { ds.Bill.Rows.Add(); ds.Bill[i]["BillID"] = $"#{rnd}#{_newBill.ID}#"; ds.Bill[i]["Date"] = DateTime.Now.ToShortDateString(); ds.Bill[i]["Time"] = DateTime.Now.ToString(" h:mm tt"); ds.Bill[i]["Type"] = _newBill.Type; ds.Bill[i]["Details"] = _newBill.Details; ds.Bill[i]["ItemQty"] = item.Qty; ds.Bill[i]["ItemName"] = item.Item.Name; ds.Bill[i]["ItemPrice"] = string.Format("{0:0.00}", item.Item.Price);; ds.Bill[i]["BillTotal"] = string.Format("{0:0.00}", Math.Round(Convert.ToDecimal(BillItems.Where(w => w.Item.CategoryID == categoryId).Sum(s => s.Total)), 0)); i++; } //ReportWindow rpt = new ReportWindow(); BillItemsReport billItemsReport = new BillItemsReport(); billItemsReport.SetDataSource(ds.Tables["Bill"]); Mouse.OverrideCursor = null; billItemsReport.PrintToPrinter(1, false, 0, 15); //rpt.crv.ViewerCore.ReportSource = billItemsReport; //rpt.ShowDialog(); } BillItems = new ObservableCollection <BillItemDisplayDataModel>(); NewBill = new Bill { Type = "تيك اواى" }; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { Mouse.OverrideCursor = null; } }
public void AddBillItem(string description, decimal unitPrice) { BillItems.Add(new BillItem(description, unitPrice)); }
// this function will create a bill for the first time public async Task <string> CreateBill(BillHeader Header, List <BillItems> BillItems, int WhId, string Type, int?OldBhId) { try { Header.Id = new int(); Header.CreatedById = GetLoggedInUserId(); Header.CreatedDataTime = DateTime.Now; if (Header.TotalNetAmt == Header.PaidAmt) { Header.Status = SD.Completed; } else { Header.Status = SD.OpenBill; } _db.BillHeader.Add(Header); await _db.SaveChangesAsync(); // updatinga customer Acc double DebtAmt = Header.TotalNetAmt - Header.PaidAmt; UpdateCustomerAcc(Header.CustId ?? 0, Header.PaidAmt, DebtAmt, "New"); // add a new payment to bill payments table AddBillPayment(Header.CustId ?? 0, Header.Id, Header.PaidAmt); // Creating Bill items foreach (BillItems item in BillItems) { // item.ProdId = _db.ProdInfo.FirstOrDefault(pr => pr.ProdCode == item.ProdInfo.ProdCode).Id; BillItems Bill = new BillItems { HeaderId = Header.Id, ProdId = item.ProdId, Qty = item.Qty, WhId = WhId, UnitPrice = item.UnitPrice, TotalAmt = item.UnitPrice * item.Qty, Note = item.Note }; // decrease stock qty of that item DecreaseStockQty(Bill.ProdId ?? 0, WhId, Bill.Qty); // create inv transaction CreateInvTransaction(Bill.ProdId ?? 0, WhId, Bill.Qty, Header.Id, SD.Sales); _db.BillItems.Add(Bill); } await _db.SaveChangesAsync(); // if this function being used to edit an exisiting bill, then the old bill will be deleted if (Type == "Edit") { DeleteBill(OldBhId ?? 0).GetAwaiter().GetResult(); return("تم التعديل على الفاتورة"); } return("تمت اضافة فاتورة مبيعات جديدة"); } catch (Exception ex) { return("Error! حصل خطأ لم يتم اضافة الفاتورة"); } }
private void PrintMethod() { try { using (var unitOfWork = new UnitOfWork(new GeneralDBContext())) { unitOfWork.Bills.Edit(_selectedBill); unitOfWork.Safes.Remove(d => d.RegistrationDate == _selectedBill.RegistrationDate); Safe safe = new Safe { Amount = _selectedBill.Total, CanDelete = false, RegistrationDate = _selectedBill.RegistrationDate, Type = true, Statement = $"فاتورة {_selectedBill.ID}", UserID = (int)_selectedBill.UserID }; unitOfWork.Safes.Add(safe); unitOfWork.BillsItems.Remove(s => s.BillID == BillID); foreach (var item in BillItems) { unitOfWork.BillsItems.Add(new BillItem { BillID = BillID, ItemID = item.ItemID, Price = item.Item.Price, Qty = item.Qty, Total = item.Qty * item.Item.Price }); } unitOfWork.Complete(); Mouse.OverrideCursor = Cursors.Wait; int rnd = new Random().Next(1000, 9999); List <int?> categoriesId = _billItems.Select(s => s.Item.CategoryID).Distinct().ToList(); foreach (var categoryId in categoriesId) { DS ds = new DS(); ds.Bill.Rows.Clear(); int i = 0; foreach (var item in BillItems.Where(w => w.Item.CategoryID == categoryId)) { ds.Bill.Rows.Add(); ds.Bill[i]["BillID"] = $"#{rnd}#{_selectedBill.ID}#"; ds.Bill[i]["Date"] = DateTime.Now.ToShortDateString(); ds.Bill[i]["Time"] = DateTime.Now.ToString(" h:mm tt"); ds.Bill[i]["Type"] = _selectedBill.Type; ds.Bill[i]["Details"] = _selectedBill.Details; ds.Bill[i]["ItemQty"] = item.Qty; ds.Bill[i]["ItemName"] = item.Item.Name; ds.Bill[i]["ItemPrice"] = string.Format("{0:0.00}", item.Item.Price);; ds.Bill[i]["BillTotal"] = string.Format("{0:0.00}", Math.Round(Convert.ToDecimal(BillItems.Where(w => w.Item.CategoryID == categoryId).Sum(s => s.Total)), 0)); i++; } BillItemsReport billItemsReport = new BillItemsReport(); billItemsReport.SetDataSource(ds.Tables["Bill"]); Mouse.OverrideCursor = null; billItemsReport.PrintToPrinter(1, false, 0, 15); } currentWindow.Close(); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { Mouse.OverrideCursor = null; } }
public decimal GetApplicableDiscount(StoreUser user, BillItems items) { return((user != null ? (UserType.Affiliate == user.UserType ? 0.10m : 0m) : 0m)); }
public int RemoveBillItem(Predicate <BillItem> filterExpression) { return(BillItems.RemoveAll(filterExpression)); }
public decimal GetBillTotalWithoutCharges() { return(BillItems.Aggregate(0.0M, (acc, bill) => acc + bill.UnitPrice)); }
public void AddBillItem(BillItem billItem) { BillItems.Add(billItem); }
public decimal GetApplicableDiscount(StoreUser user, BillItems items) { return(null != items ? Math.Floor(items.BillTotal / 100m) * 5m : 0m); }