235 lines
8.6 KiB
HTML
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}}
|