コード例 #1
0
        public ActionResult Create([Bind(Include = "id,itemid,quantity,price")] SalesLineItem salesLineItem, string shellsOrder)
        {
            if (ModelState.IsValid)
            {
                salesLineItem.orderid = Convert.ToInt32(Session["orderid"]);
                db.salesLineItem.Add(salesLineItem);
                db.SaveChanges();

                salesLineItem.price           = salesLineItem.quantity * (from d in db.salesLineItem where d.id == salesLineItem.id select d.item.product.price).FirstOrDefault();
                db.Entry(salesLineItem).State = EntityState.Modified;
                db.SaveChanges();

                if (shellsOrder != null)
                {
                    Session["shellsOrder"] = shellsOrder;
                    Switch.idsToSwitch.Add(salesLineItem.itemid);
                }
                var sli2 = (List <int>)(Session["ListShellsItem"]);

                return(RedirectToAction("Index", "SalesLineItems"));
            }

            ViewBag.itemid  = new SelectList(db.item, "id", "name", salesLineItem.itemid);
            ViewBag.orderid = new SelectList(db.order, "id", "id", salesLineItem.orderid);
            return(View(salesLineItem));
        }
コード例 #2
0
        public void SetDiscountStringWithInvalidDiscountStringShouldThrowException()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 10);

            Assert.Throws <FormatException>(() => lineItem.SetDiscount("$x"),
                                            "Attempting to set a invalid discount should result in an exception.");
        }
コード例 #3
0
 public bool DeleteInvoiceLineItem(SalesInvoice salesInvoice, SalesLineItem item)
 {
     _unitOfWork.SalesInvoiceRepository.Edit(salesInvoice);
     AddLineItemStock(item, salesInvoice.BranchId);
     _unitOfWork.Save();
     return(true);
 }
コード例 #4
0
        public void SetDiscountStringWithNegativeMoneyDiscountShouldThrowException()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 10);

            Assert.Throws <ArgumentOutOfRangeException>(() => lineItem.SetDiscount("$-5.00"),
                                                        "Attempting to set a negative discount should result in an exception.");
        }
コード例 #5
0
        public List <SalesLineItem> GetSalesLineItemsFromOrderID(int id)
        {
            List <SalesLineItem> list           = new List <SalesLineItem>();
            ProductController    prodController = new ProductController();

            using (SqlConnection con = new SqlConnection(_connectionString)) {
                con.Open();
                using (SqlCommand cmd = con.CreateCommand()) {
                    cmd.CommandText = "SELECT * FROM SalesLineItem WHERE orderID = @ID";
                    cmd.Parameters.AddWithValue("ID", id);

                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        SalesLineItem sli = new SalesLineItem()
                        {
                            amount         = reader.GetInt32(reader.GetOrdinal("amount")),
                            Price          = reader.GetDecimal(reader.GetOrdinal("price")),
                            Order          = GetOrder(id),
                            Product        = prodController.GetProduct(reader.GetInt32(reader.GetOrdinal("productID"))),
                            ProductVersion = new ProductVersion()
                            {
                                ColorCode = reader.GetString(reader.GetOrdinal("colorCode")),
                                SizeCode  = reader.GetString(reader.GetOrdinal("sizeCode")),
                            }
                        };
                        list.Add(sli);
                    }
                }
            }

            return(list);
        }
