<commit_before>using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Web.Mvc;

using AutoMapper;

using Chiro.Cdf.ServiceHelper;
using Chiro.Gap.Domain;
using Chiro.Gap.ServiceContracts;
using Chiro.Gap.ServiceContracts.DataContracts;
using Chiro.Gap.ServiceContracts.FaultContracts;
using Chiro.Gap.Validatie;
using Chiro.Gap.WebApp.Models;

namespace Chiro.Gap.WebApp.Controllers
{
    /// <summary>
    /// 
    /// </summary>
    public class UitstappenController : BaseController
    {
        public UitstappenController(IServiceHelper serviceHelper, IVeelGebruikt veelGebruikt)
            : base(serviceHelper, veelGebruikt)
        {
        }

        /// <summary>
        /// Overzicht val alle uitstappen (ever) van een groep
        /// </summary>
        /// <param name="groepID">ID van de groep</param>
        /// <returns>View met uistapoverzicht</returns>
        public override ActionResult Index(int groepID)
        {
            var model = new UitstapOverzichtModel();
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.Uitstappen;
            model.Uitstappen =
                ServiceHelper.CallService<IUitstappenService, IEnumerable<UitstapInfo>>(svc => svc.OphalenVanGroep(groepID, false));
            return View(model);
        }

        /// <summary>
        /// Formulier om nieuwe uitstap te registreren
        /// </summary>
        /// <param name="groepID">ID van groep waarvoor uitstap moet worden geregistreerd</param>
        /// <returns>Het formulier</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Nieuw(int groepID)
        {
            var model = new UitstapModel();
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.NieuweUitstap;
            model.Uitstap = new UitstapDetail();

            return View("Bewerken", model);
        }

        /// <summary>
        /// Verwerkt de gegevens uit het nieuwe-uitstapformulier
        /// </summary>
        /// <param name="model">Ingevlude gegevens</param>
        /// <param name="groepID">Groep waarvoor uitstap moet worden bewaard</param>
        /// <returns>Als alles gelukt is, de details van de toegevoegde uitstap.  Anders 
        /// opnieuw het formulier met feedback over de problemen.</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Nieuw(UitstapModel model, int groepID)
        {
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.NieuweUitstap;

            if (ModelState.IsValid)
            {
                int uitstapID = ServiceHelper.CallService<IUitstappenService, int>(svc => svc.Bewaren(groepID, model.Uitstap));
                return RedirectToAction("Bekijken", new { groepID, id = uitstapID });
            }
            else
            {
                return View("Bewerken", model);
            }
        }

        /// <summary>
        /// Toont de details van een gegeven uitstap
        /// </summary>
        /// <param name="groepID">ID van de groep die momenteel geselecteerd is</param>
        /// <param name="id">ID van de uitstap waarin we genteresseerd zijn</param>
        /// <returns>De details van de gegeven uitstap</returns>
        public ActionResult Bekijken(int groepID, int id)
        {
            var model = new UitstapDeelnemersModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));
            model.Deelnemers =
                ServiceHelper.CallService<IUitstappenService, IEnumerable<DeelnemerDetail>>(
                    svc => svc.DeelnemersOphalen(id));
            model.Titel = model.Uitstap.Naam;

