<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">var SejoursFunctions = {};

SejoursFunctions.Messages = {
	1: {
		sejourMinNuitsX: "sÃ©jour minimum de %d nuits",
		sejourMax31Jours: "sÃ©jour maximum de 31 jours"
	},

	2: {
		sejourMinNuitsX: "minimum stay of %d nights",
		sejourMax31Jours: "maximum stay of 31 days"
	}
};

SejoursFunctions.TarifsPeriodes = {
	TYPE_1_NUIT: 1,
	TYPE_2_NUITS_FDS: 2,
	TYPE_2_NUITS_SEM: 12,
	TYPE_3_NUITS: 8,
	TYPE_4_NUITS: 9,
	TYPE_5_NUITS: 10,
	TYPE_6_NUITS: 11,
	TYPE_7_NUITS: 4,
	TYPE_MOIS: 5,
	TYPE_SAISON: 6,
	TYPE_ANNEE: 7,



	TYPE_LOCATION_JOUR: 1,
	TYPE_LOCATION_FIN_DE_SEMAINE: 2,
	TYPE_LOCATION_SEMAINE_5_JOURS: 3,
	TYPE_LOCATION_SEMAINE_7_JOURS: 4,
	TYPE_LOCATION_MOIS: 5,
	TYPE_LOCATION_SAISON: 6,
	TYPE_LOCATION_ANNUEL: 7,
	TYPE_LOCATION_3_NUITS: 8,
	TYPE_LOCATION_4_NUITS: 9,
	TYPE_LOCATION_5_NUITS: 10,
	TYPE_LOCATION_6_NUITS: 11
};

SejoursFunctions.genererDate = function (date) {
	var d = moment(date, "DD-MM-YYYY", true);
	if (!d.isValid()) {
		d = moment(date, "YYYY-MM-DD", true);
	}

	if (!d.isValid()) {
		d = moment();
	}
	return d;
}

SejoursFunctions.NbDispos = function(dateDebut, dateFin) {
	var nb = 0;
	var dates = donneesSejour.datesNonDispo;

	for (var m = moment(dateDebut); m.diff(dateFin, 'days') &lt;= 0; m.add(1, 'days')) {
		var date = m.format("YYYY-MM-DD");

		if (typeof dates[date] !== "undefined") {
			nb += 1;
		}
	}

	return nb;
}

SejoursFunctions.PeriodesSelonDates = function(dateDebut, dateFin, checkDates) {
	dateDebut = dateDebut.format("YYYY-MM-DD");
	dateFin = dateFin.format("YYYY-MM-DD");


	var periodes = donneesSejour.periodes;

	var retour = [];

	for (var i = 0; i &lt; periodes.length; i++) {
		var periode = periodes[i];

		var ok = false;

		if (!checkDates) {
			ok = true;
		} else {
			if ((dateDebut &gt;= periode.debut &amp;&amp; dateDebut &lt;= periode.fin) || (dateFin &gt;= periode.debut &amp;&amp; dateFin &lt;= periode.fin)) {
				ok = true;
			}
		}

		if (ok) {
			retour.push(periode);
		}
	}

	return retour;
}

SejoursFunctions.PeriodesSelonNbJour = function (dateDebut, dateFin) {
	dateDebut = dateDebut.format("YYYY-MM-DD");
	dateFin = dateFin.format("YYYY-MM-DD");
	m = moment(dateFin);
	nbJour = m.diff(dateDebut, 'days');
	var periodes = donneesSejour.periodes;

	var retour = [];

	for (var i = 0; i &lt; periodes.length; i++) {
		var periode = periodes[i];

		if (nbJour &lt;= periode.nbJours) {
			retour.push(periode);
		}
	}

	return retour;
}

SejoursFunctions.TypesPeriodes = function(dateDebut, dateFin) {
	var a = moment(dateDebut);
	var b = moment(dateFin);

	var nbJours = b.diff(a, 'days');

	var retour = [];

	var types = SejoursFunctions.TarifsPeriodes;
	if (nbJours &gt;= 32) {
		if (nbJours &gt;=150) {
			retour.push(types.TYPE_ANNEE);
		} 
		if (nbJours &gt;=60) {
			retour.push(types.TYPE_SAISON);
		} 
		if (nbJours &gt;=32) {
			retour.push(types.TYPE_MOIS);
		}
	} else {
		if (nbJours &gt;=7) {
			retour.push(types.TYPE_7_NUITS);
		} 
		if (nbJours &gt;=6) {
			retour.push(types.TYPE_6_NUITS);
		} 
		if (nbJours &gt;=5) {
			retour.push(types.TYPE_5_NUITS);
		} 
		if (nbJours &gt;=4) {
			retour.push(types.TYPE_2_NUITS_SEM);
		} 
		if (nbJours &gt;=3) {
			retour.push(types.TYPE_3_NUITS);
		}

		if (nbJours &gt;=2) {
			retour.push(types.TYPE_2_NUITS_FDS);
			retour.push(types.TYPE_2_NUITS_SEM);
		} 

		if (nbJours &gt;= 1) {
			retour.push(types.TYPE_1_NUIT);
		}
	}

	return retour;
}

