Beispiel #1
0
        public UpdateKpiResponse Update(UpdateKpiRequest request)
        {
            var response = new UpdateKpiResponse();
            try
            {
                var updateKpi = request.MapTo<Kpi>();
                if (request.PillarId.HasValue)
                {
                    updateKpi.Pillar = DataContext.Pillars.FirstOrDefault(x => x.Id == request.PillarId);
                }
                if (request.GroupId.HasValue)
                {
                    updateKpi.Group = DataContext.Groups.FirstOrDefault(x => x.Id == request.GroupId);
                }
                if (request.RoleGroupId.HasValue)
                {
                    updateKpi.RoleGroup = DataContext.RoleGroups.FirstOrDefault(x => x.Id == request.RoleGroupId.Value);
                }

                updateKpi.Measurement = DataContext.Measurements.Single(x => x.Id == request.MeasurementId);
                updateKpi.Level = DataContext.Levels.FirstOrDefault(x => x.Id == request.LevelId);
                updateKpi.Type = DataContext.Types.FirstOrDefault(x => x.Id == request.TypeId);
                updateKpi.Method = DataContext.Methods.FirstOrDefault(x => x.Id == request.MethodId);

                var existedkpi = DataContext.Kpis
                    .Where(x => x.Id == request.Id)
                    .Include(x => x.RelationModels.Select(y => y.Kpi))
                    .Include(x => x.RelationModels.Select(y => y.KpiParent))
                    .Include(x => x.Pillar)
                    .Include(x => x.Level)
                    .Include(x => x.RoleGroup)
                    .Include(x => x.Group)
                    .Include(x => x.Type)
                    .Include(x => x.Measurement)
                    .Include(x => x.Method)
                    .Single();

                DataContext.Entry(existedkpi).CurrentValues.SetValues(updateKpi);

                if (updateKpi.Group != null)
                {
                    DataContext.Groups.Attach(updateKpi.Group);
                    existedkpi.Group = updateKpi.Group;
                }

                if (updateKpi.RoleGroup != null)
                {
                    DataContext.RoleGroups.Attach(updateKpi.RoleGroup);
                    existedkpi.RoleGroup = updateKpi.RoleGroup;
                }

                if (updateKpi.Pillar != null)
                {
                    DataContext.Pillars.Attach(updateKpi.Pillar);
                    existedkpi.Pillar = updateKpi.Pillar;
                }
                DataContext.Measurements.Attach(updateKpi.Measurement);
                existedkpi.Measurement = updateKpi.Measurement;

                DataContext.Levels.Attach(updateKpi.Level);
                existedkpi.Level = updateKpi.Level;

                DataContext.Types.Attach(updateKpi.Type);
                existedkpi.Type = updateKpi.Type;

                DataContext.Methods.Attach(updateKpi.Method);
                existedkpi.Method = updateKpi.Method;

                var joinedRelationModels = existedkpi.RelationModels.ToList();
                var additionalRelationModels = DataContext.KpiRelationModels
                    .Include(x => x.Kpi)
                    .Include(x => x.KpiParent)
                    .Where(x => x.Kpi.Id == request.Id).ToList();

                foreach (var item in additionalRelationModels)
                {
                    joinedRelationModels.Add(item);
                }

                foreach (var joinedRelationModel in joinedRelationModels)
                {
                    DataContext.KpiRelationModels.Remove(joinedRelationModel);
                }

                if (request.RelationModels.Count > 0)
                {
                    var relation = new List<KpiRelationModel>();
                    foreach (var item in request.RelationModels)
                    {
                        if (item.KpiId != 0)
                        {
                            var kpiRelation = DataContext.Kpis.FirstOrDefault(x => x.Id == item.KpiId);
                            relation.Add(new KpiRelationModel
                            {
                                Kpi = kpiRelation,
                                Method = item.Method
                            });
                        }
                    }
                    existedkpi.RelationModels = relation;
                }

                DataContext.SaveChanges();
                response.IsSuccess = true;
                response.Message = "KPI item has been updated successfully";
            }
            catch (DbUpdateException dbUpdateException)
            {
                response.Message = dbUpdateException.Message;
            }

            return response;
        }
