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