sale_usability+sale_stock_usability: update FR translation

sale_usability: remove wizard discount on all lines, which is mostly native
This commit is contained in:
Alexis de Lattre
2024-07-04 18:13:41 +02:00
parent a7fd6a1361
commit 8d584871d6
7 changed files with 80 additions and 393 deletions

View File

@@ -4,42 +4,38 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-12-03 21:31+0000\n"
"PO-Revision-Date: 2020-12-03 21:31+0000\n"
"Last-Translator: \n"
"POT-Creation-Date: 2024-07-04 16:09+0000\n"
"PO-Revision-Date: 2024-07-04 16:09+0000\n"
"Last-Translator: Alexis de Lattre <alexis.delattre@akretion.com>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_stock_usability
#: model:ir.model.fields.selection,name:sale_stock_usability.selection__sale_order__picking_status__cancel
msgid "Delivery Cancelled"
msgstr "Livraison annulée"
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: sale_stock_usability
#: model:ir.model.fields.selection,name:sale_stock_usability.selection__sale_order__picking_status__delivered
#: model_terms:ir.ui.view,arch_db:sale_stock_usability.view_sales_order_filter
msgid "Fully Delivered"
msgstr "Entierement Livré "
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__id
msgid "ID"
#: model:ir.model.fields,help:sale_stock_usability.field_sale_order__picking_policy
msgid ""
"If you deliver all products at once, the delivery order will be scheduled "
"based on the greatest product lead time. Otherwise, it will be based on the "
"shortest."
msgstr ""
"Si vous livrez tous les produits en même temps, le bon de livraison sera "
"planifié sur base du produit avec le délai le plus long. Autrement, il le sera"
" sur le plus court."
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__incoterm
msgid "Incoterm"
msgstr ""
msgstr "Incoterm"
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__incoterm_location
msgid "Incoterm Location"
msgstr "Lieu associé à l'incoterm"
#. module: sale_stock_usability
#: model:ir.model.fields,help:sale_stock_usability.field_sale_order__incoterm
@@ -47,33 +43,8 @@ msgid ""
"International Commercial Terms are a series of predefined commercial terms "
"used in international transactions."
msgstr ""
"Les Incoterms sont une série de termes commerciaux prédéfinie utilisés dans "
"les transactions internationales."
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: sale_stock_usability
#: model_terms:ir.ui.view,arch_db:sale_stock_usability.view_sales_order_filter
msgid "Not Fully Delivered"
msgstr "Livraison à faire"
#. module: sale_stock_usability
#: model:ir.model.fields.selection,name:sale_stock_usability.selection__sale_order__picking_status__no
msgid "Nothing to Deliver"
msgstr "Rien à livrer"
#. module: sale_stock_usability
#: model:ir.model.fields.selection,name:sale_stock_usability.selection__sale_order__picking_status__partially_delivered
msgid "Partially Delivered"
msgstr "Partiellement livré"
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__picking_status
msgid "Picking Status"
msgstr "Statut de la livraison"
"Les termes commerciaux internationaux sont une série de termes commerciaux "
"prédéfinis utilisés dans les transactions internationales."
#. module: sale_stock_usability
#: model:ir.model,name:sale_stock_usability.model_sale_order
@@ -81,11 +52,12 @@ msgid "Sales Order"
msgstr "Bon de commande"
#. module: sale_stock_usability
#: model:ir.model.fields.selection,name:sale_stock_usability.selection__sale_order__picking_status__to_deliver
msgid "To Deliver"
msgstr "À livrer"
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__picking_policy
msgid "Shipping Policy"
msgstr "Politique d'expédition"
#. module: sale_stock_usability
#: model:ir.model.fields,field_description:sale_stock_usability.field_sale_order__warehouse_id
#: model_terms:ir.ui.view,arch_db:sale_stock_usability.view_order_product_search
msgid "Warehouse"
msgstr "Entrepôt"

View File

@@ -23,8 +23,6 @@
'views/account_move.xml',
# 'views/res_company.xml', TODO uncomment once account_usa is ported
"views/res_partner.xml",
'wizards/sale_invoice_discount_all_lines_view.xml',
'security/ir.model.access.csv',
],
'installable': True,
}

