public ActionResult EditDetail(OrderDetailEntryViewModel model, FormCollection form)
        {
            OrderDetailSessionWrapper.UpdateDetail(model);
            var ajaxViewModel = new AjaxViewModel(message: "Order detail has been updated.");

            return(Json(ajaxViewModel));
        }
        public ActionResult EditDetail(Guid detailUid)
        {
            //Guid detailUid = Guid.Parse(detailUidString);
            var model = OrderDetailSessionWrapper.GetDetail(detailUid);

            return(PartialView("CreateEditDetail", model));
        }
        public ActionResult Create(int unitPriceMode = 0)
        {
            var model = new CreateEditViewModel();

            model.OrderNo       = "NEW";
            model.Date          = DateTime.Today;
            model.Start         = DateTime.Now;
            model.UnitPriceMode = unitPriceMode;

            var orderTypes = lookUpProvider.GetLookUpValues("OrderType").ToList();

            ViewBag.DefaultOrderType = orderTypes[0];

            OrderDetailSessionWrapper.Initialize();
            return(View("CreateEdit", model));
        }
        public ActionResult Edit(long id)
        {
            var orderViewModel       = new CreateEditViewModel();
            var orderDetailViewModel = new List <OrderDetailEntryViewModel>();
            var order = orderProvider.GetOrder(id);

            if (order != null)
            {
                var orderDetail = orderProvider.GetOrderDetail(order.Id);
                if (orderDetail != null)
                {
                    mapper.Map(order, orderViewModel);
                    mapper.Map(orderDetail, orderDetailViewModel);
                    OrderDetailSessionWrapper.Initialize(orderDetailViewModel);
                    return(View("CreateEdit", orderViewModel));
                }
            }
            return(View("Index"));
        }
        public ActionResult CreatePayment(CreatePaymentViewModel model, FormCollection form)
        {
            long orderId = Convert.ToInt64(form["orderId"]);
            IEnumerable <PayableOrderViewModel> payableOrders = paymentProvider.CreatePaymentFromOrder(orderId);
            Order order = orderProvider.GetOrder(orderId);

            decimal deliveryCharge = order.DeliveryCharge;
            decimal discValue      = order.DiscValue;
            decimal totalOrder     = payableOrders.Sum(p => p.Quantity * p.UnitPrice - p.DiscValue);
            //decimal serviceChargePercent = configurationProvider.GetConfiguration<decimal>(ConfigurationKeys.ServiceChargePercent);
            //decimal serviceChargeValue = (serviceChargePercent / 100) * totalOrder;
            decimal taxPercent = configurationProvider.GetConfiguration <decimal>(ConfigurationKeys.TaxPercent);
            decimal taxValue   = (taxPercent / 100) * (totalOrder - discValue);

            decimal billableAmount = totalOrder + /*serviceChargeValue +*/ deliveryCharge - discValue + taxValue;
            decimal totalPayment   = PaymentDetailSessionWrapper.TotalPayment;

            if (totalPayment < billableAmount)
            {
                TempData["message"] = "Insufficient payment";
                return(RedirectToAction("CreatePayment", new { orderId = orderId }));
            }
            else
            {
                if (PaymentDetailSessionWrapper.TotalNonCash > billableAmount)
                {
                    TempData["message"] = "Non-cash payment(s) exceed billable amount";
                    return(RedirectToAction("CreatePayment", new { orderId = orderId }));
                }
            }

            var payment = new Payment()
            {
                BilledAmount = billableAmount,
                Date         = DateTime.Today,
                OrderId      = orderId,
                PaidAmount   = totalPayment
            };
            var paymentDetail = new List <PaymentDetail>();

            mapper.Map(PaymentDetailSessionWrapper.Detail, paymentDetail);

            if (totalPayment > billableAmount)
            {
                decimal change = totalPayment - billableAmount;
                var     paymentDetailChange = new PaymentDetail();
                paymentDetailChange.PaymentTypeId = 1;
                paymentDetailChange.Amount        = change * -1;
                paymentDetailChange.Notes         = "Change";
                paymentDetail.Add(paymentDetailChange);
            }

            payment.PaymentDetails.AddRange(paymentDetail);
            paymentProvider.AddPayment(order, payment);

            long paymentId = payment.Id;

            TempData["PaymentId"] = paymentId;

            OrderDetailSessionWrapper.Clear();
            PaymentDetailSessionWrapper.Clear();

            return(RedirectToAction("Detail", new { id = paymentId, mode = StringHelper.XorString("confirmation") }));
        }