Sortie temporaire : ajout date retour

This commit is contained in:
Jean-Christophe Engel 2025-10-24 10:50:57 +02:00
parent 8266ab8aeb
commit fc526918f9
8 changed files with 159 additions and 4 deletions

View file

@ -28,3 +28,9 @@
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{if $module.config.loan_duration != null}}
{{:assign loan_duration=$module.config.loan_duration}}
{{else}}
{{:assign loan_duration=$config_defaut.loan_duration}}
{{/if}}

View file

@ -33,5 +33,6 @@
"label" : "Retour de Location/Emprunt", "label" : "Retour de Location/Emprunt",
"type" : "retour" "type" : "retour"
} }
] ],
"loan_duration" : "30"
} }

View file

@ -14,7 +14,7 @@
{{/load}} {{/load}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="../_get_config.html" keep="config, directions"}} {{:include file="../_get_config.html" keep="config, directions, loan_duration"}}
{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}} {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}}
{{* interdire de dupliquer un retour => utiliser le bouton « Retour » *}} {{* interdire de dupliquer un retour => utiliser le bouton « Retour » *}}
@ -93,6 +93,11 @@
{{:assign var="mvt_new.amount" value=$_POST.amount}} {{:assign var="mvt_new.amount" value=$_POST.amount}}
{{:assign var="mvt_new.date" value=$_POST.date|parse_date}} {{:assign var="mvt_new.date" value=$_POST.date|parse_date}}
{{:assign var="mvt_new.comment" value=$_POST.comment}} {{:assign var="mvt_new.comment" value=$_POST.comment}}
{{if $_POST.set_return_date != null}}
{{:assign return_date=$_POST.return_date}}
{{else}}
{{:assign return_date=null}}
{{/if}}
{{* {{*
lister les mouvements lister les mouvements
@ -198,6 +203,7 @@
user=$user.id user=$user.id
storage=$_POST.storage storage=$_POST.storage
transactions=$transactions transactions=$transactions
return_date=$return_date|parse_date
}} }}
{{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=copie"|args:$eqpmt_key:$prop}} {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=copie"|args:$eqpmt_key:$prop}}
{{/form}} {{/form}}
@ -272,6 +278,22 @@
{{/if}} {{/if}}
{{/if}} {{/if}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}} {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
{{if $mvt_new.direction == "output" && $type_mvt == "temporaire"}}
{{if $mvt_new.return_date != null}}
{{:assign checked="checked"}}
{{:assign visibility="visible"}}
{{:assign return_date=$mvt_new.return_date}}
{{else}}
{{:assign visibility="hidden"}}
{{:assign ts_sortie=$mvt_new.date|strtotime}}
{{:assign ts_retour="%d+%d*(60*60*24)"|math:$ts_sortie:$loan_duration}}
{{:assign return_date=$ts_retour|date_short}}
{{/if}}
{{:input id="set_return_date" type="checkbox" value=1 name="set_return_date" label="Fixer une date de retour" help="Cocher pour fixer une date de retour" checked="%s"|args:$checked}}
<div id="div_return_date" style="visibility:{{$visibility}}">
{{:input type="date" name="return_date" label="Date de retour" default=$return_date}}
</div>
{{/if}}
</dl> </dl>
</fieldset> </fieldset>
@ -282,3 +304,14 @@
</form> </form>
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript" src="../scripts.js"></script>
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_set_return_date_1', fields = ['div_return_date']) {
toggleVisibility(idcheck, fields);
}
(function () {
document.getElementById('f_set_return_date_1').onclick = changeVisibility;
})();
</script>

View file

