Skip to content

Commit

Permalink
[IMP] sale_order_import: push errored lines to chatter and ignore the…
Browse files Browse the repository at this point in the history
…m when importing
  • Loading branch information
duongtq committed May 29, 2024
1 parent a61dbb6 commit bd5f1bc
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 9 deletions.
35 changes: 35 additions & 0 deletions sale_order_import/tests/test_order_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,41 @@ def test_order_import(self):
parsed_order_up_no_price_unit, order, "order"
)

def test_order_import_log_errored_line(self):
parsed_order = dict(
self.parsed_order,
partner={"email": "[email protected]"},
lines=[
{
"product": {"code": "errored"}, # No product exists with this code
"qty": 3,
"uom": {"unece_code": "C62"},
"price_unit": 12.42,
},
{
"product": {"code": "FURN_9999"},
"qty": 1,
"uom": {"unece_code": "C62"},
"price_unit": 1.42,
},
],
)
order = self.wiz_model.create_order(parsed_order, "pricelist")
self.assertEqual(order.client_order_ref, parsed_order["order_ref"])
self.assertEqual(len(order.order_line), 1)
self.assertEqual(
order.order_line.product_id.default_code,
parsed_order["lines"][1]["product"]["code"],
)
msg = (
"Errored lines on import:<br>"
+ "{'product': {'code': 'errored'}, 'qty': 3, 'uom':"
+ " {'unece_code': 'C62'}, 'price_unit': 12.42}"
+ "</p><ul><li>Odoo couldn't find any product corresponding to the"
+ " following information extracted from the business document"
)
self.assertTrue(order.message_ids.filtered(lambda m: msg in m.body))

def test_order_import_default_so_vals(self):
default = {"client_order_ref": "OVERRIDE"}
order = self.wiz_model.with_context(
Expand Down
32 changes: 23 additions & 9 deletions sale_order_import/wizard/sale_order_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,16 +263,30 @@ def _prepare_order(self, parsed_order, price_source):
so_vals["partner_invoice_id"] = invoicing_partner.id
if parsed_order.get("date"):
so_vals["date_order"] = parsed_order["date"]

errored_line = []
for line in parsed_order["lines"]:
# partner=False because we don't want to use product.supplierinfo
product = bdio._match_product(
line["product"], parsed_order["chatter_msg"], seller=False
)
uom = bdio._match_uom(line.get("uom"), parsed_order["chatter_msg"], product)
line_vals = self._prepare_create_order_line(
product, uom, so_vals, line, price_source
)
so_vals["order_line"].append((0, 0, line_vals))
try:
# partner=False because we don't want to use product.supplierinfo
product = bdio._match_product(
line["product"], parsed_order["chatter_msg"], seller=False
)
uom = bdio._match_uom(
line.get("uom"), parsed_order["chatter_msg"], product
)
line_vals = self._prepare_create_order_line(
product, uom, so_vals, line, price_source
)
so_vals["order_line"].append((0, 0, line_vals))
except UserError as exc:
errored_line.append(str(line) + f"<ul><li>{exc.args[0]}</li></ul>")

# Push to the chatter all errored lines if any
if errored_line:
msg = _("Errored lines on import:<br>")
errored_line.insert(0, msg)
errored_line_str = "".join(errored_line)
parsed_order["chatter_msg"].append(errored_line_str)

defaults = self.env.context.get("sale_order_import__default_vals", {}).get(
"order", {}
Expand Down

0 comments on commit bd5f1bc

Please sign in to comment.