コード例 #6
0
        public async Task <IActionResult> Create([Bind("Id,SalesDate,CustomerId")] Sales sales, string[] selectedProducts, string[] productQuantities)
        {
            if (selectedProducts != null)
            {
                sales.LineItems = new List <SalesLineItem>();
                var selectedProductsHS  = new List <string>(selectedProducts);
                var productQuantitiesHS = new List <string>(productQuantities);

                foreach (var product in selectedProductsHS)
                {
                    int lineItemIndex = selectedProductsHS.FindIndex(p => p == product);
                    int quantity      = int.Parse(productQuantitiesHS.ElementAt(lineItemIndex));
                    var lineItemToAdd = new SalesLineItem {
                        SalesId = sales.Id, ProductId = int.Parse(product), Quantity = quantity
                    };
                    sales.LineItems.Add(lineItemToAdd);
                }
            }
            if (ModelState.IsValid)
            {
                _context.Add(sales);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            PopulateCustomersDropDownList(sales.CustomerId);
            PopulateProductsData(sales);
            return(View(sales));
        }
コード例 #7
0
        public void SetDiscountStringAppliesPercentageDiscountOnLineItemWithSingleQuantity()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 1);

            lineItem.SetDiscount("33%");

            Assert.That(lineItem.GetDiscount(), Is.EqualTo(0.33m));
        }
コード例 #8
0
        public void SetDiscountDiscountAppliesAbsoluteDiscountOnLineItemWithSingleQuantity()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 1);

            lineItem.SetDiscount(new Discount(DiscountType.Absolute, 0.5m));

            Assert.That(lineItem.GetDiscount(), Is.EqualTo(0.5m));
        }
コード例 #9
0
        void SubtractLineItemStock(SalesLineItem item, int branchId)
        {
            var stock = _unitOfWork.StockRepository.FindBy(x => x.BranchId == branchId &&
                                                           x.ProductcId == item.ProductId).SingleOrDefault();

            stock.Quantity = stock.Quantity - item.Quantity;
            _unitOfWork.StockRepository.Edit(stock);
        }
コード例 #10
0
        public void SetDiscountDiscountAppliesPercentageDiscountOnLineItemWithMultipleQuantity()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 10);

            lineItem.SetDiscount(new Discount(DiscountType.Percentage, 50));

            Assert.That(lineItem.GetDiscount(), Is.EqualTo(5.00m));
        }
コード例 #11
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            SalesLineItem salesLineItem = await db.SalesOrderItems.FindAsync(id);

            db.SalesOrderItems.Remove(salesLineItem);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #12
0
        public ActionResult DeleteConfirmed(int id)
        {
            SalesLineItem salesLineItem = db.salesLineItem.Find(id);

            db.salesLineItem.Remove(salesLineItem);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #13
0
        public void SetDiscountStringAppliesAbsoluteDiscountOnLineItemWithMultipleQuantity()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 10);

            lineItem.SetDiscount("$5.00");

            Assert.That(lineItem.GetDiscount(), Is.EqualTo(5.00m));
        }
コード例 #14
0
        public void AddQuantityNegativeValueShouldDecrement()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 1);

            lineItem.AddQuantity(-1);

            Assert.That(lineItem.Quantity, Is.EqualTo(0));
        }
コード例 #15
0
        /// <summary>
        /// Mutates the sale with 'Buy N Get One' type discounts and gets the total.
        /// </summary>
        /// <param name="sale"></param>
        /// <returns></returns>
        public decimal GetTotal(Sale sale)
        {
            var discountedLineItems = new List <SalesLineItem>();
            var originalLineItems   = new List <SalesLineItem>();

            foreach (var lineItem in sale.LineItems)
            {
                // Apply discounts directly to line item, if any.

                foreach (
                    var discount in
                    _discounts
                    .Where(d => d.IsValid() && d.DiscountAppliedOnNextProduct)
                    .Where(d => d.ProductId == lineItem.ProductId && lineItem.Quantity > d.ThresholdQuantity)
                    .OrderByDescending(d => d.ThresholdQuantity))
                {
                    // There may be eligible discount(s) to apply to current line item based on quantity.
                    // Apply the discounts with the largest quantities first as they generally have the better discounts.

                    while (lineItem.Quantity > discount.ThresholdQuantity)
                    {
                        // Create a separate line item that receives the discount.
                        var discountedLineItem =
                            new SalesLineItem(new Product(lineItem.ProductId, lineItem.ProductPrice), 1);
                        discountedLineItem.SetDiscount(discount.Discount);

                        // Save to temporary list.
                        discountedLineItems.Add(discountedLineItem);

                        // Decrement original line item quantity by the threshold quantity plus the promotional item.
                        lineItem.AddQuantity(-1 * (discount.ThresholdQuantity + 1));

                        // Create a new line item with the original threshold quantity to a temporary list.
                        // Do not want to count these quantities again.
                        var originalLineItem = new SalesLineItem(new Product(lineItem.ProductId, lineItem.ProductPrice),
                                                                 discount.ThresholdQuantity);
                        originalLineItems.Add(originalLineItem);

                        // TODO: Add a limit, i.e. only get the discount a certain number of times.
                    }
                }
            }

            sale.RemoveZeroQuantityLineItems();

            foreach (var item in originalLineItems)
            {
                sale.MakeLineItem(new Product(item.ProductId, item.ProductPrice), item.Quantity);
            }

            foreach (var item in discountedLineItems)
            {
                sale.AddLineItem(item); // Add these directly to the sale.
            }
            var total = sale.LineItems.Sum(i => i.GetSubtotal());

            return(total);
        }