SejoursFunctions.TypesLocations = function(dateDebut, dateFin) {
	var a = moment(dateDebut);
	var b = moment(dateFin);

	var nbJours = b.diff(a, 'days');

	var retour = [];

	var types = SejoursFunctions.TarifsPeriodes;

	if (nbJours &gt;= 32) {
		if (nbJours &gt;=150){
			retour.push(types.TYPE_LOCATION_ANNUEL);
		}
		if (nbJours &gt;=60){
			retour.push(types.TYPE_LOCATION_SAISON);
		}
		if (nbJours &gt;=32){
			retour.push(types.TYPE_LOCATION_MOIS);
		}
	} else {
		if (nbJours &gt;=7){
			retour.push(types.TYPE_LOCATION_SEMAINE_7_JOURS);
		}
		if (nbJours &gt;=6){
			retour.push(types.TYPE_LOCATION_6_NUITS);
		}
		if (nbJours &gt;=5){
			retour.push(types.TYPE_LOCATION_5_NUITS);
		}
		if (nbJours &gt;=4){
			retour.push(types.TYPE_LOCATION_4_NUITS);
		}
		if (nbJours &gt;=3){
			retour.push(types.TYPE_LOCATION_3_NUITS);
		}
		if (nbJours &gt;=2){
			retour.push(types.TYPE_LOCATION_FIN_DE_SEMAINE);
		}
		if (nbJours &gt;= 1) {
			retour.push(types.TYPE_LOCATION_JOUR);
		}
	}
	return retour;
}

SejoursFunctions.VerifierNbMaxLocataires = function(nb) {
	var nbMaxLocataires = donneesSejour.nbMaxLocataires;

	return {
		peutEntrer: nbMaxLocataires &gt;= nb,
		nbMaxLocataires: nbMaxLocataires
	}
}

SejoursFunctions.GenererMessage = function(dateDebut, dateFin, typesOfferts) {
	var message = "";

	typesOfferts.sort(function(a, b) {
		if (a.nbJours &lt; b.nbJours) {
			return -1;
		}

		if (a.nbJours &gt; b.nbJours) {
			return 1;
		}

		return 0;
	});

	var nbJours = dateDebut.diff(dateFin, 'days');

	if (nbJours &gt;= 32) {
		var msgCourtTerme = true;

		for (var i = 0; i &lt; typesOfferts.length; i++) {
			var to = typesOfferts[i];

			if (to.nbJours &gt;= 32) {
				msgCourtTerme = true;
			}
		}

		if (msgCourtTerme) {
			message = SejoursFunctions.Messages[cfg.langue].sejourMax31Jours;
		} else {
			if (typesOfferts.length &gt; 0) {
				message = SejoursFunctions.Messages[cfg.langue].sejourMinNuitsX;
				message = message.replace("%d", typesOfferts[0].nbJours);
			}
		}
	}

	return message;
}

SejoursFunctions.VerifierTarifsMoyen = function(dateDebut, dateFin) {
	dateDebut = SejoursFunctions.genererDate(dateDebut);
	dateFin = SejoursFunctions.genererDate(dateFin);

	var nbDates = SejoursFunctions.NbDispos(dateDebut, dateFin);

	var disponible = nbDates == 0;

	var typesLocations = donneesSejour.typesLocations;

	var sejoursOfferts = [];
	var typesOfferts = [];
	var nbJoursMin = 9999;

	for (var i = 0; i &lt; typesLocations.length; i++) {
		var tl = typesLocations[i];

		sejoursOfferts.push(parseInt(tl.noEtablissementTypeLocation));

		typesOfferts.push({
			no: parseInt(tl.noEtablissementTypeLocation),
			nbJours: parseInt(tl.nbJours)
		});
		if (nbJoursMin &gt; parseInt(tl.nbJours)) {
			nbJoursMin = parseInt(tl.nbJours);
		}
	}

	var sejourDemande = SejoursFunctions.TypesLocations(dateDebut, dateFin);

	var sejourEstOffert = _.intersection(sejourDemande, sejoursOfferts).length &gt; 0;

	var message = "";

	if (!sejourEstOffert) {
		message = SejoursFunctions.GenererMessage(dateDebut, dateFin, typesOfferts);
	}

	var retour = {
		sejoursOfferts: sejoursOfferts,
		sejourDemande: sejourDemande,
		sejourEstOffert: sejourEstOffert,
		disponible: disponible,
		message: message,
		nbJoursMin : nbJoursMin
	};

	return retour;
}

SejoursFunctions.VerifierParPeriode = function(dateDebut, dateFin) {
	dateDebut = SejoursFunctions.genererDate(dateDebut);
	dateFin = SejoursFunctions.genererDate(dateFin);
	var nbDates = SejoursFunctions.NbDispos(dateDebut, dateFin);

	var disponible = nbDates == 0;

	var _sejoursOfferts = SejoursFunctions.PeriodesSelonDates(dateDebut, dateFin, false);

	var sejoursOfferts = [];
	var typesOfferts = [];
	var nbJoursMin = 9999;
	if (_sejoursOfferts.length == 0) {
		_sejoursOfferts = SejoursFunctions.PeriodesSelonNbJour(dateDebut, dateFin);
	}
	for (var i = 0; i &lt; _sejoursOfferts.length; i++) {
		var s = _sejoursOfferts[i];

		sejoursOfferts.push(parseInt(s.noTarifPeriode));
		typesOfferts.push({
			"no": s.noTarifPeriode,
			"nbJours": s.nbJours
		});
		if (nbJoursMin &gt; parseInt(s.nbJours)) {
			nbJoursMin = parseInt(s.nbJours);
		}
	}

	var sejourDemande = SejoursFunctions.TypesPeriodes(dateDebut, dateFin);

	var sejourEstOffert = _.intersection(sejourDemande, sejoursOfferts).length &gt; 0;

	var message = "";

	if (!sejourEstOffert) {
		message = SejoursFunctions.GenererMessage(dateDebut, dateFin, typesOfferts);
	}


	var retour = {
		sejoursOfferts: sejoursOfferts,
		sejourDemande: sejourDemande,
		sejourEstOffert: sejourEstOffert,
		disponible: disponible,
		message: message,
		nbJoursMin: nbJoursMin
	};

	return retour;
}</pre></body></html>