diff --git a/.oca/oca-port/blacklist/fieldservice_account.json b/.oca/oca-port/blacklist/fieldservice_account.json new file mode 100644 index 0000000000..e9e8321f78 --- /dev/null +++ b/.oca/oca-port/blacklist/fieldservice_account.json @@ -0,0 +1,6 @@ +{ + "pull_requests": { + "OCA/field-service#997": "dotfiles", + "OCA/field-service#999": "(auto) Nothing to port from PR #999" + } +} diff --git a/.oca/oca-port/blacklist/fieldservice_sale.json b/.oca/oca-port/blacklist/fieldservice_sale.json new file mode 100644 index 0000000000..4bd4ff0d90 --- /dev/null +++ b/.oca/oca-port/blacklist/fieldservice_sale.json @@ -0,0 +1,6 @@ +{ + "pull_requests": { + "OCA/field-service#931": "(auto) Nothing to port from PR #931", + "OCA/field-service#1122": "(auto) Nothing to port from PR #1122" + } +} diff --git a/fieldservice_account/models/fsm_stage.py b/fieldservice_account/models/fsm_stage.py index c185982bc0..46885298c5 100644 --- a/fieldservice_account/models/fsm_stage.py +++ b/fieldservice_account/models/fsm_stage.py @@ -15,4 +15,4 @@ def _get_invoiceable_stage(self): by other criteria :return: """ - return self.search(["is_invoiceable", "=", "True"]) + return self.search([("is_invoiceable", "=", "True")]) diff --git a/fieldservice_sale/models/sale_order_line.py b/fieldservice_sale/models/sale_order_line.py index 77736364f4..6a87864d17 100644 --- a/fieldservice_sale/models/sale_order_line.py +++ b/fieldservice_sale/models/sale_order_line.py @@ -1,7 +1,7 @@ # Copyright (C) 2019 Brian McMaster # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import Command, api, fields, models class SaleOrderLine(models.Model): @@ -53,8 +53,31 @@ def create(self, vals_list): line.order_id._field_service_generation() return lines + def _get_invoiceable_fsm_order_domain(self): + """ + Override this method to define more search criteria for invoiceable + fsm order + :return: + """ + invoiceable_stage_ids = self.env["fsm.stage"]._get_invoiceable_stage() + dom = [ + "|", + ("sale_line_id", "=", self.id), + ("sale_id", "=", self.order_id.id), + ("invoice_lines", "=", False), + ] + if invoiceable_stage_ids: + dom.append(("stage_id", "in", invoiceable_stage_ids.ids)) + return dom + + def _get_invoiceable_fsm_order(self): + dom = self._get_invoiceable_fsm_order_domain() + return self.env["fsm.order"].search(dom) + def _prepare_invoice_line(self, **optional_values): res = super()._prepare_invoice_line(**optional_values) if self.fsm_order_id: - res.update({"fsm_order_ids": [(4, self.fsm_order_id.id)]}) + fsm_orders = self._get_invoiceable_fsm_order() + if fsm_orders: + res.update({"fsm_order_ids": [Command.set(fsm_orders.ids)]}) return res diff --git a/fieldservice_sale_recurring/models/sale_order_line.py b/fieldservice_sale_recurring/models/sale_order_line.py index 4fc608d10f..d37803a354 100644 --- a/fieldservice_sale_recurring/models/sale_order_line.py +++ b/fieldservice_sale_recurring/models/sale_order_line.py @@ -2,7 +2,7 @@ # Copyright (C) 2019 Open Source Integrators # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, fields, models +from odoo import Command, _, fields, models class SaleOrderLine(models.Model): @@ -86,5 +86,5 @@ def _prepare_invoice_line(self, **optional_values): if self.fsm_recurring_id: fsm_orders = self._get_invoiceable_fsm_order() if fsm_orders: - res.update({"fsm_order_ids": [(6, 0, fsm_orders.ids)]}) + res.update({"fsm_order_ids": [Command.set(fsm_orders.ids)]}) return res