コード例 #16
0
        public void SetDiscountStringWithNullOrEmptyDiscountStringShouldThrowException()
        {
            var lineItem = new SalesLineItem(new Product("A", price: 1.0m), quantity: 10);

            Assert.Throws <ArgumentNullException>(() => lineItem.SetDiscount(""),
                                                  "Attempting to set a empty discount should result in an exception.");
            Assert.Throws <ArgumentNullException>(() => lineItem.SetDiscount(null),
                                                  "Attempting to set a null discount should result in an exception.");
        }
コード例 #17
0
        public LineItemStatus GetStatusAfterUnship(SalesLineItem lineItem, int qty)
        {
            if (lineItem.Quantity > (lineItem.ProcessedQty - qty))
            {
                return(LineItemStatus.Open);
            }

            return(lineItem.Status);
        }
コード例 #18
0
        public ActionResult Index(CompanyProduct product, FormCollection form)
        {
            if (Session["ShoppingCart"] == null)
            {
                ShoppingCart            = new List <SalesLineItem>();
                Session["ShoppingCart"] = ShoppingCart;
            }

            // add productversions to product
            ServiceProduct service = new ServiceProduct();

            product = service.GetProductById(product.StyleNumber);

            var selectedColor  = form.Get("colors");
            var selectedSize   = form.Get("sizes");
            int selectedAmount = Int32.Parse(form.Get("amount"));

            CompanyProductVersion prodVer = product.GetProductVersion(selectedSize, selectedColor);

            ConvertDataModel converter = new ConvertDataModel();

            if (prodVer != null)
            {
                SalesLineItem lineitem = new SalesLineItem()
                {
                    amount         = selectedAmount,
                    Product        = converter.ConvertFromCompanyProduct(product),
                    ProductVersion = converter.ConvertFromCompanyProductVersion(prodVer),
                    Price          = (selectedAmount * product.Price)
                };
                ShoppingCart = (List <SalesLineItem>)Session["ShoppingCart"];
                // check if item is already in cart
                if (ItemAlreadyExists(lineitem))
                {
                    foreach (var item in ShoppingCart)
                    {
                        if (item.Product.StyleNumber == lineitem.Product.StyleNumber && item.ProductVersion.SizeCode.Equals(lineitem.ProductVersion.SizeCode) && item.ProductVersion.ColorCode.Equals(lineitem.ProductVersion.ColorCode))
                        {
                            item.amount += lineitem.amount;
                        }
                    }
                }
                else
                {
                    ShoppingCart.Add(lineitem);
                }
            }
            else
            {
                return(RedirectToAction("NotInStock", "Product", new { id = product.StyleNumber }));
            }

            Session["ShoppingCart"] = ShoppingCart;

            return(RedirectToAction("index", "Cart"));
        }
