public async Task <ActionResult <BillItems> > PostBillItems(BillItems billItems)
        {
            _context.BillItems.Add(billItems);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetBillItems", new { id = billItems.Id }, billItems));
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 4
0
        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.");
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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.");
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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());
        }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        //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;
            }
        }
Exemplo n.º 14
0
 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! حصل خطأ لم يتم اضافة الفاتورة");
            }
        }
Exemplo n.º 16
0
        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;
            }
        }
Exemplo n.º 17
0
 public decimal GetApplicableDiscount(StoreUser user, BillItems items)
 {
     return((user != null ? (UserType.Affiliate == user.UserType ? 0.10m : 0m) : 0m));
 }
Exemplo n.º 18
0
 public int RemoveBillItem(Predicate <BillItem> filterExpression)
 {
     return(BillItems.RemoveAll(filterExpression));
 }
Exemplo n.º 19
0
 public decimal GetBillTotalWithoutCharges()
 {
     return(BillItems.Aggregate(0.0M, (acc, bill) => acc + bill.UnitPrice));
 }
Exemplo n.º 20
0
 public void AddBillItem(BillItem billItem)
 {
     BillItems.Add(billItem);
 }
Exemplo n.º 21
0
 public decimal GetApplicableDiscount(StoreUser user, BillItems items)
 {
     return(null != items ? Math.Floor(items.BillTotal / 100m) * 5m : 0m);
 }