// Module de gestion de l'UI et des sliders
// Les fonctions ci-dessous supposent que form_sliders, map_values, authorized_value sont passés en paramètre ou importés
export function change_duree(form_sliders, map_values, authorized_value, default_min, default_max, selected_value) {
var list = '';
var list_class = '',
loan_type = jQuery('#loan_type').val(),
loan_radio_type = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '',
class_name = 'mens_',
selected_capital = jQuery('#selected_capital').val(),
monthly_low = 0,
monthly_high = 0,
capital_min = 0,
capital_max = 0,
selected_duree_box = jQuery('#selected_months_range').parents('.selected_duree');
var loan_type_in_years = ['am', 'amr', 'cdp', 'cied'];
if (loan_radio_type != '')
loan_type = loan_radio_type;
if (selected_capital == '') {
selected_capital = form_sliders[loan_type]['capital_selected'];
}
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
loan_type = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
loan_type = map_values[sub_loan_radio_type];
}
}
capital_min = form_sliders[loan_type]['capital_min'];
capital_max = form_sliders[loan_type]['capital_max'];
// Ici, il faudrait injecter les fonctions de calcul en paramètre ou via import
// Pour l'instant, on laisse un placeholder pour results
let results = [default_min, default_max];
// ... (à compléter avec l'appel à la bonne fonction de calcul)
monthly_low = results[0];
monthly_high = results[1];
var validDurees = [];
for (var j = 0; j < duree_range.length; j++) {
if ((monthly_low <= parseInt(duree_range[j]) && parseInt(duree_range[j]) <= monthly_high)) {
validDurees.push(duree_range[j]);
}
}
var startIndex = Math.max(0, validDurees.length - 4);
if (jQuery('#selected_capital').val() < capital_min) {
list = '
La somme minimale est de ' + capital_min + '€';
} else if (jQuery('#selected_capital').val() > capital_max) {
list = 'La somme maximale est de ' + capital_max + '€';
} else {
for (var i = startIndex; i < validDurees.length; i++) {
var periodicite = ' mois';
if (loan_type_in_years.includes(loan_type)) {
class_name = validDurees[i] + '_ans';
periodicite = ' ans';
} else {
class_name = 'mens_' + validDurees[i];
}
if ((default_min <= parseInt(validDurees[i]) && parseInt(validDurees[i]) <= default_max)) {
if (selected_value == validDurees[i]) {
list_class = ' selected';
}
if (validDurees[i] <= monthly_high) {
list = list + '' + validDurees[i] + periodicite + '';
}
} else {
list = list + '' + validDurees[i] + periodicite + '';
}
list_class = '';
}
}
jQuery('#date-range-selector').html(list);
var periodicite = loan_type_in_years.includes(loan_type) ? ' ans' : ' mois';
jQuery('.slider_duree_box').text(selected_value + periodicite);
jQuery(selected_duree_box).find('.outside_slider_duree_box').text(selected_value + periodicite);
}
export function change_capital_slider(form_sliders, map_values, authorized_value, number_format, default_min, default_max, default_selected_value) {
var selected_capital_range = '#selected_capital_range';
var selected_capital = '#selected_capital';
var selected_capital_box = jQuery(selected_capital_range).parents('.selected_capital');
var stepUpdateTimeout = null;
var isInputChange = false;
var loan_type = jQuery('#loan_type').val(),
loan_radio_type = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '';
if (loan_radio_type != '')
loan_type = loan_radio_type;
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
loan_type = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
loan_type = map_values[sub_loan_radio_type];
}
}
var pivot_value = form_sliders[loan_type].pivot_value;
var sub_pivot_value = form_sliders[loan_type].sub_pivot_value;
var pivot_percent = ((pivot_value - default_min) / (default_max - default_min)) * 100;
var sub_pivot_percent = ((sub_pivot_value - default_min) / (default_max - default_min)) * 100;
jQuery('.pivot-zone').remove();
if (pivot_value > 0) {
var pivotZone = jQuery('');
pivotZone.css({
'position': 'absolute',
'left': pivot_percent + '%',
'right': '0',
'top': '0',
'bottom': '0',
'background-color': 'rgba(255, 0, 0, 0.2)',
'pointer-events': 'none'
});
jQuery(selected_capital_range).append(pivotZone);
}
function calculateStep(value) {
return value < 10000 ? 500 : 250;
}
function roundToStep(value) {
var step = calculateStep(value);
return Math.round(value / step) * step;
}
jQuery(selected_capital)
.attr('step', calculateStep(default_selected_value))
.on('input', function() {
var $input = jQuery(this);
var value = Number($input.val());
if (!value) return;
if (stepUpdateTimeout) {
clearTimeout(stepUpdateTimeout);
}
stepUpdateTimeout = setTimeout(function() {
var newStep = calculateStep(value);
$input.attr('step', newStep);
}, 500);
isInputChange = true;
jQuery(selected_capital_range).slider('value', value);
jQuery(selected_capital_range).find('.slider_capital_box')
.text(number_format(value, 2, ',', '.') + ' €');
selected_capital_box.find('.outside_box').text(number_format(value, 2, ',', '.') + ' €');
});
jQuery(selected_capital_range).slider({
min: default_min,
max: default_max,
value: default_selected_value,
step: calculateStep(default_selected_value),
slide: function(event, ui) {
if (isInputChange) return;
var orange_bar = jQuery('.slider_capital_wrapper .after_bar'),
elem = jQuery(ui.handle),
left_css = parseInt(elem.css('left'), 10);
orange_bar.css('width', left_css + 10);
if (pivot_value > 0 && ui.value >= pivot_value) {
jQuery(selected_capital_range).find('.slider_capital_box').addClass('pivot-value');
if (!jQuery('#acceptConditions').is(':checked')) {
jQuery('.stimulator_result_btn').prop('disabled', true).addClass('disabled');
}
} else {
jQuery(selected_capital_range).find('.slider_capital_box').removeClass('pivot-value');
jQuery('.stimulator_result_btn').prop('disabled', false).removeClass('disabled');
}
jQuery(selected_capital).val(ui.value);
jQuery(selected_capital_range).find('.slider_capital_box').text(number_format((ui.value), 2, ',', '.') + ' €');
selected_capital_box.find('.outside_box').text(number_format(ui.value, 2, ',', '.') + ' €');
if (pivot_value > 0) {
if (ui.value >= pivot_value) {
jQuery('.pat_plus75000').slideDown(300);
} else {
jQuery('.pat_plus75000').slideUp(300);
}
} else {
jQuery('.pat_plus75000').hide();
}
},
stop: function(event, ui) {
// Les callbacks de recalcul et de sliders seront injectés dans main.js
},
change: function(event, ui) {
var orange_bar = jQuery('.slider_capital_wrapper .after_bar'),
elem = jQuery(ui.handle),
left_css = parseInt(elem.css('left'), 10);
orange_bar.css('width', left_css + 10);
}
});
jQuery('#acceptConditions').on('change', function() {
var currentValue = jQuery(selected_capital).val();
if (pivot_value > 0 && currentValue >= pivot_value) {
if (jQuery(this).is(':checked')) {
jQuery('.stimulator_result_btn').prop('disabled', false).removeClass('disabled');
} else {
jQuery('.stimulator_result_btn').prop('disabled', true).addClass('disabled');
}
}
});
var appended_elem = 'test';
if (!jQuery('.ui-slider-handle .fa-angle-right').length)
jQuery(selected_capital_range).find('.ui-slider-handle').append('');
if (!jQuery(selected_capital_range).find('.slider_capital_box').length) {
jQuery(selected_capital_range).find('.ui-slider-handle').append(appended_elem);
}
jQuery(selected_capital_range).find('.slider_capital_box').text(number_format((jQuery(selected_capital_range).slider('value')), 2, ',', '.') + ' €');
selected_capital_box.find('.outside_box').text(number_format((jQuery(selected_capital_range).slider('value')), 2, ',', '.') + ' €');
if (sub_pivot_value > 0) {
var subPivotZone = jQuery('');
subPivotZone.css({
'position': 'absolute',
'left': '0',
'width': sub_pivot_percent + '%',
'top': '0',
'bottom': '0',
'background-color': 'rgba(0, 0, 255, 0.15)',
'pointer-events': 'none'
});
if(jQuery('.sub-pivot-zone').length == 0)
jQuery(selected_capital_range).append(subPivotZone);
}
}
export function change_month_slider(form_sliders, map_values, authorized_value, number_format, getStepForValue, default_min, default_max, default_selected_value) {
var selected_months_range = '#selected_months_range';
var selected_months = '#selected_months';
var loan_type_in_years = ['am', 'amr', 'cdp', 'cied', 'ph'];
var sel_duree = jQuery(selected_months).val(),
selected_duree_box = jQuery(selected_months_range).parents('.selected_duree');
var loan_type = jQuery('#loan_type').val(),
loan_radio_type = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '';
if (loan_radio_type != '')
loan_type = loan_radio_type;
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
loan_type = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
loan_type = map_values[sub_loan_radio_type];
}
}
var selected_capital = jQuery('#selected_capital').val();
if (selected_capital == '')
selected_capital = form_sliders[loan_type]['capital_selected'];
// Les résultats de calcul sont à injecter via callback dans main.js si besoin
let results = [default_min, default_max]; // À remplacer par l'appel à la bonne fonction de calcul
var max_duration = results[1];
var dynamic_max = max_duration;
var available_durations = form_sliders[loan_type].durees;
for (var i = available_durations.length - 1; i >= 0; i--) {
if (available_durations[i] <= max_duration) {
dynamic_max = available_durations[i];
break;
}
}
jQuery(selected_months_range).slider({
min: default_min,
max: dynamic_max,
value: dynamic_max,
step: getStepForValue(loan_type, dynamic_max),
slide: function(event, ui) {
var newStep = getStepForValue(loan_type, ui.value);
if (newStep !== jQuery(this).slider('option', 'step')) {
jQuery(this).slider('option', 'step', newStep);
}
var orange_bar = jQuery('.slider_duree_wrapper .after_bar_month'),
elem = jQuery(ui.handle),
left_css = parseInt(elem.css('left'), 10);
orange_bar.css('width', left_css + 10);
jQuery(selected_months).val(ui.value);
if (loan_type_in_years.includes(loan_type)) {
jQuery(selected_months_range).find('.slider_duree_box').text(ui.value + ' ans');
jQuery(selected_duree_box).find('.outside_slider_duree_box').text(ui.value + ' ans');
} else {
jQuery(selected_months_range).find('.slider_duree_box').text(ui.value + ' mois');
jQuery(selected_duree_box).find('.outside_slider_duree_box').text(ui.value + ' mois');
}
},
stop: function(event, ui) {
// Les callbacks de recalcul seront injectés dans main.js
},
change: function(event, ui) {
var orange_bar = jQuery('.slider_duree_wrapper .after_bar_month'),
elem = jQuery(ui.handle),
left_css = parseInt(elem.css('left'), 10);
orange_bar.css('width', left_css + 10);
}
});
jQuery(selected_months).val(jQuery(selected_months_range).slider('value'));
var periodicite = loan_type_in_years.includes(loan_type) ? ' ans' : ' mois';
var appended_elem = '' + jQuery(selected_months_range).slider('value') + periodicite + '';
jQuery(selected_duree_box).find('.outside_slider_duree_box').text(jQuery(selected_months_range).slider('value') + periodicite);
if (!jQuery(selected_months_range).find('.ui-slider-handle .fa-angle-right').length) {
jQuery(selected_months_range).find('.ui-slider-handle').append('');
}
if (!jQuery(selected_months_range).find('.slider_duree_box').length) {
jQuery(selected_months_range).find('.ui-slider-handle').append(appended_elem);
}
}
export function update_capital_input(form_sliders, map_values, authorized_value) {
if (jQuery('#selected_capital').length) {
var selected = jQuery('#loan_type').val(),
selected_radio = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '';
if (selected_radio != '')
selected = selected_radio;
if (sub_loan_radio_type != '' && authorized_value.includes(sub_loan_radio_type)) {
selected = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
selected = map_values[sub_loan_radio_type];
}
var capital_max = form_sliders[selected].capital_max;
var capital_min = form_sliders[selected].capital_min;
var capital_selected = form_sliders[selected].capital_selected;
jQuery('#selected_capital').prop('min', capital_min);
jQuery('#selected_capital').prop('max', capital_max);
jQuery('#selected_capital').val(capital_selected);
}
}
export function validate_months_input(form_sliders, map_values, authorized_value, getStepForValue, calculate_mensualite) {
var selected_months_range = '#selected_months_range';
var selected_months = '#selected_months';
var selected = jQuery('#loan_type').val(),
loan_radio_type = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '',
selected_duree_box = jQuery(selected_months_range).parents('.selected_duree');
if (loan_radio_type != '') {
selected = loan_radio_type;
}
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
selected = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
selected = map_values[sub_loan_radio_type];
}
}
var duree_max = form_sliders[selected].duree_max;
var duree_min = form_sliders[selected].duree_min;
var loan_type_in_years = ['am', 'amr', 'cdp', 'cied', 'ph'];
var current_value = parseInt(jQuery(selected_months).val());
// Utiliser la fonction getStepForValue passée en paramètre
var step = getStepForValue(selected, current_value);
// Arrondir à la valeur la plus proche selon le step
var rounded_value = Math.round(current_value / step) * step;
// Appliquer les limites min/max
if (rounded_value < duree_min) {
rounded_value = duree_min;
} else if (rounded_value > duree_max) {
rounded_value = duree_max;
}
// Mettre à jour le champ et le slider
jQuery(selected_months).val(rounded_value);
jQuery(selected_months_range).slider('value', rounded_value);
// Mettre à jour l'affichage
var periodicite = loan_type_in_years.includes(selected) ? ' ans' : ' mois';
jQuery(selected_months_range).find('.slider_duree_box').text(rounded_value + periodicite);
jQuery(selected_duree_box).find('.outside_slider_duree_box').text(rounded_value + periodicite);
// Recalculer la mensualité
calculate_mensualite();
}
export function getStepForValue(loan_type, value) {
let loan_type_in_years = ['am', 'amr', 'cdp', 'cied', 'ph'];
let dynamic_step = 1;
if (loan_type_in_years.includes(loan_type)) {
dynamic_step = 1; // Step de 1 an pour les prêts en années
} else {
if (value <= 48) {
dynamic_step = 6; // Step de 6 mois jusqu'à 48 mois
} else {
dynamic_step = 12; // Step de 12 mois au-delà de 48 mois
}
}
return dynamic_step;
}
export function display_alert_capital(form_sliders, map_values, authorized_value) {
var selected_capital = jQuery('#selected_capital').val();
var selected = jQuery('#loan_type').val(),
selected_radio = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '';
if (selected_radio != '')
selected = selected_radio;
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
selected = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
selected = map_values[sub_loan_radio_type];
}
}
var capital_max = form_sliders[selected].capital_max;
var capital_min = form_sliders[selected].capital_min;
if (jQuery('.limit-warning').length) {
jQuery('.limit-warning').slideUp();
jQuery('.limit-warning').remove();
}
if (!((selected_capital > capital_min) && (selected_capital < capital_max))) {
if ((selected_capital <= capital_min)) {
jQuery('.second-col').prepend('Le montant minimum requis est de ' + capital_min + '€
');
} else {
jQuery('.second-col').prepend('Le montant maximum est de ' + capital_max + '€
');
}
}
}
export function delayed_capital_chnage(form_sliders, map_values, authorized_value, on_slider_value_change) {
var selected_capital_range = '#selected_capital_range';
var selected = jQuery('#loan_type').val(),
loan_radio_type = jQuery('.loan_type:checked').length ? jQuery('.loan_type:checked').val() : '',
sub_loan_radio_type = jQuery('.sub_loan_type:checked').length ? jQuery('.sub_loan_type:checked').val() : '';
var selected_capital = jQuery('#selected_capital').val();
if (loan_radio_type != '') {
selected = loan_radio_type;
}
if (sub_loan_radio_type != '') {
if (authorized_value.includes(sub_loan_radio_type)) {
selected = sub_loan_radio_type;
} else if (map_values[sub_loan_radio_type] !== 'undefined') {
selected = map_values[sub_loan_radio_type];
}
}
var capital_max = form_sliders[selected].capital_max;
var capital_min = form_sliders[selected].capital_min;
var simu_button = document.querySelector('.stimulator_result_btn');
if (jQuery('.limit-warning').length) {
jQuery('.limit-warning').slideUp();
jQuery('.limit-warning').remove();
}
if ((selected_capital >= capital_min) && (selected_capital <= capital_max)) {
if (jQuery('.stimulator_result_btn').is(':disabled'))
jQuery('.stimulator_result_btn').removeAttr('disabled');
on_slider_value_change();
} else {
if (!((selected_capital > capital_min) && (selected_capital < capital_max))) {
if ((selected_capital <= capital_min)) {
let elem = 'Le montant minimum requis est de ' + capital_min + '€
';
jQuery(elem).insertBefore('.stimulator_result_btn');
} else {
jQuery('Le montant maximum requis est de ' + capital_max + '€
').insertBefore('.stimulator_result_btn');
}
jQuery('.stimulator_result_btn').prop('disabled', true);
on_slider_value_change();
}
}
}