// Calculate totals for RmaRequest
		private void CalculateTotals(RmaRequest item)
		{
			decimal itemTax = 0m;
			foreach (var returnItem in item.RmaReturnItems)
			{
				var lineItem = returnItem.RmaLineItems[0].LineItem;
				var amountTmp = lineItem.ExtendedPrice * returnItem.RmaLineItems[0].ReturnQuantity / lineItem.Quantity;
				returnItem.ReturnAmount = Math.Floor(amountTmp * 100) * 0.01m;
				amountTmp = lineItem.TaxTotal * returnItem.RmaLineItems[0].ReturnQuantity / lineItem.Quantity;
				itemTax += Math.Floor(amountTmp * 100) * 0.01m;
			}
			item.ItemSubtotal = item.RmaReturnItems.Sum(x => x.ReturnAmount);

			decimal ShippingCost = 0;
			decimal ShippingTax = 0;

			/// TODO: ShippingCost
			// ShippingCost = ??? // take LineItems, addresses, shipping methods and... calculate it.
			// ShippingTax = 

			item.ItemTax = itemTax;
			// exclude taxes and subtract shipping costs
			item.TotalBeforeTax = item.ItemSubtotal - item.ItemTax - ShippingCost;
			item.LessReStockingFee = ShippingCost + ShippingTax;
			item.ReturnTotal = item.ItemSubtotal - item.LessReStockingFee;
			item.RefundAmount = 0m;
		}
		public CreateRmaRequestViewModel(Foundation.Orders.Model.Order innerOrder,
			RmaRequest rmaRequest, IOrderEntityFactory orderEntityFactory, ReturnBuilder returnBuilder,
			IViewModelsFactory<IRmaRequestReturnItemsStepViewModel> returnItemsVmFactory,
			IViewModelsFactory<IRmaRequestRefundStepViewModel> refundVmFactory,
			IViewModelsFactory<ILineItemAddViewModel> lineItemAddVmFactory, IViewModelsFactory<IExchangeOrderStepViewModel> exchangeVmFactory)
		{
			_exchangeVmFactory = exchangeVmFactory;
			_lineItemAddVmFactory = lineItemAddVmFactory;
			_isCreatingExchangeOrderOnly = innerOrder.RmaRequests.Any(x => x.RmaRequestId == rmaRequest.RmaRequestId);

			var item = innerOrder.DeepClone(orderEntityFactory as IKnownSerializationTypes);

			ReturnBuilder = returnBuilder;
			ReturnBuilder.WithOrderOrRmaRequest(item, rmaRequest);

			CreateWizardSteps(returnItemsVmFactory, refundVmFactory);
		}
Esempio n. 3
0
		public RmaRequestViewModel(
			IViewModelsFactory<ICreateRefundViewModel> wizardVmFactory,
			IViewModelsFactory<IOrderViewModel> orderVmFactory,
			IAuthenticationContext authContext,
			RmaRequest rmaRequestItem,
			OrderViewModel parentViewModel, OrderClient client)
		{
			_wizardVmFactory = wizardVmFactory;
			_orderVmFactory = orderVmFactory;
			CurrentRmaRequest = rmaRequestItem;
			_authContext = authContext;
			_parentViewModel = parentViewModel;
			_orderClient = client;

			RmaRequestWizardDialogInteractionRequest = new InteractionRequest<Confirmation>();

			RmaRequestCancelCommand = new DelegateCommand(RaiseRmaRequestCancelInteractionRequest, () => CurrentRmaRequest.IsCancellable(client));
			RmaRequestCompleteCommand = new DelegateCommand(RaiseRmaRequestCompleteInteractionRequest, () => CurrentRmaRequest.IsCompletable(client));
			ExchangeOrderCreateCommand = new DelegateCommand(RaiseExchangeOrderCreateInteractionRequest, () => CurrentRmaRequest.IsAllowCreateExchangeOrder());
			ExchangeOrderViewCommand = new DelegateCommand(RaiseExchangeOrderViewInteractionRequest, () => CurrentRmaRequest.ExchangeOrder != null);
		}
		public TestOrderBuilder WithReturns()
		{
			var returnLineItems = _order.OrderForms[0].LineItems.Take(2).ToArray();

			var returnItem1 = new RmaReturnItem
				{
					ItemState = RmaLineItemState.AwaitingReturn.ToString(),
					ReturnAmount = 21.32m,
					ReturnReason = "Corrupt"
				};

			var rmaLineItem = new RmaLineItem
				{
					RmaReturnItemId = returnItem1.RmaReturnItemId,
					LineItemId = returnLineItems[0].LineItemId,
					LineItem = returnLineItems[0],
					ReturnQuantity = 1,
					Quantity = 0
				};
			returnItem1.RmaLineItems.Add(rmaLineItem);

			var returnItem2 = new RmaReturnItem
				{
					ItemState = RmaLineItemState.AwaitingReturn.ToString(),
					ReturnAmount = 210.67m,
					ReturnReason = "Other"
				};

			rmaLineItem = new RmaLineItem
				{
					RmaReturnItemId = returnItem2.RmaReturnItemId,
					LineItemId = returnLineItems[1].LineItemId,
					LineItem = returnLineItems[1],
					ReturnQuantity = 2,
					Quantity = 0
				};
			returnItem2.RmaLineItems.Add(rmaLineItem);

			var rmaRequest = new RmaRequest
				{
                    Status = RmaRequestStatus.AwaitingStockReturn.ToString(),
					ReturnTotal = 323.21m,
					RefundAmount = 301.89m,
					OrderId = _order.OrderGroupId
				};

			foreach (var rmaItem in new[] { returnItem1, returnItem2 })
			{
				rmaRequest.RmaReturnItems.Add(rmaItem);
			}
			((Order)_order).RmaRequests.Add(rmaRequest);
			return this;
		}
