public async Task <IActionResult> StageAddPost(AddStageRequest request) { try { await gameService.AddStage(request.GameID, request.StageID, request.Name); return(RedirectToAction("Home", new { request.GameID })); } catch (Exception exception) { return(GetExceptionResult(exception, request)); } }
public AddStageResponse SaveStage(AddStageRequest request) { try { var stage = request.MapTo <MidtermPhaseFormulationStage>(); var formulation = new MidtermPhaseFormulation { Id = request.MidtermFormulationId }; DataContext.MidtermPhaseFormulations.Attach(formulation); stage.MidtermPhaseFormulation = formulation; var interval = stage.EndDate.Value.Year - stage.StartDate.Value.Year + 1; var startYear = stage.StartDate.Value.Year; var endYear = stage.EndDate.Value.Year; if (request.Id != 0) { stage = DataContext.MidtermPhaseFormulationStages.Include(x => x.MidtermPhaseFormulation) .Include(x => x.MidtermStrategicPlannings) .First(x => x.Id == request.Id); request.MapPropertiesToInstance <MidtermPhaseFormulationStage>(stage); //delete unnecessary plannings foreach (var plan in stage.MidtermStrategicPlannings.ToList()) { if (plan.StartDate < stage.StartDate || plan.EndDate > stage.EndDate) { stage.MidtermStrategicPlannings.Remove(plan); } } //add new strategic plannings for (var i = 0; i < interval; i++) { var planning = new MidtermStrategicPlanning { Title = "Annual Objective Planning", StartDate = i == 0 ? stage.StartDate : new DateTime(startYear + i, 1, 1), EndDate = i == interval - 1 ? stage.EndDate : new DateTime(startYear + i, 12, 1) }; if (stage.MidtermStrategicPlannings.FirstOrDefault(x => x.StartDate == planning.StartDate && x.EndDate == planning.EndDate) == null) { stage.MidtermStrategicPlannings.Add(planning); } } } else { for (var i = 0; i < interval; i++) { var planning = new MidtermStrategicPlanning { Title = "Annual Objective Planning", StartDate = i == 0 ? stage.StartDate : new DateTime(startYear + i, 1, 1), EndDate = i == interval - 1 ? stage.EndDate : new DateTime(startYear + i, 12, 1) }; stage.MidtermStrategicPlannings.Add(planning); } DataContext.MidtermPhaseFormulationStages.Add(stage); } DataContext.SaveChanges(); return(new AddStageResponse { IsSuccess = true, Message = "You have been successfully add new stage", Id = stage.Id, Title = stage.Title, Order = stage.Order, Start = request.StartDate.HasValue ? request.StartDate.Value.ToString("MMM yyyy", CultureInfo.InvariantCulture) : "", End = request.EndDate.HasValue? request.EndDate.Value.ToString("MMM yyyy", CultureInfo.InvariantCulture) : "" }); } catch { return(new AddStageResponse { IsSuccess = false, Message = "An Error occured, please contact administrator for further information" }); } }