@ -13,7 +13,7 @@
{{/load}} {{/load}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="../_get_config.html" keep="config, directions"}} {{:include file="../_get_config.html" keep="config, directions, loan_duration"}}
{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}} {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}}
{{if $mvt_new.direction == "input"}} {{if $mvt_new.direction == "input"}}
@ -84,6 +84,11 @@
{{:assign var="mvt_new.amount" value=$_POST.amount}} {{:assign var="mvt_new.amount" value=$_POST.amount}}
{{:assign var="mvt_new.date" value=$_POST.date|parse_date}} {{:assign var="mvt_new.date" value=$_POST.date|parse_date}}
{{:assign var="mvt_new.comment" value=$_POST.comment}} {{:assign var="mvt_new.comment" value=$_POST.comment}}
{{if $_POST.set_return_date != null}}
{{:assign return_date=$_POST.return_date}}
{{else}}
{{:assign return_date=null}}
{{/if}}
{{* {{*
lister les mouvements lister les mouvements
@ -215,6 +220,7 @@
user=$user_id user=$user_id
storage=$_POST.storage storage=$_POST.storage
transactions=$transactions transactions=$transactions
return_date=$return_date|parse_date
}} }}
{{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}} {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}}
{{/form}} {{/form}}
@ -298,6 +304,23 @@
{{/if}} {{/if}}
{{/if}} {{/if}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}} {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
{{if $mvt_new.direction == "output" && $type_mvt == "temporaire"}}
{{if $mvt_new.return_date != null}}
{{:assign checked="checked"}}
{{:assign visibility="visible"}}
{{:assign return_date=$mvt_new.return_date}}
{{else}}
{{:assign visibility="hidden"}}
{{:assign ts_sortie=$mvt_new.date|strtotime}}
{{:assign ts_retour="%d+%d*(60*60*24)"|math:$ts_sortie:$loan_duration}}
{{:assign return_date=$ts_retour|date_short}}
{{/if}}
{{:input id="set_return_date" type="checkbox" value=1 name="set_return_date" label="Fixer une date de retour" help="Cocher pour fixer une date de retour" checked="%s"|args:$checked}}
<div id="div_return_date" style="visibility:{{$visibility}}">
{{:input type="date" name="return_date" label="Date de retour" default=$return_date}}
<input type="hidden" id="loan_duration" name="loan_duration" value="{{$loan_duration}}">
</div>
{{/if}}
</dl> </dl>
</fieldset> </fieldset>
@ -308,3 +331,22 @@
</form> </form>
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript" src="../scripts.js"></script>
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_set_return_date_1', fields = ['div_return_date']) {
toggleVisibility(idcheck, fields);
}
function changeReturnDate(evt, id_date = 'f_date', id_return_date = 'f_return_date', id_loan_duration='loan_duration') {
const loan_duration = document.getElementById(id_loan_duration).value;
let nbsec = getDate(id_date) + loan_duration*24*60*60;
const date_retour = new Date(nbsec * 1000);
document.getElementById(id_return_date).value = date_retour.toLocaleDateString();
}
(function () {
document.getElementById('f_set_return_date_1').onclick = changeVisibility;
document.getElementById('f_date').onchange = changeReturnDate;
})();
</script>

View file

@ -46,6 +46,11 @@
"items": { "items": {
"type": "integer" "type": "integer"
} }
},
"return_date" : {
"description": "Date de retour du matériel",
"type" : ["null", "string"],
"format" : "date"
} }
}, },
"required": ["type", "direction", "operation", "amount", "equipment", "date", "comment"] "required": ["type", "direction", "operation", "amount", "equipment", "date", "comment"]

View file

@ -101,6 +101,10 @@
{{else}}— {{else}}—
{{/if}} {{/if}}
</dd> </dd>
{{if $mvt.return_date != null}}
<dt>Date de retour</dt>
<dd>{{$mvt.return_date|date_short}}</dd>
{{/if}}
</dl> </dl>
<form method="post" action=""> <form method="post" action="">

View file