Beispiel #2
0
        public UpdateKpiResponse Update(UpdateKpiRequest request)
        {
            var response = new UpdateKpiResponse();

            try
            {
                var action    = request.MapTo <BaseAction>();
                var updateKpi = request.MapTo <Kpi>();
                if (request.PillarId.HasValue)
                {
                    updateKpi.Pillar = DataContext.Pillars.FirstOrDefault(x => x.Id == request.PillarId);
                }
                if (request.GroupId.HasValue)
                {
                    updateKpi.Group = DataContext.Groups.FirstOrDefault(x => x.Id == request.GroupId);
                }
                if (request.RoleGroupId.HasValue)
                {
                    updateKpi.RoleGroup = DataContext.RoleGroups.FirstOrDefault(x => x.Id == request.RoleGroupId.Value);
                }

                updateKpi.Measurement = DataContext.Measurements.Single(x => x.Id == request.MeasurementId);
                updateKpi.Level       = DataContext.Levels.FirstOrDefault(x => x.Id == request.LevelId);
                updateKpi.Type        = DataContext.Types.FirstOrDefault(x => x.Id == request.TypeId);
                updateKpi.Method      = DataContext.Methods.FirstOrDefault(x => x.Id == request.MethodId);
                updateKpi.UpdatedBy   = DataContext.Users.FirstOrDefault(x => x.Id == request.UserId);
                var existedkpi = DataContext.Kpis
                                 .Where(x => x.Id == request.Id)
                                 .Include(x => x.RelationModels.Select(y => y.Kpi))
                                 .Include(x => x.RelationModels.Select(y => y.KpiParent))
                                 .Include(x => x.Pillar)
                                 .Include(x => x.Level)
                                 .Include(x => x.RoleGroup)
                                 .Include(x => x.Group)
                                 .Include(x => x.Type)
                                 .Include(x => x.Measurement)
                                 .Include(x => x.Method)
                                 .Single();

                DataContext.Entry(existedkpi).CurrentValues.SetValues(updateKpi);

                if (updateKpi.Group != null)
                {
                    DataContext.Groups.Attach(updateKpi.Group);
                    existedkpi.Group = updateKpi.Group;
                }

                if (updateKpi.RoleGroup != null)
                {
                    DataContext.RoleGroups.Attach(updateKpi.RoleGroup);
                    existedkpi.RoleGroup = updateKpi.RoleGroup;
                }

                if (updateKpi.Pillar != null)
                {
                    DataContext.Pillars.Attach(updateKpi.Pillar);
                    existedkpi.Pillar = updateKpi.Pillar;
                }
                DataContext.Measurements.Attach(updateKpi.Measurement);
                existedkpi.Measurement = updateKpi.Measurement;

                DataContext.Levels.Attach(updateKpi.Level);
                existedkpi.Level = updateKpi.Level;

                DataContext.Types.Attach(updateKpi.Type);
                existedkpi.Type = updateKpi.Type;

                DataContext.Methods.Attach(updateKpi.Method);
                existedkpi.Method = updateKpi.Method;

                var joinedRelationModels     = existedkpi.RelationModels.ToList();
                var additionalRelationModels = DataContext.KpiRelationModels
                                               .Include(x => x.Kpi)
                                               .Include(x => x.KpiParent)
                                               .Where(x => x.Kpi.Id == request.Id).ToList();


                foreach (var item in additionalRelationModels)
                {
                    joinedRelationModels.Add(item);
                }

                foreach (var joinedRelationModel in joinedRelationModels)
                {
                    DataContext.KpiRelationModels.Remove(joinedRelationModel);
                }

                if (request.RelationModels.Count > 0)
                {
                    var relation = new List <KpiRelationModel>();
                    foreach (var item in request.RelationModels)
                    {
                        if (item.KpiId != 0)
                        {
                            var kpiRelation = DataContext.Kpis.FirstOrDefault(x => x.Id == item.KpiId);
                            relation.Add(new KpiRelationModel
                            {
                                Kpi    = kpiRelation,
                                Method = item.Method
                            });
                        }
                    }
                    existedkpi.RelationModels = relation;
                }

                DataContext.SaveChanges(action);
                response.IsSuccess = true;
                response.Message   = "KPI item has been updated successfully";
            }
            catch (DbUpdateException dbUpdateException)
            {
                response.Message = dbUpdateException.Message;
            }

            return(response);
        }