Skip to content

Commit

Permalink
[IMP] base_import_pdf_by_template: Add fixed value compatibility to d…
Browse files Browse the repository at this point in the history
…ifferent types of fields

TT51379
  • Loading branch information
victoralmau committed Oct 23, 2024
1 parent c5da9c3 commit acd8694
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 7 deletions.
1 change: 0 additions & 1 deletion base_import_pdf_by_template/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ Known issues / Roadmap
======================

- Add operator in template lines (= or ilike)
- Add support for selection fields as default value.
- Simplify auto-detection (defining a text only to search the system
should search the corresponding regular expression).
- Allow compatibility with registration process created from email
Expand Down
10 changes: 10 additions & 0 deletions base_import_pdf_by_template/demo/base_import_pdf_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,16 @@
<field name="value_type">fixed</field>
<field name="fixed_value" ref="base.user_admin" />
</record>
<record
id="demo_base_import_pdf_template_res_partner_header_05"
model="base.import.pdf.template.line"
>
<field name="template_id" ref="demo_base_import_pdf_template_res_partner" />
<field name="related_model">header</field>
<field name="field_id" ref="base.field_res_partner__ref" />
<field name="value_type">fixed</field>
<field name="fixed_value_char">fixed-ref</field>
</record>
<record
id="demo_base_import_pdf_template_res_partner_line_01"
model="base.import.pdf.template.line"
Expand Down
37 changes: 35 additions & 2 deletions base_import_pdf_by_template/models/base_import_pdf_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,9 @@ def _prepare_ctx_from_model(self, model):
for fixed_key in list(fixed_fields.keys()):
ctx_key = "default_%s" % fixed_key
fixed_value = fixed_fields[fixed_key]
ctx.update({ctx_key: fixed_value.id})
if isinstance(fixed_value, models.Model):
fixed_value = fixed_value.id
ctx.update({ctx_key: fixed_value})
return ctx

def _get_fixed_fields_from_model(self, model):
Expand All @@ -136,7 +138,7 @@ def _get_fixed_fields_from_model(self, model):
lambda x: x.model == model and x.value_type == "fixed"
)
for fixed_field in fixed_fields:
res[fixed_field.field_name] = fixed_field.fixed_value
res[fixed_field.field_name] = fixed_field._get_fixed_value()
return res

def _get_field_header_values(self, text):
Expand Down Expand Up @@ -278,6 +280,16 @@ class BaseImportPdfTemplateLine(models.Model):
default="variable",
string="Value type",
)
fixed_value_char = fields.Char()
fixed_value_date = fields.Date()
fixed_value_datetime = fields.Datetime()
fixed_value_float = fields.Float()
fixed_value_html = fields.Html()
fixed_value_integer = fields.Integer()
fixed_value_selection = fields.Many2one(
comodel_name="ir.model.fields.selection", domain="[('field_id', '=', field_id)]"
)
fixed_value_text = fields.Text()
fixed_value = fields.Reference(
selection="_selection_reference_value",
string="Fixed value",
Expand Down Expand Up @@ -316,6 +328,27 @@ def _compute_model(self):
else item.template_id.child_model
)

def _get_fixed_field_name_ttype_mapped(self):
return {
"char": "fixed_value_char",
"date": "fixed_value_date",
"datetime": "fixed_value_datetime",
"float": "fixed_value_float",
"html": "fixed_value_html",
"integer": "fixed_value_integer",
"selection": "fixed_value_selection",
"text": "fixed_value_text",
"many2one": "fixed_value",
}

def _get_fixed_value(self):
self.ensure_one()
f_name = self._get_fixed_field_name_ttype_mapped()[self.field_ttype]
f_value = self[f_name]
if self.field_ttype == "selection":
f_value = f_value.value
return f_value

def _replace_text(self, text, letters, prefix):
for letter in letters:
text = text.replace(letter, prefix + letter)
Expand Down
1 change: 0 additions & 1 deletion base_import_pdf_by_template/readme/ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
- Add operator in template lines (= or ilike)
- Add support for selection fields as default value.
- Simplify auto-detection (defining a text only to search the system
should search the corresponding regular expression).
- Allow compatibility with registration process created from email alias
Expand Down
1 change: 0 additions & 1 deletion base_import_pdf_by_template/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,6 @@ <h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<h1><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h1>
<ul class="simple">
<li>Add operator in template lines (= or ilike)</li>
<li>Add support for selection fields as default value.</li>
<li>Simplify auto-detection (defining a text only to search the system
should search the corresponding regular expression).</li>
<li>Allow compatibility with registration process created from email
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ def test_wizard_base_import_pdf_by_template_01(self):
self.assertEqual(record.country_id.code, "ES")
self.assertEqual(record.industry_id.name, "Food")
self.assertEqual(record.user_id, self.user)
self.assertEqual(record.ref, "fixed-ref")
self.assertEqual(len(record.child_ids), 3)
child_1 = record.child_ids.filtered(lambda x: x.name == "Child 1")
self.assertEqual(child_1.street, "Address 1")
Expand Down Expand Up @@ -118,6 +119,7 @@ def test_wizard_base_import_pdf_by_template_02(self):
self.assertEqual(record.country_id.code, "ES")
self.assertEqual(record.industry_id.name, "Food")
self.assertEqual(record.user_id, self.user)
self.assertEqual(record.ref, "fixed-ref")
self.assertEqual(len(record.child_ids), 3)
child_1 = record.child_ids.filtered(lambda x: x.name == "Child 1")
self.assertEqual(child_1.street, "Address 1")
Expand All @@ -128,6 +130,7 @@ def test_wizard_base_import_pdf_by_template_02(self):
child_3 = record.child_ids.filtered(lambda x: x.name == "Child 3")
self.assertEqual(child_3.street, "Address 3")
self.assertEqual(child_3.country_id.code, "ES")
self.assertTrue(record.message_ids) # Error message to set ref to childs

