Untitled

 avatar
unknown
plain_text
9 months ago
34 kB
4
Indexable
PROCÉDURE Calculer_Totaux_Action(nIDAction = 0, bTypeRetour est un booléen = gbRetourAffichage)

nDuree			est un entier sur 4 octets
//	Valeur est un réel		//Remplacé par BudgetTotal
Val_e			est un réel
Val_c			est un réel
Tmp1			est un réel
Tmp2			est un réel
nNumMois		est un entier

nAnnee			est un entier		// Année de travail (Entier)
sAnnee 			est une chaîne		// Année de travail (Chaine)

// Calcul du Budget Mensuel et Annuel
BudgetTotal		est un réel
Unite			est un réel

FDMois			est un tableau de 12 chaînes		// Tableau du nombre de jour max par mois

// Budget Mensuel
BudgetMois2		est un tableau de 13 réels	//#CestQuoi --> Budget ??		// 12 mois + le Total en position 13
BudgetMois1		est un tableau de 13 réels	//#CestQuoi --> Heure Produite Personnel ??		// 12 mois + le Total en position 13
BudgetMois3		est un tableau de 13 réels	//#CestQuoi --> Charge Personnel ??		// 12 mois + le Total en position 13

// Budget Mensuel Cumulé
_BudgetMois2_Cum		est un tableau de 13 réels	//#CestQuoi --> Budget ??		// 12 mois + le Total en position 13
_BudgetMois1_Cum		est un tableau de 13 réels	//#CestQuoi --> Heure Produite Personnel ??		// 12 mois + le Total en position 13
_BudgetMois3_Cum		est un tableau de 13 réels	//#CestQuoi --> Charge Personnel ??		// 12 mois + le Total en position 13

bCalculDuree est un booléen = Faux
R1 est une Source de Données

// Pour les calculs
_Total_UO_Centre est un réel
_Total_UO_Entreprise est un réel

//'montant total centre
_Montant_Centre est un réel
_Montant_Entreprise est un réel

// Total heures prévues
_Total_UO_Centre_Prevision est un réel
_Total_UO_Entreprise_Prevision est un réel

// Montant total centre + entreprise
_Total est un réel
_Total_Prevision est un réel

// Montant total sur l'exercice
_Total_Exercice est un réel

// Montant total des autres charges
_Total_IntervennantExterieur est un réel
_Total_AutreCharge est un réel

// Ratios de gestion
_Ratio_MasseSalariale_CA est un réel
_Ratio_Total_Salaire est un réel
_Ratio_Charge est un réel
_Ratio_Rentabilité est un réel

// Cumul du Budget Annuel
_Total_Exercice_Cum					est un réel

// Cumul Montant total Centre + Entreprise
_Total_Cum							est un réel
_Total_Prevision_Cum				est un réel

// Cumul Montant total des Autres Charges
_Total_IntervennantExterieur_Cum	est un réel
_Total_AutreCharge_Cum				est un réel

<BLOC Déclaration Formateur>
	
	// Données Formateur
	_NbConseil							est un réel					//Fichier
	_Hrs_Intervenant					est un réel					//Fichier
	_Nb_Hrs_Stagiaires					est un réel					//Fichier
	_Total_CBL							est un réel
	_Nb_CMI								est un réel					//Fichier
	_Nb_CMI_Necessaire					est un réel
	_Nb_Stag_Gpe						est un réel					//Fichier
	_Nb_FAF								est un réel
	_Nb_Hrs_Accueil						est un réel
	_Nb_Formateurs						est un réel
	
	// Montant Total Formateur
	_Total_Formateur					est un réel
	_Cout_Total_Formateur				est un réel
	_Cout_Total_Formateur_Actualise		est un réel
	
	// Cumul des Montants Total Formateur
	_Total_Formateur_Cum				est un réel
	_Cout_Total_Formateur_Cum			est un réel
	_Cout_Total_Formateur_Actualise_Cum	est un réel
<FIN>


// Affecte l'année de travail qui a été sélectionné
nAnnee = Val(gSTPerimetreEnCours.sNomAnnee)
sAnnee = gSTPerimetreEnCours.sNomAnnee

// recherche le nombre de jour max de chaque mois 
POUR nNumMois = 1 _À_ 12
	FDMois[nNumMois] = Droite(DernierJourDuMois(nAnnee, nNumMois), 2)
FIN

//#AFaire Le contrôle des dates pour empécher le calcul

