Skip to content

Commit c7170e7

Browse files
author
Bonnerue
committed
[ADD] Import_helper_generic
1 parent 960bff6 commit c7170e7

File tree

6 files changed

+177
-0
lines changed

6 files changed

+177
-0
lines changed

import_helper_generic/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import wizards
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2023 Akretion France (http://www.akretion.com/)
2+
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4+
5+
{
6+
"name": "Import Helper Generic",
7+
"version": "18.0.1.0.0",
8+
"category": "Extra Tools",
9+
"license": "AGPL-3",
10+
"summary": "Helper methods to import database",
11+
"author": "Akretion",
12+
"depends": [
13+
"import_helper_base",
14+
"phone_validation", # would be nice to avoid depending on it ?
15+
"partner_import_helper",
16+
"product_import_helper",
17+
"account_import_helper",
18+
],
19+
"installable": True,
20+
"data": [
21+
# "security/ir.model.access.csv",
22+
"security/ir.model.access.csv",
23+
"views/technical_view_menu_generic.xml",
24+
],
25+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2+
access_import_helper_generic_full,Full access on import.helper.generic wizard,model_import_helper_generic,base.group_user,1,1,1,1
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<record id="import_form_helper_generic" model="ir.ui.view">
4+
<field name="name">generic custom Scripts import</field>
5+
<field name="model">import.helper.generic</field>
6+
<field name="arch" type="xml">
7+
<form string="Import generic">
8+
<group name="Files" string="Import file" col="2">
9+
<field name="file_import" string="xlsx file"/>
10+
</group>
11+
<group name="main" col="3">
12+
<button name="partner_import_generic" type="object" string="Partner import"/>
13+
</group>
14+
</form>
15+
</field>
16+
</record>
17+
18+
<record id="action_import_helper" model="ir.actions.act_window">
19+
<field name="name">Import base</field>
20+
<field name="type">ir.actions.act_window</field>
21+
<field name="res_model">import.helper.generic</field>
22+
<field name="view_id" ref="import_form_helper_generic"/>
23+
</record>
24+
25+
<menuitem
26+
action="action_import_helper"
27+
id="menu_action_import_helper"
28+
parent="base.next_id_9"
29+
/>
30+
31+
</odoo>
32+
33+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import import_helper_generic
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
from typing import dataclass_transform
2+
from decorator import append
3+
from openpyxl.workbook import child
4+
from odoo import api, fields, models
5+
from tempfile import NamedTemporaryFile
6+
import base64
7+
8+
from odoo.fields import Command
9+
10+
import openpyxl as opx
11+
12+
import logging
13+
from stdnum.iban import is_valid as iban_is_valid
14+
15+
logger = logging.getLogger(__name__)
16+
17+
LIST_FR = ["FR", "France", "Martinique - France", "REUNION", "Paris"]
18+
LIST_COL_POP = [
19+
"invoice_name",
20+
"invoice_title_code",
21+
"invoice_street",
22+
"invoice_street2",
23+
"invoice_city",
24+
"invoice_zip",
25+
"invoice_phone",
26+
"invoice_mobile",
27+
"invoice_lang",
28+
"delivery_name",
29+
"delivery_title_code",
30+
"delivery_street",
31+
"delivery_street2",
32+
"delivery_city",
33+
"delivery_zip",
34+
"delivery_phone",
35+
"delivery_mobile",
36+
"delivery_lang",
37+
]
38+
39+
40+
class ImportHelpergeneric(models.TransientModel):
41+
_name = "import.helper.generic"
42+
_description = "Import helper generic for importing information with template"
43+
44+
file_import = fields.Binary(string="File to import")
45+
46+
def speedy_categori_id(self):
47+
categ_id = {}
48+
categs = self.env["res.partner.category"].search([])
49+
for c in categs:
50+
categ_id[c.name] = c.id
51+
return categ_id
52+
53+
def check_vals(self, vals):
54+
if "category_id" in vals:
55+
categ_ids = self.speedy_categori_id()
56+
list_categ = []
57+
for ctname in vals["category_id"].split("/"):
58+
if ctname and vals["category_id"] in categ_ids:
59+
list_categ.append(categ_ids[ctname])
60+
vals["category_id"] = [Command.set(list_categ)]
61+
if "invoice_name" in vals:
62+
child_val = {"type": "invoice"}
63+
vals["child_ids"] = []
64+
for v in vals:
65+
if "invoice_" in v:
66+
child_val[v.replace("invoice_", "")] = vals[v]
67+
vals["child_ids"].append((0, 0, child_val))
68+
if "delivery_name" in vals:
69+
child_val = {"type": "delivery"}
70+
for v in vals:
71+
if "delivery_" in v:
72+
child_val[v.replace("delivery_", "")] = vals[v]
73+
if "child_ids" in vals:
74+
vals["child_ids"].append((0, 0, child_val))
75+
else:
76+
vals["child_ids"] = [(0, 0, child_val)]
77+
for i in LIST_COL_POP:
78+
if vals.get(i):
79+
vals.pop(i)
80+
return vals
81+
82+
def partner_import_generic(self):
83+
fileobj = NamedTemporaryFile(
84+
"wb+", prefix="odoo-import_helper-", suffix=".xlsx"
85+
)
86+
file_bytes = base64.b64decode(self.file_import)
87+
fileobj.write(file_bytes)
88+
fileobj.seek(0)
89+
dataframe = opx.load_workbook(fileobj.name, read_only=True)
90+
reader = dataframe.active
91+
import_obj = self.env["import.helper"]
92+
speedy = import_obj._prepare_speedy(aiengine="NONE")
93+
line = 0
94+
colonnes = []
95+
speedy_categ_id = self.speedy_categori_id()
96+
for row in reader.iter_rows(min_row=4, max_col=39, values_only=True):
97+
vals = {}
98+
if row[0] == "Colonnes:":
99+
for c in range(len(row)):
100+
if row[c]:
101+
colonnes.append(row[c])
102+
else:
103+
colonnes.append("empty")
104+
continue
105+
106+
if row[2]:
107+
line += 1
108+
vals["line"] = line
109+
for c in range(len(row)):
110+
if row[c] and colonnes[c] != "empty":
111+
vals[colonnes[c]] = str(row[c])
112+
vals = self.check_vals(vals)
113+
import_obj._create_partner(vals, speedy)
114+
action = import_obj._result_action(speedy)
115+
return action

0 commit comments

Comments
 (0)