コード例 #19
0
 public ActionResult Edit([Bind(Include = "Id,ItemName,Price,Qty,OrderId,CompanyId")] SalesLineItem salesLineItem)
 {
     if (ModelState.IsValid)
     {
         db.Entry(salesLineItem).State = EntityState.Modified;
         db.SaveChangesAsync();
         return(RedirectToAction("Index"));
     }
     return(View(salesLineItem));
 }
コード例 #20
0
 public ActionResult Edit([Bind(Include = "id,orderid,itemid,quantity,price")] SalesLineItem salesLineItem)
 {
     if (ModelState.IsValid)
     {
         db.Entry(salesLineItem).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.itemid  = new SelectList(db.item, "id", "name", salesLineItem.itemid);
     ViewBag.orderid = new SelectList(db.order, "id", "id", salesLineItem.orderid);
     return(View(salesLineItem));
 }
コード例 #21
0
        public async Task <ActionResult> Create([Bind(Include = "Id,ItemName,Price,Qty,OrderId,CompanyId")] SalesLineItem salesLineItem)
        {
            if (ModelState.IsValid)
            {
                db.SalesOrderItems.Add(salesLineItem);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(salesLineItem));
        }
コード例 #22
0
        // GET: SalesLineItems/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SalesLineItem salesLineItem = db.salesLineItem.Find(id);

            if (salesLineItem == null)
            {
                return(HttpNotFound());
            }
            return(View(salesLineItem));
        }
コード例 #23
0
        public LineItemStatus GetStatusAfterShipment(SalesLineItem lineItem, int qty)
        {
            if (lineItem.Quantity == (lineItem.ProcessedQty + qty))
            {
                return(LineItemStatus.Closed);
            }

            if (lineItem.OpenQty == 0)
            {
                return(LineItemStatus.Scheduled);
            }

            return(lineItem.Status);
        }
コード例 #24
0
        /// <summary>
        /// Mutates the sale with quantity type discounts and gets the total.
        /// </summary>
        /// <param name="sale"></param>
        /// <returns></returns>
        public decimal GetTotal(Sale sale)
        {
            var discountedLineItems = new List <SalesLineItem>();

            foreach (var lineItem in sale.LineItems)
            {
                // Apply discounts directly to line item, if any.

                foreach (
                    var discount in
                    _discounts
                    .Where(d => d.IsValid() && !d.DiscountAppliedOnNextProduct)
                    .Where(d => d.ProductId == lineItem.ProductId && lineItem.Quantity >= d.ThresholdQuantity)
                    .OrderByDescending(d => d.ThresholdQuantity))
                {
                    // There may be eligible discount(s) to apply to current line item based on quantity.
                    // Apply the discounts with the largest quantities first as they generally have the better discounts.

                    while (lineItem.Quantity >= discount.ThresholdQuantity)
                    {
                        // Create new line item with the quantity that gets the discount.
                        var discountedLineItem =
                            new SalesLineItem(new Product(lineItem.ProductId, lineItem.ProductPrice), discount.ThresholdQuantity);
                        discountedLineItem.SetDiscount(discount.Discount);

                        // Store in temporary list.
                        discountedLineItems.Add(discountedLineItem);

                        // Decrement the threshold quantity from the original line item.
                        lineItem.AddQuantity(-1 * discount.ThresholdQuantity);

                        // TODO: Add a limit, i.e. only get the discount a certain number of times.
                    }
                }
            }

            sale.RemoveZeroQuantityLineItems();

            // Add newly created line items that have the discount directly to the sale.
            foreach (var item in discountedLineItems)
            {
                sale.AddLineItem(item);
            }

            var total = sale.LineItems.Sum(i => i.GetSubtotal());

            return(total);
        }
コード例 #25
0
        private bool ItemAlreadyExists(SalesLineItem lineItem)
        {
            bool result = false;

            ShoppingCart = (List <SalesLineItem>)Session["ShoppingCart"];

            foreach (var item in ShoppingCart)
            {
                if (item.Product.StyleNumber == lineItem.Product.StyleNumber && item.ProductVersion.SizeCode.Equals(lineItem.ProductVersion.SizeCode) && item.ProductVersion.ColorCode.Equals(lineItem.ProductVersion.ColorCode))
                {
                    result = true;
                }
            }

            return(result);
        }
