Files
equipment_resa/modify_equipment.html
T

235 lines
8.6 KiB
HTML

{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Paramètres :
- key : clé du matériel à modifier
- prop : =1 si matériel propriété de l'association, 0 sinon
*}}
{{:assign equipment_key=$_GET.key|trim}}
{{#load key=$_GET.key assign="equipment"}}
{{else}}
{{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}}
{{/load}}
{{:assign default_category=$equipment.category}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
{{if $_POST.archive == 1}}
{{* vérifier les quantités *}}
{{if $_GET.prop == 1 && $equipment.stock != 0}}
{{:error message="L'archivage n'est possible que si le stock est nul !"}}
{{elseif $_GET.prop == 0 && $equipment.notowned != 0}}
{{:error message="L'archivage n'est possible que s'il n'y a plus de matériel présent temporairement"}}
{{/if}}
{{* archiver le matériel *}}
{{:save
key=$equipment_key
status="archived"
}}
{{else}}
{{* récupérer les infos de la catégorie *}}
{{#load type="category" key=$_POST.category assign="category"}}{{/load}}
{{* vérifier la validité des changements demandés *}}
{{:assign chgt_ok=true}}
{{if $_POST.category != $default_category}}
{{* catégorie change : vérifier le nom *}}
{{#load key=$equipment_key}}
{{if $name|trim|tolower != $_POST.name|trim|tolower}}
{{* le nom change => vérifier l'existence d'un matériel du même nom *}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}}
{{:assign chgt_ok=false}}
{{/load}}
{{else}}
{{* le nom ne change pas : ok *}}
{{/if}}
{{/load}}
{{else}}
{{* catégorie ne change pas => vérifier le nom *}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}}
{{*:assign chgt_ok=false*}}
{{:assign var="_err_msg" value="Erreur : il existe déjà un matériel avec cette désignation"}}
{{/load}}
{{* N° de série & quantités *}}
{{if $_POST.serialno && $_POST.amount > 1 }}
{{:assign chgt_ok=false}}
{{:assign var="_err_msg" value="Si un n° de série est défini, la quantité doit être égale à 1"}}
{{/if}}
{{/if}}
{{if $chgt_ok==false}}
{{:error message=$_err_msg}}
{{/if}}
{{* stock ou temporaire ? *}}
{{:assign var="type_mvt" value=$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign _stock=$_POST.amount|intval}}
{{:assign _notowned=0}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign _notowned=$_POST.amount|intval}}
{{:assign _stock=0}}
{{else}}
{{:debug conf=$config.input_nature type=$type_mvt post=$_POST.operation}}
{{:error message="break"}}
{{/if}}
{{* Enregistrer membre *}}
{{if $_POST.user|count > 1}}
{{:error message="Un membre au plus peut être associé à un équipement !"}}
{{else}}
{{#foreach from=$_POST.user key="id" item="name"}}
{{:assign var="user.id" value=$id}}
{{:assign var="user.name" value=$name}}
{{/foreach}}
{{/if}}
{{* Champs personnalisés *}}
{{#foreach from=$module.config.fields key="i" item="field"}}
{{if $field.assignedto == 'M'}}
{{:assign var="value" from="_POST.fields.%d"|args:$i}}
{{:assign var="fields" append=$i value=$value label=$field.label}}
{{if $field.required && $value|trim === ''}}
{{:error message="Le champ '%s' doit être renseigné."|args:$field.label}}
{{/if}}
{{/if}}
{{/foreach}}
{{* Temp *}}
{{if $_POST.status == "available"}}
{{:assign var="_status" value="disponible"}}
{{else}}
{{:assign var="_status" value=$_POST.status}}
{{/if}}
{{* enregistrer les modifications *}}
{{:save
key=$equipment_key
validate_schema="./equipment.schema.json"
category=$category.key
name=$_POST.name|trim
status=$_status|trim
stock=$_stock|intval|or:0
notowned=$_notowned|intval|or:0
out=$_POST.out|intval|or:0
state=$_POST.state|intval
serialno=$_POST.serialno|trim|or:null
description=$_POST.description|trim|or:null
member=$user.id|intval|or:null
fields=$fields|arrayval|or:null
}}
{{*:debug}}
{{:error message="break"*}}
{{/if}}
{{:redirect force="index.html?ok=1&msg=modification&prop=%s"|args:$_GET.prop}}
{{/form}}
{{:admin_header title="Modifier matériel" current="module_%s"|args:$module.name}}
{{:form_errors}}
{{* lister les types d'entrées
{{#foreach from=$module.config.input_nature key=key}}
{{:assign var="input_labels.%s"|args:$key value=$label}}
{{/foreach}}
{{:debug types=$input_labels}}
*}}
{{* lister les catégories disponibles *}}
{{#load type="category" assign="category" order="$$.name"}}
{{:assign var="categories.%s"|args:$category.key value=$category.name}}
{{/load}}
{{*:debug types=$categories*}}
{{* lister les états matériels possibles *}}
{{:assign var="states" value=$module.config.states|explode:","}}
{{*:debug types=$states*}}
{{* Quantités stock ou temp *}}
{{if $equipment.stock >= 1}}
{{:assign _amount=$equipment.stock|intval}}
{{:assign _operation="définitif"}}
{{elseif $equipment.notowned >= 1}}
{{:assign _amount=$equipment.notowned|intval}}
{{:assign _operation="temporaire"}}
{{else}}
{{:assign _amount=$equipment.notowned|intval}}
{{:assign _operation="temporaire"}}
{{/if}}
{{* Récupère le membre si présent
{{if $equipment.member >= 1}}
{{#select id, !name as nom FROM users WHERE id=:id; !name=$config.user_fields.name_sql :id=$equipment.member}}
{{:assign var="user.%s"|args:$id value=$nom}}
{{/select}}
{{/if}}
*}}
{{* Récupère le membre si présent *}}
{{if $equipment.member >= 1}}
{{#users id=$equipment.member}}
{{:assign var="user.%s"|args:$id value=$_name}}
{{/users}}
{{/if}}
{{* N° de série *}}
{{if !$equipment.serialno }}
{{:assign var="_max" value="999"}}
{{else}}
{{:assign var="_max" value="1"}}
{{/if}}
<form method="post" action="">
<fieldset class="modification">
<legend>Modifier un matériel</legend>
<dl>
{{:input type="select" name="category" label="Catégorie" default=$default_category required=true options=$categories}}
{{:input type="text" name="name" label="Désignation" default=$equipment.name required=true}}
{{:input type="textarea" cols=40 rows=3 name="description" label="Description complète" default=$equipment.description required=false}}
{{:input type="text" name="serialno" label="N° de suivi" default=$equipment.serialno required=false help="Exemples: numéro de série, code-barre, référence d'immobilisation, immatriculation, etc."}}
{{:input type="number" name="amount" label="Quantité (%s)"|args:$_operation min=1 max=$_max required=true default=$_amount help="Ne pas dépasser 1 si un N° de série est renseigné."}}
{{:input type="hidden" name="operation" default=$_operation }}
{{:input type="hidden" name="out" default=$equipment.out }}
{{:input type="hidden" name="status" default=$equipment.status }}
{{:input type="select" name="state" label="État du matériel" default_empty="— Aucun —" default=$equipment.state options=$states required=true}}
{{:input type="list" name="user" label="Donateur/Loueur" target="!users/selector.php" default=$user multiple=false can_delete=true help="Donateur ou Loueur (membres uniquement)"}}
{{:input type="checkbox" value=1 name="archive" label="Archiver" help="cocher pour archiver le matériel ; possible uniquement si la quantité en stock est nulle"}}
</dl>
<legend>Champs Personnalisés</legend>
<dl>
{{#foreach from=$module.config.fields key="i" item="field"}}
{{if $field.assignedto == 'M'}}
{{*:debug types=$equipment.fields*}}
{{:assign var="champ" from="equipment.fields.%d"|args:$i}}
{{*:debug i=$i label=$champ.label valeur=$champ.value*}}
{{if $field.type == 'checkbox'}}
{{:assign retval="Oui"}}
{{else}}
{{:assign var="retval" value=""}}
{{if $champ.value !== null}}
{{:assign var="retval" value=$champ.value}}
{{/if}}
{{*:debug i=$i val=$retval*}}
{{/if}}
{{if $field.type == 'monetary'}}
{{:input name="fields[%s]"|args:$i label=$field.label type="number" help=$field.help required=$field.required default=$retval value=$retval min="0" step="any"}}
{{else}}
{{:input name="fields[%s]"|args:$i label=$field.label type=$field.type help=$field.help required=$field.required default=$retval value=$retval}}
{{/if}}
{{/if}}
{{/foreach}}
</dl>
</fieldset>
<p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{* View and Add Public files *}}
{{:assign var="path" value="public/image-%s"|args:$equipment_key}}
{{:admin_files path=$path upload=true edit=true use_trash=false}}