Esempio n. 5
0
        public ActionResult OrderReturn(OrderReturns model)
        {
            var order = _orderClient.GetCustomerOrder(UserHelper.CustomerSession.CustomerId, model.OrderId);

            if (order == null || String.IsNullOrEmpty(order.CustomerId))
            {
                throw new UnauthorizedAccessException();
            }

            InitReturnsModel(order, model);

            //Filter validation only for selected items
            var selectedReturnItems = new List<OrderReturnItem>();
            for (var i = 0; i < model.OrderReturnItems.Count; i++)
            {
                if (model.OrderReturnItems[i].IsSelected)
                {
                    selectedReturnItems.Add(model.OrderReturnItems[i]);
                    continue;
                }
                var i1 = i;
                foreach (var k in ModelState.Keys.Where(k => k.StartsWith(string.Format("OrderReturnItems[{0}]", i1))).ToArray())
                {
                    ModelState.Remove(k);
                }
            }

            //No items to return
            if (selectedReturnItems.Count == 0)
            {
                ModelState.AddModelError("", @"Select at least one item to return");
            }

            //If Validation passed create RmaReturns
            if (ModelState.IsValid)
            {
                var request = new RmaRequest
                {
                    Comment = model.Comment,
                    OrderId = model.OrderId,
                    Status = RmaRequestStatus.AwaitingStockReturn.ToString(),
                    ReturnFromAddressId = model.ReturnFromAddressId
                };
                request.AuthorizationCode = request.RmaRequestId;

                foreach (var item in selectedReturnItems)
                {
                    var rmali = new RmaLineItem
                    {
                        LineItemId = item.LineItemId,
                        LineItem = order.OrderForms.SelectMany(of => of.LineItems).Single(li => li.LineItemId == item.LineItemId),
                        ReturnQuantity = item.Quantity
                    };

                    var rmaritem = new RmaReturnItem
                    {
                        ItemState = RmaLineItemState.AwaitingReturn.ToString(),
                        ReturnReason = item.ReturnReason,
                        //ReturnAmount = item.LineItemModel.LineItem.ListPrice
                    };

                    rmaritem.RmaLineItems.Add(rmali);
                    request.RmaReturnItems.Add(rmaritem);
                }

                order.RmaRequests.Add(request);

                //Calculate return totals
                _orderService.ExecuteWorkflow("CalculateReturnTotalsWorkflow", order);
                //Save changes
                _orderClient.SaveChanges();

                return RedirectToAction("RmaReturns", new { orderId = model.OrderId });
            }

            return View(model);
        }
Esempio n. 6
0
		public bool CanChangeStatus(RmaRequest request, string newStatus)
		{
			return CanChangeStatus(request.Status, newStatus, _stateController.RmaStateMachine);
		}