From 6e779160ea6e8607ba5b48f60a111a7d0b06c394 Mon Sep 17 00:00:00 2001 From: Adrien RENARD Date: Mon, 29 Jan 2024 16:07:32 +0100 Subject: [PATCH] Ajout gestion complement avant saisie de contrat Degug input float --- conf/db_struct.php | 2 ++ conf/paniers.sql | 30 ++++++++++++++-- public_html_admin/js/contrats.js | 6 ++++ public_html_admin/js/functions.js | 34 ++++++++++++++++++- public_html_admin/js/legumes.js | 2 +- .../templates/contrats/contrat_form.tpl | 11 ++++-- .../templates/legumes/legume_form.tpl | 4 +-- 7 files changed, 80 insertions(+), 9 deletions(-) diff --git a/conf/db_struct.php b/conf/db_struct.php index 2c55418..0bd68ab 100644 --- a/conf/db_struct.php +++ b/conf/db_struct.php @@ -144,6 +144,7 @@ define('CONTRATS_TABLE_STRUCT', array( "lieu_depot" => array( "type" => "int", "min" => 1, "max" => NULL, "default" => NULL, "force_default_under_min" => true ), "nb_cheque" => array( "type" => "int", "min" => 1, "max" => 99, "default" => 0, "force_default_under_min" => true ), "np_paniers_distrib_avt_saisie" => array( "type" => "int", "min" => 1, "max" => 99, "default" => 0, "force_default_under_min" => true ), + "complement_avt_saisie" => array( "type" => "float", "min" => 0, "max" => 999.99, "default" => 0, "force_default_under_min" => true ), "force_eligible" => array( "type" => "bool", "default" => 0 ), "ignore_warning" => array( "type" => "bool", "default" => 0 ), "archive" => array( "type" => "bool", "default" => 0 ), @@ -189,6 +190,7 @@ function getContratsTableSelectBaseSQL() { .LIEUX_TABLE.".`nom` as 'lieu_depot_nom'," .CONTRATS_TABLE.".`nb_cheque`," .CONTRATS_TABLE.".`np_paniers_distrib_avt_saisie`," + .CONTRATS_TABLE.".`complement_avt_saisie`," .CONTRATS_TABLE.".`force_eligible`," .CONTRATS_TABLE.".`ignore_warning`," .CONTRATS_TABLE.".`archive`," diff --git a/conf/paniers.sql b/conf/paniers.sql index bbf6d19..bcb9637 100644 --- a/conf/paniers.sql +++ b/conf/paniers.sql @@ -121,6 +121,7 @@ CREATE TABLE `contrats` ( `lieu_depot` smallint(5) UNSIGNED NOT NULL, `nb_cheque` int(2) UNSIGNED NOT NULL DEFAULT '0', `np_paniers_distrib_avt_saisie` int(2) UNSIGNED NOT NULL DEFAULT '0', + `complement_avt_saisie` float(5,2) NOT NULL DEFAULT '0', `force_eligible` tinyint(1) UNSIGNED NOT NULL DEFAULT '0', `ignore_warning` tinyint(1) UNSIGNED NOT NULL DEFAULT '0', `force_not_archive` tinyint(1) UNSIGNED NOT NULL DEFAULT '0', @@ -291,19 +292,42 @@ CREATE VIEW `livraisons_nb_paniers` AS GROUP BY `livraisons_paniers`.`livraison`; -- -------------------------------------------------------- --- STRUCTURE DE LA VIEW `complements_contrats_status` +-- STRUCTURE DE LA VIEW `complements_contrats_paniers_status` -- -------------------------------------------------------- -CREATE VIEW `complements_contrats_status` AS +CREATE VIEW `complements_contrats_paniers_status` AS SELECT `contrats`.`client`, `contrat`, - SUM(`complement`) as 'complements', + SUM(`complement`) as 'complements', SUM(`complement_regle`) as 'complements_regles', ( SUM(`complement`) - SUM(`complement_regle`) ) as 'complements_dus' FROM `livraisons_paniers` LEFT JOIN `contrats` ON `livraisons_paniers`.`contrat` = `contrats`.`ref` GROUP BY `contrat`; + +-- -------------------------------------------------------- +-- STRUCTURE DE LA VIEW `complements_contrats_paniers_status` +-- -------------------------------------------------------- + +CREATE VIEW `complements_contrats_status` AS + SELECT + `contrats`.`client`, + `contrats`.ref as 'contrat', + CASE WHEN ISNULL(`complements_contrats_paniers_status`.`complements`) + THEN `contrats`.`complement_avt_saisie` + ELSE `contrats`.`complement_avt_saisie` + `complements_contrats_paniers_status`.`complements` + END as 'complements', + CASE WHEN ISNULL(`complements_contrats_paniers_status`.`complements_regles`) + THEN 0.0 + ELSE `complements_contrats_paniers_status`.`complements_regles` + END as 'complements_regles', + CASE WHEN ISNULL(`complements_contrats_paniers_status`.`complements`) + THEN `contrats`.`complement_avt_saisie` + ELSE `contrats`.`complement_avt_saisie` + `complements_contrats_paniers_status`.`complements` - `complements_contrats_paniers_status`.`complements_regles` + END as 'complements_dus' + FROM `contrats` + LEFT JOIN `complements_contrats_paniers_status` ON `contrats`.`ref` = `complements_contrats_paniers_status`.`contrat`; -- -------------------------------------------------------- -- STRUCTURE DE LA VIEW `complements_clients_status` diff --git a/public_html_admin/js/contrats.js b/public_html_admin/js/contrats.js index 3a61e54..7079fc9 100644 --- a/public_html_admin/js/contrats.js +++ b/public_html_admin/js/contrats.js @@ -236,6 +236,9 @@ function modalFormContrat_init(modal) { // NB PANIER AVANT SAISIE initIntInput(modal.find("input[name=np_paniers_distrib_avt_saisie]")); + // NB PANIER AVANT SAISIE + initFloatInput(modal.find("input[name=complement_avt_saisie]")); + modalFormContrat_clear(modal); } @@ -266,6 +269,7 @@ function modalFormContrat_loadDatas(modal,id) { modal.find("input[name=nb_cheque]").val(datas.nb_cheque); modal.find("input[name=np_paniers_distrib_avt_saisie]").val(datas.np_paniers_distrib_avt_saisie); + modal.find("input[name=complement_avt_saisie]").val(datas.complement_avt_saisie); modal.find("input[type=checkbox][name=force_eligible]").prop("checked",datas.force_eligible>0); modal.find("input[type=checkbox][name=ignore_warning]").prop("checked",datas.ignore_warning>0); @@ -305,6 +309,7 @@ function modalFormContrat_clear(modal) { modal.find("input[name=nb_cheque]").val(""); modal.find("input[name=np_paniers_distrib_avt_saisie]").val(""); + modal.find("input[name=complement_avt_saisie]").val(""); modal.find("input[type=checkbox][name=force_eligible]").prop("checked",false); modal.find("input[type=checkbox][name=ignore_warning]").prop("checked",false); } @@ -322,6 +327,7 @@ function modalFormContrat_getDatas(modal) { 'lieu_depot' : parseInt( modal.find("select[name=lieu_depot]").val() ), 'nb_cheque' : parseInt( modal.find("input[name=nb_cheque]").val() ), 'np_paniers_distrib_avt_saisie' : modal.find("input[name=np_paniers_distrib_avt_saisie]").val(), + 'complement_avt_saisie' : parseFloat( modal.find("input[name=complement_avt_saisie]").val() ), 'force_eligible' : modal.find("input[type=checkbox][name=force_eligible]").prop("checked") ? 1 : 0, 'ignore_warning' : modal.find("input[type=checkbox][name=ignore_warning]").prop("checked") ? 1 : 0 }; diff --git a/public_html_admin/js/functions.js b/public_html_admin/js/functions.js index 9a261a6..f217b08 100644 --- a/public_html_admin/js/functions.js +++ b/public_html_admin/js/functions.js @@ -738,7 +738,10 @@ function initIntInputWithLimits(elem, min, max) { } function initFloatInput(elem) { - elem.unbind('keypress').unbind('keyup').keypress( function(event) { + if(elem.attr('type') == "number") elem.attr('lang', 'en').unbind('keypress').keypress( function(event) { + if(event.keyCode==13) setTimeout(function() { elem.blur(); },50); + }) + else elem.unbind('keypress').unbind('keyup').keypress( function(event) { keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 46, 44]; if(event.keyCode==13) setTimeout(function() { elem.blur(); },50); if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault(); @@ -752,6 +755,35 @@ function initFloatInput(elem) { }); } +function initFloatInputWithLimits(elem, min, max) { + if(elem.attr('type') == "number") elem.attr('lang', 'en').unbind('keypress').keypress( function(event) { + if(event.keyCode==13) { + event.preventDefault(); + setTimeout(function() { elem.blur(); },50); + } + }) + else elem.unbind('keypress').unbind('keyup').keypress( function(event) { + keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 46, 44]; + if(event.keyCode==13) { + event.preventDefault(); + setTimeout(function() { elem.blur(); },50); + } + if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault(); + if((event.keyCode==46 || event.keyCode==44) && $(this).val().indexOf('.')>0) event.preventDefault(); + }).keyup( function(event) { + if(event.keyCode==188 && $(this).val().indexOf('.')==-1) { + var pos = $(this)[0].selectionStart; + $(this).val( $(this).val().replace(",",".") ); + $(this)[0].setSelectionRange(pos,pos); + } + }); + + elem.blur(function(e) { + if(isDefined(min) && parseFloat($(this).val())max) $(this).val(max); + }); +} + function initDateInput(elem) { elem.unbind('keypress').unbind('keyup').keypress( function(event) { if(event.keyCode==13) { diff --git a/public_html_admin/js/legumes.js b/public_html_admin/js/legumes.js index 6ff6ee7..20e14f7 100644 --- a/public_html_admin/js/legumes.js +++ b/public_html_admin/js/legumes.js @@ -308,7 +308,7 @@ function modalFormLegume_addTarif(modal, datas) { modal.find("div.tarifs").append(iptGrp); // INIT - initFloatInput( iptGrp.find("input[name=prix]") ); + initFloatInputWithLimits( iptGrp.find("input[name=prix]"), 0.0, 999.99 ); initDateInput( iptGrp.find("input[name=date]") ); iptGrp.find("button.btnDel").click(function(e) { diff --git a/public_html_admin/templates/contrats/contrat_form.tpl b/public_html_admin/templates/contrats/contrat_form.tpl index 2394533..9ab6d7a 100644 --- a/public_html_admin/templates/contrats/contrat_form.tpl +++ b/public_html_admin/templates/contrats/contrat_form.tpl @@ -59,11 +59,18 @@
- +
- + +
+
+ +
+ + +