/// <summary>
        /// Procedura genereaza situatia lunara unui angajat care a fost lichidat
        /// </summary>
        public void GenerareSituatieLunaraAngajatLichidat()
        {
            Salaries.Business.Angajat angajat = new Salaries.Business.Angajat();
            angajat.AngajatId = AngajatID;
            angajat.LoadAngajat();

            //este obtinuta prima zi a lunii active
            Salaries.Business.Luni luna       = new Salaries.Business.Luni(angajat.AngajatorId, settings);
            Salaries.Data.LunaData lunaActiva = luna.GetLunaActiva();

            Salaries.Business.PontajAngajat pontajAngajat = new Salaries.Business.PontajAngajat(this.AngajatID, settings);

            DataSet dsIntervaleAngajat = pontajAngajat.GetIntervaleAngajat(lunaActiva.LunaId);

            //daca nu au fost initializate orele unui angajat, se face aceasta initializare
            if (dsIntervaleAngajat.Tables[0].Rows.Count == 0)
            {
                //intervale angajat
                IntervaleAngajat intervAng = new IntervaleAngajat(AngajatID, settings);

                //sunt intializate orele lucrate de catre angajat
                intervAng.InitializeOreLucrateLunaAngajat(lunaActiva.Data, angajat.DataDeLa, angajat.DataLichidare);
            }

            //situatia lunara a unui angajat
            Salaries.Business.SituatieLunaraAngajat situatieLunaraAng = new Salaries.Business.SituatieLunaraAngajat(AngajatID, settings);

            //se genereaza situatia lunara a angajatului
            situatieLunaraAng.GenerareSituatieLunaraAngajatLichidat(lunaActiva.LunaId, angajat.AngajatorId);
        }
        /// <summary>
        /// Procedura genereaza situatia lunara a unui angajat
        /// </summary>
        /// <param name="lunaID">Id-ul lunii pentru care se genereaza</param>
        /// <param name="angajatorID">Id-ul angajatorului</param>
        public void GenerareSituatieLunaraAngajat(int lunaID, int angajatorID)
        {
            //try
            //{
            Angajat angajat = new Angajat();

            angajat.AngajatId = AngajatID;
            angajat.LoadAngajat();

            PontajAngajat pa = new PontajAngajat(this.AngajatID, settings);

            Salaries.Data.InfoSituatieLunara isl = this.GetSituatieLunaraAngajat(this.AngajatID, lunaID);

            int nrZileLucratoareLunaTotal = pa.GetNrZileLuna(lunaID);

            TimeSpan nrOreTotaleLucrateLuna = pa.GetAngajatNrOreLucrateLuna(lunaID);

            int nrZileTotaleAbsentateLuna = pa.GetAngajatNrZileAbsenteTotalLuna(lunaID);

            Data.IntervaleSchimbariLuna [] intervSL = pa.GetIntervaleSchimbariLuna(lunaID);

            bool validareStergere = true;

            /*
             * Modified:    Cristina Raluca Muntean
             * Date:        1.09.2005
             * Description: Initial salariul si indemnizatia de conducere nu se puteau schimba decat pe data de 1 a lunii.
             * S-a revenit asupra acestei decizii si se doreste sa existe posibilitatea modificarii salariului de baza si
             * a indemnizatiei de conducere in orice zi a lunii. Va exista in continuare tot o singura situatie lunara, iar
             * salariul de baza si indemnizatia de conducere se vor calcula conform formulelei:
             * sumaRezultatat = suma perioada I/nr zile lucratoare*nr zile lucrate in perioada + suma perioada II/nr zile lucratoare*nr zile lucrate in perioada +...
             *
             */
            int [] nrZileLucratoareLuna          = new int[intervSL.Length];
            int    nrZileEvenimenteDeosebiteLuna = 0;
            int    nrZileInvoireLuna             = 0;
            int    nrZileConcediuOdihnaLuna      = 0;

            float nrZileCOneefectuat   = 0;
            float nrZileCOefectInAvans = 0;

            int nrZileConcediuBoalaLuna      = 0;
            int nrZileConcediuBoalaLunaFirma = 0;
            int nrZileConcediuBoalaLunaBASS  = 0;

            int nrZileObligatiiCetatenesti = 0;
            int nrZileAbsenteNemotivate    = 0;
            int nrZileConcediuFaraPlata    = 0;

            int     nrZileLucratoareDelegatieInterna = 0;
            int     nrZileLucratoareDelegatieExterna = 0;
            decimal diurnaImpozabila            = 0;
            int     nrZileTotalDelegatieInterna = 0;
            int     nrZileTotalDelegatieExterna = 0;

            float nrOreLucrate         = 0;
            float nrOreSuplimentare50  = 0;
            float nrOreSuplimentare100 = 0;

            float [] salariuBaza           = new float[intervSL.Length];
            float [] indemnizatieConducere = new float[intervSL.Length];

            int nrZileEmergencyService = 0;

            int programLucru = 0;
            int invaliditate = 0;
            int categorieID  = 0;

            decimal angajatSporActivitateSupLuna = 0;
            decimal angajatEmergencyServiceLuna  = 0;
            decimal angajatPrimeSpecialeLuna     = 0;
            decimal angajatAlteDrepturiLuna      = 0;
            decimal angajatAlteDrepturiNetLuna   = 0;
            decimal angajatAjutorDeces           = 0;

            //S-au adaugat retinerile pentru un angajt
            decimal angajatAvansLuna            = 0;
            decimal angajatRetinere1            = 0;
            decimal angajatRetinere2            = 0;
            decimal angajatRetinere3            = 0;
            decimal angajatRetinere4            = 0;
            decimal angajatRetinere5            = 0;
            decimal angajatRetinere6            = 0;
            decimal angajatRetinere7            = 0;
            decimal angajatRegularizareLuna     = 0;
            decimal angajatPrimaProiectLuna     = 0;
            decimal angajatRetinereSanatateLuna = 0;
            decimal angajatDrepturiInNaturaLuna = 0;

            //Lungu Andreea
            float corectiiTicheteLuna = 0;

            int i = -1;

            foreach (Data.IntervaleSchimbariLuna interv in intervSL)
            {
                i++;

                nrZileLucratoareLuna[i] = pa.GetNrZileLucratoarePerioada(interv.DataStart, interv.DataEnd);

                TimeSpan nrOreLucrateLuna = pa.GetAngajatNrOreTipLucrate(interv.DataStart, interv.DataEnd, denumireOreLucrate[0]);

                TimeSpan nrOreSuplimentare50Luna  = pa.GetAngajatNrOreTipLucrate(interv.DataStart, interv.DataEnd, denumireOreLucrate[1]);
                TimeSpan nrOreSuplimentare100Luna = pa.GetAngajatNrOreTipLucrate(interv.DataStart, interv.DataEnd, denumireOreLucrate[2]);

                //tre facut pe intervale de timp si pt absente
                nrZileEvenimenteDeosebiteLuna += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[0]);
                nrZileInvoireLuna             += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[1]);
                nrZileConcediuOdihnaLuna      += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[2]) +
                                                 pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[11]);

                nrZileCOneefectuat   = isl.NrZileConcediuOdihnaNeefectuat;
                nrZileCOefectInAvans = isl.NrZileConcediuOdihnaEfectuatInAvans;

                nrZileConcediuBoalaLuna      += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[3]) + pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[4]);
                nrZileConcediuBoalaLunaFirma += pa.GetNrZileConcediuBoalaFirma(lunaID);
                nrZileConcediuBoalaLunaBASS  += pa.GetNrZileConcediuBoalaBASS(lunaID);

                nrZileObligatiiCetatenesti += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[5]);
                nrZileAbsenteNemotivate    += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[6]);
                nrZileConcediuFaraPlata    += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[7]);

                nrZileLucratoareDelegatieInterna += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[8]);
                nrZileLucratoareDelegatieExterna += pa.GetAngajatNrZileAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[9]);
                diurnaImpozabila             = isl.DiurnaImpozabila;
                nrZileTotalDelegatieInterna += pa.GetAngajatNrZileCuSarbatoriAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[8]);
                nrZileTotalDelegatieExterna += pa.GetAngajatNrZileCuSarbatoriAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[9]);

                nrZileEmergencyService += pa.GetAngajatNrZileCuSarbatoriAbsenteTipLuna(interv.DataStart, interv.DataEnd, codAbsente[10]);

                angajatSporActivitateSupLuna = isl.SporActivitatiSup;
                angajatEmergencyServiceLuna  = isl.EmergencyService;
                angajatPrimeSpecialeLuna     = isl.PrimeSpeciale;
                angajatAlteDrepturiLuna      = isl.AlteDrepturi;
                angajatAlteDrepturiNetLuna   = isl.AlteDrepturiNet;
                angajatAjutorDeces           = isl.AjutorDeces;

                angajatAvansLuna            = isl.Avans;
                angajatRetinere1            = isl.Retineri1;
                angajatRetinere2            = isl.Retineri2;
                angajatRetinere3            = isl.Retineri3;
                angajatRetinere4            = isl.Retineri4;
                angajatRetinere5            = isl.Retineri5;
                angajatRetinere6            = isl.Retineri6;
                angajatRetinere7            = isl.Retineri7;
                angajatRegularizareLuna     = isl.Regularizare;
                angajatPrimaProiectLuna     = isl.PrimaProiect;
                angajatRetinereSanatateLuna = isl.RetinereSanatate;
                angajatDrepturiInNaturaLuna = isl.DrepturiInNatura;

                nrOreLucrate         += nrOreLucrateLuna.Days * 24 + nrOreLucrateLuna.Hours + (float)nrOreLucrateLuna.Minutes / 60;
                nrOreSuplimentare50  += nrOreSuplimentare50Luna.Days * 24 + nrOreSuplimentare50Luna.Hours + (float)nrOreSuplimentare50Luna.Minutes / 60;
                nrOreSuplimentare100 += nrOreSuplimentare100Luna.Days * 24 + nrOreSuplimentare100Luna.Hours + (float)nrOreSuplimentare100Luna.Minutes / 60;

                //Lungu Andreea
                //nrTicheteLuna = isl.NrTichete;
                //daca angajatul e cu functia de baza aici si proportional cu programul de lucru
                //nrTicheteLuna = angajat.ProgramLucru * (nrOreLucrate - nrZileLucratoareDelegatieExterna - nrZileLucratoareDelegatieInterna) / 8;
                corectiiTicheteLuna = isl.CorectiiTichete;

                programLucru             = interv.ProgramLucru;
                salariuBaza[i]           = interv.SalariuBaza;
                indemnizatieConducere[i] = interv.IndemnizatieConducere;
                invaliditate             = interv.Invaliditate;
                categorieID = interv.CategorieID;
            }


            //este adaugata situatia lunara a angajatului in cauza
            Salaries.Data.InfoSituatieLunara x = new Salaries.Data.InfoSituatieLunara();

            x.SituatieID = -1;
            x.AngajatID  = this.AngajatID;
            x.LunaID     = lunaID;

            x.CategorieID  = categorieID;
            x.ProgramLucru = programLucru;
            //este calculat salariul de baza
            x.SalariuBaza = CalculSumaFinala(salariuBaza, nrZileLucratoareLuna, nrZileLucratoareLunaTotal);
            //este calculata indemnizatia de conducere
            x.IndemnizatieConducere = CalculSumaFinala(indemnizatieConducere, nrZileLucratoareLuna, nrZileLucratoareLunaTotal);
            x.Invaliditate          = invaliditate;

            x.NrZileLuna = CalculNrZileLucrate(nrZileLucratoareLuna);

            x.NrOreLucrate    = nrOreLucrate;
            x.NrOreSup50Proc  = nrOreSuplimentare50;
            x.NrOreSup100Proc = nrOreSuplimentare100;

            x.NrOreEvenimDeoseb   = nrZileEvenimenteDeosebiteLuna;
            x.NrOreInvoire        = nrZileInvoireLuna;
            x.NrOreConcediuOdihna = nrZileConcediuOdihnaLuna;

            x.NrZileConcediuOdihnaNeefectuat      = nrZileCOneefectuat;
            x.NrZileConcediuOdihnaEfectuatInAvans = nrZileCOefectInAvans;

            x.NrOreConcediuBoala      = nrZileConcediuBoalaLuna;
            x.NrOreConcediuBoalaFirma = nrZileConcediuBoalaLunaFirma;
            x.NrOreConcediuBoalaBASS  = nrZileConcediuBoalaLunaBASS;

            x.NrOreObligatiiCetatenesti = nrZileObligatiiCetatenesti;
            x.NrOreAbsenteNemotivate    = nrZileAbsenteNemotivate;
            x.NrOreConcediuFaraPlata    = nrZileConcediuFaraPlata;

            x.NrOreLucrateDelegatieInterna = nrZileLucratoareDelegatieInterna;
            x.NrOreLucrateDelegatieExterna = nrZileLucratoareDelegatieExterna;
            x.DiurnaImpozabila             = diurnaImpozabila;
            x.NrOreTotalDelegatieInterna   = nrZileTotalDelegatieInterna;
            x.NrOreTotalDelegatieExterna   = nrZileTotalDelegatieExterna;

            x.NrOreEmergencyService = nrZileEmergencyService;

            //Lungu Andreea - 31.08.2010
            //daca angajatul e cu functia de baza aici si proportional cu programul de lucru
            float nrOreLucrateFinal = x.NrOreLucrate + angajat.ProgramLucru * x.NrOreLucrateDelegatieInterna + angajat.ProgramLucru * x.NrOreLucrateDelegatieExterna;

            if (angajat.ModIncadrare == 0)
            {
                x.NrTichete = angajat.ProgramLucru * (nrOreLucrateFinal / angajat.ProgramLucru - x.NrOreLucrateDelegatieExterna - x.NrOreLucrateDelegatieInterna) / 8;
            }
            else
            {
                x.NrTichete = 0;
            }
            x.CorectiiTichete = corectiiTicheteLuna;
            //nr total tichete
            x.NrTotalTichete = (int)Math.Ceiling(x.NrTichete + x.CorectiiTichete);
            if (x.NrTotalTichete < 0)
            {
                //x.NrTotalTichete = (int) Math.Ceiling(x.NrTichete);
                x.NrTotalTichete = 0;
            }

            x.SporActivitatiSup = Convert.ToDecimal(angajatSporActivitateSupLuna);
            x.EmergencyService  = Convert.ToDecimal(angajatEmergencyServiceLuna);
            x.PrimeSpeciale     = Convert.ToDecimal(angajatPrimeSpecialeLuna);
            x.AlteDrepturi      = Convert.ToDecimal(angajatAlteDrepturiLuna);
            x.AlteDrepturiNet   = Convert.ToDecimal(angajatAlteDrepturiNetLuna);
            x.AjutorDeces       = Convert.ToDecimal(angajatAjutorDeces);

            x.Avans            = Convert.ToDecimal(angajatAvansLuna);
            x.Retineri1        = Convert.ToDecimal(angajatRetinere1);
            x.Retineri2        = Convert.ToDecimal(angajatRetinere2);
            x.Retineri3        = Convert.ToDecimal(angajatRetinere3);
            x.Retineri4        = Convert.ToDecimal(angajatRetinere4);
            x.Retineri5        = Convert.ToDecimal(angajatRetinere5);
            x.Retineri6        = Convert.ToDecimal(angajatRetinere6);
            x.Retineri7        = Convert.ToDecimal(angajatRetinere7);
            x.Regularizare     = Convert.ToDecimal(angajatRegularizareLuna);
            x.PrimaProiect     = Convert.ToDecimal(angajatPrimaProiectLuna);
            x.RetinereSanatate = Convert.ToDecimal(angajatRetinereSanatateLuna);
            x.DrepturiInNatura = Convert.ToDecimal(angajatDrepturiInNaturaLuna);

            /*
             * Modified: Cristina Raluca Muntean
             * Date:     13.09.2005
             * A fost facuta aceasta modificare deoarece daca se lichida angajatul din prima zi, deci
             * nu se mai putea genera situatia lunara pe baza pontajului, atunci la adaugare era aruncata
             * o exceptie si ramanea vechea situatie.
             */

            //In cazul in care nu exista date pentru situatia lunara, aceasta se
            //sterge(aceasta se poate intampla daca a fost lichidat angajatul din prima zi a lunii).
            if ((x.NrZileLuna == 0) && (x.CategorieID == 0) && (x.ProgramLucru == 0))
            {
                this.DeleteSituatieAngajat(int.Parse(x.LunaID.ToString()), int.Parse(x.AngajatID.ToString()));
            }
            else
            {
                //Daca exista date pentru situatia lunara, atunci se sterge vechea situatie
                //lunara si se adauga situatia cu noile date.
                this.AddSituatieLunaraAngajat(x, validareStergere);
                validareStergere = false;
            }
            //}
            //catch
            //{}
        }