{{#load assign="claim" key=$_GET.claim}} {{else}} {{:error message="Cette note de frais n'existe pas"}} {{/load}} {{#restrict section="accounting" level="write"}} {{:assign is_admin=true}} {{else}} {{if $claim.user_id !== $logged_user.id}} {{:error message="L'accès à cette note de frais est interdit"}} {{/if}} {{:assign is_admin=false}} {{/restrict}} {{if $claim.status !== 'draft'}} {{:error message="Cette note de frais n'est pas un brouillon, il n'est pas possible de la modifier."}} {{/if}} {{:include file="./_config_default.tpl" keep="module.config,vehicles"}} {{:assign var="categories_select.other" value="Autre"}} {{#load type="category" assign="categories." order="$$.label COLLATE U_NOCASE"}} {{:assign var="categories_select[%s]"|args:$key value=$label}} {{/load}} {{#form on="save"}} {{if !$_POST.label|trim}} {{:error message="Le libellé ne peut être laissé vide"}} {{/if}} {{if $_POST.category !== 'other'}} {{#load type="category" key=$_POST.category assign="cat"}} {{else}} {{:error message="Catégorie inconnue"}} {{/load}} {{/if}} {{if $cat.expense_type === 'km_vehicle'}} {{if !$_POST.vehicle|trim}} {{:error message="Aucun véhicule sélectionné"}} {{elseif $_POST.distance|intval < 1}} {{:error message="La distance parcourue ne peut être inférieure à 1 km"}} {{/if}} {{:include file="./_calcul_bareme.tpl" vehicule=$_POST.vehicle distance=$_POST.distance keep="resultat,calcul,bonus"}} {{if $bonus > 1}} {{:assign bonus="+20% (véhicule électrique)"}} {{else}} {{:assign bonus="Non"}} {{/if}} {{:assign var="vehicle_name" from="vehicles.%s"|args:$_POST.vehicle}} {{:assign amount=$resultat description="Départ : %s\nArrivée : %s\nVéhicule : %s\nDistance : %s km\nCalcul : %s\nBonus : %s\n\n%s"|args:$_POST.depart:$_POST.arrivee:$vehicle_name:$_POST.distance:$calcul:$bonus:$_POST.description|trim }} {{elseif $cat.expense_type === 'km_free'}} {{if $_POST.distance|intval < 1}} {{:error message="La distance parcourue ne peut être inférieure à 1 km"}} {{/if}} {{:assign bareme=$cat.price|money_currency:false:false:false}} {{:assign amount="%d*%d"|math:$_POST.distance:$cat.price|money_raw description="Départ : %s\nArrivée : %s\nDistance : %s km\nBarème : %s par km\n\n%s"|args:$_POST.depart:$_POST.arrivee:$_POST.distance:$bareme:$_POST.description|trim }} {{/if}} {{:save validate_schema="./line.schema.json" key="uuid" type="line" claim=$claim.key label=$_POST.label|trim category=$cat.label|or:'Autre' account=$cat.account|keys|key:0|strval|or:null description=$description|or:$_POST.description|trim|or:null amount=$amount|or:$_POST.amount|money_int reference=$_POST.reference|trim|or:null date=$_POST.date|parse_date|or:null id_project=$cat.id_project|intval|or:null }} {{:redirect to="details.html?key=%s"|args:$claim.key}} {{/form}} {{:admin_header title="Ajouter une ligne à la note de frais n°%d"|args:$claim.number}} {{:form_errors}}
Dépense
{{:input type="select" name="category" options=$categories_select label="Catégorie" required=true default_empty="— Sélectionner une catégorie —"}}
{{:input type="text" name="label" label="Libellé" help="Inclure ici une description courte, par exemple 'Abonnement fibre atelier, mars 2023'." required=true}}
{{:input type="money" name="amount" label="Montant total" required=true}}
Trajet
{{:input type="select" name="vehicle" options=$vehicles label="Type de véhicule" required=true}}
--
{{:input type="text" name="depart" label="Lieu de départ" required=true}} {{:input type="text" name="arrivee" label="Lieu d'arrivée" required=true}} {{:input type="number" name="distance" options=$vehicles label="Distance parcourue" required=true min=1 step=1 size=5}}
Le barème sera calculé lors de l'enregistrement, en fonction de la distance et du type de véhicule.
Détails
{{:input type="date" name="date" label="Date de la dépense"}} {{:input type="text" name="reference" label="Référence du justificatif" help="Par exemple : numéro de facture, nom du magasin, etc."}} {{:input type="textarea" name="description" label="Description"}}

{{:button type="submit" shape="right" label="Enregistrer" name="save" class="main"}}

{{:admin_footer}}