Ejemplo n.º 1
0
        public void AggiungiDocumento(DocumentoGenerico doc)
        {
            #region check requisiti

            /* int countL = 0;
             * int countF = 0;
             * if (doc.GetRequisiti().ToList().Count >= 2)
             * {
             *  foreach (RequisitoPersonale rp in doc.GetRequisiti())
             *  {
             *      if (rp.GetType() == typeof(RequisitoPersonaleDiFormazione)) countF++;
             *      if (rp.GetType() == typeof(RequisitoPersonaleDiLingua)) countL++;
             *  }
             *  if (countL >= 1 && countF >= 1)
             *  {
             *      _documenti.Add(doc);
             *  }
             *  else
             *  {
             *      throw new ArgumentException("Il documento deve contenere almeno un requisito di lingua e uno di formazione");
             *  }
             * }
             * else
             * {
             *  throw new ArgumentException("Il documento deve contenere almeno un requisito di lingua e uno di formazione");
             * }*/
            #endregion
            _documenti.Add(doc);
            OnChanged();
        }
Ejemplo n.º 2
0
        public void CreaAssociazione(DocumentoGenerico doc1, DocumentoGenerico doc2)
        {
            DateTime currentDate = DateTime.Today;
            Guid     id          = Guid.NewGuid();

            if (doc1.State.Equals("Disattivo") || doc2.State.Equals("Disattivo"))
            {
                throw new ArgumentException("Documento Disattivo");
            }
            doc2.AggiungiAssociazione(new Associazione(doc1, currentDate, id));
            doc1.AggiungiAssociazione(new Associazione(doc2, currentDate, id));
            OnChanged();
        }