//SI HAlias(REQ_LitDonneeCalculAction, R1) = Vrai ALORS

	//TraceT("Combo_Annee Fin Init : " + COMBO_Annee + "-" + gSTPerimetreEnCours.sNomAnnee + "-" + COMBO_Annee..ValeurMémorisée )
	REQ_LitDonneeCalculAction.ParamIdAction = nIDAction
	SI REQ_LitDonneeCalculAction.ExécuteRequête() = Vrai ALORS
		REQ_LitDonneeCalculAction.LitPremier(action_idaction)
		TANTQUE REQ_LitDonneeCalculAction.EnDehors() = Faux		// Balaye toutes les sous-actions d'une action

			//#AFaire prévoir le cas ou les constantes ne sont pas trouvé dans la REQ_LitDonneeCalculAction

			<BLOC Vérification Dates>
				SI gbControleDateValide = Faux ALORS
					
					bVerifDate est un booléen = Vrai
					
					SELON Verifie_Date(REQ_LitDonneeCalculAction.action_date_debut, REQ_LitDonneeCalculAction.action_date_fin)
						CAS Faux:		//Les dates sont inversés
							//Info("Erreur de date, la durée de l'action ne peux être négative.")	//#Message Popup Erreur
							bVerifDate = Faux
							
						CAS -1:			//Une des eux dates est vide
							//Info("Une des deux dates est vide.")	//#Message Popup Erreur
							bVerifDate = Faux
							
						AUTRE CAS
							//'total heures prévues
							SI REQ_LitDonneeCalculAction.action_date_fin <= ChaîneVersDate("01/01/" + sAnnee) ALORS		//		If .txt_date_fin <= CDate("01/01/" & Trim(str(.txt_exercice))) Then
								//Info("Action terminée.")	//#Message Popup Erreur
								bVerifDate = Faux
							FIN
							
					FIN
					
					gbControleDateValide = Vrai
					
					// Vérifie si le contrôle a déjà été fait
					SI bVerifDate = Faux ALORS
						// Affichage des cellule Totalisation Générale et Ratio Général à zéro
						SI bTypeRetour = gbRetourAffichage ALORS
							// Affichage des données dans la cellule Totalisation Générale et Ratio Général
							SAI_Action_Total						= 0
							SAI_Action_Total_Exercice				= 0
							SAI_Action_Total_Prevision				= 0
							SAI_Action_Total_IntervennantExterieur	= 0
							SAI_Action_Total_AutreCharge			= 0
							
							SAI_Action_Ratio_MasseSalariale_CA		= 0
							SAI_Action_Ratio_Total_Salaire			= 0
							SAI_Action_Ratio_Charge					= 0
							SAI_Action_Ratio_Rentabilité			= 0
						FIN

						//SI bTypeRetour = gbRetourParametre ALORS
							RENVOYER (	0, ...			//_Total_Cum, ...
								0, ...			//_Total_Exercice_Cum, ...
								0, ...			//_Total_Prevision_Cum, ...
								0, ...			//_Total_IntervennantExterieur_Cum, ...
								0, ...			//_Total_AutreCharge_Cum, ...
								0, ...			//_Ratio_MasseSalariale_CA, ...
								0, ...			//_Ratio_Total_Salaire, ...
								0, ...			//_Ratio_Charge, ...
								0, ...			//_Ratio_Rentabilité,...
								0, ...			//_BudgetMois2_Cum, ...			// --> Budget ??
								0, ...			//_BudgetMois1_Cum, ...			// --> Heure Produite Personnel ??
								0				//_BudgetMois3_Cum	 			// --> Charge Personnel ??
							)
						//FIN
				
						//RETOUR		//RETOUR et RENVOYER ne peuvent pas être dans la même procédure
					FIN
				FIN 
			<FIN>
		
			SI bCalculDuree	= Faux ALORS
				// Calcule de la durée de l'action
				SI (REQ_LitDonneeCalculAction.action_date_debut < ChaîneVersDate("01/08/" + sAnnee) ET REQ_LitDonneeCalculAction.action_date_fin > ChaîneVersDate("27/08/" + sAnnee)) ET REQ_LitDonneeCalculAction.action_saisonnalite = Faux ALORS
					nDuree = DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, REQ_LitDonneeCalculAction.action_date_fin) - 26
				SINON
					nDuree = DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, REQ_LitDonneeCalculAction.action_date_fin) + 1
				FIN
				bCalculDuree = Vrai
				//Tracet(nIDAction + " / nDuree : " + nDuree)
			FIN

			// Montant total d'Unité d'Oeuvre (UO)
			_Total_UO_Centre		= REQ_LitDonneeCalculAction.actiondetail_uo_stag_centre * REQ_LitDonneeCalculAction.action_nb_stagiaires
			_Total_UO_Entreprise	= REQ_LitDonneeCalculAction.actiondetail_uo_stag_entreprise * REQ_LitDonneeCalculAction.action_nb_stagiaires
			
			// Montant total Centre et Entreprise
			_Montant_Centre		= REQ_LitDonneeCalculAction.actiondetail_tarif_centre * _Total_UO_Centre
			_Montant_Entreprise	= REQ_LitDonneeCalculAction.actiondetail_tarif_entreprise * _Total_UO_Entreprise

			// Total des heures prévues
			_Total_UO_Centre_Prevision		= 0
			_Total_UO_Entreprise_Prevision	= 0
			
			SI REQ_LitDonneeCalculAction.action_date_debut < ChaîneVersDate("01/01/" + sAnnee) ALORS
				// Heures sur l'année dernière
				// Si la Date de début est sur l'année précédente
				// N'est pas pris dans le calcul
			SINON
				SI REQ_LitDonneeCalculAction.action_date_fin < ChaîneVersDate("01/01/" + NumériqueVersChaîne(nAnnee + 1)) ALORS
					// Si la Date de fin est sur l'année en cours
					_Total_UO_Centre_Prevision		= _Total_UO_Centre * REQ_LitDonneeCalculAction.action_situationproduit
					_Total_UO_Entreprise_Prevision	= _Total_UO_Entreprise * REQ_LitDonneeCalculAction.action_situationproduit
				SINON
					SI nDuree <> 0 ALORS
						// Si la Date de fin est sur l'année prochaine => Calcul au prorata de jour sur l'année en cours
						_Total_UO_Centre_Prevision		= (_Total_UO_Centre * REQ_LitDonneeCalculAction.action_situationproduit) * (DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate("01/01/" + NumériqueVersChaîne(nAnnee + 1))) / nDuree)
						_Total_UO_Entreprise_Prevision	= (_Total_UO_Entreprise * REQ_LitDonneeCalculAction.action_situationproduit) * (DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate("01/01/" + NumériqueVersChaîne(nAnnee + 1))) / nDuree)
					FIN
				FIN
			FIN

			//********************* TOTAUX ******************************************************
			// Montant total Centre + Entreprise
			_Total = _Montant_Centre + _Montant_Entreprise										//#Affichage Totalisation Générale "Montant Total" => SAI_Action_Total
			_Total_Prevision = _Total * REQ_LitDonneeCalculAction.action_situationproduit		//#Affichage Totalisation Générale "Montant Total Prévision" => SAI_Action_Total_Prevision
			
			// Montant total des Autres Charges
			_Total_IntervennantExterieur = REQ_LitDonneeCalculAction.total_charge_prestation
			_Total_AutreCharge = REQ_LitDonneeCalculAction.total_charge_autres
			
			// Calcul du Budget Mensuel et Annuel
			BudgetTotal	= 0
			_Total_Exercice = 0
			// Prévision de produit par jour
			Unite = (nDuree <> 0 ? (_Total_Prevision / nDuree) SINON 0 )

			POUR nNumMois = 1 À 12
				BudgetMois2[nNumMois] = 0
				
				SI REQ_LitDonneeCalculAction.action_date_debut > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) OU ...
					REQ_LitDonneeCalculAction.action_date_fin < ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS
					// Si Date de Début est supérieur au dernier jour du mois OU si Date de Fin est inférieur au 1er du mois
					BudgetTotal	= BudgetTotal + 0
					BudgetMois2[nNumMois] = 0
				SINON
					SI REQ_LitDonneeCalculAction.action_date_debut < ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) THEN
						//SI Date Début est inférieur au 1er du mois
						SI REQ_LitDonneeCalculAction.action_date_fin > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS
							// Si Date de fin est supérieur à la fin du mois (donc un mois complet)
							SI nNumMois = 8 ALORS	// Cas de la période estivale sur Août
								// Si le mois d'août
								SI REQ_LitDonneeCalculAction.action_saisonnalite = Faux ALORS
									// S'il y a de la saisonnalité on ne retient que 4 jours de prévision
									BudgetTotal	= BudgetTotal + (4 * Unite)
									BudgetMois2[nNumMois] = (4 * Unite)
								SINON
									// S'il n'y à pas de saisonnalité (Mois complet)
									BudgetTotal	= BudgetTotal + (Val(FDMois[nNumMois]) * Unite)
									BudgetMois2[nNumMois] = (Val(FDMois[nNumMois]) * Unite)
								FIN
							SINON
								// Pour les autres mois (Mois complet)
								BudgetTotal	= BudgetTotal + (Val(FDMois[nNumMois]) * Unite)
								BudgetMois2[nNumMois] = (Val(FDMois[nNumMois]) * Unite)
							FIN
						SINON
							// Si la date de fin est comprise dans le mois (Mois complet)
							BudgetTotal	= BudgetTotal + ((DateDifférence(ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee), REQ_LitDonneeCalculAction.action_date_fin) + 1) * Unite)
							BudgetMois2[nNumMois]	= ((DateDifférence(ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee), REQ_LitDonneeCalculAction.action_date_fin) + 1) * Unite)
						FIN			
					SINON
						//SI Date Début est supérieur ou égale au 1er du mois
						SI REQ_LitDonneeCalculAction.action_date_fin > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS  //#Question //#AVerifier le ">=" car il devrait-être juste ">"		
							// Si Date de Fin est supérieur ou égale à la fin du mois	
							//#AVerifier les calculs de Dates
							BudgetTotal	= BudgetTotal + ((DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee)) + 1) * Unite)
							BudgetMois2[nNumMois] = ((DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee)) + 1) * Unite)
						SINON
							// Si Date de Fin est inférieur à la fin de mois
							BudgetTotal	= BudgetTotal + _Total_Prevision  //#Verifier les résultats si ont applique à la place (Valeur = Valeur + ((.txt_date_fin) - (.txt_date_fin) + 1) * unite)			// 				Valeur			= Valeur + .txt_total_prev
							BudgetMois2[nNumMois] = _Total_Prevision      //#Verifier les résultats si ont applique à la place (mois2(I - 1) = ((.txt_date_fin) - (.txt_date_fin) + 1) * unite)			//					mois2(I - 1)	= .txt_total_prev
						FIN
					FIN
				FIN
						SI BudgetMois2[nNumMois] ALORS TraceT(nIDAction + " / BudgetMois2[" + nNumMois + "] : " + BudgetMois2[nNumMois])
				
				_BudgetMois2_Cum[nNumMois] = _BudgetMois2_Cum[nNumMois] + BudgetMois2[nNumMois]
						SI _BudgetMois2_Cum[nNumMois] ALORS TraceT(nIDAction + " / _BudgetMois2_Cum[" + nNumMois + "] : " + _BudgetMois2_Cum[nNumMois])
			FIN
			BudgetMois2[nNumMois] = BudgetTotal
						SI BudgetMois2[nNumMois] ALORS TraceT(nIDAction + " / BudgetMois2[" + nNumMois + "] : " + BudgetMois2[nNumMois])
			_BudgetMois2_Cum[nNumMois]	= _BudgetMois2_Cum[nNumMois] + BudgetTotal
				SI _BudgetMois2_Cum[nNumMois] ALORS TraceT(nIDAction + " / _BudgetMois2_Cum[" + nNumMois + "] : " + _BudgetMois2_Cum[nNumMois])
			
			_Total_Exercice				= BudgetTotal							//#Affichage "Total sur l'Exercice" => SAI_Action_Total_Exercie

			//Fin Fonction Calcul_Budget_Total_Exercice avec une valeur de retour BudgetTotal

			
			// Cumul du Budget Annuel
			_Total_Exercice_Cum = _Total_Exercice_Cum + _Total_Exercice								//#Affichage cellule Totalisation générale "Total Sur Exercice" => SAI_Action_Total_Exercice

			// Cumul Montant total Centre + Entreprise
			_Total_Cum							= _Total_Cum + _Total								//#Affichage cellule Totalisation générale "Montant Total" => SAI_Action_Total
			_Total_Prevision_Cum				= _Total_Prevision_Cum + _Total_Prevision			//#Affichage cellule Totalisation générale "Montant Total Prévu" => SAI_Action_Total_Prevision
			
			// Cumul Montant total des Autres Charges
			_Total_IntervennantExterieur_Cum	= _Total_IntervennantExterieur_Cum + _Total_IntervennantExterieur 		//#Affichage cellule Totalisation générale "Intervenant Extérieur" => SAI_Action_Total_IntervenantExterieur
			_Total_AutreCharge_Cum				= _Total_AutreCharge_Cum + _Total_AutreCharge							//#Affichage cellule Totalisation générale "Autres Charges" => SAI_Action_Total_AutreCharge

			
			///////////////////////
			// Calculs Formateur //
			///////////////////////
			<BLOC Formateur>
				_NbConseil			= REQ_LitDonneeCalculAction.actiondetail_nb_conseil
				_Hrs_Intervenant	= REQ_LitDonneeCalculAction.actiondetail_hrs_intervenant
				_Nb_Hrs_Stagiaires	= REQ_LitDonneeCalculAction.actiondetail_nb_hrs_stagiaires
				_Total_CBL			= 0
				_Nb_CMI				= REQ_LitDonneeCalculAction.actiondetail_nb_cmi
				_Nb_CMI_Necessaire	= 0
				_Nb_Stag_Gpe		= REQ_LitDonneeCalculAction.actiondetail_nb_stag_gpe
				_Nb_FAF				= 0
				_Nb_Hrs_Accueil		= 0
				_Nb_Formateurs		= 0
				
				
				SELON REQ_LitDonneeCalculAction.listeactivite_code
					CAS "4": //Suivi Démarche Qualité Fourre Tous
						SI REQ_LitDonneeCalculAction.action_situationcharge = 0 ALORS
							_NbConseil = 0
						SINON
							SI REQ_LitDonneeCalculAction.listefinancement_code = "1" ALORS
								// Si Financement Principal	
								SI REQ_LitDonneeCalculAction.constante_cout_moyen <> 0 ALORS
									_NbConseil = (_Total_Exercice * REQ_LitDonneeCalculAction.constante_ratio) / REQ_LitDonneeCalculAction.constante_cout_moyen
								FIN
							SINON
								// Cofinancement
								_NbConseil = 0
							FIN
						FIN
						_Hrs_Intervenant	= 0
						_Nb_Hrs_Stagiaires	= 0
						_Total_CBL			= 0
						_Nb_CMI				= 0
						_Nb_CMI_Necessaire	= 0
						_Nb_Stag_Gpe		= 0
						_Nb_FAF				= 0
						_Nb_Hrs_Accueil		= 0
						_Nb_Formateurs		= 0
						
						
					CASE "5": // Bilan de compétence
						SI REQ_LitDonneeCalculAction.action_situationcharge = 0 ALORS
							_Total_CBL = 0
						ELSE
							SI REQ_LitDonneeCalculAction.listefinancement_code = "1" ALORS
								// Si Financement Principal	
								SI _Hrs_Intervenant = 0	ALORS
									_Total_CBL = 0
								ELSE		
									SI _Nb_Hrs_Stagiaires <> 0 ET REQ_LitDonneeCalculAction.constante_nb_heures_tp <> 0 ALORS
										_Total_CBL = (_Total_UO_Centre_Prevision / _Nb_Hrs_Stagiaires) * (_Hrs_Intervenant / REQ_LitDonneeCalculAction.constante_nb_heures_tp)
									SINON
										_Total_CBL = 0		
									FIN
								FIN
							SINON
								_Total_CBL = 0
							FIN
						FIN
						_NbConseil			= 0
						_Nb_CMI				= 0
						_Nb_CMI_Necessaire	= 0
						_Nb_Stag_Gpe		= 0
						_Nb_FAF				= 0
						_Nb_Hrs_Accueil		= 0
						_Nb_Formateurs		= 0
						
					CAS "6": //Charge de Mission et d'Insertion
						SI REQ_LitDonneeCalculAction.action_situationcharge = 0 ALORS
							_Nb_CMI_Necessaire = 0
						ELSE
							SI REQ_LitDonneeCalculAction.listefinancement_code = "1" ALORS
								// Si Financement Principal	
								SI _Nb_CMI = 0 ALORS
									SI REQ_LitDonneeCalculAction.constante_cout_moyen <> 0 ALORS
										_Nb_CMI_Necessaire = (_Total_Exercice * REQ_LitDonneeCalculAction.constante_ratio) / REQ_LitDonneeCalculAction.constante_cout_moyen
									SINON
										_Nb_CMI_Necessaire = 0
									FIN
								SINON
									SI _Nb_CMI <> 0 ALORS
										_Nb_CMI_Necessaire = _Total_UO_Centre_Prevision / _Nb_CMI
									SINON
										_Nb_CMI_Necessaire = 0
									FIN
								FIN
							SINON
								//Si CoFinancement
								_Nb_CMI_Necessaire = 0
							FIN
						FIN
						_NbConseil			= 0
						_Hrs_Intervenant	= 0
						_Nb_Hrs_Stagiaires	= 0
						_Total_CBL			= 0
						_Nb_Stag_Gpe		= 0
						_Nb_FAF				= 0
						_Nb_Hrs_Accueil		= 0
						_Nb_Formateurs		= 0
						
					AUTRE CAS: // Formations
						_Nb_FAF = REQ_LitDonneeCalculAction.constante_nb_heures_tp * REQ_LitDonneeCalculAction.constante_coef
						SI REQ_LitDonneeCalculAction.action_situationcharge = 1 		//#Attention donnée en dure dans le code
							_Nb_Hrs_Accueil = 0.75 	//#Attention donnée en dure dans le code
						SINON
							SI REQ_LitDonneeCalculAction.action_date_debut = ChaîneVersDate("01/01/" + sAnnee) OU REQ_LitDonneeCalculAction.action_date_fin >= ChaîneVersDate("01/01/" + NumériqueVersChaîne(nAnnee + 1)) ALORS
								_Nb_Hrs_Accueil = 0.75	//#Attention donnée en dure dans le code
							SINON
								_Nb_Hrs_Accueil = 1.5	//#Attention donnée en dure dans le code
							FIN
						FIN
						
						SI REQ_LitDonneeCalculAction.action_situationcharge = 0 ALORS
							_Nb_Formateurs = 0
						SINON
							SI REQ_LitDonneeCalculAction.listefinancement_code = "1" ALORS
								// Si Financement Principal	
								Tmp1 = 0
								SI (_Nb_Stag_Gpe * _Nb_FAF) <> 0 ALORS
									Tmp1 = ((_Total_UO_Centre_Prevision * (3.25 / 3.5)) + (_Nb_Stag_Gpe * REQ_LitDonneeCalculAction.action_nb_stagiaires * _Nb_Hrs_Accueil)) / (REQ_LitDonneeCalculAction.actiondetail_nb_stag_gpe * _Nb_FAF)			//#Attention donnée en dure dans le code
								FIN
								
								Tmp2 = 0					
								SI REQ_LitDonneeCalculAction.constante_nb_heures_stage <> 0 ET _Nb_FAF <> 0 ALORS			
									Tmp2 = (_Total_UO_Entreprise_Prevision * (REQ_LitDonneeCalculAction.constante_nb_heures_suivi * REQ_LitDonneeCalculAction.constante_coef) / REQ_LitDonneeCalculAction.constante_nb_heures_stage) / _Nb_FAF
								FIN
								_Nb_Formateurs = Tmp1 + Tmp2
							SINON
								// Si Cofinancement
								_Nb_FAF			= 0
								_Nb_Hrs_Accueil	= 0
								_Nb_Formateurs	= 0
							FIN
						FIN
						_NbConseil			= 0
						_Hrs_Intervenant	= 0
						_Nb_Hrs_Stagiaires	= 0
						_Total_CBL			= 0
						_Nb_CMI				= 0
						_Nb_CMI_Necessaire	= 0
						
				FIN	
				
				// Totalisation Formateur
				_Total_Formateur					= _NbConseil + _Total_CBL + _Nb_CMI_Necessaire + _Nb_Formateurs
				_Cout_Total_Formateur				= _Total_Formateur * REQ_LitDonneeCalculAction.constante_cout_moyen
				_Cout_Total_Formateur_Actualise		= _Total_Formateur * REQ_LitDonneeCalculAction.constante_cout_moyen_actualise
				
				// Cumul de la totalisation Formateur
				_Total_Formateur_Cum				= _Total_Formateur_Cum + _Total_Formateur
				_Cout_Total_Formateur_Cum			= _Cout_Total_Formateur_Cum + _Cout_Total_Formateur
				_Cout_Total_Formateur_Actualise_Cum	= _Cout_Total_Formateur_Actualise_Cum + _Cout_Total_Formateur_Actualise
				
				//SI SAI_Total_Exercice <> 0 ALORS
				//	SAI_Ratio_Formateur				=  (SAI_Cout_Total_Formateur / SAI_Total_Exercice) * 100
				//	SAI_Ratio_FormateurActualise	= (SAI_Cout_Total_Formateur_Actualise / SAI_Total_Exercice) * 100
				//	
				//SINON
				//	SAI_Ratio_Formateur				= 0					//		.txt_ratio.Text = 0
				//	SAI_Ratio_FormateurActualise	= 0		// .txt_ratio_actualise.Text = 0
				//FIN
			<FIN>

					
			/////////////////////////////////
			// Calcul des Heures Produites //
			/////////////////////////////////
			<BLOC Heures Produites>
				
				// Valeur h	 	//#CestQuoi Valeur h		--> Heures Produites
				SI REQ_LitDonneeCalculAction.constante_nb_heures_stage <> 0 ET nDuree <> 0 ALORS
					Val_e = ((_Total_UO_Entreprise_Prevision * (REQ_LitDonneeCalculAction.constante_nb_heures_suivi * REQ_LitDonneeCalculAction.constante_coef)) / REQ_LitDonneeCalculAction.constante_nb_heures_stage) / nDuree
				SINON
					Val_e = 0
				FIN
				SI nDuree <> 0 ALORS
					Val_c = _Total_UO_Centre / nDuree
				SINON
					Val_c = 0
				FIN
				Unite = Val_e + Val_c
				
				BudgetTotal = 0
				
				//#AFaire fonction -->  Calcul_Budget_HeureProduite_Exercice(SAI_DateDebut, SAI_DateFin, Unite)
				POUR nNumMois = 1 À 12
					SI REQ_LitDonneeCalculAction.action_date_debut > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) OU ...
						REQ_LitDonneeCalculAction.action_date_fin < ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS
						// Si Date de Début est supérieur au dernier jour du mois OU si Date de Fin est inférieur au 1er du mois
						BudgetTotal				= BudgetTotal + 0
						BudgetMois1[nNumMois]	= 0
					SINON
						SI REQ_LitDonneeCalculAction.action_date_debut < ChaîneVersDate("01/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) THEN
							//SI Date Début est inférieur au 1er du mois
							SI REQ_LitDonneeCalculAction.action_date_fin > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS
								// Si Date de fin est supérieur à la fin du mois
								SI nNumMois = 8 ALORS
									// Si le mois d'août
									SI REQ_LitDonneeCalculAction.action_saisonnalite = Faux ALORS
										// S'il y a de la saisonnalité
										BudgetTotal				= BudgetTotal + (4 * Unite)
										BudgetMois1[nNumMois]	= (4 * Unite)
									SINON
										// S'il n'y à pas de saisonnalité (Mois complet)
										BudgetTotal				= BudgetTotal + (Val(FDMois[nNumMois]) * Unite)
										BudgetMois1[nNumMois]	= (Val(FDMois[nNumMois]) * Unite)
									FIN
								SINON
									// Pour les autres mois (Mois complet)
									BudgetTotal				= BudgetTotal + (Val(FDMois[nNumMois]) * Unite)
									BudgetMois1[nNumMois]	= (Val(FDMois[nNumMois]) * Unite)
								FIN
							SINON
								//Si la date de fin est comprise dans le mois (Mois complet)
								BudgetTotal				= BudgetTotal + (Val(FDMois[nNumMois]) * Unite)
								BudgetMois1[nNumMois]	= (Val(FDMois[nNumMois]) * Unite)
							FIN			
						SINON
							//SI Date Début est supérieur ou égale au 1er du mois
							SI REQ_LitDonneeCalculAction.action_date_fin > ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee) ALORS  //#AVerifier le ">=" car il devrait-être juste ">"		//				IF .txt_date_fin >= CDate(Trim(str(les_mois(I - 1))) & "/" & Trim(str(I)) & "/" & Trim(str(.txt_exercice))) THEN
								// Si Date de Fin est supérieur ou égale à la fin du mois	
								//#AVerifier le calcul des Dates
								BudgetTotal				= BudgetTotal + ((DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee)) + 1) * Unite)
								BudgetMois1[nNumMois]	= ((DateDifférence(REQ_LitDonneeCalculAction.action_date_debut, ChaîneVersDate(FDMois[nNumMois] + "/" + NumériqueVersChaîne(nNumMois, "02d") + "/" + sAnnee)) + 1) * Unite)
							SINON
								// Si Date de Fin est inférieur à la fin de mois
								//#AVerifier le calcul des Dates
								BudgetTotal				= BudgetTotal + (DateDifférence(REQ_LitDonneeCalculAction.action_date_fin, REQ_LitDonneeCalculAction.action_date_fin) + 1) * Unite  //#Verifier les résultats si ont applique à la place (Valeur = Valeur + ((.txt_date_fin) - (.txt_date_fin) + 1) * unite)			// 				//				Valeur			= Valeur + ((.txt_date_fin) - (.txt_date_fin) + 1) * Unite
								BudgetMois1[nNumMois]	= (DateDifférence(REQ_LitDonneeCalculAction.action_date_fin, REQ_LitDonneeCalculAction.action_date_fin) + 1) * Unite      //#Verifier les résultats si ont applique à la place (mois2(I - 1) = ((.txt_date_fin) - (.txt_date_fin) + 1) * unite)			//					mois1(I - 1)	= ((.txt_date_fin) - (.txt_date_fin) + 1) * Unite
							FIN
						FIN
					FIN
							SI BudgetMois1[nNumMois] ALORS TraceT(nIDAction + " / BudgetMois1[" + nNumMois + "] : " + BudgetMois1[nNumMois])
					_BudgetMois1_Cum[nNumMois] = _BudgetMois1_Cum[nNumMois] + BudgetMois1[nNumMois]	
							SI _BudgetMois1_Cum[nNumMois] ALORS TraceT(nIDAction + " / _BudgetMois1_Cum[" + nNumMois + "] : " + _BudgetMois1_Cum[nNumMois])
				FIN
				
				BudgetMois1[nNumMois]	= BudgetTotal			// 	mois1(12) = Valeur
						SI BudgetMois1[nNumMois] ALORS TraceT(nIDAction + " / BudgetMois1[" + nNumMois + "] : " + BudgetMois1[nNumMois])
				_BudgetMois1_Cum[nNumMois] = _BudgetMois1_Cum[nNumMois] + BudgetTotal					
						SI _BudgetMois1_Cum[nNumMois] ALORS TraceT(nIDAction + " / _BudgetMois1_Cum[" + nNumMois + "] : " + _BudgetMois1_Cum[nNumMois])
				//Fin Fonction Calcul_Budget_HeureProduite_Exercice avec une valeur de retour BudgetTotal
				
			<FIN>
					

			/////////////////////////////////////
			// Calcul des Charges du Personnel //
			/////////////////////////////////////
			<BLOC Charges Personnels>
				
				// Valeur cp   //#CestQuoi CP ??			--> Charges du Personnel
				Unite		= _Total_Formateur
				BudgetTotal	= 0
				
				//#AFaire fonction -->  Calcul_Budget_ChargePersonnel_Exercice(SAI_DateDebut, SAI_DateFin, Unite)
				//Début Fonction Calcul_Budget_ChargePersonnel_Exercice
				POUR nNumMois = 1 À 12
					SI _Total_Exercice <> 0 ALORS
						SI BudgetMois1[13] <> 0 ALORS
							BudgetTotal				= BudgetTotal + (_Total_Formateur * BudgetMois1[nNumMois])  / BudgetMois1[13]
							BudgetMois3[nNumMois]	= (_Total_Formateur * BudgetMois1[nNumMois])  / BudgetMois1[13]
						SINON
							BudgetTotal				= BudgetTotal + 0
							BudgetMois3[nNumMois]	= 0
						FIN					
					SINON
						BudgetTotal				= BudgetTotal + 0
						BudgetMois3[nNumMois]	= 0
					FIN		
							SI BudgetMois3[nNumMois] ALORS TraceT(nIDAction + " / BudgetMois3[" + nNumMois + "] : " + BudgetMois3[nNumMois])
					_BudgetMois3_Cum[nNumMois] = _BudgetMois3_Cum[nNumMois] + BudgetMois3[nNumMois]
							SI _BudgetMois3_Cum[nNumMois] ALORS TraceT(nIDAction + " / _BudgetMois3_Cum[" + nNumMois + "] : " + _BudgetMois3_Cum[nNumMois])
				FIN
				
				BudgetMois3[nNumMois] = BudgetTotal
				_BudgetMois3_Cum[nNumMois] = _BudgetMois3_Cum[nNumMois] + BudgetTotal
				//Fin Fonction Calcul_Budget_ChargePersonnel_Exercice avec une valeur de retour BudgetTotal
				
			<FIN>

			// Lit l'enregistrement suivant
			REQ_LitDonneeCalculAction.LitSuivant(action_idaction)
		FIN	

		////////////////////////////////////////////////////////
		// Affichage des Totaux cellule Totalisation Générale //
		////////////////////////////////////////////////////////
		<BLOC Totaux>
			SI bTypeRetour = gbRetourAffichage ALORS
				// Affichage des données dans la cellule Totalisation Générale
				SAI_Action_Total						= _Total_Cum								//#Affichage cellule Totalisation générale "Montant Total" => SAI_Action_Total
				SAI_Action_Total_Exercice				= _Total_Exercice_Cum						//#Affichage cellule Totalisation générale "Total Sur Exercice" => SAI_Action_Total_Exercice
				SAI_Action_Total_Prevision				= _Total_Prevision_Cum						//#Affichage cellule Totalisation générale "Montant Total Prévu" => SAI_Action_Total_Prevision
				SAI_Action_Total_IntervennantExterieur	= _Total_IntervennantExterieur_Cum			//#Affichage cellule Totalisation générale "Intervenant Extérieur" => SAI_Action_Total_IntervenantExterieur
				SAI_Action_Total_AutreCharge			= _Total_AutreCharge_Cum					//#Affichage cellule Totalisation générale "Autres Charges" => SAI_Action_Total_AutreCharge
			FIN
		<FIN>
		
		//////////////////////////////////////////////////////////
		// Calcul et Affichage des Ratios cellule Ratio Général //
		//////////////////////////////////////////////////////////
		<BLOC Ratios>
			SI _Total_Exercice_Cum <> 0 ALORS
				// -- Charges / CA
				_Ratio_MasseSalariale_CA	= (_Cout_Total_Formateur_Cum / _Total_Exercice_Cum) * 100		//Ancien SAI_Ratio_Charges_CA			//#Affichage Ratio Général "Masse Sal. / CA" => SAI_Action_Ratio_MasseSalariale_CA
				
				// -- Total salaires : Cout formateur + Intervenants Extérieurs / chiffre d'affaire 
				_Ratio_Total_Salaire		= ((_Cout_Total_Formateur_Cum + _Total_IntervennantExterieur_Cum)  / _Total_Exercice_Cum) * 100		//#Affichage Ratio Général "Total Salaire" => SAI_Action_Ratio_Total_Salaire
				
				// -- Global : (Coût formateur + intervenant extérieur + charge) / chiffre d'affaire
				_Ratio_Charge			= ((_Cout_Total_Formateur_Cum + _Total_IntervennantExterieur_Cum + _Total_AutreCharge_Cum)  / _Total_Exercice_Cum) * 100			//Ancien SAI_Ratio_Global		//#Affichage Ratio Général "Charges" => SAI_Action_Ratio_Charge
				
				// -- Rentabilité : Total Produit – Total Charge / Total Produit
				_Ratio_Rentabilité		= ((_Total_Exercice_Cum - (_Cout_Total_Formateur_Cum + _Total_IntervennantExterieur_Cum + _Total_AutreCharge_Cum)) / _Total_Exercice_Cum) * 100				//#Affichage Ratio Général "Rentabilité" => SAI_Action_Ratio_Rentabilité
			ELSE
				_Ratio_MasseSalariale_CA	= 0
				_Ratio_Total_Salaire		= 0
				_Ratio_Charge				= 0
				_Ratio_Rentabilité			= 0
			END
			
			SI bTypeRetour = gbRetourAffichage ALORS
				// -- Charges / CA
				SAI_Action_Ratio_MasseSalariale_CA	= _Ratio_MasseSalariale_CA		//Ancien SAI_Ratio_Charges_CA			//#Affichage Ratio Général "Masse Sal. / CA" => SAI_Action_Ratio_MasseSalariale_CA
				
				// -- Total salaires : Cout formateur + Intervenants Extérieurs / chiffre d'affaire 
				SAI_Action_Ratio_Total_Salaire		= _Ratio_Total_Salaire		//#Affichage Ratio Général "Total Salaire" => SAI_Action_Ratio_Total_Salaire
				
				// -- Global : (Coût formateur + intervenant extérieur + charge) / chiffre d'affaire
				SAI_Action_Ratio_Charge			= _Ratio_Charge			//Ancien SAI_Ratio_Global		//#Affichage Ratio Général "Charges" => SAI_Action_Ratio_Charge
				
				// -- Rentabilité : Total Produit – Total Charge / Total Produit
				SAI_Action_Ratio_Rentabilité		= _Ratio_Rentabilité				//#Affichage Ratio Général "Rentabilité" => SAI_Action_Ratio_Rentabilité
			FIN		
		<FIN>
	FIN
//Fin

// Retour de la fonction

SI nIDAction > 0 ALORS
	SI bTypeRetour = gbRetourParametre ALORS
		RENVOYER (	_Total_Cum, ...
					_Total_Exercice_Cum, ...
					_Total_Prevision_Cum, ...
					_Total_IntervennantExterieur_Cum, ...
					_Total_AutreCharge_Cum, ...
					_Ratio_MasseSalariale_CA, ...
					_Ratio_Total_Salaire, ...
					_Ratio_Charge, ...
					_Ratio_Rentabilité,...
					_BudgetMois2_Cum, ...			// --> Budget ??
					_BudgetMois1_Cum, ...			// --> Heure Produite Personnel ??
					_BudgetMois3_Cum	 			// --> Charge Personnel ??
				)
	FIN
FIN
Editor is loading...
Leave a Comment