            return View(model);
        }

        /// <summary>
        /// Formulier om bestaande uitstap mee te bewerken
        /// </summary>
        /// <param name="groepID">ID van de groep</param>
        /// <param name="id">ID van de te bewerken uitstap</param>
        /// <returns>Een formuliertje waarmee je datum en opmerkingen van een uitstap kunt aanpassen</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Bewerken(int groepID, int id)
        {
            var model = new UitstapModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));
            model.Titel = model.Uitstap.Naam;

            return View(model);
        }

        /// <summary>
        /// Stuurt de gegevens uit het 'uitstapbewerkenformulier' door naar de backend.
        /// </summary>
        /// <param name="model">Ingevulde gegevens</param>
        /// <param name="groepID">Groep waarvoor uitstap moet worden bewerkt</param>
        /// <param name="id">ID van de te bewerken uitstap</param>
        /// <returns>Als alles gelukt is, de details van de toegevoegde uitstap.  Anders 
        /// opnieuw het formulier met feedback over de problemen.</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Bewerken(UitstapModel model, int groepID, int id)
        {
            BaseModelInit(model, groepID);
            // neem uitstapID over uit url, want ik denk dat daarvoor geen field is voorzien.
            model.Uitstap.ID = id;
            model.Titel = model.Uitstap.Naam;

            if (ModelState.IsValid)
            {
                int uitstapID = ServiceHelper.CallService<IUitstappenService, int>(svc => svc.Bewaren(groepID, model.Uitstap));
                return RedirectToAction("Bekijken", new { groepID, id = uitstapID });
            }
            else
            {
                return View("Bewerken", model);
            }
        }

        /// <summary>
        /// Laat de user de bivakplaats voor een uitstap bewerken.
        /// </summary>
        /// <param name="groepID">ID van de groep waarmee we werken</param>
        /// <param name="id">ID van het bivak waarvoor de plaats moet worden ingegeven.</param>
        /// <returns>Het formulier voor het ingeven van een bivakplaats</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult PlaatsBewerken(int groepID, int id)
        {
            var model = new UitstapPlaatsBewerekenModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));

            if (model.Uitstap.Adres == null)
            {
                model.Uitstap.Adres = new AdresInfo { LandNaam = Properties.Resources.Belgie };
            }

            model.Titel = model.Uitstap.Naam;
            model.AlleLanden = VeelGebruikt.LandenOphalen();
            model.BeschikbareWoonPlaatsen = new List<WoonPlaatsInfo>();

            return View(model);
        }<commit_msg>Closes #988.  Problemen met adreswijziging uitstap.<commit_after>using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Web.Mvc;

using AutoMapper;

using Chiro.Cdf.ServiceHelper;
using Chiro.Gap.Domain;
using Chiro.Gap.ServiceContracts;
using Chiro.Gap.ServiceContracts.DataContracts;
using Chiro.Gap.ServiceContracts.FaultContracts;
using Chiro.Gap.Validatie;
using Chiro.Gap.WebApp.Models;

namespace Chiro.Gap.WebApp.Controllers
{
    /// <summary>
    /// 
    /// </summary>
    public class UitstappenController : BaseController
    {
        public UitstappenController(IServiceHelper serviceHelper, IVeelGebruikt veelGebruikt)
            : base(serviceHelper, veelGebruikt)
        {
        }

        /// <summary>
        /// Overzicht val alle uitstappen (ever) van een groep
        /// </summary>
        /// <param name="groepID">ID van de groep</param>
        /// <returns>View met uistapoverzicht</returns>
        public override ActionResult Index(int groepID)
        {
            var model = new UitstapOverzichtModel();
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.Uitstappen;
            model.Uitstappen =
                ServiceHelper.CallService<IUitstappenService, IEnumerable<UitstapInfo>>(svc => svc.OphalenVanGroep(groepID, false));
            return View(model);
        }

        /// <summary>
        /// Formulier om nieuwe uitstap te registreren
        /// </summary>
        /// <param name="groepID">ID van groep waarvoor uitstap moet worden geregistreerd</param>
        /// <returns>Het formulier</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Nieuw(int groepID)
        {
            var model = new UitstapModel();
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.NieuweUitstap;
            model.Uitstap = new UitstapDetail();

            return View("Bewerken", model);
        }

        /// <summary>
        /// Verwerkt de gegevens uit het nieuwe-uitstapformulier
        /// </summary>
        /// <param name="model">Ingevlude gegevens</param>
        /// <param name="groepID">Groep waarvoor uitstap moet worden bewaard</param>
        /// <returns>Als alles gelukt is, de details van de toegevoegde uitstap.  Anders 
        /// opnieuw het formulier met feedback over de problemen.</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Nieuw(UitstapModel model, int groepID)
        {
            BaseModelInit(model, groepID);
            model.Titel = Properties.Resources.NieuweUitstap;

            if (ModelState.IsValid)
            {
                int uitstapID = ServiceHelper.CallService<IUitstappenService, int>(svc => svc.Bewaren(groepID, model.Uitstap));
                return RedirectToAction("Bekijken", new { groepID, id = uitstapID });
            }
            else
            {
                return View("Bewerken", model);
            }
        }