コード例 #26
0
        // GET: SalesLineItems/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SalesLineItem salesLineItem = db.salesLineItem.Find(id);

            if (salesLineItem == null)
            {
                return(HttpNotFound());
            }
            ViewBag.itemid  = new SelectList(db.item, "id", "name", salesLineItem.itemid);
            ViewBag.orderid = new SelectList(db.order, "id", "id", salesLineItem.orderid);
            return(View(salesLineItem));
        }
コード例 #27
0
ファイル: OrderService.cs プロジェクト: ewin66/SCOUT_NS
        public static int GetShipQtyForLine(SalesLineItem lineItem)
        {
            ShippingLineSummary partSummary;

            try
            {
                partSummary =
                    OrderRepository.GetShippingSummaryForLine(lineItem);
            }
            catch (Exception)
            {
                return(0);
            }

            if (partSummary == null)
            {
                return(0);
            }

            return(partSummary.Qty);
        }
コード例 #28
0
        public ActionResult AddLineItem([Bind(Include = "SalesInvoiceId,Quantity,ProductId")] SalesInvoiceLineItemViewModel salesInvoiceLineItemViewModel)
        {
            var salesInvoice = _salesInvoiceService.Get(t => t.SalesInvoiceId == salesInvoiceLineItemViewModel.SalesInvoiceId, null, "SalesLineItems").FirstOrDefault();
            int exists       = salesInvoice.SalesLineItems.Where(t => t.ProductId == salesInvoiceLineItemViewModel.ProductId).ToList().Count;

            if (exists > 0)
            {
                return(RedirectToAction("Create", "SalesInvoices", new { id = salesInvoice.SalesInvoiceId }));
            }
            var salesInvoiceLineItem = new SalesLineItem()
            {
                ProductId      = salesInvoiceLineItemViewModel.ProductId,
                Quantity       = salesInvoiceLineItemViewModel.Quantity,
                SalesInvoiceId = salesInvoiceLineItemViewModel.SalesInvoiceId,
                UnitPrice      = _productService.FindById(salesInvoiceLineItemViewModel.ProductId).UnitPrice
            };

            salesInvoice.SalesLineItems.Add(salesInvoiceLineItem);
            _salesInvoiceService.EditSalesInvoice(salesInvoice);
            return(RedirectToAction("Create", "SalesInvoices", new { id = salesInvoice.SalesInvoiceId }));
        }
コード例 #29
0
        private Sales Map(SalesCommand command)
        {
            var sales = new Sales
            {
                Id        = command.SalesId,
                SalesDate = command.SalesDate
            };

            foreach (SalesProduct product in command.SalesProducts)
            {
                var salesLineItem = new SalesLineItem
                {
                    ProductId     = product.ProductId,
                    ProductName   = product.ProductName,
                    SalesQuantity = product.SalesQuantity,
                    UnitName      = product.UnitName,
                    UnitSalePrice = product.SalesUnitPrice
                };
                sales.SalesLineItems.Add(salesLineItem);
            }

            return(sales);
        }
コード例 #30
0
        private bool AdexLineItemIsReceivable()
        {
            return(true);

            if (m_lineItem.PurchaseOrder.Order.OrderType == OrderType.ADEX)
            {
                SalesOrder so =
                    m_lineItem.PurchaseOrder.Order.GetContract <SalesOrder>() as SalesOrder;

                if (so != null)
                {
                    SalesLineItem sli = so.GetLineByPart(m_lineItem.Part);

                    if (sli.ProcessedQty <= m_lineItem.ProcessedQty)
                    {
                        m_error = "This line cannot be received against until more units are shipped for this part.";
                        return(false);
                    }
                }
            }

            return(true);
        }