def test_wizard_base_import_pdf_by_template_error(self):
self.env.ref(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,59 @@
/>
<field
name="default_value"
string="Fixed value"
invisible="value_type == 'fixed' or not field_relation"
/>
<field
name="log_distinct_value"
invisible="not field_id or value_type == 'fixed'"
/>
<!-- Fixed value !-->
<field
name="fixed_value_char"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'char'"
/>
<field
name="fixed_value_date"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'date'"
/>
<field
name="fixed_value_datetime"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'datetime'"
/>
<field
name="fixed_value_float"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'float'"
/>
<field
name="fixed_value_html"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'html'"
/>
<field
name="fixed_value_integer"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'integer'"
/>
<field
name="fixed_value_selection"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'selection'"
/>
<field
name="fixed_value_text"
string="Fixed value"
invisible="value_type != 'fixed' or field_ttype != 'text'"
/>
<field
name="fixed_value"
invisible="value_type != 'fixed' or not field_relation"
/>
<!-- Fixed value !-->
<field name="field_ttype" invisible="1" />
<field
name="date_format"
Expand Down
17 changes: 17 additions & 0 deletions test_base_import_pdf_by_template/demo/base_import_pdf_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@
<field name="pattern">ES[0-9]{10}</field>
<field name="value_type">variable</field>
</record>
<record id="po_decathlon_line_origin" model="base.import.pdf.template.line">
<field name="template_id" ref="po_decathlon" />
<field name="related_model">header</field>
<field name="field_id" ref="purchase.field_purchase_order__origin" />
<field name="value_type">fixed</field>
<field name="fixed_value_char">fixed-origin</field>
</record>
<record id="po_decathlon_line_product_id" model="base.import.pdf.template.line">
<field name="template_id" ref="po_decathlon" />
<field name="related_model">lines</field>
Expand Down Expand Up @@ -215,6 +222,16 @@
<field name="value_type">fixed</field>
<field name="fixed_value" ref="partner_tecnativa" />
</record>
<record id="invoice_tecnativa_line_move_type" model="base.import.pdf.template.line">
<field name="template_id" ref="invoice_tecnativa" />
<field name="related_model">header</field>
<field name="field_id" ref="account.field_account_move__move_type" />
<field name="value_type">fixed</field>
<field
name="fixed_value_selection"
ref="account.selection__account_invoice_report__move_type__in_invoice"
/>
</record>
<record
id="invoice_tecnativa_line_product_id"
model="base.import.pdf.template.line"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def test_purchase_order_decathlon(self):
attachments = self._get_attachments(record)
self.assertEqual(record.partner_id, self.partner_decathlon)
self.assertEqual(record.partner_ref, "ES9812110233")
self.assertEqual(record.origin, "fixed-origin")
self.assertIn(attachment, attachments)
self.assertEqual(len(record.order_line), 5)
self.assertEqual(sum(record.order_line.mapped("product_uom_qty")), 5)
Expand All @@ -78,12 +79,13 @@ def test_purchase_order_decathlon(self):
def test_account_invoice_tecnativa(self):
attachment = self._create_ir_attachment("account_invoice_tecnativa.pdf")
wizard = self._create_wizard_base_import_pdf_upload("account.move", attachment)
# Similar context from Vendor invoices menu
wizard = wizard.with_context(**{"default_move_type": "in_invoice"})
# Similar context from Customer invoices menu
wizard = wizard.with_context(**{"default_move_type": "out_invoice"})
res = wizard.action_process()
self.assertEqual(res["res_model"], "account.move")
record = self.env[res["res_model"]].browse(res["res_id"])
attachments = self._get_attachments(record)
self.assertEqual(record.move_type, "in_invoice")
self.assertEqual(record.partner_id, self.partner_tecnativa)
self.assertIn(attachment, attachments)
self.assertEqual(len(record.invoice_line_ids), 6)
Expand Down

0 comments on commit acd8694

Please sign in to comment.