public async Task<ActionResult> Start(StartCalculationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return HandleGeneralError("Index", ProductCalculationViewModel.Create(EQueryType.None), "Unable to create environment");
            }
            int rateTableId = 0;
            int.TryParse(model.SelectedRateTable, out rateTableId);
            ApiResponse<EnvironmentInfo> environmentResponse = await m_Repository.CreateEnvironment(rateTableId);
            if(IsApiError(environmentResponse) || environmentResponse.ApiResult == null)
            {
                return HandleGeneralError("Index", ProductCalculationViewModel.Create(EQueryType.None), "Unable to create environment");
            }

            SetUiCulture(environmentResponse.ApiResult.Culture);
            StartCalculationRequest request = new StartCalculationRequest();
            request.Weight = GetInitialWeight(environmentResponse.ApiResult.Culture);
            environmentResponse.ApiResult.SenderZipCode = model.SenderZip;
            request.Environment = environmentResponse.ApiResult;

            ApiResponse<PCalcResultInfo> startResponse = await m_Repository.Start(request);
            if(IsApiError(startResponse) || PcalcResultIsValid(startResponse.ApiResult) == false)
            {
                return HandleGeneralPcalcError("Index", ProductCalculationViewModel.Create(EQueryType.None), startResponse.ApiResult);
            }

            AddOrUpdateTempData(startResponse.ApiResult, request.Environment);
            AddViewData(startResponse.ApiResult, environmentResponse.ApiResult);
            return View("Index", ProductCalculationViewModel.Create(startResponse.ApiResult.QueryType));
        }
        public async Task<ApiResponse<PCalcResultInfo>> Start(StartCalculationRequest startRequest)
        {
            RestRequest request = GetNewRequest();
            request.Resource = "Start";
            request.Method = Method.POST;
            request.AddBody(startRequest);

            return await Execute<PCalcResultInfo>(request, m_Api, string.Empty);
        }
        public async Task<ActionResult> Restart()
        {
            StartCalculationRequest request = new StartCalculationRequest();
            PCalcResultInfo lastInfo = GetLastPcalcResult();
            //try to re-use the weight
            request.Weight = null != lastInfo?.ProductDescription ? lastInfo?.ProductDescription.Weight : 
                new WeightInfo() { WeightUnit = EWeightUnit.Gram, WeightValue = 0 };

            EnvironmentInfo environment = GetEnvironment();
            if (null == environment)
            {
                return HandleGeneralError("Index", ProductCalculationViewModel.Create(EQueryType.None), "Unable to create environment");
            }

            request.Environment = environment;
            ApiResponse<PCalcResultInfo> restartResult = await m_Repository.Start(request);
            if(IsApiError(restartResult) || PcalcResultIsValid(restartResult.ApiResult) == false)
            {
                return HandleGeneralPcalcError("Index", ProductCalculationViewModel.Create(EQueryType.None), restartResult.ApiResult);
            }

            AddOrUpdateTempData(restartResult.ApiResult, request.Environment);
            AddViewData(restartResult.ApiResult, environment);
            return View("Index", ProductCalculationViewModel.Create(restartResult.ApiResult.QueryType));

        }
 public async Task<IHttpActionResult> StartProductCalculation(StartCalculationRequest startRequest )
 {
     if(!ModelState.IsValid)
     {
         return BadRequest(ModelState);
     }
     PCalcResultInfo result = await m_Calculator.StartCalculation(startRequest.Environment, startRequest.Weight);
     return CreateProductCalculationResponse(result);
 }