public void Suprimer_marche(int id)
        {
            Marché marche = dbmetier.Marché.Find(id);
            //les cle de la liste
            List <int> listmissimonid = marche.Missions.Select(a => a.id_mission).ToList();

            foreach (var item in listmissimonid)
            {
                Mission mission = dbmetier.Missions.Find(item);
                //les cle de la liste
                List <int> listidaff = mission.Affectation_profils.Select(a => a.id_affectation).ToList();
                foreach (var item1 in listidaff)
                {
                    dbmetier.Affectation_profils.Remove(dbmetier.Affectation_profils.Find(item1));
                    dbmetier.SaveChanges();
                }

                dbmetier.Missions.Remove(mission);
                dbmetier.SaveChanges();
            }
            if (marche.Participations != null)
            {
                List <int> liscleparticipation = marche.Participations.Select(a => a.id_participation).ToList();
                foreach (var item in liscleparticipation)
                {
                    dbmetier.Participations.Remove(dbmetier.Participations.Find(item));
                }
            }
            dbmetier.Marché.Remove(marche);
            dbmetier.SaveChanges();
        }
        public ActionResult affecte(int id_marche)
        {// reepet de delais
            List <ParticipationRequest> listeoffre = new List <ParticipationRequest>();
            ParticipationRequest        pr;
            Marché mar = dbmetier.Marché.Where(a => a.id_marché == id_marche).FirstOrDefault();
            List <Participation> listparticipation = dbmetier.Participations.Where(a => a.id_marché_participation == mar.id_marché && a.budget_prestation != null).ToList();

            foreach (Participation item in listparticipation)

            {
                List <Profil_cout_chargeVM> listPCVM = new List <Profil_cout_chargeVM>();
                Profil_cout_chargeVM        element;
                prestataire prestataire             = dbmetier.prestataires.Where(a => a.id_prestataire == item.id_prestataire_participation).FirstOrDefault();
                List <Participation_profil> listepp = dbmetier.Participation_profil.Where(a => a.id_participation_fk == item.id_participation).ToList();
                foreach (var item2 in listepp)
                {
                    element         = new Profil_cout_chargeVM();
                    element.cout    = (int)item2.cout_unit_ht;
                    element.libelle = item2.Profil.libelle_profil;
                    listPCVM.Add(element);
                }


                pr = new ParticipationRequest
                {
                    prestataire_participant = prestataire,
                    budget_prestation       = (int)item.budget_prestation,
                    listeprofil_cout        = listPCVM,
                };
                listeoffre.Add(pr);
            }
            ViewBag.id_marche = id_marche;
            return(View(listeoffre));
        }
 public ActionResult Creer_ordre(DateTime date_provisoire, List <int> listmission, int id_marche)
 {
     if (User.Identity.GetUserId() == dbmetier.Marché.Where(a => a.id_marché == id_marche).Select(a => a.id_responsable_fk).FirstOrDefault())
     {
         Marché        marche        = dbmetier.Marché.Find(id_marche);
         Ordre_service ordre_service = new Ordre_service
         {
             date_debut_ordre       = System.DateTime.Now,
             date_provisoire        = date_provisoire,
             id_projet_ordreservice = marche.Projet.id_projet,
             etat_reception         = false,
             etat_facturation       = false,
         };
         dbmetier.Ordre_service.Add(ordre_service);
         dbmetier.SaveChanges();
         foreach (var item in listmission)
         {
             Mission mission = new Mission();
             mission = dbmetier.Missions.Find(item);
             mission.date_debut_mission = System.DateTime.Now;
             mission.id_ordreservice_fk = ordre_service.id_ordre_service;
         }
         dbmetier.SaveChanges();
     }
     return(RedirectToAction("Dashboardresp", new { id_marche = id_marche }));
 }
        public ActionResult Create(MarcheViewModel marche)
        {
            var userId = User.Identity.GetUserId();

            Projet pro = dbmetier.Projets.Find(marche.id_projet);
            Marché mar = new Marché();

            mar.Délai        = marche.Délai;
            mar.date_fin     = marche.date_fin;
            mar.date_debut   = System.DateTime.Now;
            mar.budget_prevu = marche.budget_prevu;
            mar.id_projet_fk = marche.id_projet;
            mar.matricule    = marche.matricule;

            mar.id_responsable_fk = userId;
            dbmetier.Marché.Add(mar);
            dbmetier.SaveChanges();
            foreach (var item in marche.listeprestataire)
            {
                Models.Participation par = new Models.Participation();

                par.id_marché_participation      = mar.id_marché;
                par.id_prestataire_participation = item;
                dbmetier.Participations.Add(par);
                dbmetier.SaveChanges();
            }

            foreach (MissionViewModel item in marche.listMission)
            {
                //ajout de domaine
                Domaine domaine = dbmetier.Domaines.Where(x => x.libelle_domaine == item.domaine).FirstOrDefault();

                Mission mision = new Mission
                {
                    id_mission            = item.id_mission,
                    libelle_mission       = item.libelle_mission,
                    id_domaine_mission_fk = domaine.id_domaine,
                    id_marche_mission     = mar.id_marché
                };
                dbmetier.Missions.Add(mision);
                dbmetier.SaveChanges();
                foreach (var profillib in item.listeprofils)
                {
                    Profil prof = dbmetier.Profils.Where(x => x.libelle_profil == profillib.libelle).FirstOrDefault();
                    Affectation_profils afectation = new Affectation_profils
                    {
                        id_mission_affectation = mision.id_mission,
                        id_profils_affectation = prof.id_profil,
                        charge_profil          = profillib.charge
                    };
                    dbmetier.Affectation_profils.Add(afectation);
                    dbmetier.SaveChanges();
                }
            }

            return(Content("<script language='javascript' type='text/javascript'>alert('sucsssflly!');</script>"));
        }
        public ActionResult ajouterMission(MVM mission, int id_ordre, int id_marche)
        {
            //ajout de domaine
            int           budget_mission = 0, budget_restant = 0;
            Participation par = dbmetier.Participations.Where(a => a.id_marché_participation == id_marche).First();
            ICollection <Participation_profil> listparti = par.Participation_profil;

            foreach (var item in mission.listeprofils)
            {
                budget_mission += item.charge * (int)listparti.Where(a => a.Profil.libelle_profil == item.libelle).Select(a => a.cout_unit_ht).FirstOrDefault();
            }

            Participation participation = dbmetier.Participations.Where(a => a.id_marché_participation == id_marche).FirstOrDefault();
            Marché        marche        = dbmetier.Marché.Find(id_marche);

            budget_restant = (int)participation.budget_prestation - (int)marche.montant_total;
            if (budget_mission <= budget_restant)
            {
                marche.montant_total += budget_mission;
                Ordre_service ordre = dbmetier.Ordre_service.Find(id_ordre);
                ordre.date_modification = System.DateTime.Now;
                Domaine domaine = dbmetier.Domaines.Where(x => x.libelle_domaine == mission.mission.Domaine.libelle_domaine).FirstOrDefault();
                Mission mision  = new Mission
                {
                    libelle_mission       = mission.mission.libelle_mission,
                    id_domaine_mission_fk = domaine.id_domaine,
                    id_marche_mission     = marche.id_marché
                    ,
                    id_ordreservice_fk = ordre.id_ordre_service
                };
                dbmetier.Missions.Add(mision);
                dbmetier.SaveChanges();
                foreach (var profillib in mission.listeprofils)
                {
                    Profil prof = dbmetier.Profils.Where(x => x.libelle_profil == profillib.libelle).FirstOrDefault();
                    Affectation_profils afectation = new Affectation_profils
                    {
                        id_mission_affectation = mision.id_mission,
                        id_profils_affectation = prof.id_profil,
                        charge_profil          = profillib.charge
                    };
                    dbmetier.Affectation_profils.Add(afectation);
                    dbmetier.SaveChanges();
                }
            }

            return(null);
        }
        public ActionResult Delete(Projet projet)
        {
            Projet project = dbmetier.Projets.Find(projet.id_projet);
            ICollection <Marché> listmarche = projet.Marché;

            if (listmarche != null)
            {
                foreach (var ite in listmarche)
                {
                    Marché marche = dbmetier.Marché.Find(ite.id_marché);
                    //les cle de la liste
                    List <int> listmissimonid = marche.Missions.Select(a => a.id_mission).ToList();
                    foreach (var item in listmissimonid)
                    {
                        Mission mission = dbmetier.Missions.Find(item);
                        //les cle de la liste
                        List <int> listidaff = mission.Affectation_profils.Select(a => a.id_affectation).ToList();
                        foreach (var item1 in listidaff)
                        {
                            dbmetier.Affectation_profils.Remove(dbmetier.Affectation_profils.Find(item1));
                            dbmetier.SaveChanges();
                        }

                        dbmetier.Missions.Remove(mission);
                        dbmetier.SaveChanges();
                    }
                    if (marche.Participations != null)
                    {
                        List <int> liscleparticipation = marche.Participations.Select(a => a.id_participation).ToList();
                        foreach (var item in liscleparticipation)
                        {
                            dbmetier.Participations.Remove(dbmetier.Participations.Find(item));
                        }
                    }
                    dbmetier.Marché.Remove(marche);
                    dbmetier.SaveChanges();
                }
            }

            dbmetier.Projets.Remove(project);
            dbmetier.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public ActionResult annler_mision(int id_marche, int id_mission_annulée)
        {
            Marché mar = dbmetier.Marché.Find(id_marche);
            Affectation_profils aff;
            Mission             mission = dbmetier.Missions.Where(a => a.id_mission == id_mission_annulée).FirstOrDefault();

            mission.date_fin_mission = System.DateTime.Now;
            ICollection <Affectation_profils> listaf = new List <Affectation_profils>();



            int budget_mission = 0;

            foreach (var item in mission.Affectation_profils)
            {
                Profil               profil    = item.Profil;
                Participation        par       = dbmetier.Participations.Where(a => a.id_marché_participation == id_marche).FirstOrDefault();
                Participation_profil particpro = dbmetier.Participation_profil.Where(a => a.id_profil_fk == profil.id_profil && a.id_participation_fk == (int)par.id_participation).FirstOrDefault();
                budget_mission += (int)item.charge_profil * (int)particpro.cout_unit_ht;
            }
            mar.montant_total -= budget_mission;
            dbmetier.SaveChanges();


            foreach (var item in mission.Affectation_profils)
            {
                aff = new Affectation_profils {
                    charge_profil = item.charge_profil, id_affectation = item.id_affectation, id_mission_affectation = item.id_mission_affectation, id_profils_affectation = item.id_profils_affectation, Mission = item.Mission, Profil = item.Profil
                };

                listaf.Add(aff);
            }
            foreach (var item in listaf)
            {
                aff = dbmetier.Affectation_profils.Where(a => a.id_affectation == item.id_affectation).FirstOrDefault();
                dbmetier.Affectation_profils.Remove(aff);
            }
            dbmetier.SaveChanges();
            return(RedirectToAction("Dashboardresp", new { id_marche = id_marche }));;
        }
        [HttpGet] // javais ici un probleme de confusion entre le get et le pose d'ou cette solution
        public ActionResult affect(String id_prestatire, int id_marche)
        {         //securite
            if (User.Identity.GetUserId() == dbmetier.Marché.Where(a => a.id_marché == id_marche).Select(a => a.id_responsable_fk).FirstOrDefault())
            {
                Marché marche = new Marché();
                marche = dbmetier.Marché.Find(id_marche);
                Participation par = dbmetier.Participations.Where(a => a.id_prestataire_participation == id_prestatire && a.id_marché_participation == id_marche).FirstOrDefault();
                marche.montant_total        = par.budget_prestation;
                marche.id_prestataire_final = id_prestatire;
                //SUprimer tous les autre participation
                List <Participation> listparticipation = dbmetier.Participations.Where(a => a.id_marché_participation == id_marche).ToList();
                foreach (var Participation in listparticipation)
                {
                    if (Participation.id_prestataire_participation != id_prestatire)
                    {
                        dbmetier.Participations.Remove(Participation);
                    }
                }
                dbmetier.SaveChanges();
            }

            return(RedirectToAction("Dashboardresp", new { id_marche = id_marche }));
        }
        public ActionResult Dashboardresp(int id_marche)
        {
            int             totale_mission;
            IList <Mission> list_desmission_encour    = new List <Mission>();
            IList <Mission> list_desmission_nonlances = new List <Mission>();
            IList <Mission> list_desmission_complete  = new List <Mission>();
            IList <Mission> list_desmission_annule    = new List <Mission>();
            IList <Mission> list_desmission           = dbmetier.Missions.Where(a => a.id_marche_mission == id_marche).ToList();

            foreach (var item in list_desmission)
            {
                if (item.Ordre_service == null)
                {
                    list_desmission_nonlances.Add(item);
                }
                else
                {
                    if (item.Affectation_profils.Count == 0)
                    {
                        list_desmission_annule.Add(item);
                    }
                    if (etat_ordre_service(item.id_ordreservice_fk) == true && item.Affectation_profils.Count != 0)
                    {
                        list_desmission_complete.Add(item);
                    }
                    if (etat_ordre_service(item.id_ordreservice_fk) == false && item.Affectation_profils.Count != 0)
                    {
                        list_desmission_encour.Add(item);
                    }
                }
                ViewBag.list_desmission_nonlances = list_desmission_nonlances;
                ViewBag.list_desmission_complete  = list_desmission_complete;
                ViewBag.list_desmission_encour    = list_desmission_encour;
                ViewBag.list_desmission_annule    = list_desmission_annule;
            }
            totale_mission = list_desmission.Count;
            if (totale_mission != 0)
            {
                ViewBag.pourcentage_nonlances = ((double)list_desmission_nonlances.Count / totale_mission) * 100;
                ViewBag.pourcentage_complete  = ((double )list_desmission_complete.Count / totale_mission) * 100;
                ViewBag.pourcentage_encour    = ((double)list_desmission_encour.Count / totale_mission) * 100;
                ViewBag.pourcentage_annulle   = ((double)list_desmission_annule.Count / totale_mission) * 100;
            }
            int nombre_res = 0, nombre_non = 0;

            IList <Ordre_service> liste_ordre = dbmetier.Marché.Find(id_marche).Projet.Ordre_service.ToList();

            foreach (var item in liste_ordre)
            {
                if (item.etat_reception == true)
                {
                    nombre_res++;
                }
                else
                {
                    nombre_non++;
                }
            }
            ViewBag.pourcentage_ordre_recep     = nombre_res;
            ViewBag.pourcentage_cordre_nonrecep = nombre_non;
            // ordre de service
            IList <Ordre_service> list_ordre  = new List <Ordre_service>();
            //listmision view model
            List <MVM> listMissionVM          = new List <MVM>();
            MVM        element                = new MVM();

            foreach (var item in list_desmission)
            {
                Ordre_service ordre = dbmetier.Ordre_service.Where(a => a.id_ordre_service == item.id_ordreservice_fk).FirstOrDefault();
                if (!list_ordre.Contains(ordre) && ordre != null)
                {
                    list_ordre.Add(ordre);
                }
            }
            Marché marche           = dbmetier.Marché.Find(id_marche);
            int    id_participation = dbmetier.Participations.Where(a => a.id_prestataire_participation == marche.id_prestataire_final && a.id_marché_participation == marche.id_marché).Select(a => a.id_participation).FirstOrDefault();

            // on peut creer un liste de misiion non affecte a un ordre de service ici.
            foreach (var item in list_desmission)
            {
                int cout, cout_totale = 0;
                List <Affectation_profils> listaffectations = dbmetier.Affectation_profils.Where(a => a.id_mission_affectation == item.id_mission).ToList();

                foreach (var item2 in listaffectations)
                {
                    cout         = (int)dbmetier.Participation_profil.Where(a => a.id_profil_fk == item2.Profil.id_profil && a.id_participation_fk == id_participation).Select(a => a.cout_unit_ht).FirstOrDefault();
                    cout_totale += cout * (int)item2.charge_profil;
                }
                element = new MVM {
                    mission = item, cout = cout_totale
                };
                listMissionVM.Add(element);
            }
            ViewBag.listmission = listMissionVM;
            ViewBag.listeordre  = list_ordre;
            ViewBag.Marche      = marche;
            ViewBag.prestataire = dbmetier.prestataires.Find(marche.id_prestataire_final);
            var listedomaines = dbmetier.Domaines.ToList();

            ViewBag.listedomaines = new SelectList(listedomaines, "libelle_domaine", "libelle_domaine");
            var listProfils = dbmetier.Marché.Find(id_marche).Participations.Where(a => a.id_prestataire_participation == marche.id_prestataire_final).FirstOrDefault().Participation_profil.ToList().Select(a => a.Profil);

            ViewBag.listeProfils = new SelectList(listProfils, "libelle_profil", "libelle_profil");
            return(View());
        }