View File

@@ -4,63 +4,21 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-09-18 08:22+0000\n"
"PO-Revision-Date: 2022-09-18 18:19+0200\n"
"POT-Creation-Date: 2024-07-04 16:06+0000\n"
"PO-Revision-Date: 2024-07-04 16:06+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"X-Generator: Poedit 2.0.4\n"
#. module: sale_usability
#: model:ir.model.fields.selection,name:sale_usability.selection__sale_invoice_discount_all_lines__line_type__all
msgid "All Lines"
msgstr "Toutes les lignes"
#. module: sale_usability
#: model:ir.model.fields.selection,name:sale_usability.selection__sale_invoice_discount_all_lines__line_type__products
msgid "All Product Lines"
msgstr "Toutes les gammes de produits"
#. module: sale_usability
#: model:ir.model.fields.selection,name:sale_usability.selection__sale_invoice_discount_all_lines__line_type__services
msgid "All Service Lines"
msgstr "Toutes les gammes de services"
#. module: sale_usability
#: code:addons/sale_usability/wizards/sale_invoice_discount_all_lines.py:0
#, python-format
msgid "Applied a {discount}% discount on {line_type}."
msgstr "Remise de {discount} % appliquée sur {line_type}."
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.sale_invoice_discount_all_lines_form
msgid "Apply"
msgstr "Appliquer"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_sale_invoice_discount_all_lines
msgid "Apply discount on all lines of a sale order or invoice"
msgstr "Appliquer une remise sur toutes les lignes d'un bon de commande ou d'une facture"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__line_type
msgid "Apply on"
msgstr "Appliquer à"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_order_form
msgid "Are you sure you want to cancel this sale order?"
msgstr "Êtes-vous sûr de vouloir annuler cette commande ?"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.sale_invoice_discount_all_lines_form
msgid "Cancel"
msgstr "Annuler"
msgstr "Êtes-vous sûr de vouloir annuler cette commande client ?"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_res_company
@@ -70,7 +28,7 @@ msgstr "Sociétés"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_res_partner
msgid "Contact"
msgstr "Contact"
msgstr ""
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__create_uid
@@ -88,8 +46,8 @@ msgid ""
"Creation date of draft/sent orders,\n"
"Confirmation date of confirmed orders."
msgstr ""
"Date de création des ordres en brouillons/envoyés,\n"
"Date de confirmation des commandes validées."
"Date de création des commandes à l'état brouillon/envoyés.\n"
"Date de confirmation des commandes confirmées."
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_sales_order_line_filter
@@ -107,55 +65,21 @@ msgid "Delivery Address"
msgstr "Adresse de livraison"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__discount
msgid "Discount"
msgstr "Remise"
#. module: sale_usability
#: code:addons/sale_usability/wizards/sale_invoice_discount_all_lines.py:0
#, python-format
msgid "Discount cannot be negative."
msgstr "La remise ne peut être négative."
#. module: sale_usability
#: model:ir.actions.act_window,name:sale_usability.account_move_discount_all_lines_action
#: model:ir.actions.act_window,name:sale_usability.sale_order_discount_all_lines_action
msgid "Discount on all lines"
msgstr "Remise sur toutes les lignes"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_account_move__display_name
#: model:ir.model.fields,field_description:sale_usability.field_product_template__display_name
#: model:ir.model.fields,field_description:sale_usability.field_res_company__display_name
#: model:ir.model.fields,field_description:sale_usability.field_res_partner__display_name
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__display_name
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__display_name
#: model:ir.model.fields,field_description:sale_usability.field_sale_order_line__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: sale_usability
#: code:addons/sale_usability/models/sale_order.py:0
#, python-format
msgid ""
"Due to the update of the ordered quantity on line '%s', the price has been updated according to pricelist '%s'.\n"
"Old price: %s\n"
"New price: %s"
msgstr ""
"En raison de la mise à jour de la quantité commandée sur la ligne '%s', le prix a été mis à jour selon la liste de "
"prix '%s'.\n"
"Ancien prix : %s\n"
"Nouveau prix : %s"
#. module: sale_usability
#: model:ir.model.fields,help:sale_usability.field_product_product__expense_policy
#: model:ir.model.fields,help:sale_usability.field_product_template__expense_policy
msgid ""
"Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to "
"a customer at its cost or sales price."
"Expenses and vendor bills can be re-invoiced to a customer.With this option,"
" a validated expense can be re-invoice to a customer at its cost or sales "
"price."
msgstr ""
"Les notes de frais et les factures des fournisseurs peuvent être refacturées à un client. Avec cette option, une "
"dépense validée peut être refacturée au client à son coût ou à son prix de vente."
"Les notes de frais et les factures fournisseurs peuvent être refacturées à "
"un client. Avec cette option, une dépense validée peut être refacturée au "
"client à son coût ou à son prix de vente."
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__fiscal_position_id
@@ -165,11 +89,13 @@ msgstr "Position fiscale"
#. module: sale_usability
#: model:ir.model.fields,help:sale_usability.field_sale_order__fiscal_position_id
msgid ""
"Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices.The default "
"value comes from the customer."
"Fiscal positions are used to adapt taxes and accounts for particular "
"customers or sales orders/invoices.The default value comes from the "
"customer."
msgstr ""
"Les positions fiscales sont utilisées pour adapter les taxes et les comptes comptables par clients ou par bons de "
"commande/factures. La valeur par défaut sera celle renseignée sur le client."
"Les positions fiscales sont utilisées pour adapter les taxes et les comptes "
"comptables pour un client spécifique ou pour une commande/facture. La valeur"
" par défaut sera celle renseignée sur le client."
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__has_attachment
@@ -179,41 +105,17 @@ msgstr "Possède une pièce jointe"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__has_discount
msgid "Has Discount"
msgstr "A une réduction"
msgstr "A une remise"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_account_move__id
#: model:ir.model.fields,field_description:sale_usability.field_product_template__id
#: model:ir.model.fields,field_description:sale_usability.field_res_company__id
#: model:ir.model.fields,field_description:sale_usability.field_res_partner__id
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__id
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__id
#: model:ir.model.fields,field_description:sale_usability.field_sale_order_line__id
msgid "ID"
msgstr "ID"
#. module: sale_usability
#: model:ir.model.fields,help:sale_usability.field_sale_order__pricelist_id
msgid "If you change the pricelist, only newly added lines will be affected."
msgstr ""
"Si vous modifiez la liste de prix; seules les lignes de bon de commande ajoutées après cette modification seront "
"affectées."
#. module: sale_usability
#: model:ir.model.fields,help:sale_usability.field_sale_order_line__product_barcode
msgid "International Article Number used for product identification."
msgstr "Numéro d'article international (IAN) utilisé pour identifier cet article."
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__move_id
msgid "Invoice"
msgstr "Facture"
#. module: sale_usability
#: code:addons/sale_usability/wizards/sale_invoice_discount_all_lines.py:0
#, python-format
msgid "Invoice '%s' is not in draft state."
msgstr "La facture '%s' n'est pas en brouillon."
msgstr "Numéro d'article international utilisé pour identifier ce produit."
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__partner_invoice_id
@@ -232,13 +134,7 @@ msgid "Journal Entry"
msgstr "Pièce comptable"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_account_move____last_update
#: model:ir.model.fields,field_description:sale_usability.field_product_template____last_update
#: model:ir.model.fields,field_description:sale_usability.field_res_company____last_update
#: model:ir.model.fields,field_description:sale_usability.field_res_partner____last_update
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines____last_update
#: model:ir.model.fields,field_description:sale_usability.field_sale_order____last_update
#: model:ir.model.fields,field_description:sale_usability.field_sale_order_line____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
@@ -261,13 +157,11 @@ msgstr "Mentions légales figurant sur les devis"
#: model:ir.model.fields,help:sale_usability.field_product_product__service_type
#: model:ir.model.fields,help:sale_usability.field_product_template__service_type
msgid ""
"Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic "
"account.\n"
"Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
"Create a task and track hours: Create a task on the sales order validation and track the work hours."
msgstr ""
"Définition manuelle des quantités sur la commande : facture selon les quantités saisies manuellement, sans création de "
"compte analytique.\n"
"Définition manuelle des quantités sur la commande : facture selon les quantités saisies manuellement, sans création de compte analytique.\n"
" Feuilles de temps sur les contrats : facture selon les heures passées en fonction de la feuille de temps liée.\n"
" Créer une tâche et suivre les heures : crée une tâche à validation de la commande et effectue un suivi du temps passé."
@@ -277,9 +171,9 @@ msgid "Missing Attachment"
msgstr "Pièce jointe manquante"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_invoice_discount_all_lines__sale_id
msgid "Order"
msgstr "Commande"
#: model:ir.model,name:sale_usability.model_sale_invoice_discount_all_lines
msgid "None"
msgstr "Aucune"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__date_order
@@ -293,36 +187,30 @@ msgid ""
"Ordered Quantity: Invoice quantities ordered by the customer.\n"
"Delivered Quantity: Invoice quantities delivered to the customer."
msgstr ""
"Quantité commandée : facturez les quantités commandées par le client.\n"
"Quantité livrée : facturez les quantités livrées au client."
"Quantité commandée : facture les quantités commandées par le client.\n"
"Quantité livrée : facture les quantités livrées au client."
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__payment_term_id
msgid "Payment Terms"
msgstr "Conditions de paiement"
#. module: sale_usability
#: code:addons/sale_usability/models/sale_order.py:0
#, python-format
msgid "Price updated"
msgstr "Prix mis à jour"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__pricelist_id
msgid "Pricelist"
msgstr "Liste de prix"
#. module: sale_usability
#: model:ir.actions.act_window,name:sale_usability.product_pricelist_item_action
#: model:ir.ui.menu,name:sale_usability.product_pricelist_item_menu
msgid "Pricelist Items"
msgstr "Éléments de la liste de prix"
msgid "Price Rules"
msgstr "Règles des listes de prix"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_order_form
msgid "Print"
msgstr "Imprimer"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_product_template
msgid "Product"
msgstr "Produit"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order_line__product_barcode
msgid "Product Barcode"
@@ -331,17 +219,7 @@ msgstr "Code barre du produit"
#. module: sale_usability
#: model:ir.ui.menu,name:sale_usability.product_category_sale_menu
msgid "Product Categories"
msgstr "Catégories d'articles"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_product_template
msgid "Product Template"
msgstr "Modèle d'article"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_company_form
msgid "Quotation Legal Terms"
msgstr "Mentions légales figurant sur les devis"
msgstr "Catégories de produit"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_product_product__expense_policy
@@ -349,37 +227,17 @@ msgstr "Mentions légales figurant sur les devis"
msgid "Re-Invoice Expenses"
msgstr "Re-facturer les notes de frais"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_account_bank_statement_line__sale_count
#: model:ir.model.fields,field_description:sale_usability.field_account_move__sale_count
#: model:ir.model.fields,field_description:sale_usability.field_account_payment__sale_count
msgid "Sale Order Count"
msgstr "Nombre de commandes clients"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_account_bank_statement_line__sale_ids
#: model:ir.model.fields,field_description:sale_usability.field_account_move__sale_ids
#: model:ir.model.fields,field_description:sale_usability.field_account_payment__sale_ids
#: model_terms:ir.ui.view,arch_db:sale_usability.account_invoice_form
msgid "Sale Orders"
msgstr "Bons de commande"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.sale_report_tree
msgid "Sales Analysis"
msgstr "Analyse des ventes"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_sale_order
msgid "Sales Order"
msgstr "Bon de commande client"
msgstr "Bon de commande"
#. module: sale_usability
#: model:ir.model,name:sale_usability.model_sale_order_line
#: model:ir.model.fields,field_description:sale_usability.field_product_product__sale_line_warn
#: model:ir.model.fields,field_description:sale_usability.field_product_template__sale_line_warn
msgid "Sales Order Line"
msgstr "Ligne de bons de commande"
msgstr "Ligne de commande"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_res_partner__sale_warn
@@ -393,16 +251,18 @@ msgstr "Avertissements de vente"
#: model:ir.model.fields,help:sale_usability.field_res_partner__sale_warn
#: model:ir.model.fields,help:sale_usability.field_res_users__sale_warn
msgid ""
"Selecting the \"Warning\" option will notify user with the message, Selecting \"Blocking Message\" will throw an "
"exception with the message and block the flow. The Message has to be written in the next field."
"Selecting the \"Warning\" option will notify user with the message, "
"Selecting \"Blocking Message\" will throw an exception with the message and "
"block the flow. The Message has to be written in the next field."
msgstr ""
"Sélectionner l'option 'Avertissement' informera l'utilisateur du Message. Sélectionner 'Message Bloquant' lancera une "
"exception avec le message et bloquera le flux. Le message doit être écrit dans le champ suivant."
"Sélectionner l'option 'Avertissement' affichera le message à l'utilisateur. "
"Sélectionner 'Message Bloquant' lancera une exception avec le message et "
"bloquera le flux. Le message doit être écrit dans le champ suivant."
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_order_form
msgid "Send Order Acknowledgement"
msgstr "Confirmation de commande"
msgstr "Envoyer une confirmation de commande"
#. module: sale_usability
#: model_terms:ir.ui.view,arch_db:sale_usability.view_sales_order_filter
@@ -412,16 +272,10 @@ msgstr "État"
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_sale_order__amount_tax
msgid "Taxes"
msgstr "Taxes"
#. module: sale_usability
#: code:addons/sale_usability/wizards/sale_invoice_discount_all_lines.py:0
#, python-format
msgid "There are no lines to apply the discount on."
msgstr "Il n'y a pas de lignes sur lesquelles appliquer la remise."
msgstr ""
#. module: sale_usability
#: model:ir.model.fields,field_description:sale_usability.field_product_product__service_type
#: model:ir.model.fields,field_description:sale_usability.field_product_template__service_type
msgid "Track Service"
msgstr "Opérateur de suivi"
msgstr "Suivre le service"

