diff --git a/kk_sites/models/sale_order.py b/kk_sites/models/sale_order.py index 0d899308..46ed9183 100644 --- a/kk_sites/models/sale_order.py +++ b/kk_sites/models/sale_order.py @@ -6,6 +6,25 @@ import json import requests from unicodedata import normalize +from odoo.exceptions import UserError + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + def _prepare_invoice(self): + lines = self.order_line.filtered( + lambda x: x.invoice_status != 'invoiced') + if all(not (line.is_invoice_ok and line.purchase_order) for line in + lines): + raise UserError('Não é possível faturar a ordem %s pois nenhuma das\ + linhas faturáveis está liberada para faturamento e ou a\ + ordem de compra não está preenchida.\n\ + Acesse as linhas que deseja faturar, marque a opção "Liberar\ + para faturamento" e preencha o campo "Ordem de compra"' + % self.name) + else: + return super(SaleOrder, self)._prepare_invoice() class SaleOrderLine(models.Model): @@ -18,6 +37,18 @@ class SaleOrderLine(models.Model): description_proposta = fields.Html(string="Descrição para proposta") + is_invoice_ok = fields.Boolean('Liberar para Faturamento') + + purchase_order = fields.Char('Ordem de Compra') + + def invoice_line_create(self, invoice_id, qty): + lines = super(SaleOrderLine, self).invoice_line_create(invoice_id, qty) + for line in lines: + if any(not (item.is_invoice_ok and item.purchase_order) for item + in line.sale_line_ids): + line.unlink() + return lines + def get_next_folder_number(self, project): link = project.kk_site_id.pasta_servidor res = self.env['kk.sites'].get_server_folders(link, False) diff --git a/kk_sites/views/sale_order.xml b/kk_sites/views/sale_order.xml index 8158b421..cc942df9 100644 --- a/kk_sites/views/sale_order.xml +++ b/kk_sites/views/sale_order.xml @@ -16,6 +16,43 @@