public SaveOrUpdateInputDataResponse SaveOrUpdateInputData(SaveOrUpdateInputDataRequest request) { var response = new SaveOrUpdateInputDataResponse(); try { if (request.Id > 0) { var inputData = DataContext.InputData .Include(x => x.GroupInputDatas) .Include(x => x.GroupInputDatas.Select(y => y.InputDataKpiAndOrders)) .Include(x => x.GroupInputDatas.Select(y => y.InputDataKpiAndOrders.Select(z => z.Kpi))) .Single(x => x.Id == request.Id); inputData.Name = request.Name; inputData.Accountability = DataContext.RoleGroups.Single(x => x.Id == request.AccountabilityId); inputData.UpdatedBy = DataContext.Users.Single(x => x.Id == request.UpdatedById); inputData.PeriodeType = (PeriodeType)Enum.Parse(typeof(PeriodeType), request.PeriodeType); inputData.LastInput = DateTime.Now; foreach (var groupInputData in inputData.GroupInputDatas.ToList()) { foreach(var inputDataKpiAndOrder in groupInputData.InputDataKpiAndOrders.ToList()) { DataContext.InputDataKpiAndOrder.Remove(inputDataKpiAndOrder); } DataContext.GroupInputData.Remove(groupInputData); } var groupInputDatas = new List<GroupInputData>(); foreach (var item in request.GroupInputDatas.ToList()) { var groupInputData = new GroupInputData(); groupInputData.Name = item.Name; groupInputData.Order = item.Order; var kpiAndOrders = new List<InputDataKpiAndOrder>(); foreach (var kpi in item.InputDataKpiAndOrders.ToList()) { kpiAndOrders.Add(new InputDataKpiAndOrder { Kpi = DataContext.Kpis.Single(x => x.Id == kpi.KpiId), Order = kpi.Order }); } groupInputData.InputDataKpiAndOrders = kpiAndOrders; groupInputDatas.Add(groupInputData); } inputData.GroupInputDatas = groupInputDatas; DataContext.Entry(inputData).State = EntityState.Modified; DataContext.SaveChanges(); response.IsSuccess = true; } else { var inputData = request.MapTo<InputData>(); inputData.Accountability = DataContext.RoleGroups.Single(x => x.Id == request.AccountabilityId); inputData.UpdatedBy = DataContext.Users.Single(x => x.Id == request.UpdatedById); inputData.PeriodeType = (PeriodeType)Enum.Parse(typeof(PeriodeType), request.PeriodeType); inputData.LastInput = DateTime.Now; var groupInputDatas = new List<GroupInputData>(); foreach (var item in request.GroupInputDatas) { var groupInputData = new GroupInputData(); groupInputData.Name = item.Name; groupInputData.Order = item.Order; var kpiAndOrders = new List<InputDataKpiAndOrder>(); foreach (var kpi in item.InputDataKpiAndOrders) { kpiAndOrders.Add(new InputDataKpiAndOrder { Kpi = DataContext.Kpis.Single(x => x.Id == kpi.KpiId), Order = kpi.Order }); } groupInputData.InputDataKpiAndOrders = kpiAndOrders; groupInputDatas.Add(groupInputData); } inputData.GroupInputDatas = groupInputDatas; DataContext.InputData.Add(inputData); DataContext.SaveChanges(); response.IsSuccess = true; } } catch(Exception exception) { response.Message = exception.Message; } return response; }
public SaveOrUpdateInputDataResponse SaveOrUpdateInputData(SaveOrUpdateInputDataRequest request) { var response = new SaveOrUpdateInputDataResponse(); try { var action = request.MapTo <Data.Entities.BaseAction>(); if (request.Id > 0) { var inputData = DataContext.InputData .Include(x => x.GroupInputDatas) .Include(x => x.GroupInputDatas.Select(y => y.InputDataKpiAndOrders)) .Include(x => x.GroupInputDatas.Select(y => y.InputDataKpiAndOrders.Select(z => z.Kpi))) .Single(x => x.Id == request.Id); inputData.Name = request.Name; inputData.Accountability = DataContext.RoleGroups.Single(x => x.Id == request.AccountabilityId); inputData.UpdatedBy = DataContext.Users.Single(x => x.Id == request.UpdatedById); inputData.PeriodeType = (PeriodeType)Enum.Parse(typeof(PeriodeType), request.PeriodeType); inputData.LastInput = DateTime.Now; foreach (var groupInputData in inputData.GroupInputDatas.ToList()) { foreach (var inputDataKpiAndOrder in groupInputData.InputDataKpiAndOrders.ToList()) { DataContext.InputDataKpiAndOrder.Remove(inputDataKpiAndOrder); } DataContext.GroupInputData.Remove(groupInputData); } var groupInputDatas = new List <GroupInputData>(); foreach (var item in request.GroupInputDatas.ToList()) { var groupInputData = new GroupInputData(); groupInputData.Name = item.Name; groupInputData.Order = item.Order; var kpiAndOrders = new List <InputDataKpiAndOrder>(); foreach (var kpi in item.InputDataKpiAndOrders.ToList()) { kpiAndOrders.Add(new InputDataKpiAndOrder { Kpi = DataContext.Kpis.Single(x => x.Id == kpi.KpiId), Order = kpi.Order }); } groupInputData.InputDataKpiAndOrders = kpiAndOrders; groupInputDatas.Add(groupInputData); } inputData.GroupInputDatas = groupInputDatas; DataContext.Entry(inputData).State = EntityState.Modified; DataContext.SaveChanges(action); response.IsSuccess = true; } else { var inputData = request.MapTo <InputData>(); inputData.Accountability = DataContext.RoleGroups.Single(x => x.Id == request.AccountabilityId); inputData.UpdatedBy = DataContext.Users.Single(x => x.Id == request.UpdatedById); inputData.PeriodeType = (PeriodeType)Enum.Parse(typeof(PeriodeType), request.PeriodeType); inputData.LastInput = DateTime.Now; var groupInputDatas = new List <GroupInputData>(); foreach (var item in request.GroupInputDatas) { var groupInputData = new GroupInputData(); groupInputData.Name = item.Name; groupInputData.Order = item.Order; var kpiAndOrders = new List <InputDataKpiAndOrder>(); foreach (var kpi in item.InputDataKpiAndOrders) { kpiAndOrders.Add(new InputDataKpiAndOrder { Kpi = DataContext.Kpis.Single(x => x.Id == kpi.KpiId), Order = kpi.Order }); } groupInputData.InputDataKpiAndOrders = kpiAndOrders; groupInputDatas.Add(groupInputData); } inputData.GroupInputDatas = groupInputDatas; DataContext.InputData.Add(inputData); DataContext.SaveChanges(action); response.IsSuccess = true; } } catch (Exception exception) { response.Message = exception.Message; } return(response); }