From 46ff70d271bb6f2648798e96bc3b4b21c5af656b Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Fri, 5 Nov 2021 15:19:49 +0100
Subject: [PATCH] [add] wizard for import

---
 __init__.py                  |  1 +
 __manifest__.py              |  5 ++++
 security/ir.model.access.csv |  2 ++
 wizard/__init__.py           |  4 +++
 wizard/membership_import.py  | 53 ++++++++++++++++++++++++++++++++++++
 wizard/membership_import.xml | 44 ++++++++++++++++++++++++++++++
 6 files changed, 109 insertions(+)
 create mode 100644 security/ir.model.access.csv
 create mode 100644 wizard/__init__.py
 create mode 100644 wizard/membership_import.py
 create mode 100644 wizard/membership_import.xml

diff --git a/__init__.py b/__init__.py
index 957992f..efa820e 100644
--- a/__init__.py
+++ b/__init__.py
@@ -2,3 +2,4 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from . import models
+from . import wizard
diff --git a/__manifest__.py b/__manifest__.py
index e9ae6ce..4c8d6f5 100755
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -9,8 +9,13 @@
         'membership',
     ],
     'data': [
+        # security
+        'security/ir.model.access.csv',
         # views
         'views/membership_membership_line.xml',
+        'views/res_partner.xml',
+        # wizard
+        'wizard/membership_import.xml',
     ],
     'qweb': [],
     'installable': True,
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
new file mode 100644
index 0000000..7cdeb9b
--- /dev/null
+++ b/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_afac_membership_import_wizard,access_afac_membership_import_wizard,model_afac_membership_import_wizard,base.group_erp_manager,1,1,1,1
\ No newline at end of file
diff --git a/wizard/__init__.py b/wizard/__init__.py
new file mode 100644
index 0000000..b2a2dbc
--- /dev/null
+++ b/wizard/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import membership_import
diff --git a/wizard/membership_import.py b/wizard/membership_import.py
new file mode 100644
index 0000000..b8a4181
--- /dev/null
+++ b/wizard/membership_import.py
@@ -0,0 +1,53 @@
+# Copyright 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import base64
+import csv
+import io
+
+from odoo import fields, models, api
+
+
+class MembershipImport(models.TransientModel):
+    _name = 'afac.membership.import.wizard'
+    _description = 'Wizard import adhésions'
+
+    file = fields.Binary('CSV File', required=True)
+    filename = fields.Char('Filename')
+
+    def import_data(self):
+        data = base64.b64decode(self.file).decode('utf-8')
+        reader = csv.DictReader(io.StringIO(data), delimiter=';')
+        contact = line = 0
+        for row in reader:
+            for year in range(2010, 2021, 1):
+                year = str(year)
+                print(row.get(year))
+                if row.get(year) and int(row.get(year)) > 0:
+                    partner = self.env['res.partner'].search([('membership_number', '=', int(row.get('ADH')))])
+                    product = self.env['product.product'].search([
+                        ('name', 'ilike', year),
+                        '|',
+                        ('company_id', '=', int(row.get('adhésion'))),
+                        ('company_id', '=', None)
+                    ])
+                    print(partner)
+                    print(product)
+                    begin = str(year) + '-01-01'
+                    end = str(year) + '-12-31'
+                    if year == 2021 and row.get('Date adhésion 2021'):
+                        date_membership = row.get('Date adhésion 2021')
+                    else:
+                        date_membership = begin
+                    req = """
+                        INSERT INTO membership_membership_line(partner, date_from, date_to, date, member_price, state, company_id, membership_id)
+                        VALUES (
+                            %d, '%s', '%s', '%s', %d, '%s', %d, %d
+                        )""" % (partner.id, begin, end, date_membership,
+                                int(row.get(year)), 'paid', int(row.get('adhésion')), product.id)
+                    print(req)
+                    self.env.cr.execute(req)
+                    line += 1
+            contact += 1
+        return
+
diff --git a/wizard/membership_import.xml b/wizard/membership_import.xml
new file mode 100644
index 0000000..d5df5a6
--- /dev/null
+++ b/wizard/membership_import.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+
+        <record id="afac_membership_import_wizard_form_view" model="ir.ui.view">
+            <field name="name">afac.membership.import.wizard.form</field>
+            <field name="model">afac.membership.import.wizard</field>
+            <field name="arch" type="xml">
+                <form string="ModelTitle">
+                    <sheet>
+                        <group>
+                            <group>
+                                <field name="filename" invisible="1"/>
+                                <field name="file" filename="filename" required="1"/>
+                            </group>
+                        </group>
+                    </sheet>
+                    <footer>
+                        <button class="btn btn-sm btn-primary" name="import_data" string="Importer" type="object"/>
+                        <button class="btn btn-sm btn-default" special="cancel" string="Fermer"/>
+                    </footer>
+                </form>
+            </field>
+        </record>
+
+        <record id="afac_membership_import_wizard_act_window" model="ir.actions.act_window">
+            <field name="name">Import</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">afac.membership.import.wizard</field>
+            <field name="view_mode">form</field>
+            <field name="target">new</field>
+        </record>
+
+        <menuitem
+                name="Import Données"
+                id="afac_membership_import_wizard_menu"
+                parent="membership.menu_marketing_config_association"
+                sequence="99"
+                groups="base.group_erp_manager"
+                action="afac_membership_import_wizard_act_window"
+        />
+
+    </data>
+</odoo>
\ No newline at end of file
-- 
GitLab