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));
        }