From 054bee90c0bb069c18a3b899f9c3856c2d13fccc Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 2 Feb 2018 18:27:22 +0100 Subject: [PATCH] Add module sale_force_invoice_status --- sale_confirm_wizard/__manifest__.py | 2 +- sale_force_invoice_status/__init__.py | 3 ++ sale_force_invoice_status/__manifest__.py | 28 ++++++++++++++++ sale_force_invoice_status/sale.py | 41 +++++++++++++++++++++++ sale_force_invoice_status/sale_view.xml | 26 ++++++++++++++ sale_order_add_bom/__manifest__.py | 2 +- sale_quotation_title/__manifest__.py | 2 +- sale_usability/__manifest__.py | 2 +- 8 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 sale_force_invoice_status/__init__.py create mode 100644 sale_force_invoice_status/__manifest__.py create mode 100644 sale_force_invoice_status/sale.py create mode 100644 sale_force_invoice_status/sale_view.xml diff --git a/sale_confirm_wizard/__manifest__.py b/sale_confirm_wizard/__manifest__.py index 20759b7..eeb563f 100644 --- a/sale_confirm_wizard/__manifest__.py +++ b/sale_confirm_wizard/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Sale Confirm Wizard', 'version': '10.0.1.0.0', - 'category': 'Sale Management', + 'category': 'Sales', 'license': 'AGPL-3', 'summary': 'Open a wizard when you confirm a sale order to update important info', 'description': """ diff --git a/sale_force_invoice_status/__init__.py b/sale_force_invoice_status/__init__.py new file mode 100644 index 0000000..78a9604 --- /dev/null +++ b/sale_force_invoice_status/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import sale diff --git a/sale_force_invoice_status/__manifest__.py b/sale_force_invoice_status/__manifest__.py new file mode 100644 index 0000000..1d99a42 --- /dev/null +++ b/sale_force_invoice_status/__manifest__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# © 2018 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Sale Force Invoice Status', + 'version': '10.0.1.0.0', + 'category': 'Sales', + 'license': 'AGPL-3', + 'summary': 'Allows to force a sale order to invoiced status', + 'description': """ +Sale Force Invoice Status +========================= + +Add a button on sale orders that allow to force the *Invoice Status* of the order to *Invoiced* (button restricted to members of the *Sale Manager* group). + +This module has been written by Alexis de Lattre from Akretion +. + """, + 'author': 'Akretion', + 'website': 'http://www.akretion.com', + 'depends': ['sale'], + 'data': [ + 'sale_view.xml', + ], + 'installable': True, +} diff --git a/sale_force_invoice_status/sale.py b/sale_force_invoice_status/sale.py new file mode 100644 index 0000000..fda5547 --- /dev/null +++ b/sale_force_invoice_status/sale.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2018 Akretion (http://www.akretion.com) +# @author Alexis de Lattre + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + def force_invoice_status_to_invoiced(self): + for order in self: + if order.state not in ('sale', 'done'): + raise UserError(_( + "You are trying to force the sale order %s to invoiced " + "but it is not in 'Sales Order' or 'Locked' state.") + % order.name) + if order.invoice_status != 'to invoice': + raise UserError(_( + "You are trying to force the sale order %s to invoiced " + "but its invoice status is not 'To Invoice'.") + % order.name) + order.order_line.write({'forced_to_invoiced': True}) + order.message_post(_( + "Order forced to Invoiced via the special button")) + + +class SaleOrderLine(models.Model): + _inherit = 'sale.order.line' + + forced_to_invoiced = fields.Boolean() + + @api.depends( + 'state', 'product_uom_qty', 'qty_delivered', 'qty_to_invoice', + 'qty_invoiced', 'forced_to_invoiced') + def _compute_invoice_status(self): + super(SaleOrderLine, self)._compute_invoice_status() + for line in self: + if line.state in ('sale', 'done') and line.forced_to_invoiced: + line.invoice_status = 'invoiced' diff --git a/sale_force_invoice_status/sale_view.xml b/sale_force_invoice_status/sale_view.xml new file mode 100644 index 0000000..16d01ac --- /dev/null +++ b/sale_force_invoice_status/sale_view.xml @@ -0,0 +1,26 @@ + + + + + + + sale_force_invoice_status.sale.order.form + sale.order + + + + + + + + diff --git a/sale_order_add_bom/__manifest__.py b/sale_order_add_bom/__manifest__.py index b6b6442..b5a5373 100644 --- a/sale_order_add_bom/__manifest__.py +++ b/sale_order_add_bom/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Sale Order Add Bom', 'version': '10.0.1.0.0', - 'category': 'Sales Management', + 'category': 'Sales', 'license': 'AGPL-3', 'summary': 'Wizard to select a bom from a sale order', 'description': """ diff --git a/sale_quotation_title/__manifest__.py b/sale_quotation_title/__manifest__.py index ef6398d..f5629dc 100644 --- a/sale_quotation_title/__manifest__.py +++ b/sale_quotation_title/__manifest__.py @@ -6,7 +6,7 @@ { 'name': 'Sale Quotation Title', 'version': '10.0.1.0.0', - 'category': 'Sale Management', + 'category': 'Sales', 'license': 'AGPL-3', 'summary': 'Adds a title field on quotations', 'description': """ diff --git a/sale_usability/__manifest__.py b/sale_usability/__manifest__.py index 4ac2500..4ca8552 100644 --- a/sale_usability/__manifest__.py +++ b/sale_usability/__manifest__.py @@ -6,7 +6,7 @@ { 'name': 'Sale Usability', 'version': '10.0.0.1.0', - 'category': 'Sale Management', + 'category': 'Sales', 'license': 'AGPL-3', 'summary': 'Show invoices on sale orders', 'description': """