View File

@@ -1,3 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_invoice_discount_all_lines_sale,Full access on sale.invoice.discount.all.lines to Sale user,model_sale_invoice_discount_all_lines,sales_team.group_sale_salesman,1,1,1,1
access_sale_invoice_discount_all_lines_invoice,Full access on sale.invoice.discount.all.lines to Invoice user,model_sale_invoice_discount_all_lines,account.group_account_invoice,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_sale_invoice_discount_all_lines_sale Full access on sale.invoice.discount.all.lines to Sale user model_sale_invoice_discount_all_lines sales_team.group_sale_salesman 1 1 1 1
3 access_sale_invoice_discount_all_lines_invoice Full access on sale.invoice.discount.all.lines to Invoice user model_sale_invoice_discount_all_lines account.group_account_invoice 1 1 1 1

View File

@@ -10,7 +10,7 @@
<!-- This is in the sale_usability module instead of the product_usability module
because the parent menu entry is in the sale module -->
<record id="product_pricelist_item_action" model="ir.actions.act_window">
<field name="name">Pricelist Items</field>
<field name="name">Price Rules</field>
<field name="res_model">product.pricelist.item</field>
<field name="view_mode">tree,form</field>
<field name="context">{'product_pricelist_item_main_view': True}</field>

View File

@@ -2,94 +2,12 @@
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models, fields, _
from odoo.tools import float_compare
from odoo.exceptions import UserError
from odoo import models, fields
class SaleInvoiceDiscountAllLines(models.TransientModel):
_name = 'sale.invoice.discount.all.lines'
_description = 'Apply discount on all lines of a sale order or invoice'
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if self._context.get('active_id'):
if self._context.get('active_model') == 'sale.order':
res['sale_id'] = self._context['active_id']
elif self._context.get('active_model') == 'account.move':
res['move_id'] = self._context['active_id']
move = self.env['account.move'].browse(res['move_id'])
if move.state != 'draft':
raise UserError(
_("Invoice '%s' is not in draft state.")
% self.move_id.display_name)
else:
# I don't translate this because it should never happen.
raise UserError(
"This wizard can only work on a sale order or an invoice.")
else:
# I don't translate this because it should never happen.
raise UserError("Missing active_id in context. It should never happen.")
return res
sale_id = fields.Many2one(
'sale.order', string='Order', readonly=True)
move_id = fields.Many2one(
'account.move', string='Invoice', readonly=True)
discount = fields.Float(
string='Discount', digits='Discount', required=True)
line_type = fields.Selection([
('all', 'All Lines'),
('products', 'All Product Lines'),
('services', 'All Service Lines'),
], default='all', required=True, string='Apply on')
def run(self):
prec = self.env['decimal.precision'].precision_get('Discount')
if float_compare(self.discount, 0, precision_digits=prec) < 0:
raise UserError(_("Discount cannot be negative."))
if self.sale_id:
record = self.sale_id
line_obj = self.env['sale.order.line']
domain = [('order_id', '=', self.sale_id.id)]
elif self.move_id:
record = self.move_id
if self.move_id.state != 'draft':
raise UserError(_(
"Invoice '%s' is not in draft state.") % self.move_id.display_name)
line_obj = self.env['account.move.line']
domain = [
('move_id', '=', self.move_id.id),
('exclude_from_invoice_tab', '=', False),
]
else:
# I don't translate this because it should never happen.
raise UserError(
"The wizard is not linked to a sale order nor an invoice. "
"This should never happen.")
domain += [('display_type', '=', False)]
if self.line_type == 'products':
domain += [
('product_id', '!=', False),
('product_id.type', '!=', 'service'),
]
elif self.line_type == 'services':
domain += [
('product_id', '!=', False),
('product_id.type', '=', 'service'),
]
lines = line_obj.search(domain)
if not lines:
raise UserError(_("There are no lines to apply the discount on."))
lines.with_context(check_move_validity=False).write({'discount': self.discount})
if self.move_id:
self.move_id.with_context(
check_move_validity=False)._recompute_dynamic_lines(
recompute_all_taxes=True)
self.move_id._check_balanced()
record.message_post(body=_(
"Applied a {discount}% discount on {line_type}.").format(
discount=self.discount,
line_type=self._fields['line_type'].convert_to_export(
self.line_type, self)))
_description = 'None'
# Remove because this feature is now mostly native
# TODO 04/07/2024 remove later to avoid ORM bug: it crashes when reloading module
# KeyError: 'sale.invoice.discount.all.lines'

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2022 Akretion France (http://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<record id="sale_invoice_discount_all_lines_form" model="ir.ui.view">
<field name="model">sale.invoice.discount.all.lines</field>
<field name="arch" type="xml">
<form>
<group name="main">
<field name="sale_id" attrs="{'invisible': [('sale_id', '=', False)]}"/>
<field name="move_id" attrs="{'invisible': [('move_id', '=', False)]}"/>
<label for="discount"/>
<div name="discount">
<field name="discount" class="oe_inline"/> %%
</div>
<field name="line_type"/>
</group>
<footer>
<button name="run" type="object"
class="btn-primary" string="Apply"/>
<button special="cancel" string="Cancel" class="btn-default"/>
</footer>
</form>
</field>
</record>
<record id="account_move_discount_all_lines_action" model="ir.actions.act_window">
<field name="name">Discount on all lines</field>
<field name="res_model">sale.invoice.discount.all.lines</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
<field name="binding_model_id" ref="account.model_account_move" />
<field name="binding_view_types">form</field>
</record>
<record id="sale_order_discount_all_lines_action" model="ir.actions.act_window">
<field name="name">Discount on all lines</field>
<field name="res_model">sale.invoice.discount.all.lines</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="groups_id" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
<field name="binding_model_id" ref="sale.model_sale_order" />
<field name="binding_view_types">form</field>
</record>
</odoo>