oryxr
1
Bonjour,
Sur mes devis, je souhaite proposer des articles en options. câest Ă dires quâils apparaissent sans ĂȘtre pris dans le calcul du total.
Comment puis-je le faire ?
- ajout dâune case option ?
- mettre Ă zĂ©ro la quantitĂ© ? jâai un message de non autorisĂ©.
Je veux aussi mettre des prestations gratuites, mais la vĂ©rification des prix me lâinterdit. Comment faire pour avoir cette vĂ©rification et mettre des articles Ă 0 ?
Merci pour ces infos
Bonjour @oryxr,
Lâajout dâune ligne avec un tarif Ă 0 passera forcĂ©ment par un tarif Ă 0 (ou un champ de texte libre, mais je ne pense que ce soit ce que vous cherchez).
Pour la vĂ©rification des prix, vous parlez bien de lâoption âValider le prix de vente de lâarticle par rapport Ă son prix dâachat ou son taux de valorisationâ dans les paramĂštres des ventes ?
Si cette option est activĂ©e, il nây a que deux possibilitĂ©s pour que le systĂšme nâapplique pas ce contrĂŽle sur une ligne:
- quâil nây ait pas de code article: Câest possible dans les factures, mais pas encore dans les devis, mĂȘme si câest Ă lâĂ©tude cĂŽtĂ© ERPNext: fix(selling): allow arbitrary quotation lines by casesolved-co-uk · Pull Request #33215 · frappe/erpnext · GitHub
- avoir la case âEst un article gratuitâ cochĂ©; Mais cette case ne peut ĂȘtre cochĂ©e que si lâarticle a Ă©tĂ© ajoutĂ© automatiquement via une rĂšgle de prix
Donc malheureusement, Ă ce stade je nâai pas dâautre option Ă vous proposer que de dĂ©sactiver la validation du prix si vous souhaitez mettre des articles gratuits. Mais ça devrait changer bientĂŽt si la proposition est acceptĂ©e cĂŽtĂ© ERPNext, sinon on pourra rĂ©flĂ©chir Ă une solution cĂŽtĂ© Dokos.
Pour les options par contre, je ne vois pas trop dâautre solution que de passer par la description ou un tableau additionnel via une personnalisation si ça ne doit pas ĂȘtre pris en compte dans le total.
Peut-ĂȘtre quâune solution intermĂ©diaire serait dâafficher des sections avec des sous-totaux en jouant sur le format dâimpression.
Voici un exemple de champ HTML personnalisĂ© pour lâaffichage des lignes du devis dans des sections en fonction dâun champ personnalisĂ© categorie
. Ca peut vous servir de base:
<div data-fieldname="items" data-fieldtype="Table">
<table class="table table-bordered table-condensed">
<thead>
<tr class="table-header">
<th class="text-left;" data-fieldname="items" data-fieldtype="Table" style="width: 40%;">
{{ _("LIBĂLLĂ") }}
</th>
<th class="text-left;" data-fieldname="items" data-fieldtype="Table" style="width: 10%;">
{{ _("QUANT") }}
</th>
<th class="text-left;" data-fieldname="items" data-fieldtype="Table" style="width: 20%;">
{{ _("PUHT") }}
</th>
<th class="text-left;" data-fieldname="items" data-fieldtype="Table" style="width: 20%;">
{{ _("TOTAL HT") }}
</th>
<th class="text-left;" data-fieldname="items" data-fieldtype="Table" style="width: 10%;">
{{ _("TVA") }}
</th>
</tr>
</thead>
<tbody>
{% set ns = namespace(lastTitle=None, lastAmount=0.0, totalAmount=0.0) %}
{% for d in doc.items %}
{% if d.categorie and d.categorie != ns.lastTitle %}
{% set ns.lastTitle = d.categorie %}
<tr><td></td></tr>
<tr>
<td class="bold print-title" colspan="5">{{ d.categorie or "" }}</td>
</tr>
{% endif %}
{% set ns.lastAmount = ns.lastAmount + frappe.utils.flt(d.amount) %}
{% set ns.totalAmount = ns.totalAmount + frappe.utils.flt(d.amount) %}
<tr>
<td>
<div class="value">{{ frappe.format(d.item_name) }}</div>
<div class="text-muted small">{{ frappe.format(d.description) }}</div>
</td>
<td>
<div class="value">{{ frappe.format(d.qty) }}</div>
</td>
<td>
<div class="value">{{ frappe.format(d.rate, df={"fieldtype": "Currency"}, doc=doc, currency=doc.currency) }}</div>
</td>
<td>
<div class="value">{{ frappe.format(d.amount, df={"fieldtype": "Currency"}, doc=doc, currency=doc.currency) }}</div>
</td>
<td>
<div class="value">{{ frappe.format(d.tax_rate) }} %</div>
</td>
</tr>
{% if (loop.index == loop.length) or (loop.index < loop.length and doc.items[loop.index].categorie and doc.items[loop.index].categorie != d.categorie) %}
<tr>
<td colspan="3">
<div><strong>Sous-Total HT</strong></div>
</td>
<td>
<div class="value bold"><strong>{{ frappe.utils.fmt_money(ns.lastAmount, currency=doc.currency) }}</strong></div>
</td>
</tr>
{% set ns.lastAmount = 0.0 %}
{% endif %}
{% endfor %}
{%- if doc.discount_amount -%}
<tr><td></td></tr>
<tr>
<td colspan="3">
<div><strong>Total HT</strong></div>
</td>
<td>
<div class="value"><strong>{{ frappe.utils.fmt_money(ns.totalAmount, currency=doc.currency) }}</strong></div>
</td>
</tr>
<tr>
<td class="bold print-title" colspan="3">{{ doc.discount_description or "Remise Exceptionnelle" }}</td>
<td class="bold print-title" colspan="2">{{ doc.get_formatted("discount_amount", doc) }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
Bon week-end
Bonjour,
Je rebondis sur ton message Charles-Henri !
Pouvoir avoir des sous-totaux serait absolument magnifique et amĂšnerait des rĂ©ponses Ă beaucoup dâautres questions que les options (en plus dâapporter une solution Ă©lĂ©gantes aux options aussi) ! Pour des devis Ă tiroir, des diffĂ©rentiations par coĂ»t unique / rĂ©current (mise en place dâun outil + maintenance annuelle par exemple), etc.
Je note lâastuce des catĂ©gories proposĂ©es, je vais voir si ça peut nous suffire, mais une intĂ©gration par dĂ©faut serait vraiment super ! Par exemple via une ligne (comme un article) du type ânouvelle sectionâ, oĂč lâintitulĂ© serait le titre de la section, avec des sous-totaux A, B(, etc.), puis le total habituel, du coup A+B(+âŠ) !
Merci en tout cas pour tout ça 
2 « J'aime »
oryxr
4
Bonjour @chdecultot, y a-t-il eu des avancé sur les sous-totaux ?
Jâai vu maintenant que lâon pouvais crĂ©er des lignes dans le devis sans crĂ©er des articles dans la base, câest dĂ©jĂ top.
Merci dâavance pour le retour. Je vais regarder si je peux faire un script qui dĂ©tecte la ligne de titre (1 case Ă cocher sous total) et faire la somme des produits qui la suive jusquâau sous-total dâaprĂšs.
Calcul fait dans le model jinja.
Bonjour @oryxr,
Nous nâavons pas encore eu le temps de travailler sur ce sujet.
Par contre, nous avons introduit il y a quelques jours la possibilité de mettre des articles alternatifs (options) développé par ERPNext: feat: Support for Alternative Items in Quotation by marination · Pull Request #33874 · frappe/erpnext · GitHub
Je nâai pas encore eu le temps de faire la documentation correspondante, mais câest dĂ©jĂ disponible dans Dokos pour ceux qui veulent essayer.
Bonne journée