From 38eca8d4b37a8c9f34b3b6cf5301e8613188af2d Mon Sep 17 00:00:00 2001 From: clementmbr Date: Mon, 4 Mar 2024 22:27:06 -0300 Subject: [PATCH] [IMP] changes on sale_import_base for sale_import_amazon --- .../models/sale_channel_importer.py | 27 +++++++++++++++---- sale_import_base/models/schemas.py | 2 ++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/sale_import_base/models/sale_channel_importer.py b/sale_import_base/models/sale_channel_importer.py index 25a01cf..cfff36a 100644 --- a/sale_import_base/models/sale_channel_importer.py +++ b/sale_import_base/models/sale_channel_importer.py @@ -13,6 +13,11 @@ class SaleChannelImporter(models.TransientModel): chunk_id = fields.Many2one("queue.job.chunk", "Chunk") + def _get_formatted_data(self): + """Override if you need to translate the Chunk's raw data into the current + SaleOrder schemas""" + return self.chunk_id._get_data() + def _get_existing_so(self, data): ref = data["name"] return self.env["sale.order"].search( @@ -22,14 +27,22 @@ def _get_existing_so(self, data): ] ) + def _manage_existing_so(self, existing_so, data): + """Override if you need to update existing Sale Order instead of raising + an error""" + raise ValidationError( + _("Sale Order {} has already been created").format(data["name"]) + ) + def run(self): # Get validated sale order - data = SaleOrder(**self.chunk_id._get_data()).model_dump() + formatted_data = self._get_formatted_data() + data = SaleOrder(**formatted_data).model_dump() existing_so = self._get_existing_so(data) if existing_so: - raise ValidationError( - _("Sale Order {} has already been created").format(data["name"]) - ) + self._manage_existing_so(self, existing_so, data) + return existing_so + so_vals = self._prepare_sale_vals(data) sale_order = self.env["sale.order"].create(so_vals) so_line_vals = self._prepare_sale_line_vals(data, sale_order) @@ -49,8 +62,12 @@ def _prepare_sale_vals(self, data): "partner_shipping_id": address_shipping.id, "client_order_ref": data["name"], "sale_channel_id": channel.id, - "pricelist_id": data.get("pricelist_id") or channel.pricelist_id.id, } + + pricelist_id = data.get("pricelist_id") or channel.pricelist_id.id + if pricelist_id: + so_vals["pricelist_id"] = pricelist_id + amount = data.get("amount") if amount: so_vals.update( diff --git a/sale_import_base/models/schemas.py b/sale_import_base/models/schemas.py index 1d3064e..f522892 100644 --- a/sale_import_base/models/schemas.py +++ b/sale_import_base/models/schemas.py @@ -63,3 +63,5 @@ class SaleOrder(BaseModel, metaclass=ExtendableModelMeta): payment: Optional[Payment] = None pricelist_id: Optional[int] = None date_order: Optional[date] = None + is_fulfilled_by_amazon: Optional[bool] = False + state: Optional[str] = None