private async Task <long> SaveReturnRequest(EditReturnRequest model)
        {
            if (model.ReturnRequestId == null)
            {
                var mCreateReturnRequestItems = new List <MFulfillment_CreateReturnRequestItem>();
                foreach (var item in model.ReturnRequestItems)
                {
                    mCreateReturnRequestItems.Add(new MFulfillment_CreateReturnRequestItem()
                    {
                        FulfillableItemId = item.FulfillableItemId,
                        Quantity          = item.Quantity
                    });
                }

                var mCreateReturnRequest = new MFulfillment_CreateReturnRequest()
                {
                    ReturnRequestType        = Enum.Parse <MFulfillment_ReturnRequestTypes>(model.ReturnRequestType),
                    ReturnRequestReasonCode  = model.ReturnRequestReason,
                    CreateReturnRequestItems = mCreateReturnRequestItems
                };

                var aCreateReturnRequest = new AReturn_CreateReturnRequest()
                {
                    MCreateReturnRequest = mCreateReturnRequest
                };

                var returnRequestId = await ReturnAdminService.CreateReturnRequestAsync(aCreateReturnRequest);

                return(returnRequestId);
            }
            else
            {
                var mUpdateReturnRequestItems = new List <MFulfillment_UpdateReturnRequestItem>();
                foreach (var item in model.ReturnRequestItems)
                {
                    mUpdateReturnRequestItems.Add(new MFulfillment_UpdateReturnRequestItem()
                    {
                        ReturnRequestItemId = item.ReturnRequestItemId.Value,
                        Quantity            = item.Quantity
                    });
                }

                var mUpdateReturnRequest = new MFulfillment_UpdateReturnRequest()
                {
                    ReturnRequestId          = model.ReturnRequestId.Value,
                    ReturnRequestType        = Enum.Parse <MFulfillment_ReturnRequestTypes>(model.ReturnRequestType),
                    ReturnRequestReasonCode  = model.ReturnRequestReason,
                    UpdateReturnRequestItems = mUpdateReturnRequestItems
                };

                var aUpdateReturnRequest = new AReturn_UpdateReturnRequest()
                {
                    MUpdateReturnRequest = mUpdateReturnRequest
                };

                await ReturnAdminService.UpdateReturnRequestAsync(aUpdateReturnRequest);

                return(model.ReturnRequestId.Value);
            }
        }
        public async Task <ActionResult> Edit(EditReturnRequest model)
        {
            if (ModelState.IsValid)
            {
                var totalQuantity = model.ReturnRequestItems.Sum(r => r.Quantity);
                if (totalQuantity == 0)
                {
                    ModelState.AddModelError(string.Empty, "Quantity must be specified for each least one item.");
                }
            }

            if (!ModelState.IsValid)
            {
                var aReturnRequestReasons = await ReturnAdminService.GetReturnRequestReasonsAsync();

                model.ReturnRequestTypes   = ModelFactory.GetReturnRequestTypeSelectList(model.ReturnRequestId == null);
                model.ReturnRequestReasons = ModelFactory.GetReturnRequestReasonSelectList(aReturnRequestReasons.MReturnRequestReasons, model.ReturnRequestId == null);
                foreach (var itemModel in model.ReturnRequestItems)
                {
                    itemModel.Quantities = ModelFactory.GetQuantitySelectList(itemModel.MaxQuantity);
                }

                return(View(model));
            }

            var returnRequestId = model.ReturnRequestId;

            var actionData = this.GetActionData();

            switch (actionData?.ActionName)
            {
            case Actions.Save:
                returnRequestId = await SaveReturnRequest(model);

                break;
            }

            return(RedirectToAction("Index", "ReturnRequest", new { id = returnRequestId }));
        }