public IActionResult Create([Bind("VoertuigArtikelNummer,VoertuigTitel,Chassisnummer,Prijs,Kleur,Brandstof,Kilometerstand," +
                                          "Bouwjaar,FiguurURL,Registratie,GarantieTijd,COTwee,Versnelling,CC,Vermogen,Deuren,Zitplaatsen," +
                                          "Binnenbekleding,Binnenkleur,Koetswerk, SelectedMerk, SelectedModel, SelectedCategorie, SelectedFaktuur, SelectedKlant")]  VoertuigEditViewModel voertuigCreated)
        {
            ;
            string VolRegistratie = voertuigCreated.Registratie;
            string last4Char      = VolRegistratie.Substring(VolRegistratie.Length - 4, 4);

            if (last4Char != voertuigCreated.Bouwjaar.ToString())
            {
                ModelState.AddModelError("bouwjaarValidationError",
                                         "Bouwjaar verschilt met Registratie");
            }

            VoertuigenRepository repo;


            if (ModelState.IsValid)
            {
                repo = new VoertuigenRepository(_context);
                bool saved = repo.SaveVoertuig(voertuigCreated);
                if (saved)
                {
                    TempData["SuccessMessage"] = $"Het voertuig {voertuigCreated.VoertuigArtikelNummer} is succesvol toegevoegd.";
                    return(RedirectToAction(nameof(Index)));
                }
            }
            repo            = new VoertuigenRepository(_context);
            voertuigCreated = repo.CreateVoertuig();

            return(View(voertuigCreated));
        }
        public VoertuigEditViewModel EditVoertuig(long?id)
        {
            var mRepo = new MerkenRepository(_context);
            var tRepo = new ModellenRepository(_context);
            var cRepo = new CategorieRepository(_context);
            var fRepo = new FakturenRepository(_context);
            var kRepo = new KlantenRepository(_context);

            Voertuig voertuigMod = new Voertuig();

            voertuigMod = _context.Voertuigen
                          .Include(v => v.Merk)
                          .Include(v => v.MerkType)
                          .Include(v => v.VoertuigCategorie)
                          .Include(v => v.Klant)
                          .Include(v => v.Faktuur)
                          //.OrderBy(v => v.VoertuigArtikelNummer.Length)
                          //.ThenBy(v => v.VoertuigArtikelNummer)
                          .SingleOrDefault(m => m.VoertuigId == id);


            var voertuigE = new VoertuigEditViewModel()
            {
                VoertuigId = id,

                VoertuigArtikelNummer = voertuigMod.VoertuigArtikelNummer,
                SelectedMerk          = voertuigMod.MerkId.ToString(),
                SelectedModel         = voertuigMod.ModelId.ToString(),
                VoertuigTitel         = voertuigMod.VoertuigTitel,
                SelectedCategorie     = voertuigMod.VoertuigCatId.ToString(),
                Prijs           = voertuigMod.Prijs,
                Nieuw           = voertuigMod.Nieuw,
                Kilometerstand  = voertuigMod.Kilometerstand,
                Registratie     = voertuigMod.Registratie,
                Bouwjaar        = voertuigMod.Bouwjaar,
                Brandstof       = voertuigMod.Brandstof,
                Kleur           = voertuigMod.Kleur,
                Koetswerk       = voertuigMod.Koetswerk,
                GarantieTijd    = voertuigMod.GarantieTijd,
                Versnelling     = voertuigMod.Versnelling,
                Vermogen        = voertuigMod.Vermogen,
                COTwee          = voertuigMod.COTwee,
                CC              = voertuigMod.CC,
                Zitplaatsen     = voertuigMod.Zitplaatsen,
                Deuren          = voertuigMod.Deuren,
                Binnenkleur     = voertuigMod.Binnenkleur,
                Binnenbekleding = voertuigMod.Binnenbekleding,
                FiguurURL       = voertuigMod.FiguurURL,
                SelectedFaktuur = voertuigMod.FaktuurNr.ToString(),  //Bestaan nog geen fakturen
                SelectedKlant   = voertuigMod.KlantId.ToString(),
                Merken          = mRepo.GetMerken(),
                Modellen        = tRepo.GetModellen(voertuigMod.MerkId.ToString()),
                Categorieen     = cRepo.GetCategorieen(),
                Fakturen        = fRepo.GetFakturen(),
                Klanten         = kRepo.GetKlanten()
            };

            return(voertuigE);
        }
        public bool SaveEditVoertuig(long id, VoertuigEditViewModel voertuigedit)
        {
            //Verplicht, anders null-exception!!
            var mRepo = new MerkenRepository(_context);
            var tRepo = new ModellenRepository(_context);
            var cRepo = new CategorieRepository(_context);
            var fRepo = new FakturenRepository(_context);
            var kRepo = new KlantenRepository(_context);


            if (voertuigedit != null)
            {
                {
                    if (voertuigedit.VoertuigArtikelNummer != string.Empty)
                    {
                        var voertuigUpdate = new Voertuig()
                        {
                            VoertuigId            = id,
                            VoertuigArtikelNummer = voertuigedit.VoertuigArtikelNummer,
                            VoertuigTitel         = voertuigedit.VoertuigTitel,
                            Prijs             = voertuigedit.Prijs,
                            Nieuw             = voertuigedit.Nieuw,
                            Kilometerstand    = voertuigedit.Kilometerstand,
                            Registratie       = voertuigedit.Registratie,
                            Bouwjaar          = voertuigedit.Bouwjaar,
                            Brandstof         = voertuigedit.Brandstof,
                            Kleur             = voertuigedit.Kleur,
                            Koetswerk         = voertuigedit.Koetswerk,
                            GarantieTijd      = voertuigedit.GarantieTijd,
                            Versnelling       = voertuigedit.Versnelling,
                            Vermogen          = voertuigedit.Vermogen,
                            COTwee            = voertuigedit.COTwee,
                            CC                = voertuigedit.CC,
                            Zitplaatsen       = voertuigedit.Zitplaatsen,
                            Deuren            = voertuigedit.Deuren,
                            Binnenkleur       = voertuigedit.Binnenkleur,
                            Binnenbekleding   = voertuigedit.Binnenbekleding,
                            FiguurURL         = voertuigedit.FiguurURL,
                            Merk              = _context.Merken.SingleOrDefault(c => c.MerkId == Convert.ToInt64(voertuigedit.SelectedMerk)),
                            MerkType          = _context.Types.SingleOrDefault(c => c.MerkTypeId == Convert.ToInt64(voertuigedit.SelectedModel)),
                            VoertuigCategorie = _context.VoertuigCategorieen.SingleOrDefault(c => c.VoertuigCatId == Convert.ToInt64(voertuigedit.SelectedCategorie)),
                            Klant             = _context.Klanten.SingleOrDefault(c => c.KlantId == Convert.ToInt64(voertuigedit.SelectedKlant)),
                            Faktuur           = _context.Fakturen.SingleOrDefault(c => c.FaktuurNr == Convert.ToInt64(voertuigedit.SelectedFaktuur)),
                        };



                        _context.Voertuigen.Update(voertuigUpdate);
                        _context.SaveChanges();
                        return(true);
                    }
                }
            }
            //Return false if voertuigedit == null or voertuigArtikelNummer is empty
            return(false);
        }
        public VoertuigEditViewModel CreateVoertuig()
        {
            var mRepo = new MerkenRepository(_context);
            var tRepo = new ModellenRepository(_context);
            var cRepo = new CategorieRepository(_context);
            var fRepo = new FakturenRepository(_context);
            var kRepo = new KlantenRepository(_context);


            var mxLV = _context.Voertuigen
                       .Where(v => v.VoertuigArtikelNummer.Contains("v"))
                       .OrderBy(v => v.VoertuigArtikelNummer.Length)
                       .ThenBy(v => v.VoertuigArtikelNummer)
                       .Max(v => Convert.ToInt16(v.VoertuigArtikelNummer.Substring(1)) + 1);
            var mxPW = _context.Voertuigen
                       .Where(v => !v.VoertuigArtikelNummer.Contains("v"))
                       //.OrderBy(v => v.VoertuigArtikelNummer.Length)
                       //.ThenBy(v => v.VoertuigArtikelNummer)
                       .Max(v => Convert.ToInt16(v.VoertuigArtikelNummer) + 1);



            var voertuig = new VoertuigEditViewModel()
            {
                MaxLVNr = $"V{mxLV.ToString()}",
                MaxPWNr = $"{mxPW.ToString()}",
                VoertuigArtikelNummer = $"--Kies PW: {mxPW.ToString()} / LV: V{mxLV.ToString()}--",
                Bouwjaar     = Convert.ToInt16(DateTime.Now.Year),
                Registratie  = "../20..",
                Deuren       = 4,
                Zitplaatsen  = 4,
                Vermogen     = "... pk(.. kW)",
                CC           = 1000,
                GarantieTijd = "12/24 maanden",
                FiguurURL    = $@"~/images/vtgn/fronts/..._FRONT.jpg",
                COTwee       = "... gr",
                Merken       = mRepo.GetMerken(),
                Modellen     = tRepo.GetModellen(),
                Categorieen  = cRepo.GetCategorieen(),
                Fakturen     = fRepo.GetFakturen(),
                Klanten      = kRepo.GetKlanten()
            };

            return(voertuig);
        }
        public IActionResult Edit(long id, [Bind("VoertuigId,VoertuigArtikelNummer,VoertuigTitel,Chassisnummer,Prijs,Kleur," +
                                                 "Brandstof,Kilometerstand,Bouwjaar,FiguurURL,Registratie,GarantieTijd,COTwee,Versnelling,CC,Vermogen,Deuren,Zitplaatsen," +
                                                 "Binnenbekleding,Binnenkleur,Koetswerk, SelectedMerk, SelectedModel, SelectedCategorie, SelectedFaktuur, SelectedKlant")]  VoertuigEditViewModel voertuigModified)
        {
            string VolRegistratie = voertuigModified.Registratie;
            string last4Char      = VolRegistratie.Substring(VolRegistratie.Length - 4, 4);

            if (last4Char != voertuigModified.Bouwjaar.ToString())
            {
                ModelState.AddModelError("bouwjaarValidationError",
                                         "Bouwjaar verschilt met Registratie");
            }
            VoertuigenRepository repo;

            if (id != voertuigModified.VoertuigId)
            {
                return(NotFound());
            }

            //if (ModelState.IsValid)
            //{
            //    try
            //    {
            //        _context.Update(voertuig);
            //        await _context.SaveChangesAsync();
            //    }
            //    catch (DbUpdateConcurrencyException)
            //    {
            //if (!VoertuigExists(voertuig.VoertuigId))
            //        {
            //            return NotFound();
            //        }
            //        else
            //        {
            //            throw;
            //        }
            //    }
            //    return RedirectToAction(nameof(Index));


            if (ModelState.IsValid)
            {
                //try
                //{
                repo = new VoertuigenRepository(_context);
                bool saved = repo.SaveEditVoertuig(id, voertuigModified);
                if (saved)
                {
                    TempData["SuccessMessage"] = $"Het voertuig {voertuigModified.VoertuigArtikelNummer} is succesvol gewijzigd.";
                    return(RedirectToAction(nameof(Index)));
                }
                //}
                //catch (DbUpdateConcurrencyException)
                //{
                //    if (!VoertuigExists(voertuigModified.VoertuigId))
                //    {
                //        return NotFound();
                //    }
                //    else
                //    {
                //        throw;
                //    }
                //}
            }
            return(RedirectToAction(nameof(Index)));
        }