public static bool ManageTrainings(EFContext context, TrainingViewModel model, bool isInternal) { try { model.ErrorMessage = String.Empty; model.Success = String.Empty; var serverPath = String.Empty; var path = String.Empty; var fileSize = 0m; var index = 0; var availableSpace = 0m; if (isInternal) { if (model.CurrentOrganization == null) { model.CurrentOrganization = context.Organizations.FirstOrDefault(x => x.OrganizationID == model.LoggedUser.OrganizationID); } if (model.CurrentOrganization == null) { model.ErrorMessage = "Brak organizacji do ktorej mozna przypisac grupe!"; return(true); } availableSpace = model.CurrentOrganization.SpaceDisk * 1024; } switch (model.ActionType) { case AppEngine.Models.DataBusiness.BaseActionType.Get: break; case AppEngine.Models.DataBusiness.BaseActionType.Delete: model.Current.IsDeleted = false; model.Current.DeletedUserID = model.LoggedUser.Id; model.Current.DeletedDate = DateTime.Now; context.Entry(model.Current).State = EntityState.Modified; var git = context.TrainingInGroups.Where(x => x.TrainingID == model.Current.TrainingID).ToList(); if (git != null) { context.TrainingInGroups.RemoveRange(git); } var tio = context.TrainingsInOrganizations.Where(x => x.TrainingID == model.Current.TrainingID).ToList(); if (tio != null) { context.TrainingsInOrganizations.RemoveRange(tio); } context.SaveChanges(); model.Success = "Usuniecie szkolenia zakonczylo sie sukcesem!"; break; case AppEngine.Models.DataBusiness.BaseActionType.Edit: //walidation if (model.Current.Details == null || !model.Current.Details.Any()) { model.ErrorMessage = "Nie mozna zapisac szkolenia. Nalezy dodac element do szkolenia"; return(false); } var toModified = context.Trainings.FirstOrDefault(x => x.TrainingID == model.Current.TrainingID); //check training resources var fileName = Path.GetFileName(toModified.TrainingResources); //Assets\34c3cd6d0bbb4001a5570372f4db649f\Resources\U_05_0238035_0115RW.pdf serverPath = toModified.TrainingResources.Replace("\\" + fileName, ""); path = Path.Combine(HttpRuntime.AppDomainAppPath, serverPath); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } fileSize = 0m; if (!model.Current.TrainingResources.EndsWith(fileName)) { File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, toModified.TrainingResources)); toModified.TrainingResources = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, model.Current.TrainingResources, out fileSize, true, "training_image"); } fileName = String.IsNullOrEmpty(toModified.PassResources) ? string.Empty : Path.GetFileName(toModified.PassResources); if ((!String.IsNullOrEmpty(model.Current.PassResources) && !model.Current.PassResources.EndsWith(fileName)) || (String.IsNullOrEmpty(fileName) && !String.IsNullOrEmpty(model.Current.PassResources))) { fileSize = 0m; if (!String.IsNullOrEmpty(fileName)) { File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, toModified.PassResources)); } toModified.PassResources = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, model.Current.PassResources, out fileSize, true, "training_mark"); } toModified.Name = model.Current.Name; toModified.Description = model.Current.Description; toModified.PassInfo = model.Current.PassInfo; toModified.PassResult = model.Current.PassResult; toModified.TrainingType = isInternal ? TrainingType.Internal : TrainingType.Kenpro; toModified.ModifieddUserID = model.LoggedUser.Id; toModified.ModifiedDate = DateTime.Now; toModified.IsForAll = model.Current.IsForAll; context.Entry(toModified).State = EntityState.Modified; context.SaveChanges(); index = 0; //todo add check if exists if (model.Current.Details != null) { if (isInternal) { availableSpace = availableSpace - AppSettings.GetUsedSpace(context, model.CurrentOrganization.OrganizationID); } var modifiedDetails = context.TrainingDetails.Where(x => x.TrainingID == model.Current.TrainingID).ToList(); var localFile = String.Empty; try { foreach (var item in modifiedDetails) { var removed = model.Current.Details.FirstOrDefault(x => x.TrainingDetailID == item.TrainingDetailID); if (removed == null) { if (!String.IsNullOrEmpty(item.InternalResource)) { // localFile = item.InternalResource.Replace("File", "C:\\Assets"); File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, localFile)); } if (isInternal) { availableSpace += item.FileSize; } context.Entry(item).State = EntityState.Deleted; } if (removed != null && !String.IsNullOrEmpty(item.InternalResource) && !item.Name.Equals(removed.Name)) { localFile = item.InternalResource.Replace("File", "C:\\Assets"); File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, localFile)); if (isInternal) { availableSpace += item.FileSize; } context.Entry(item).State = EntityState.Deleted; } } foreach (var item in model.Current.Details) { item.TrainingID = model.Current.TrainingID; item.DisplayNo = index; index++; var editable = modifiedDetails.FirstOrDefault(x => x.TrainingDetailID == item.TrainingDetailID); if (editable != null && !String.IsNullOrEmpty(item.InternalResource) && item.Name.Equals(editable.Name)) { if (editable.DisplayNo != item.DisplayNo) { editable.DisplayNo = item.DisplayNo; context.Entry(editable).State = EntityState.Modified; } continue; } //move file and save size in MG if (!String.IsNullOrEmpty(item.InternalResource)) { fileSize = 0m; item.InternalResource = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, item.InternalResource, out fileSize); item.FileSize = fileSize; if (isInternal) { availableSpace -= fileSize; if (availableSpace <= 0) { foreach (var itemToDel in model.Details.Where(x => x.FileSize != 0)) { localFile = item.InternalResource.Replace("File", "C:\\Assets"); File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, localFile)); } model.ErrorMessage = "Przestrzeń dyskowa organizacji została wykorzystana i nie ma miejsca na Twoje szkolenie - skontaktuj się z administratorem."; return(false); } } context.Entry(item).State = EntityState.Added; } } context.SaveChanges(); } catch (Exception ex) { model.ErrorMessage = "Problem z zapisaniem zmian w szczegolach szkolenia"; return(false); } } index = 0; if (model.Current.Questions != null) { var modifiedQuestion = context.TrainingQuestons.Where(x => x.TrainingID == model.Current.TrainingID).ToList(); foreach (var modif in modifiedQuestion) { //modif.Answers = context.TrainingAnswers.Where(x => x.TrainingQuestionID == modif.TrainingQuestionID).ToList(); context.Entry(modif).State = EntityState.Deleted; } foreach (var item in model.Current.Questions) { item.TrainingID = model.Current.TrainingID; item.DisplayNo = index; index++; context.Entry(item).State = EntityState.Added; } context.SaveChanges(); } //todo assigned group if (isInternal) { //todo change to only update var currentGroups = (from t in context.TrainingInGroups where t.TrainingID == model.Current.TrainingID select t).ToList(); if (currentGroups != null) { foreach (var item in currentGroups) { var grp = context.TrainingInGroups.FirstOrDefault(x => x.ProfileGroupID == item.ProfileGroupID && x.TrainingID == model.Current.TrainingID); if (grp != null) { context.TrainingInGroups.Remove(grp); } } } if (!model.Current.IsForAll && model.Current.Groups != null && model.Current.Groups.Any()) { foreach (var item in model.Current.Groups) { var grp = new ProfileGroup2Trainings(); grp.IsDeleted = false; grp.ProfileGroupID = item.ProfileGroupID; grp.TrainingID = model.Current.TrainingID; context.TrainingInGroups.Add(grp); } } } else { var currentOrganizations = context.TrainingsInOrganizations.Where(x => x.TrainingID == model.Current.TrainingID); if (currentOrganizations != null && currentOrganizations.Any()) { context.TrainingsInOrganizations.RemoveRange(currentOrganizations); context.SaveChanges(); } if (!model.Current.IsForAll && model.Organizations != null && model.Organizations.Any()) { foreach (var item in model.Organizations) { var trainingInOrganization = new Trainings2Organizations(); trainingInOrganization.OrganizationID = item.OrganizationID; trainingInOrganization.TrainingID = model.Current.TrainingID; trainingInOrganization.IsDeleted = false; context.TrainingsInOrganizations.Add(trainingInOrganization); } } } context.SaveChanges(); if (isInternal) { LogService.InsertTrainingLogs(OperationLog.TrainingEdit, context, model.Current.TrainingID, model.LoggedUser.Id, model.CurrentOrganization.OrganizationID); } model.Success = "Edycja szkolenia zakonczylo sie sukcesem!"; break; case AppEngine.Models.DataBusiness.BaseActionType.Add: if (model.Details == null || !model.Details.Any()) { model.ErrorMessage = "Nie mozna zapisac szkolenia. Nalezy dodac element do szkolenia"; return(false); } model.Current.CreateDate = DateTime.Now; model.Current.CreateUserID = model.LoggedUser.Id; model.Current.IsDeleted = false; model.Current.IsActive = true; model.Current.TrainingType = isInternal ? TrainingType.Internal : TrainingType.Kenpro; context.Trainings.Add(model.Current); context.SaveChanges(); serverPath = AppSettings.ServerPath(model.Current.TrainingID); path = Path.Combine(HttpRuntime.AppDomainAppPath, serverPath); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } if (String.IsNullOrEmpty(model.Current.TrainingResources)) { model.Current.TrainingResources = @"Assets\Image\main_image.png"; } fileSize = 0m; model.Current.TrainingResources = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, model.Current.TrainingResources, out fileSize, true, "training_image"); if (!String.IsNullOrEmpty(model.Current.PassResources)) { fileSize = 0m; model.Current.PassResources = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, model.Current.PassResources, out fileSize, true, "training_mark"); } context.Entry <Training>(model.Current).State = EntityState.Modified; context.SaveChanges(); index = 0; if (model.Details != null && model.Details.Any()) { if (isInternal) { availableSpace = availableSpace - AppSettings.GetUsedSpace(context, model.CurrentOrganization.OrganizationID); } foreach (var item in model.Details) { item.DisplayNo = index; index++; //move file and save size in MG if (!String.IsNullOrEmpty(item.InternalResource)) { fileSize = 0m; item.InternalResource = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, item.InternalResource, out fileSize); item.FileSize = fileSize; if (isInternal) { availableSpace -= fileSize; if (availableSpace <= 0) { foreach (var itemToDel in model.Details.Where(x => x.FileSize != 0)) { File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, itemToDel.InternalResource)); } model.ErrorMessage = "Przestrzeń dyskowa organizacji została wykorzystana i nie ma miejsca na Twoje szkolenie - skontaktuj się z administratorem."; return(false); } } } } model.Current.Details = model.Details; } index = 0; if (model.Questions != null && model.Questions.Any()) { foreach (var item in model.Questions) { item.DisplayNo = index; index++; } model.Current.Questions = model.Questions; } if (isInternal) { LogService.InsertTrainingLogs(OperationLog.TrainingCreate, context, model.Current.TrainingID, model.LoggedUser.Id, model.CurrentOrganization.OrganizationID); if (model.Current.IsForAll) { model.Current.Groups = null; } if (model.Current.Groups != null && model.Current.Groups.Any()) { foreach (var item in model.Current.Groups) { var grp = new ProfileGroup2Trainings(); grp.IsDeleted = false; grp.ProfileGroupID = item.ProfileGroupID; grp.TrainingID = model.Current.TrainingID; context.TrainingInGroups.Add(grp); } context.SaveChanges(); } var trainingInOrganization = new Trainings2Organizations(); trainingInOrganization.OrganizationID = model.CurrentOrganization.OrganizationID; trainingInOrganization.TrainingID = model.Current.TrainingID; trainingInOrganization.IsDeleted = false; context.TrainingsInOrganizations.Add(trainingInOrganization); context.SaveChanges(); } else { if (model.Current.IsForAll) { model.Organizations = new List <Organization>(); } foreach (var item in model.Organizations) { var trainingInOrganization = new Trainings2Organizations(); trainingInOrganization.OrganizationID = item.OrganizationID; trainingInOrganization.TrainingID = model.Current.TrainingID; trainingInOrganization.IsDeleted = false; context.TrainingsInOrganizations.Add(trainingInOrganization); } context.SaveChanges(); } model.ActionType = BaseActionType.GetExtData; ManageTrainings(context, model, isInternal); model.Success = "Dodanie szkolenia zakonczylo sie sukcesem!"; break; case BaseActionType.GetSimple: if (isInternal) { model.Trainings = (from t in context.Trainings join to in context.TrainingsInOrganizations on t.TrainingID equals to.TrainingID where to.OrganizationID == model.CurrentOrganization.OrganizationID && t.TrainingType == TrainingType.Internal orderby t.CreateDate select t).ToList(); foreach (var item in model.Trainings) { item.AssignedGroups = (from git1 in context.TrainingInGroups join g1 in context.Groups on git1.ProfileGroupID equals g1.ProfileGroupID where git1.TrainingID == item.TrainingID select new CommonDto { Name = g1.Name, Id = g1.ProfileGroupID }).ToList(); if (!String.IsNullOrEmpty(item.CreateUserID)) { item.UserName = context.Users.FirstOrDefault(x => x.Id == item.CreateUserID).UserName; } } } else { model.Trainings = (from ext in context.Trainings where ext.TrainingType == TrainingType.Kenpro orderby ext.CreateDate select ext).ToList(); foreach (var item in model.Trainings) { if (!String.IsNullOrEmpty(item.CreateUserID)) { item.UserName = context.Users.FirstOrDefault(x => x.Id == item.CreateUserID).UserName; } } } model.Success = String.Empty; break; case BaseActionType.GetExtData: model.Current = new Training(); model.Current.PassResult = 80; model.Current.TrainingResources = @"Assets\Image\main_image.png"; model.Current.IsForAll = true; model.Details = new List <TrainingDetail>(); model.Questions = new List <TrainingQuestion>(); model.AvailableForAll = true; if (isInternal) { model.Groups = (from gio in context.GroupsInOrganizations join g in context.Groups on gio.ProfileGroupID equals g.ProfileGroupID where gio.OrganizationID == model.CurrentOrganization.OrganizationID && !g.IsDeleted && g.Name != "Wszyscy" select g).ToList(); } model.Success = String.Empty; break; case BaseActionType.ById: if (model.trainingID == 0) { model.ErrorMessage = "Brak id szkolenia."; return(true); } model.Current = context.Trainings.FirstOrDefault(x => x.TrainingID == model.trainingID); if (model.Current == null) { model.ErrorMessage = "Blad wczytanie szkolenia"; } model.Current.Details = context.TrainingDetails.Where(x => x.TrainingID == model.trainingID).ToList(); model.Current.Questions = context.TrainingQuestons.Where(x => x.TrainingID == model.trainingID).ToList(); foreach (var question in model.Current.Questions) { question.Answers = context.TrainingAnswers.Where(x => x.TrainingQuestionID == question.TrainingQuestionID).ToList(); } if (isInternal) { //todo groups model.Current.Groups = (from extTig in context.TrainingInGroups join extG in context.Groups on extTig.ProfileGroupID equals extG.ProfileGroupID where extTig.TrainingID == model.Current.TrainingID select extG).ToList(); } else { model.Organizations = (from extTio in context.TrainingsInOrganizations join extO in context.Organizations on extTio.OrganizationID equals extO.OrganizationID where extTio.TrainingID == model.Current.TrainingID select extO).ToList(); model.Current.Organizations = model.Organizations; } model.Success = String.Empty; break; case BaseActionType.GetSpecial: var take = 50; var skip = 0; if (model.InternalTrainings != null) { skip = model.InternalTrainings.Count(); } else { model.InternalTrainings = new List <TrainingDto>(); } var query = (from t in context.Trainings join to in context.TrainingsInOrganizations on t.TrainingID equals to.TrainingID join o in context.Organizations on to.OrganizationID equals o.OrganizationID where t.TrainingType == TrainingType.Internal orderby t.CreateDate select new TrainingDto { Id = t.TrainingID, StartDate = t.CreateDate, Name = t.Name, Organization = o.Name, CreatorID = t.CreateUserID }).Skip(skip).Take(take); var collection = query.ToList(); foreach (var item in collection) { var result = (from tr in context.Logs where tr.TrainingID == item.Id && !tr.IsSystem && tr.OperationType == OperationLog.TrainingEdit orderby tr.ModifiedDate select tr).FirstOrDefault(); if (result != null) { item.EndDate = result.ModifiedDate; } if (!String.IsNullOrEmpty(item.CreatorID)) { var creator = context.Users.FirstOrDefault(x => x.Id == item.CreatorID); item.CreatorName = creator.UserName; item.CreatorLogin = creator.DisplayName; } item.AssignedGroup = (from tig in context.TrainingInGroups join g in context.Groups on tig.ProfileGroupID equals g.ProfileGroupID where tig.TrainingID == item.Id select g.Name).ToList(); } model.Success = String.Empty; model.InternalTrainings.AddRange(collection); break; case BaseActionType.GetByCreateUser: if (isInternal) { model.Trainings = (from t in context.Trainings join to in context.TrainingsInOrganizations on t.TrainingID equals to.TrainingID where to.OrganizationID == model.CurrentOrganization.OrganizationID && t.TrainingType == TrainingType.Internal && t.CreateUserID == model.LoggedUser.Id orderby t.CreateDate select t).ToList(); foreach (var item in model.Trainings) { item.AssignedGroups = (from git1 in context.TrainingInGroups join g1 in context.Groups on git1.ProfileGroupID equals g1.ProfileGroupID where git1.TrainingID == item.TrainingID select new CommonDto { Name = g1.Name, Id = g1.ProfileGroupID }).ToList(); if (!String.IsNullOrEmpty(item.CreateUserID)) { item.UserName = context.Users.FirstOrDefault(x => x.Id == item.CreateUserID).UserName; } } } else { model.Trainings = (from ext in context.Trainings where ext.TrainingType == TrainingType.Kenpro orderby ext.CreateDate select ext).ToList(); foreach (var item in model.Trainings) { if (!String.IsNullOrEmpty(item.CreateUserID)) { item.UserName = context.Users.FirstOrDefault(x => x.Id == item.CreateUserID).UserName; } } } model.Success = String.Empty; break; case BaseActionType.ChangeImage: var toImageModified = context.Trainings.FirstOrDefault(x => x.TrainingID == model.Current.TrainingID); //check training resources var imageFileName = Path.GetFileName(toImageModified.TrainingResources); //Assets\34c3cd6d0bbb4001a5570372f4db649f\Resources\U_05_0238035_0115RW.pdf serverPath = toImageModified.TrainingResources.Replace("\\" + imageFileName, ""); path = Path.Combine(HttpRuntime.AppDomainAppPath, serverPath); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } fileSize = 0m; if (!model.Current.TrainingResources.EndsWith(imageFileName)) { File.Delete(Path.Combine(HttpRuntime.AppDomainAppPath, toImageModified.TrainingResources)); toImageModified.TrainingResources = AppSettings.CopyFile(path, HttpRuntime.AppDomainAppPath, model.Current.TrainingResources, out fileSize, true, "training_image"); } toImageModified.ModifieddUserID = model.LoggedUser.Id; toImageModified.ModifiedDate = DateTime.Now; context.Entry(toImageModified).State = EntityState.Modified; context.SaveChanges(); if (isInternal) { LogService.InsertTrainingLogs(OperationLog.TrainingEdit, context, model.Current.TrainingID, model.LoggedUser.Id, model.CurrentOrganization.OrganizationID); } model.Success = "Edycja szkolenia zakończyła się sukcesem!"; break; default: break; } return(true); } catch (Exception ex) { model.ErrorMessage = "Wystapil nieokreslony problem przy probie polaczenia z baza"; return(false); } }
public HttpResponseMessage Post(TrainingManagmentViewModel obj) { try { obj.LoggedUser = Person.GetLoggedPerson(User); if (obj.LoggedUser.Status == StatusEnum.Deleted) { obj.ErrorMessage = "Uprawnienia uzytkownika wygasly!"; return(Request.CreateResponse(HttpStatusCode.Created, obj)); } if (obj.CurrentOrganization == null) { obj.CurrentOrganization = db.Organizations.FirstOrDefault(x => x.OrganizationID == obj.LoggedUser.OrganizationID); } switch (obj.ActionType) { case TrainingManagmentActionType.GetInternal: obj.ShowExternal = false; if (obj.LoggedUser.Profile == ProfileEnum.Protector) { obj.ShowExternal = true; } else if (obj.LoggedUser.Profile == ProfileEnum.Administrator) { obj.ShowExternal = false; //get protector if (obj.CurrentOrganization != null) { obj.ShowExternal = obj.CurrentOrganization.IsGlobalAvailable; } } obj.InternalTrainings = (from t in db.Trainings join to in db.TrainingsInOrganizations on t.TrainingID equals to.TrainingID where to.OrganizationID == obj.LoggedUser.OrganizationID && t.TrainingType == TrainingType.Internal select t).ToList(); foreach (var training in obj.InternalTrainings) { training.Logs = (from item in db.Logs join user in db.Users on item.ModifiedUserID equals user.Id where item.TrainingID == training.TrainingID && !item.IsSystemLog && (item.OperationType == OperationLog.TrainingCreate || item.OperationType == OperationLog.TrainingEdit) select new CommonDto { Date = item.ModifiedDate.Value, Name = user.UserName }).ToList(); training.AssignedGroups = (from item in db.TrainingInGroups join grp in db.Groups on item.ProfileGroupID equals grp.ProfileGroupID where item.TrainingID == training.TrainingID select new CommonDto { Name = grp.Name }).ToList(); var createdUser = db.Users.FirstOrDefault(x => x.Id == training.CreateUserID); if (createdUser != null) { training.UserName = createdUser.DisplayName; } } obj.Success = String.Empty; break; case TrainingManagmentActionType.GetExternal: obj.ExternalTrainings = new List <Training>(); var trainingsEx = (from t in db.Trainings where t.TrainingType == TrainingType.Kenpro && t.IsForAll select t).ToList(); if (trainingsEx != null) { obj.ExternalTrainings.AddRange(trainingsEx); } trainingsEx = (from t in db.Trainings join tio in db.TrainingsInOrganizations on t.TrainingID equals tio.TrainingID where t.TrainingType == TrainingType.Kenpro && tio.OrganizationID == obj.CurrentOrganization.OrganizationID select t).ToList(); if (trainingsEx != null) { obj.ExternalTrainings.AddRange(trainingsEx); } obj.ExternalTrainings = obj.ExternalTrainings.OrderByDescending(x => x.CreateDate).ToList(); var groups = (from grp in db.GroupsInOrganizations join g in db.Groups on grp.ProfileGroupID equals g.ProfileGroupID where grp.OrganizationID == obj.CurrentOrganization.OrganizationID select new { ProfileGroupID = g.ProfileGroupID, Name = g.Name } ).ToList(); obj.Groups = new List <ProfileGroup>(); if (!groups.Exists(x => x.Name == "Wszyscy")) { var groupAll = (from gr in db.Groups where gr.Name == "Wszyscy" select new { ProfileGroupID = gr.ProfileGroupID, Name = gr.Name }).FirstOrDefault(); groups.Insert(0, groupAll); } if (groups.Any()) { obj.Groups = (from grp in groups group grp by grp.ProfileGroupID into gp select new ProfileGroup { ProfileGroupID = gp.Key, Name = groups.FirstOrDefault(x => x.ProfileGroupID == gp.Key).Name }).ToList(); } if (obj.ExternalTrainings != null) { foreach (var training in obj.ExternalTrainings) { training.AssignedGroups = (from item in db.TrainingInGroups join grp in db.Groups on item.ProfileGroupID equals grp.ProfileGroupID where item.TrainingID == training.TrainingID select new CommonDto { Name = grp.Name, Id = grp.ProfileGroupID }).ToList(); training.AssignedGroups = training.AssignedGroups.Where(x => obj.Groups.Exists(p => p.ProfileGroupID == x.Id)).ToList(); } } obj.Success = String.Empty; break; case TrainingManagmentActionType.GetSettings: break; case TrainingManagmentActionType.SaveGroups: if (obj.Current == null) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Grupa nie istnieje")); } var assigend = (from item in db.TrainingInGroups join grp in db.Groups on item.ProfileGroupID equals grp.ProfileGroupID where item.TrainingID == obj.Current.TrainingID select item).ToList(); if (assigend != null && assigend.Any()) { db.TrainingInGroups.RemoveRange(assigend); db.SaveChanges(); } if (obj.Current.Groups.Any()) { foreach (var item in obj.Current.Groups) { var tig = new ProfileGroup2Trainings(); tig.TrainingID = obj.Current.TrainingID; tig.ProfileGroupID = item.ProfileGroupID; tig.IsDeleted = false; db.TrainingInGroups.Add(tig); } db.SaveChanges(); obj.Current.AssignedGroups = (from item in db.TrainingInGroups join grp in db.Groups on item.ProfileGroupID equals grp.ProfileGroupID where item.TrainingID == obj.Current.TrainingID select new CommonDto { Name = grp.Name, Id = grp.ProfileGroupID }).ToList(); } var current = obj.ExternalTrainings.FirstOrDefault(x => x.TrainingID == obj.Current.TrainingID); obj.ExternalTrainings.Remove(current); obj.ExternalTrainings.Add(obj.Current); obj.ExternalTrainings = obj.ExternalTrainings.OrderBy(x => x.CreateDate).ToList(); obj.Current = new Training(); obj.Success = "Dane zapisane!"; break; default: break; } HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, obj); return(response); } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, ex)); } }