public virtual ActionResult Edit(LocalisationFormViewModel localisationForm, int id, string addOffer) { var error = Worki.Resources.Validation.ValidationString.ErrorWhenSave; var field = string.Empty; //to keep files state in case of error _ObjectStore.Store<PictureDataContainer>(PictureData.GetKey(ProviderType.Localisation), new PictureDataContainer(localisationForm.Localisation)); var context = ModelFactory.GetUnitOfWork(); var lRepo = ModelFactory.GetRepository<ILocalisationRepository>(context); var mRepo = ModelFactory.GetRepository<IMemberRepository>(context); try { var member = mRepo.GetMember(User.Identity.Name); Member.Validate(member); if (ModelState.IsValid) { var loc = lRepo.Get(id); UpdateModel(loc, LocalisationPrefix); loc.MemberEditions.Add(new MemberEdition { ModificationDate = DateTime.UtcNow, MemberId = member.MemberId, ModificationType = (int)EditionType.Edition }); var offerCount = loc.Offers.Count; if (string.IsNullOrEmpty(addOffer) && !localisationForm.IsFreeLocalisation && offerCount == 0) { error = Worki.Resources.Views.Localisation.LocalisationString.MustAddOffer; field = "NewOfferType"; throw new Exception(error); } context.Commit(); _ObjectStore.Delete(PictureData.GetKey(ProviderType.Localisation)); if (!string.IsNullOrEmpty(addOffer)) { return RedirectToAction(MVC.Offer.Create(id, localisationForm.NewOfferType,Url.Action(MVC.Backoffice.Localisation.Index(id)))); } else { TempData[MiscHelpers.TempDataConstants.Info] = Worki.Resources.Views.Localisation.LocalisationString.LocHaveBeenEdit; return RedirectToAction(MVC.Backoffice.Localisation.Index(id)); } } } catch (Exception ex) { _Logger.Error("Edit", ex); context.Complete(); ModelState.AddModelError(field, error); } return View(new LocalisationFormViewModel(localisationForm.Localisation)); }
public virtual ActionResult Edit(LocalisationFormViewModel localisationForm, int? id) { var error = Worki.Resources.Validation.ValidationString.ErrorWhenSave; var field = string.Empty; var modifType = (!id.HasValue || id.Value == 0) ? EditionType.Creation : EditionType.Edition; //to keep files state in case of error _ObjectStore.Store<PictureDataContainer>(PictureData.GetKey(ProviderType.Localisation), new PictureDataContainer(localisationForm.Localisation)); var context = ModelFactory.GetUnitOfWork(); var lRepo = ModelFactory.GetRepository<ILocalisationRepository>(context); var mRepo = ModelFactory.GetRepository<IMemberRepository>(context); try { var member = mRepo.GetMember(User.Identity.Name); Member.Validate(member); if (ModelState.IsValid) { var localisationToAdd = localisationForm.Localisation; if (modifType == EditionType.Creation) { //add owner localisationToAdd.SetOwner(localisationForm.IsOwner ? member.MemberId : mRepo.GetAdminId()); //validate _SearchService.ValidateLocalisation(localisationToAdd, ref error); //add to repo localisationToAdd.MemberEditions.Add(new MemberEdition { ModificationDate = DateTime.UtcNow, MemberId = member.MemberId, ModificationType = (int)EditionType.Creation }); //if paying, offline till no offer added if (!localisationForm.IsFreeLocalisation) localisationToAdd.MainLocalisation.IsOffline = true; lRepo.Add(localisationToAdd); } else { //validate var editionAccess = member.HasEditionAccess(Roles.IsUserInRole(MiscHelpers.AdminConstants.AdminRole)); if (!string.IsNullOrEmpty(editionAccess)) { error = editionAccess; throw new Exception(editionAccess); } var loc = lRepo.Get(id.Value); //update repo TryUpdateModel(loc, LocalisationPrefix); loc.MemberEditions.Add(new MemberEdition { ModificationDate = DateTime.UtcNow, MemberId = member.MemberId, ModificationType = (int)EditionType.Edition }); } context.Commit(); _ObjectStore.Delete(PictureData.GetKey(ProviderType.Localisation)); //set localisation Id localisationForm.Localisation.ID = modifType == EditionType.Creation ? localisationToAdd.ID : id.Value; //case paying loc => go to offer edition if (!localisationForm.IsFreeLocalisation) { return RedirectToAction(MVC.Localisation.EditOffers(localisationForm.Localisation.ID, modifType)); } //case paying free loc => go to the edited / created page else { CompleteEdition(modifType, localisationForm.Localisation); return Redirect(localisationForm.Localisation.GetDetailFullUrl(Url)); } } } catch (Exception ex) { _Logger.Error("Edit", ex); context.Complete(); ModelState.AddModelError(field, error); } localisationForm.Localisation.ID = id ?? 0; return View(new LocalisationFormViewModel(localisationForm.Localisation)); }