From 05416780780d50c432047a749999fb50b04fd589 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Mon, 22 Nov 2021 17:38:43 +0100
Subject: [PATCH] [update] export wizard to add partner selection

---
 controllers/main.py                   | 21 ++++++++++++++-------
 wizard/export_journal_wizard.py       | 23 ++++++++++++++++-------
 wizard/export_journal_wizard_view.xml |  3 +++
 3 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/controllers/main.py b/controllers/main.py
index d91fa4e..d07868f 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -1,16 +1,15 @@
 # Copyright 2021 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html).
 
-import re
 import csv
+import unidecode
 from datetime import date, datetime
-from io import BytesIO, StringIO
+from io import StringIO
 
 from odoo import http
 from odoo.http import request
 from odoo.addons.web.controllers.main import serialize_exception
 from odoo.addons.web.controllers.main import content_disposition
-from odoo.tools.misc import xlwt
 
 
 class ExportJournalCg(http.Controller):
@@ -20,7 +19,7 @@ class ExportJournalCg(http.Controller):
     @http.route('/web/export_journal_cg/', type='http', auth="user")
     @serialize_exception
     def export_journal_cg(
-            self, type, date_start, date_end, company_id, **kwargs):
+            self, date_start, date_end, company_id, partner_ids, **kwargs):
         """
         Sélectionne les account.move.line correspondants aux journaux
         et à la plage de date définis
@@ -48,6 +47,10 @@ class ExportJournalCg(http.Controller):
         if type == 'empty':
             domain += [('date_export', '=', False)]
 
+        # adds partner in domain
+        if partner_ids:
+            domain += [('partner_id', 'in', list(map(int, partner_ids.split(","))))]
+
         export_line_ids = request.env['account.move.line'].search(domain)
         lines_to_export = []
 
@@ -164,6 +167,8 @@ class ExportJournalCg(http.Controller):
         if line.name:
             description += ' - ' + line.name.upper()
 
+        description = unidecode.unidecode(description)
+
         if journal:
             journal_code = journal
         else:
@@ -205,7 +210,9 @@ class ExportJournalCg(http.Controller):
         fp = StringIO()
         export_file = csv.writer(
             fp,
-            delimiter=';',)
+            delimiter=';',
+            dialect='excel',
+        )
         # Add header line
         for line in lines_to_export:
             # Format date value
@@ -220,7 +227,7 @@ class ExportJournalCg(http.Controller):
 
         filename = filename_ + '.txt'
         csvhttpheaders = [
-            ('Content-Type', 'text/csv;charset=iso-8859-1'),
+            ('Content-Type', 'text/plain;charset=iso-8859-1'),
             ('Content-Disposition', content_disposition(filename)),
         ]
-        return request.make_response(data, headers=csvhttpheaders)
\ No newline at end of file
+        return request.make_response(data, headers=csvhttpheaders)
diff --git a/wizard/export_journal_wizard.py b/wizard/export_journal_wizard.py
index 4947d0d..d5e4ed9 100755
--- a/wizard/export_journal_wizard.py
+++ b/wizard/export_journal_wizard.py
@@ -1,8 +1,9 @@
 # Copyright 2020 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models, fields, api, http
-from odoo.exceptions import UserError
+from urllib.parse import urlencode
+
+from odoo import models, fields, api
 
 
 class ExportJournalWizard(models.TransientModel):
@@ -29,6 +30,11 @@ class ExportJournalWizard(models.TransientModel):
         comodel_name='res.company',
         default=_get_default_company
     )
+    partner_ids = fields.Many2many(
+        comodel_name='res.partner',
+        string='Coopératives',
+        domain=[('is_cooperative', '=', True)]
+    )
     export_type = fields.Selection(
         [('empty', 'Ecritures non exportées'), ('all', 'Toutes les écritures')],
         string='Ecritures à exporter', default="empty")
@@ -38,12 +44,15 @@ class ExportJournalWizard(models.TransientModel):
         Appelle l'url de traitement et de téléchargement
         :return: ir.actions.act_url
         """
+        datas = {
+            'export_type': self.export_type,
+            'date_start': self.date_start,
+            'date_end': self.date_end,
+            'company_id': self.company_id.id,
+            'partner_ids': ','.join(str(x) for x in self.partner_ids.ids),
+        }
         return {
             'type': 'ir.actions.act_url',
-            'url':
-                '/web/export_journal_cg?format=csv&type=%s'
-                % (self.export_type,) +
-                '&date_start=%s&date_end=%s&company_id=%d'
-                % (self.date_start, self.date_end, self.company_id.id),
+            'url': '/web/export_journal_cg?' + urlencode(datas),
             'target': 'new',
         }
diff --git a/wizard/export_journal_wizard_view.xml b/wizard/export_journal_wizard_view.xml
index f492331..b4662f7 100755
--- a/wizard/export_journal_wizard_view.xml
+++ b/wizard/export_journal_wizard_view.xml
@@ -21,6 +21,9 @@
                         <field name="date_end"/>
                     </group>
                 </group>
+                <group>
+                    <field name="partner_ids" widget="many2many_tags" options="{'no_create': True, 'no_edit': True}"/>
+                </group>
                 <footer>
                     <button class="btn btn-sm btn-primary" name="get_cg_export" string="Télécharger" type="object"/>
                     <button class="btn btn-sm btn-default" special="cancel" string="Fermer"/>
-- 
GitLab