From e5057d620e6fa299ab44596b04c6c69edf8ed945 Mon Sep 17 00:00:00 2001
From: Benjamin <benjamin@le-filament.com>
Date: Wed, 17 Feb 2021 16:40:13 +0100
Subject: [PATCH] [add] export datetime on move.line and wizard filter

---
 controllers/main.py                   | 15 +++++++++++----
 models/__init__.py                    |  4 +++-
 models/account_move_line.py           | 10 ++++++++++
 wizard/export_journal_wizard.py       |  7 +++++--
 wizard/export_journal_wizard_view.xml |  4 +++-
 5 files changed, 32 insertions(+), 8 deletions(-)
 create mode 100644 models/account_move_line.py

diff --git a/controllers/main.py b/controllers/main.py
index 40a7b0f..d070840 100755
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -2,7 +2,7 @@
 # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html).
 
 import csv
-from datetime import date
+from datetime import date, datetime
 from io import BytesIO, StringIO
 
 from odoo import http
@@ -18,7 +18,8 @@ class JournalDatasExport(http.Controller):
     # ------------------------------------------------------
     @http.route('/web/export_journal/', type='http', auth="user")
     @serialize_exception
-    def export_journal(self, format, export, date_start, date_end, **kwargs):
+    def export_journal(
+            self, format, export, type, date_start, date_end, **kwargs):
         """
         Sélectionne les account.move.line correspondants aux journaux
         et à la plage de date définis
@@ -30,12 +31,15 @@ class JournalDatasExport(http.Controller):
         :return: file
         """
         export_id = request.env['export.journal.type'].browse(int(export))
-        export_line_ids = request.env['account.move.line'].search([
+        domain = [
             ('date', '>=', date_start),
             ('date', '<=', date_end),
             ('journal_id', 'in', export_id.journal_ids.ids),
             ('company_id', '=', export_id.company_id.id),
-        ])
+        ]
+        if type == 'empty':
+            domain += [('date_export', '!=', False)]
+        export_line_ids = request.env['account.move.line'].search(domain)
         lines_to_export = []
         for line in export_line_ids:
             row = []
@@ -43,6 +47,9 @@ class JournalDatasExport(http.Controller):
                 value = eval(field.field_name)
                 row.append(value)
             lines_to_export.append(row)
+            line.write({
+                'date_export': datetime.now()
+            })
 
         filename_ = (export_id.company_id.name.title().replace(' ', '')
                      + date_start.replace('-', '')
diff --git a/models/__init__.py b/models/__init__.py
index e747f4d..c15eeb8 100755
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,4 +1,6 @@
-# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+# Copyright 2020 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html).
 
+from . import account_move_line
 from . import export_journal_field
 from . import export_journal_type
diff --git a/models/account_move_line.py b/models/account_move_line.py
new file mode 100644
index 0000000..9ca8983
--- /dev/null
+++ b/models/account_move_line.py
@@ -0,0 +1,10 @@
+# Copyright 2020 Le Filament
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models, api
+
+
+class AccountMoveLine(models.Model):
+    _inherit = 'account.move.line'
+
+    date_export = fields.Datetime('Date export')
diff --git a/wizard/export_journal_wizard.py b/wizard/export_journal_wizard.py
index f95b8dc..35ce434 100755
--- a/wizard/export_journal_wizard.py
+++ b/wizard/export_journal_wizard.py
@@ -37,6 +37,9 @@ class ExportJournalWizard(models.TransientModel):
         domain="[('company_id', '=', company_id)]",
         default=_get_default_export
     )
+    export_type = fields.Selection(
+        [('empty', 'Ecritures non exportées'), ('all', 'Toutes les écritures')],
+        string='Ecritures à exporter', default="empty")
 
     def get_data_file(self):
         """
@@ -46,8 +49,8 @@ class ExportJournalWizard(models.TransientModel):
         return {
             'type': 'ir.actions.act_url',
             'url':
-                '/web/export_journal?format=%s&export=%s'
-                % (self.export_format, self.export_id.id) +
+                '/web/export_journal?format=%s&export=%s&type=%s'
+                % (self.export_format, self.export_id.id, self.export_type) +
                 '&date_start=%s&date_end=%s'
                 % (self.date_start, self.date_end),
             'target': 'new',
diff --git a/wizard/export_journal_wizard_view.xml b/wizard/export_journal_wizard_view.xml
index 56fbc47..4f7ae84 100755
--- a/wizard/export_journal_wizard_view.xml
+++ b/wizard/export_journal_wizard_view.xml
@@ -12,9 +12,11 @@
                     <group>
                         <field name="export_id"  required="True" options="{'no_create': 1}"/>
                         <field name="company_id"  invisible="True"/>
+                        <field name="export_type" widget="radio" />
                     </group>
                 </group>
-                
+
+                <p class="text-muted">Les dates de début et de fin sont incluses dans l'export des écritures</p>
                 <group>
                     <group>
                         <field name="date_start"/>
-- 
GitLab