        /// <summary>
        /// Toont de details van een gegeven uitstap
        /// </summary>
        /// <param name="groepID">ID van de groep die momenteel geselecteerd is</param>
        /// <param name="id">ID van de uitstap waarin we genteresseerd zijn</param>
        /// <returns>De details van de gegeven uitstap</returns>
        public ActionResult Bekijken(int groepID, int id)
        {
            var model = new UitstapDeelnemersModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));
            model.Deelnemers =
                ServiceHelper.CallService<IUitstappenService, IEnumerable<DeelnemerDetail>>(
                    svc => svc.DeelnemersOphalen(id));
            model.Titel = model.Uitstap.Naam;

            return View(model);
        }

        /// <summary>
        /// Formulier om bestaande uitstap mee te bewerken
        /// </summary>
        /// <param name="groepID">ID van de groep</param>
        /// <param name="id">ID van de te bewerken uitstap</param>
        /// <returns>Een formuliertje waarmee je datum en opmerkingen van een uitstap kunt aanpassen</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Bewerken(int groepID, int id)
        {
            var model = new UitstapModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));
            model.Titel = model.Uitstap.Naam;

            return View(model);
        }

        /// <summary>
        /// Stuurt de gegevens uit het 'uitstapbewerkenformulier' door naar de backend.
        /// </summary>
        /// <param name="model">Ingevulde gegevens</param>
        /// <param name="groepID">Groep waarvoor uitstap moet worden bewerkt</param>
        /// <param name="id">ID van de te bewerken uitstap</param>
        /// <returns>Als alles gelukt is, de details van de toegevoegde uitstap.  Anders 
        /// opnieuw het formulier met feedback over de problemen.</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Bewerken(UitstapModel model, int groepID, int id)
        {
            BaseModelInit(model, groepID);
            // neem uitstapID over uit url, want ik denk dat daarvoor geen field is voorzien.
            model.Uitstap.ID = id;
            model.Titel = model.Uitstap.Naam;

            if (ModelState.IsValid)
            {
                int uitstapID = ServiceHelper.CallService<IUitstappenService, int>(svc => svc.Bewaren(groepID, model.Uitstap));
                return RedirectToAction("Bekijken", new { groepID, id = uitstapID });
            }
            else
            {
                return View("Bewerken", model);
            }
        }

        /// <summary>
        /// Laat de user de bivakplaats voor een uitstap bewerken.
        /// </summary>
        /// <param name="groepID">ID van de groep waarmee we werken</param>
        /// <param name="id">ID van het bivak waarvoor de plaats moet worden ingegeven.</param>
        /// <returns>Het formulier voor het ingeven van een bivakplaats</returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult PlaatsBewerken(int groepID, int id)
        {
            var model = new UitstapPlaatsBewerekenModel();
            BaseModelInit(model, groepID);
            model.Uitstap = ServiceHelper.CallService<IUitstappenService, UitstapDetail>(svc => svc.DetailsOphalen(id));

            if (model.Uitstap.Adres == null)
            {
                model.Uitstap.Adres = new AdresInfo { LandNaam = Properties.Resources.Belgie };
            }

            // Als het adres buitenlands is, dan moeten we de woonplaats nog eens overnemen in
            // WoonPlaatsBuitenland.  Dat is nodig voor de AdresBewerkenControl, die een beetje
            // raar ineen zit.
            if (String.Compare(model.Uitstap.Adres.LandNaam, Properties.Resources.Belgie, true) != 0)
            {
                model.WoonPlaatsBuitenLand = model.Uitstap.Adres.WoonPlaatsNaam;
            }

            model.Titel = model.Uitstap.Naam;
            model.AlleLanden = VeelGebruikt.LandenOphalen();
            model.BeschikbareWoonPlaatsen = VeelGebruikt.WoonPlaatsenOphalen(model.Uitstap.Adres.PostNr);

            return View(model);
        }
{'fraction_non_alphanumeric': 0.10523749825881042, 'fraction_numerical': 0.0002785903329154478, 'mean_word_length': 2.116778814846972, 'pattern_counts': {'":': 0, '<': 134, '<?xml version=': 0, '>': 148, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2368012', 'n_tokens_mistral': 4468, 'n_tokens_neox': 4451, 'n_words': 958}