Exemplo n.º 1
0
        private async Task CreationApercu(IProgress <ProgressMessage> progress)
        {
            dateSemaine = (DateTime)_dataService.Jour;
            DataRow DtRow;
            string  StSQL;

            StSQL = "";
            DataSet DsTemp       = new DataSet();
            bool    ajoutVirgule = false;

            _ReportSource = new CRBordereauDeclaratif();

            DsBordereauDeclaratif DsBordereauDeclaratif = new DsBordereauDeclaratif();



            ///////////////////////////////////////////////////////////////////////////////////
            /////////////Table Agents///////////////////////////////////////////

            //////Création de la requete/////////////////
            StSQL        = "SELECT * FROM Agents WHERE Agents.Matricule IN (";
            ajoutVirgule = false;


            foreach (string s in Agents)
            {
                if (ajoutVirgule == true)
                {
                    StSQL += ",";
                }
                StSQL       += "'" + s + "'";
                ajoutVirgule = true;
            }
            StSQL += ")";


            oConnection = ClassLibraryProget.DataBase.OpenSqlServer(ParamGlobaux.ConnectionString);


            ////////remplissage du DsTemp///////////////
            try
            {
                DsTemp = ClassLibraryProget.DataBase.SELECTSqlServer(oConnection, "Agents", StSQL);
            }
            catch (SqlException exc)
            {
                System.Windows.MessageBox.Show("Lecture impossible des données de la table " + "Agents" + " " + exc.Message, "Erreur");
            }


            ////////remplissage du DsBordereauDeclaratif///////////////

            for (int i = 0; i < DsTemp.Tables[0].Rows.Count; i++)
            {
                DtRow = DsBordereauDeclaratif.Tables["Agents"].NewRow();
                for (int j = 0; j < DsTemp.Tables[0].Columns.Count; j++)
                {
                    DtRow[j] = DsTemp.Tables[0].Rows[i][j];
                }
                DsBordereauDeclaratif.Tables["Agents"].Rows.Add(DtRow);
            }


            ///////////////////////////////////////////////////////////////////////////////////
            /////////////Table Planning///////////////////////////////////////////



            /////Calcul du numéro de la semaine///////////
            CultureInfo ci = CultureInfo.CurrentCulture;

            weekOfYear = ci.Calendar.GetWeekOfYear(dateSemaine, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

            //////Création de la requete/////////////////
            StSQL        = "SELECT * FROM Planning WHERE Planning.Matricule IN (";
            ajoutVirgule = false;


            foreach (string s in Agents)
            {
                if (ajoutVirgule == true)
                {
                    StSQL += ",";
                }
                StSQL       += "'" + s + "'";
                ajoutVirgule = true;
            }
            StSQL += ") AND Planning.[Num semaine] = " + weekOfYear + " AND YEAR(Jour) = " + dateSemaine.Year;



            ////////remplissage du DsTemp///////////////
            try
            {
                DsTemp = ClassLibraryProget.DataBase.SELECTSqlServer(oConnection, "Planning", StSQL);
            }
            catch (SqlException exc)
            {
                MessageBoxResult _dialogResult = _dialogService.ShowMessageBox(this,
                                                                               "Lecture impossible des données de la table " + "Planning" + " " + exc.Message,
                                                                               "Erreur",
                                                                               MessageBoxButton.OK,
                                                                               MessageBoxImage.Error);
            }
            ///////////////////////si pas resultat///////////////////////////////////////////
            if (DsTemp.Tables[0].Rows.Count == 0)
            {
                MessageBoxResult _dialogResult = _dialogService.ShowMessageBox(this,
                                                                               "Aucun planning correspondant n'a été trouvé",
                                                                               "Erreur",
                                                                               MessageBoxButton.OK,
                                                                               MessageBoxImage.Error);

                _progress.Report(new ProgressMessage(100, "Finished", true));

                Reset();
                await Task.Delay(500);

                Close = true;
                return;
            }


            ////////////////////////Initialisation barre de progression//////////////////////////
            _progressMax = (Agents.Count * 1);
            int _progressValue = 0;


            ////////remplissage du DsBordereauDeclaratif///////////////

            for (int i = 0; i < DsTemp.Tables[0].Rows.Count; i++)
            {
                DtRow = DsBordereauDeclaratif.Tables["Planning"].NewRow();
                for (int j = 0; j < DsTemp.Tables[0].Columns.Count; j++)
                {
                    DtRow[j] = DsTemp.Tables[0].Rows[i][j];
                }
                DsBordereauDeclaratif.Tables["Planning"].Rows.Add(DtRow);
            }

            //////////////////Remplissage Annualisation/////////////////////////////////
            //////////////////////////////////////////////////////////////////////////

            List <Parametre>         Params   = new List <Parametre>();
            List <PeriodeModulation> Periodes = new List <PeriodeModulation>();
            List <Data> ListeData             = new List <Data>();

            ///compteur de tour de boucle//
            int k = 0;

            foreach (var item in Agents)
            {
                //////recherche parametre pour la methode PeriodesModulation//////////////////////////////////
                Params = await Parametres.GetParametresAsync(ParamGlobaux.ConnectionString, ParamGlobaux.IDEtablissement, item,
                                                             new List <string> {
                    "Durée maxi CDD court"
                });

                int DureeMaxCDDCourt = Convert.ToInt32(Params.Single(p => p.Name == "Durée maxi CDD court").Value);

                /////////////////////////////recherche des périodes de modulation/////////////////////////////////////////////


                Periodes = await gestion.PeriodesModulation(ParamGlobaux.ConnectionString, item, dateSemaine, DureeMaxCDDCourt);



                ////////////////////////////Création liste Data Matricule + tempbase///////////////////////////////////////////////////

                foreach (var z in Periodes)
                {
                    if (z.EnCours == true)
                    {
                        ListeData.Add(new Data(item, z.TempsBase, z.Regime));
                    }
                }

                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }

            ////////////////////////////////////Remplissage DsBordereauDeclaratif//////////////////////////////////////////////

            foreach (var x in ListeData)
            {
                k = 0;

                foreach (DataRow DtRowBD in DsBordereauDeclaratif.Tables["Planning"].Rows)
                {
                    if (DsBordereauDeclaratif.Tables["Planning"].Rows[k]["Matricule"].ToString() == x.Matricule)
                    {
                        DsBordereauDeclaratif.Tables["Planning"].Rows[k]["Annualisation"] = x.TempBase;
                        DsBordereauDeclaratif.Tables["Planning"].Rows[k]["Regime"]        = x.Regime;
                    }
                    k++;
                }
            }


            // =======================================================================================================================================
            // Définir une structure de données temps de travail pour les calculs
            // =======================================================================================================================================
            ClassGetMS.TpsDeTravail TempsTravail;
            List <Data>             listeCalcul = new List <Data>();
            List <DateTime>         Jours       = new List <DateTime>();

            for (int i = 0; i < 7; i++)
            {
                Jours.Add(dateSemaine);

                dateSemaine = dateSemaine.AddDays(1);
            }



            DateTime dateValue  = new DateTime(1900, 1, 1, 0, 0, 0);
            DateTime dateValue1 = new DateTime(1900, 1, 1, 0, 0, 0);

            foreach (var item in Agents)
            {
                foreach (var d in Jours)
                {
                    TempsTravail = await ClassGetMS.TempsTravail.CalculTpsTravail(ParamGlobaux, item, d, d, ParamGlobaux.IDEtablissement, "", "");

                    listeCalcul.Add(new Data(item, ((TempsTravail.TpsTravailEffectif + TempsTravail.TpsTravailAssimilé + TempsTravail.TpsRéparti) / (double)60.00m), TempsTravail.HeuresAbsencesRémunérées, d));
                }
            }



            foreach (DataRow DtRowBD in DsBordereauDeclaratif.Tables["Planning"].Rows)
            {
                Data jour = listeCalcul.SingleOrDefault(l => l.Matricule == DtRowBD["Matricule"].ToString() && l.Jour == Convert.ToDateTime(DtRowBD["Jour"]));
                if (jour != null)
                {
                    DtRowBD["Temp de travail"] = jour.TempTravail;
                    DtRowBD["Abs"]             = jour.Abs;
                }
            }

            //////////Prévisionnel en string////////////


            if (previsionnel.ToString() == "Oui")
            {
                stringPrevisionnel = "Prévisionnel";
            }
            else
            {
                stringPrevisionnel = "";
            }

            if (entete == null)
            {
                entete = "";
            }


            _ReportSource.SetDataSource(DsBordereauDeclaratif);

            ///////////Nom Etablissement/////////////////////////////
            string NomEtablissement;

            NomEtablissement = ParamGlobaux.Etablissement.ToString();

            TextObject Commentaire;
            TextObject Previsionnel;
            TextObject Etablissement;

            if ((_ReportSource.ReportDefinition.ReportObjects["Text3"] != null) &&
                (_ReportSource.ReportDefinition.ReportObjects["Text4"] != null) &&
                (_ReportSource.ReportDefinition.ReportObjects["Text6"] != null))
            {
                Commentaire        = (TextObject)_ReportSource.ReportDefinition.ReportObjects["Text3"];
                Commentaire.Text   = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(entete.ToString());
                Previsionnel       = (TextObject)_ReportSource.ReportDefinition.ReportObjects["Text4"];
                Previsionnel.Text  = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(stringPrevisionnel.ToString());
                Etablissement      = (TextObject)_ReportSource.ReportDefinition.ReportObjects["Text6"];
                Etablissement.Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(NomEtablissement.ToString());
            }

            RaisePropertyChanged("ReportSource");
        }
        private async Task CreationApercu(IProgress <ProgressMessage> progress)
        {
            _ReportSource = new CRRecapReposConges();
            DataSet DsTemp = new DataSet();

            oConnection = ClassLibraryProget.DataBase.OpenSqlServer(_dataService.ParamGlobaux.ConnectionString);
            DsRecapReposConges DsRecapReposConges = new DsRecapReposConges();


            ////////////////////////Initialisation barre de progression//////////////////////////
            _progressMax = (ListAgents.Count() * 5);
            int _progressValue = 0;

            #region Remplissage du DataSet Agents
            //Remplissage du DataSet Agents

            foreach (AgentModel ag in ListAgents)
            {
                if (ag.Typecontrat != null)
                {
                    DsRecapReposConges.Tables["Agents"].Rows.Add(ag.Matricule, ag.Mail, ag.Nom, ag.Prenom, ag.IDService, ag.IDSection, ag.IDEmploi,
                                                                 ag.IDFiliere, ag.Typecontrat, ag.DebutContrat, ag.FinContrat);
                }
                else
                {
                    DsRecapReposConges.Tables["Agents"].Rows.Add(ag.Matricule, ag.Mail, ag.Nom, ag.Prenom, ag.IDService, ag.IDSection, ag.IDEmploi,
                                                                 ag.IDFiliere, "", ag.DebutContrat, ag.FinContrat);
                }


                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }
            #endregion

            #region Remplissage du DataSet PeriodeModulation
            //remplissage du DataSet PeriodeModulation

            PeriodeModulation pTemp = new PeriodeModulation();

            DureeMaxCDDCourt = Convert.ToInt32(Parametres.RechercherParametres(oConnection, ParamGlobaux.IDEtablissement, "", "Durée maxi CDD court"));

            foreach (AgentModel ag in ListAgents)
            {
                listPeriodseModulation = await gestion.PeriodesModulation(ParamGlobaux.ConnectionString, ag.Matricule, PeriodeModulation.Debut, DureeMaxCDDCourt);

                pTemp = listPeriodseModulation.Where(pm => pm.EnCours == true).SingleOrDefault();

                DsRecapReposConges.Tables["PeriodeModulation"].Rows.Add(ag.Matricule, pTemp.Debut, pTemp.Fin, pTemp.TypeContrat, pTemp.IdContrat,
                                                                        pTemp.TempsBase, pTemp.Regime, pTemp.IDEtablissement, pTemp.EnCours);

                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }
            #endregion

            #region Remplissage DataSet CongesDroits

            List <Parametre> Params = new List <Parametre>();

            List <TypesJours> typesJours = new List <TypesJours>();
            var   taskTypeJour           = _dataService.GetTypesJoursAsync();
            await taskTypeJour;
            typesJours = taskTypeJour.Result.ToList();
            int    DroitCPA;
            double DroitRCNuit;
            double DroitRCC;
            int    DroitCESS;

            StrucRTT DroitRTT = new StrucRTT();

            foreach (AgentModel ag in ListAgents)
            {
                ParamGlobaux.StMatricule = ag.Matricule;
                Params = await Parametres.GetParametresAsync(_dataService.ParamGlobaux.ConnectionString, _dataService.ParamGlobaux.IDEtablissement, ag.Matricule,
                                                             new List <string> {
                    "Congés en jours ouvrés",
                    "Début periode de prise congés",
                    "Durée maxi Contrat court CPA",
                    "Durée carence CPA",
                    "Jours Congés Ouvrables",
                    "Jours Congés Ouvrés",
                    "Durée pause avec Repas",
                    "Durée pause sans Repas",
                    "Valorisation CPA",
                    "Valorisation CA",
                    "Base hebdomadaire",
                    "Durée maxi CDD court",
                    "Année Calcul N-1 RCN",
                    "Convention collective",
                    "Forfait RC Nuit",
                    "Taux RC Nuit",
                    "Heure début nuit",
                    "Heure fin nuit",
                    "Heure début nuit AT",
                    "Heure fin nuit AT",
                    "Forfait RCC",
                    "Durée Repos Quotidien",
                    "Ouverture droit coupure",
                    "Année Calcul N-1 RCC"
                });

                DroitCPA = await TempsTravail.CalculDroitCPA(ParamGlobaux, PeriodeModulation.Debut, Params, true);

                DroitRCNuit = (await TempsTravail.CalculDroitRCNuitH(ParamGlobaux, Params, typesJours, PeriodeModulation.Debut, PeriodeModulation.Fin)) / 60;

                DroitRCC = await TempsTravail.CalculDroitRCC(ParamGlobaux, typesJours, PeriodeModulation.Debut, PeriodeModulation.Fin);

                DroitCESS = await TempsTravail.CalculDroitCESS(ParamGlobaux, typesJours, PeriodeModulation.Debut);

                DroitRTT = await TempsTravail.CalculDroitRTT(ParamGlobaux, PeriodeModulation.Debut, PeriodeModulation.Fin);

                DsRecapReposConges.Tables["CongesDroits"].Rows.Add(ag.Matricule, DroitCPA, DroitRCNuit, DroitRCC, DroitCESS, DroitRTT.DbDroitRTT);

                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }



            #endregion

            #region Remplissage DataSet CongesPris

            await taskTypeJour;
            typesJours = taskTypeJour.Result.ToList();
            int    PrisCPA;
            int    PrisCA;
            int    TotalCPACA;
            double PrisRCNuit;
            double PrisRCC;
            int    PrisCESS;

            double PrisRTT;

            foreach (AgentModel ag in ListAgents)
            {
                ParamGlobaux.StMatricule = ag.Matricule;
                Params = await Parametres.GetParametresAsync(_dataService.ParamGlobaux.ConnectionString, _dataService.ParamGlobaux.IDEtablissement, ag.Matricule,
                                                             new List <string> {
                    "Congés en jours ouvrés",
                    "Début periode de prise congés",
                    "Durée maxi Contrat court CPA",
                    "Durée carence CPA",
                    "Jours Congés Ouvrables",
                    "Jours Congés Ouvrés",
                    "Durée pause avec Repas",
                    "Durée pause sans Repas",
                    "Valorisation CPA",
                    "Valorisation CA",
                    "Base hebdomadaire",
                    "Durée maxi CDD court",
                    "Année Calcul N-1 RCN",
                    "Convention collective",
                    "Forfait RC Nuit",
                    "Taux RC Nuit",
                    "Heure début nuit",
                    "Heure fin nuit",
                    "Heure début nuit AT",
                    "Heure fin nuit AT",
                    "Forfait RCC",
                    "Durée Repos Quotidien",
                    "Ouverture droit coupure",
                    "Année Calcul N-1 RCC"
                });

                (PrisCPA, PrisCA) = await TempsTravail.CalculPrisCPA(_dataService.ParamGlobaux.ConnectionString, _dataService.ParamGlobaux.IDEtablissement, ag.Matricule, PeriodeModulation.Debut);

                TotalCPACA = PrisCPA + PrisCA;

                PrisRCNuit = await TempsTravail.CalculPrisRCNuit(ParamGlobaux, typesJours, Params, PeriodeModulation.Debut, PeriodeModulation.Fin);

                PrisRCC = await TempsTravail.CalculGenreH(ParamGlobaux, typesJours, Params, "13", PeriodeModulation.Debut, PeriodeModulation.Fin);

                PrisCESS = TempsTravail.CalculPrisCESS(ParamGlobaux, PeriodeModulation.Debut, PeriodeModulation.Fin);

                PrisRTT = TempsTravail.CalculGenreJ(_dataService.ParamGlobaux.ConnectionString, ag.Matricule, "30", PeriodeModulation.Debut, PeriodeModulation.Fin);

                DsRecapReposConges.Tables["CongesPris"].Rows.Add(ag.Matricule, TotalCPACA, PrisRCNuit, PrisRCC, PrisCESS, PrisRTT);

                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }

            #endregion



            #region Remplissage DataSet RcFeries

            ObservableCollection <RCFerie> RCFeries;
            IEnumerable <JourFerieW>       ListRCFerie;
            DataSet  DsRCFeriePris;
            DateTime d = new DateTime(1900, 01, 01);

            foreach (AgentModel ag in ListAgents)
            {
                ParamGlobaux.StMatricule = ag.Matricule;
                Params = await Parametres.GetParametresAsync(_dataService.ParamGlobaux.ConnectionString, _dataService.ParamGlobaux.IDEtablissement, ag.Matricule,
                                                             new List <string> {
                    "Congés en jours ouvrés",
                    "Début periode de prise congés",
                    "Durée maxi Contrat court CPA",
                    "Durée carence CPA",
                    "Jours Congés Ouvrables",
                    "Jours Congés Ouvrés",
                    "Durée pause avec Repas",
                    "Durée pause sans Repas",
                    "Valorisation CPA",
                    "Valorisation CA",
                    "Base hebdomadaire",
                    "Durée maxi CDD court",
                    "Année Calcul N-1 RCN",
                    "Convention collective",
                    "Forfait RC Nuit",
                    "Taux RC Nuit",
                    "Heure début nuit",
                    "Heure fin nuit",
                    "Heure début nuit AT",
                    "Heure fin nuit AT",
                    "Forfait RCC",
                    "Durée Repos Quotidien",
                    "Ouverture droit coupure",
                    "Année Calcul N-1 RCC"
                });

                ListRCFerie = await TempsTravail.CalculFeriesAgent(ParamGlobaux, typesJours, PeriodeModulation.Debut, PeriodeModulation.Fin);


                RCFeries = await _dataService.GetHistoriqueRCFAsync(PeriodeModulation.Debut, PeriodeModulation.Fin);

                foreach (RCFerie rc in RCFeries)
                {
                    ListRCFerie = ListRCFerie.Where(a => a.Date != rc.JourFerie);
                }
                if (ListRCFerie != null)
                {
                    foreach (var item in ListRCFerie)
                    {
                        RCFerie temp = new RCFerie(d, item.Date, item.NbHeuresW);
                        RCFeries.Add(temp);
                    }
                }

                ObservableCollection <RCFerie> RCFeries2 = new ObservableCollection <RCFerie> (RCFeries.OrderBy(a => a.JourFerie));


                if (RCFeries2.Count() > 0)
                {
                    foreach (RCFerie RCF in RCFeries2)
                    {
                        if (RCF.JourFerie != null && RCF.RCF != d)
                        {
                            DsRecapReposConges.Tables["RcFeries"].Rows.Add(ag.Matricule, Convert.ToDateTime(RCF.JourFerie).ToShortDateString(), RCF.NbHeures.ToString(@"hh\:mm"), RCF.RCF.ToShortDateString(), RCF.NbHeuresRCF.ToString(@"hh\:mm"));
                        }
                        else if (RCF.JourFerie == null && RCF.JourFerie != d)
                        {
                            DsRecapReposConges.Tables["RcFeries"].Rows.Add(ag.Matricule, "", RCF.NbHeures.ToString(@"hh\:mm"), RCF.RCF.ToShortDateString(), RCF.NbHeuresRCF.ToString(@"hh\:mm"));
                        }
                        else
                        {
                            DsRecapReposConges.Tables["RcFeries"].Rows.Add(ag.Matricule, Convert.ToDateTime(RCF.JourFerie).ToShortDateString(), RCF.NbHeures.ToString(@"hh\:mm"), "", "");
                        }
                    }
                }
                else
                {
                    DsRecapReposConges.Tables["RcFeries"].Rows.Add(ag.Matricule, "", "", "", "");
                }

                _progressValue++;
                _progress.Report(new ProgressMessage((_progressValue * 100) / _progressMax, "Création de l'aperçu...", false));
            }

            #endregion


            _ReportSource.SetDataSource(DsRecapReposConges);

            RaisePropertyChanged("ReportSource");
        }