Ejemplo n.º 3
0
        public IEnumerable <DocumentoGenerico> CreaDocumentiRandom(int count)
        {
            List <DocumentoGenerico> documenti = new List <DocumentoGenerico>();

            for (int k = 0; k <= count; k++)
            {
                DocumentoGenerico off =
                    DocumentoFactory.CreateOffertaDiLavoro("nomeAzienda" + k, _random.Next(1, 5), " ",
                                                           "tipoContratto" + k, "email" + k);
                DocumentoGenerico rich =
                    DocumentoFactory.CreateRichiestaDiLavoro("nome" + k, "cognome" + k, new DateTime(), (ulong)_random.Next(1000, 2000),
                                                             "email" + k, "codiceFiscale" + k, "indirizzo" + k);
                this.AggiungiDocumento(rich);
                this.AggiungiDocumento(off);
            }
            return(documenti);
        }
        public override Dictionary <DocumentoGenerico, int> Graduatoria(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti)
        {
            if (!(documento is RichiestaDiLavoro))
            {
                throw new ArgumentException("il documento non è una richiesta");
            }
            if (documento == null)
            {
                throw new ArgumentNullException("Non è stato inserito nessun documento");
            }
            if (documenti == null)
            {
                throw new ArgumentNullException("Non è stata inserita nessuna lista di documenti");
            }
            if (documento.State.Equals("Disattivo"))
            {
                throw new ArgumentException("Documento disattivo");
            }

            List <OffertaDiLavoro>              offerte              = documenti.OfType <OffertaDiLavoro>().ToList();
            List <RichiestaDiLavoro>            richieste            = documenti.OfType <RichiestaDiLavoro>().ToList();
            Dictionary <DocumentoGenerico, int> graduatoriaRichiesta = new Dictionary <DocumentoGenerico, int>();

            foreach (OffertaDiLavoro off in offerte)
            {
                if (off.State.Equals("Attivo"))
                {
                    Dictionary <DocumentoGenerico, int> graduatoriaOffNesima = this.GraduatoriaGenerale(off, richieste);
                    //ottengo il mio punteggio
                    int mioPunteggio = graduatoriaOffNesima[documento];
                    //attraverso una query ottengo la mia posizione in graduatoria
                    int position = (int)(from g in graduatoriaOffNesima select g).LongCount(g => g.Value > mioPunteggio);
                    //formo la graduatoria da restituire
                    graduatoriaRichiesta.Add(off, position + 1);
                }
            }
            //ordino la graduatoria da restituire
            return(OrderGraduatoria(graduatoriaRichiesta, false));
        }
        protected Dictionary <DocumentoGenerico, int> GraduatoriaGenerale(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti)
        {
            Dictionary <DocumentoGenerico, int> graduatoria = new Dictionary <DocumentoGenerico, int>();
            IEnumerable <RequisitoPersonale>    requisiti   = documento.GetRequisiti();

            foreach (DocumentoGenerico doc in documenti)
            {
                if (doc.State.Equals("Attivo"))
                {
                    int punteggio = 0;
                    foreach (RequisitoPersonale requisitoA in requisiti)
                    {
                        foreach (RequisitoPersonale requisitoB in doc.GetRequisiti())
                        {
                            if (requisitoA.Requisito.Guid == requisitoB.Requisito.Guid)
                            {
                                int quota = (int)requisitoA.GradoDiValutazione - (int)requisitoB.GradoDiValutazione;
                                if (quota <= 0)
                                {
                                    punteggio += 3;
                                }
                                if (quota == 1)
                                {
                                    punteggio += 2;
                                }
                                else
                                {
                                    punteggio += 0;
                                }
                            }
                        }
                    }
                    graduatoria.Add(doc, punteggio);
                }
            }
            return(graduatoria);
        }
        public override Dictionary <DocumentoGenerico, int> Graduatoria(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti)
        {
            if (!(documento is OffertaDiLavoro))
            {
                throw new ArgumentException("il documento non è una offerta");
            }
            if (documento == null)
            {
                throw new ArgumentNullException("Non è stato inserito nessun documento");
            }
            if (documenti == null)
            {
                throw new ArgumentNullException("Non è stata inserita nessuna lista di documenti");
            }
            if (documento.State.Equals("Disattivo"))
            {
                throw new ArgumentException("Documento disattivo");
            }

            List <RichiestaDiLavoro> richieste = documenti.OfType <RichiestaDiLavoro>().ToList();

            //ordino la graduatoria da restituire
            return(OrderGraduatoria(this.GraduatoriaGenerale(documento, richieste), true));
        }
 public abstract Dictionary <DocumentoGenerico, int> GraduatoriaFittizia(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti, IEnumerable <RequisitoPersonale> requisiti);
 public abstract Dictionary <DocumentoGenerico, int> Graduatoria(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti);
        public override Dictionary <DocumentoGenerico, int> GraduatoriaFittizia(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti, IEnumerable <RequisitoPersonale> requisiti)
        {
            if (!(documento is OffertaDiLavoro))
            {
                throw new ArgumentException("il documento non è una offerta");
            }
            if (documento == null)
            {
                throw new ArgumentNullException("Non è stato inserito nessun documento");
            }
            if (documenti == null)
            {
                throw new ArgumentNullException("Non è stata inserita nessuna lista di documenti");
            }
            if (documento.State.Equals("Disattivo"))
            {
                throw new ArgumentException("Documento disattivo");
            }

            List <OffertaDiLavoro>    offerte            = documenti.OfType <OffertaDiLavoro>().ToList();
            List <RichiestaDiLavoro>  richieste          = documenti.OfType <RichiestaDiLavoro>().ToList();
            List <RequisitoPersonale> requisitiRimossi   = new List <RequisitoPersonale>();
            List <RequisitoPersonale> requisitiAggiunti  = new List <RequisitoPersonale>();
            OffertaDiLavoro           offertaDaElaborare = null;

            foreach (OffertaDiLavoro odl in offerte)
            {
                if (odl.Equals(documento))
                {
                    offertaDaElaborare = odl;
                    foreach (RequisitoPersonale rp in requisiti)
                    {
                        List <RequisitoPersonale> flag = new List <RequisitoPersonale>();
                        flag = odl.GetRequisiti().Where(r => r.Requisito.Guid == rp.Requisito.Guid).ToList();

                        if (flag.Count() != 0)
                        {
                            // Se il requisito presente nell'offerta ha un grado di valutazione maggiore di quello specificato
                            // viene sostituito, altrimenti viene rimosso.
                            if ((int)rp.GradoDiValutazione < (int)flag.ElementAt(0).GradoDiValutazione)
                            {
                                odl.RimuoviRequisito(flag.ElementAt(0));
                                odl.AggiungiRequisito(rp);
                                requisitiRimossi.Add(flag.ElementAt(0));
                                requisitiAggiunti.Add(rp);
                            }
                        }
                    }
                    break;
                }
            }
            Dictionary <DocumentoGenerico, int> graduatoriaOff = this.GraduatoriaGenerale(documento, richieste);

            foreach (RequisitoPersonale rp in requisitiAggiunti)
            {
                offertaDaElaborare.RimuoviRequisito(rp);
            }
            foreach (RequisitoPersonale rp in requisitiRimossi)
            {
                offertaDaElaborare.AggiungiRequisito(rp);
            }


            //ordino la graduatoria da restituire
            return(OrderGraduatoria(graduatoriaOff, true));
        }
        public override Dictionary <DocumentoGenerico, int> GraduatoriaFittizia(DocumentoGenerico documento, IEnumerable <DocumentoGenerico> documenti, IEnumerable <RequisitoPersonale> requisiti)
        {
            if (!(documento is RichiestaDiLavoro))
            {
                throw new ArgumentException("il documento non è una richiesta");
            }
            if (documento == null)
            {
                throw new ArgumentNullException("Non è stato inserito nessun documento");
            }
            if (documenti == null)
            {
                throw new ArgumentNullException("Non è stata inserita nessuna lista di documenti");
            }
            if (documento.State.Equals("Disattivo"))
            {
                throw new ArgumentException("Documento disattivo");
            }

            List <OffertaDiLavoro>              offerte              = documenti.OfType <OffertaDiLavoro>().ToList();
            List <RichiestaDiLavoro>            richieste            = documenti.OfType <RichiestaDiLavoro>().ToList();
            Dictionary <DocumentoGenerico, int> graduatoriaRichiesta = new Dictionary <DocumentoGenerico, int>();
            List <RequisitoPersonale>           requisitiAggiunti    = new List <RequisitoPersonale>();
            List <RequisitoPersonale>           requisitiModificati  = new List <RequisitoPersonale>();
            RichiestaDiLavoro richiestaDaElaborare = null;

            foreach (RichiestaDiLavoro rdl in richieste)
            {
                if (rdl.Equals(documento))
                {
                    richiestaDaElaborare = rdl;
                    foreach (RequisitoPersonale rp in requisiti)
                    {
                        IEnumerable <RequisitoPersonale> flag = rdl.GetRequisiti().Where(r => r.Requisito == rp.Requisito);
                        if (flag.Count() == 0)
                        {
                            rdl.AggiungiRequisito(rp);
                            requisitiAggiunti.Add(rp);
                        }
                        else
                        {
                            //Aggiungo un requisito fittizio solo se il suo grado di valutazione è maggiore di quello presente
                            if ((int)rp.GradoDiValutazione > (int)flag.ElementAt(0).GradoDiValutazione)
                            {
                                rdl.RimuoviRequisito(flag.ElementAt(0));
                                rdl.AggiungiRequisito(rp);
                                requisitiAggiunti.Add(rp);
                                requisitiModificati.Add(flag.ElementAt(0));
                            }
                        }
                    }
                    break;
                }
            }

            foreach (OffertaDiLavoro off in offerte)
            {
                Dictionary <DocumentoGenerico, int> graduatoriaOffNesima = this.GraduatoriaGenerale(off, richieste);
                //ottengo il mio punteggio
                int mioPunteggio = graduatoriaOffNesima[documento];
                //attraverso una query ottengo la mia posizione in graduatoria
                int position = (int)(from g in graduatoriaOffNesima select g).LongCount(g => g.Value > mioPunteggio);
                //formo la graduatoria da restituire
                graduatoriaRichiesta.Add(off, position + 1);
            }

            // Elimino i requisiti fittizi aggiunti
            foreach (RequisitoPersonale ra in requisitiAggiunti)
            {
                richiestaDaElaborare.RimuoviRequisito(ra);
            }
            //Riaggiungo i vecchi requisiti che sono stati modificati
            foreach (RequisitoPersonale rm in requisitiModificati)
            {
                richiestaDaElaborare.AggiungiRequisito(rm);
            }

            //ordino la graduatoria da restituire
            return(OrderGraduatoria(graduatoriaRichiesta, false));
        }