@ -6,7 +6,7 @@
*}} *}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="../_get_config.html" keep="config"}} {{:include file="../_get_config.html" keep="config, loan_duration"}}
{{* types de sorties *}} {{* types de sorties *}}
{{#foreach from=$config.output_nature key=key}} {{#foreach from=$config.output_nature key=key}}
@ -31,6 +31,15 @@
{{/if}} {{/if}}
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}} {{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt != "temporaire" && $_POST.set_return_date != null}}
{{:error message="On ne peut associer une date de retour qu'à une sortie temporaire"}}
{{/if}}
{{if $_POST.set_return_date != null}}
{{:assign return_date=$_POST.return_date}}
{{else}}
{{:assign return_date=null}}
{{/if}}
{{if $_POST.user|count > 1}} {{if $_POST.user|count > 1}}
{{:error message="Un membre au plus peut être associé à une sortie"}} {{:error message="Un membre au plus peut être associé à une sortie"}}
{{/if}} {{/if}}
@ -142,6 +151,7 @@
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
user=$user.id user=$user.id
return_date=$return_date|parse_date
}} }}
{{:redirect force="../equipment_history.html?ok=1&key=%s&prop=1&msg=sortie"|args:$_GET.key}} {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=1&msg=sortie"|args:$_GET.key}}
{{/form}} {{/form}}
@ -156,6 +166,8 @@
{{:assign dispo="%d-%d"|math:$equipment.stock:$equipment.out}} {{:assign dispo="%d-%d"|math:$equipment.stock:$equipment.out}}
{{if $dispo > 0}} {{if $dispo > 0}}
{{:assign ts_retour="%d+%d*(60*60*24)"|math:$now:$loan_duration}}
{{:assign date_retour=$ts_retour|date_short}}
{{* formulaire de sortie de matériel *}} {{* formulaire de sortie de matériel *}}
<form method="post" action=""> <form method="post" action="">
@ -194,6 +206,11 @@
max=1 max=1
}} }}
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
{{:input id="set_return_date" type="checkbox" value=1 name="set_return_date" label="Fixer une date de retour" help="Cocher pour fixer une date de retour"}}
<div id="div_return_date" style="visibility:hidden">
{{:input type="date" id="return_date" name="return_date" label="Date de retour" default=$date_retour}}
<input type="hidden" id="loan_duration" name="loan_duration" value="{{$loan_duration}}">
</div>
</dl> </dl>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
@ -206,3 +223,23 @@
{{:form_errors}} {{:form_errors}}
{{:admin_footer}} {{:admin_footer}}
<script type="text/javascript" src="../scripts.js"></script>
<script type="text/javascript">
function changeVisibility(evt, idcheck = 'f_set_return_date_1', fields = ['div_return_date']) {
toggleVisibility(idcheck, fields);
}
function changeReturnDate(evt, id_date = 'f_date', id_return_date = 'f_return_date', id_loan_duration='loan_duration') {
const loan_duration = document.getElementById(id_loan_duration).value;
let nbsec = getDate(id_date) + loan_duration*24*60*60;
const date_retour = new Date(nbsec * 1000);
document.getElementById(id_return_date).value = date_retour.toLocaleDateString();
}
(function () {
document.getElementById('f_set_return_date_1').checked = false;
document.getElementById('f_set_return_date_1').onclick = changeVisibility;
document.getElementById('f_date').onchange = changeReturnDate;
})();
</script>

View file

@ -25,3 +25,30 @@ function disableColumSort(liste) {
} }
} }
} }
function toggleVisibility(idcheck, fields) {
const elem = document.getElementById(idcheck);
for (let id of fields) {
const field = document.getElementById(id);
if (elem.checked) {
field.style.visibility = "visible";
} else {
field.style.visibility = "hidden";
}
}
}
/**
* renvoyer la valeur en secondes d'une date au format j/m/a
* @param {string} date
*/
function str2sec(date) {
const jma = date.split('/');
const dd = new Date(jma[2], jma[1]-1, jma[0]);
return dd.getTime()/1000;
}
// renvoyer la valeur en secondes d'un champ date
function getDate(idelem) {
return str2sec(document.getElementById(idelem).value);
}