public void AddRetribuzione(RetribuzioneMansione retribuzione) { #region Vecchio Algoritmo di elmininazione delle inclusioni //List<RetribuzioneMansione> eliminareTemp=new List<RetribuzioneMansione>(); //foreach (RetribuzioneMansione singoleRetribuzioni in Retribuzioni) //{ // if (singoleRetribuzioni.DataInizioValidita.CompareTo(retribuzione.DataInizioValidita) >= 0 && // singoleRetribuzioni.DataFineValitida.CompareTo(retribuzione.DataFineValitida) <= 0) // eliminareTemp.Add(singoleRetribuzioni); //} //foreach (RetribuzioneMansione singoleRetribuzioni in eliminareTemp) //{ // RemoveRetribuzione(singoleRetribuzioni); //} #endregion if (retribuzione == null) { throw new ArgumentException("retribuzione == null"); } // Elimina tutte le retribuzioni incluse, estremi inclusi if (Retribuzioni.RemoveAll(singoleRetribuzioni => singoleRetribuzioni.DataInizioValidita >= retribuzione.DataInizioValidita && singoleRetribuzioni.DataFineValitida <= retribuzione.DataFineValitida) == 0) { /* Se la retribuzione NON includeva nessuna retribuzione, allora vi è la possibilita che * sia essa inclusa in una preesistente, quindi ciclo su tutte le retribuzioni * fino a trovarne una che la include completamente, estremi esclusi, * e la spezza e si inserisce * Gli estremi sono ESCLUSI per non causare errori di ArgumentOutOfRangeException:DateTime*/ foreach (RetribuzioneMansione singoleRetribuzioni in Retribuzioni) { if (singoleRetribuzioni.DataInizioValidita < retribuzione.DataInizioValidita && singoleRetribuzioni.DataFineValitida > retribuzione.DataFineValitida) { Retribuzioni.Add(new RetribuzioneMansione(retribuzione.DataFineValitida.AddMilliseconds(1), singoleRetribuzioni.DataFineValitida, singoleRetribuzioni.Compenso)); singoleRetribuzioni.DataFineValitida = retribuzione.DataInizioValidita.AddMilliseconds(-1); break; } } } /* Se la retribuzione inizia in una retribuzione e finisci in un'altra * queste istruzioni modificano le date di inizio e fine delle retribuzioni * nella quale la ritribuzione passata si inserisce e le modifica * se la retribuzione passata ha impostato MaxValue o MinValue, ed esiste già una retribuzione * preesistente con quei valori, il programma non fallisce grazie all'istruzione di controllo*/ RetribuzioneMansione lastTemp = GetRetribuzione(retribuzione.DataFineValitida); if (lastTemp != null && retribuzione.DataFineValitida != DateTime.MaxValue) { lastTemp.DataInizioValidita = retribuzione.DataFineValitida.AddMilliseconds(1); } RetribuzioneMansione firstTemp = GetRetribuzione(retribuzione.DataInizioValidita); if (firstTemp != null && retribuzione.DataInizioValidita != DateTime.MinValue) { firstTemp.DataFineValitida = retribuzione.DataInizioValidita.AddMilliseconds(-1); } // Dopo aver apportato tutte le modifiche alle retribuzioni, // inserisco la retribuzione fornita. Retribuzioni.Add(retribuzione); Retribuzioni.Sort(new RetribuzioneMansioneComparer()); }
private bool RemoveRetribuzione(RetribuzioneMansione retribuzione) { return(Retribuzioni.Remove(retribuzione)); }
public Mansione(Qualifica incarico, Servizio servizio) { _incarico = incarico; _servizio = servizio; Retribuzioni.Add(new RetribuzioneMansione(DateTime.MinValue, DateTime.MaxValue, 0)); }