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
Bonjour,
je déterre ce post car je pense que cela fait sens de venir poser ma question ici.
Depuis la création de ce post, est apparue la possibilité de mettre un article en option, en cochant la dite case dans le devis :
Le prix de lâarticle nâest alors pas pris en compte etc. Câest parfait.
En revanche, ce nâest vraiment pas trĂšs lisible sur le devis PDF. En effet, de base tout parait normal si ce nâest que le total ne correspond pas aux lignes du devis.
Jâai essayĂ© de modifiĂ© le format dâimpression en ajoutant le champ âest une optionâ dans les colonnes du tableau dâarticles pour faire apparaitre le fait que câest une option, mais cela nâest toujours pas hyper convaincant, voir ci-dessous.
jâaurais aimĂ© pouvoir modifier lâordre des lignes du tableau pour pouvoir avoir quelque chose comme ceci :
(Est une option)
Matériau
Bois encore plus tout beau
Et que le Montant soit entre parenthÚses également.
âŠ
Que ça ressemble Ă un article en option comme on y est habituĂ©s dans tous nos devis de fournisseurs quoiâŠ
Une piste ? 
Merci !
Bonjour Nathan,
Avec lâĂ©diteur de format dâimpression basique, il faut que lâaffichage voulu soit prĂ©vu dans le code de Dokos pour que ça sâaffiche comme on le souhaite âcomme par magieâ. Sinon il faut passer par du HTML.
Je suis dâaccord avec ta remarque, il faudrait quâon propose un affichage standard pour ce genre de cas.
Peux-tu ouvrir un ticket sur Gitlab pour demander une Ă©volution en faisant une proposition dâaffichage qui te semble pertinent ? Ca nous aiderait Ă valider la fonctionnalitĂ© et Ă dĂ©clencher des dĂ©veloppements.
Merci,
Charles-Henri