public async Task <IActionResult> RegisterMaintenanceJob([FromForm] WorkshopManagementNewViewModel inputModel)
        {
            if (ModelState.IsValid)
            {
                return(await ExecuteWithFallback(async() =>
                {
                    try
                    {
                        string dateStr = inputModel.Date.ToString("yyyy-MM-dd");

                        // get or create planning for date
                        var planning = await _workshopManagementAPI.GetWorkshopPlanning(dateStr);
                        if (planning == null)
                        {
                            // create planning for date
                            await _workshopManagementAPI.RegisterPlanning(dateStr);
                        }

                        // register maintenance job
                        DateTime startTime = inputModel.Date.Add(inputModel.StartTime.TimeOfDay);
                        DateTime endTime = inputModel.Date.Add(inputModel.EndTime.TimeOfDay);
                        Vehicle vehicle = await _workshopManagementAPI.GetVehicleByLicenseNumber(inputModel.SelectedVehicleLicenseNumber);
                        Customer customer = await _workshopManagementAPI.GetCustomerById(vehicle.OwnerId);

                        PlanMaintenanceJob cmd = new PlanMaintenanceJob(Guid.NewGuid(), Guid.NewGuid(), startTime, endTime,
                                                                        (customer.CustomerId, customer.Name, customer.TelephoneNumber),
                                                                        (vehicle.LicenseNumber, vehicle.Brand, vehicle.Type), inputModel.Description);
                        await _workshopManagementAPI.PlanMaintenanceJob(dateStr, cmd);
                    }
                    catch (ApiException ex)
                    {
                        if (ex.StatusCode == HttpStatusCode.Conflict)
                        {
                            // add errormessage from API exception to model
                            var content = ex.GetContentAs <BusinessRuleViolation>();
                            inputModel.Error = content.ErrorMessage;

                            // repopulate list of available vehicles in the model
                            inputModel.Vehicles = await GetAvailableVehiclesList();

                            // back to New view
                            return View("New", inputModel);
                        }
                    }

                    return RedirectToAction("Index", new { date = inputModel.Date });
                }));
            }
            else
            {
                inputModel.Vehicles = await GetAvailableVehiclesList();

                return(View("New", inputModel));
            }
        }
        public async Task <IActionResult> RegisterMaintenanceJob([FromForm] WorkshopManagementNewViewModel inputModel)
        {
            if (ModelState.IsValid)
            {
                return(await _resiliencyHelper.ExecuteResilient(async() =>
                {
                    string dateStr = inputModel.Date.ToString("yyyy-MM-dd");

                    try
                    {
                        // register maintenance job
                        DateTime startTime = inputModel.Date.Add(inputModel.StartTime.TimeOfDay);
                        DateTime endTime = inputModel.Date.Add(inputModel.EndTime.TimeOfDay);
                        Vehicle vehicle = await _workshopManagementAPI.GetVehicleByLicenseNumber(inputModel.SelectedVehicleLicenseNumber);
                        //  Customer customer = await _workshopManagementAPI.GetCustomerById(vehicle.CustomerId);

                        PlanMaintenanceJob planMaintenanceJobCommand = new PlanMaintenanceJob(Guid.NewGuid(), Guid.NewGuid(), startTime, endTime,
                                                                                              //(customer.CustomerId, customer.Nombre, customer.Telefono),
                                                                                              (vehicle.Codigo, vehicle.Matricula, vehicle.Marca), inputModel.Description);
                        await _workshopManagementAPI.PlanMaintenanceJob(dateStr, planMaintenanceJobCommand);
                    }
                    catch (ApiException ex)
                    {
                        if (ex.StatusCode == HttpStatusCode.Conflict)
                        {
                            // add errormessage from API exception to model
                            var content = ex.GetContentAs <BusinessRuleViolation>();
                            inputModel.Error = content.ErrorMessage;

                            // repopulate list of available vehicles in the model
                            inputModel.Vehicles = await GetAvailableVehiclesList();

                            // back to New view
                            return View("New", inputModel);
                        }
                    }

                    return RedirectToAction("Index", new { planningDate = dateStr });
                }, View("Offline", new WorkshopManagementOfflineViewModel())));
            }
            else
            {
                inputModel.Vehicles = await GetAvailableVehiclesList();

                return(View("New", inputModel));
            }
        }
        public async Task <IActionResult> New(DateTime planningDate)
        {
            return(await _resiliencyHelper.ExecuteResilient(async() =>
            {
                DateTime startTime = planningDate.Date.AddHours(8);

                var model = new WorkshopManagementNewViewModel
                {
                    Id = Guid.NewGuid(),
                    Date = planningDate,
                    StartTime = startTime,
                    EndTime = startTime.AddHours(2),
                    Vehicles = await GetAvailableVehiclesList()
                };
                return View(model);
            }, View("Offline", new WorkshopManagementOfflineViewModel())));
        }
        public async Task <IActionResult> New(DateTime date)
        {
            return(await ExecuteWithFallback(async() =>
            {
                DateTime startTime = date.Date.AddHours(8);

                var model = new WorkshopManagementNewViewModel
                {
                    Id = Guid.NewGuid(),
                    Date = date,
                    StartTime = startTime,
                    EndTime = startTime.AddHours(2),
                    Vehicles = await GetAvailableVehiclesList()
                };
                return View(model);
            }));
        }