Skip to content
Extraits de code Groupes Projets
Valider fd2cfa6e rédigé par Thibaud - Le Filament's avatar Thibaud - Le Filament
Parcourir les fichiers

[IMP] Refactor account.move.line filtering in controller

parent 3f99de09
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -4,7 +4,7 @@
import csv
from datetime import date, datetime
from io import BytesIO, StringIO
from odoo.addons.lefilament_export_journal_tool.controllers.main import JournalDatasExport
from odoo import http
from odoo.http import request
from odoo.tools.misc import xlwt
......@@ -13,7 +13,7 @@ from odoo.tools.safe_eval import safe_eval
from odoo.addons.web.controllers.main import content_disposition, serialize_exception
class JournalDatasExport(http.Controller):
class JournalDatasExport(JournalDatasExport):
# ------------------------------------------------------
# Routes
# ------------------------------------------------------
......@@ -46,22 +46,19 @@ class JournalDatasExport(http.Controller):
domain += safe_eval(export_id.export_domain)
export_line_ids = request.env["account.move.line"].search(domain)
# FIXME: Crappy could refactor to [[]] or {} to group by invoice name as key
export_line_grouped_by_invoice = export_line_ids.sorted(lambda l: l.move_id.name)
export_line_grouped_by_invoice = {}
for el in export_line_ids:
if not export_line_grouped_by_invoice.get(el.move_id.name):
export_line_grouped_by_invoice[el.move_id.name] = []
export_line_grouped_by_invoice[el.move_id.name].append(el)
# export_line_grouped_by_invoice = export_line_ids.sorted(lambda l: l.move_id.name)
lines_to_export = []
initial_sum_line = ['' for _ in range(len(export_id.fields_ids))]
sum_line = initial_sum_line[:]
big_sum_line = None
previous_invoice_name = export_line_grouped_by_invoice[0].move_id.name
for line in export_line_grouped_by_invoice:
if line.name != previous_invoice_name:
lines_to_export.append(sum_line)
if not big_sum_line:
# Initialise bigsum to the same size and value of the sum_line
# So it has not to be initialized with list of empty string
big_sum_line = sum_line[:]
else:
big_sum_line = [value + sum_line[i] for i,value in enumerate(big_sum_line)]
sum_line = initial_sum_line[:]
for invoice_name, move_lines in export_line_grouped_by_invoice.items():
for line in move_lines:
row = []
for key,field in enumerate(export_id.fields_ids):
if field.is_python:
......@@ -75,9 +72,18 @@ class JournalDatasExport(http.Controller):
row.append(value)
lines_to_export.append(row)
line.write({"date_export": datetime.now()})
previous_invoice_name = line.name
lines_to_export.append(sum_line)
lines_to_export.append([value + sum_line[i] for i,value in enumerate(big_sum_line)])
if not big_sum_line:
# Initialise bigsum to the same size and value of the sum_line
# So it has not to be initialized with list of empty string
big_sum_line = sum_line[:]
else:
big_sum_line = [value + sum_line[i] for i, value in
enumerate(big_sum_line)]
sum_line = initial_sum_line[:]
else:
# lines_to_export.append(sum_line)
lines_to_export.append(big_sum_line)
filename_ = (
export_id.company_id.name.title().replace(" ", "")
......@@ -94,65 +100,3 @@ class JournalDatasExport(http.Controller):
# ------------------------------------------------------
# Common function
# ------------------------------------------------------
def export_csv(self, export_id, lines_to_export, filename_):
fp = StringIO()
export_file = csv.writer(
fp, delimiter=export_id.delimiter, quoting=csv.QUOTE_ALL
)
# Add header line
if export_id.is_header:
row = []
for head in export_id.fields_ids.mapped("name"):
row.append(head)
export_file.writerow(row)
for line in lines_to_export:
# Format date value
line_values = [
value
if not isinstance(value, date)
else value.strftime(export_id.csv_datestyle)
for value in line
]
export_file.writerow(line_values)
fp.seek(0)
data = fp.read()
fp.close()
filename = filename_ + ".csv"
csvhttpheaders = [
("Content-Type", "text/csv;charset=utf8"),
("Content-Disposition", content_disposition(filename)),
]
return request.make_response(data, headers=csvhttpheaders)
def export_xls(self, export_id, lines_to_export, filename_):
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet(filename_)
base_style = xlwt.easyxf("align: wrap yes")
date_style = xlwt.XFStyle()
date_style.num_format_str = export_id.xls_datestyle
if export_id.is_header:
for i, fieldname in enumerate(export_id.fields_ids.mapped("name")):
worksheet.write(0, i, fieldname)
worksheet.col(i).width = 4000 # around 220 pixels
for row_index, line in enumerate(lines_to_export):
for cell_index, value in enumerate(line):
cell_style = base_style
if isinstance(value, date):
cell_style = date_style
worksheet.write(row_index + 1, cell_index, value, cell_style)
fp = BytesIO()
workbook.save(fp)
fp.seek(0)
data = fp.read()
fp.close()
filename = filename_ + ".xls"
xlshttpheaders = [
("Content-Type", "text/csv;charset=utf8"),
("Content-Disposition", content_disposition(filename)),
]
return request.make_response(data, headers=xlshttpheaders)
......@@ -76,7 +76,7 @@
<record id="intercom_vt_7" model="export.journal.field">
<field name="name">Description du produit</field>
<field name="sequence">7</field>
<field name="field_name">''</field>
<field name="field_name">line.product_id.name</field>
<field
name="export_id"
ref="emgidi_export_intercom.emgidi_export_intercom_journal"
......@@ -95,6 +95,7 @@
<field name="name">Quantité</field>
<field name="sequence">9</field>
<field name="field_name">line.quantity</field>
<field name="is_sum">True</field>
<field
name="export_id"
ref="emgidi_export_intercom.emgidi_export_intercom_journal"
......@@ -112,7 +113,7 @@
<record id="intercom_vt_11" model="export.journal.field">
<field name="name">Montant Hors-taxe Signé</field>
<field name="sequence">11</field>
<field name="field_name">line.price_subtotal</field>
<field name="field_name">-line.price_subtotal</field>
<field name="is_sum">True</field>
<field
name="export_id"
......@@ -122,7 +123,7 @@
<record id="intercom_vt_12" model="export.journal.field">
<field name="name">Total signé</field>
<field name="sequence">12</field>
<field name="field_name">''</field>
<field name="field_name">-line.balance</field>
<field name="is_sum">True</field>
<field
name="export_id"
......@@ -130,9 +131,9 @@
/>
</record>
<record id="intercom_vt_13" model="export.journal.field">
<field name="name">Total signé en devises</field>
<field name="name">Signé en devises</field>
<field name="sequence">13</field>
<field name="field_name">''</field>
<field name="field_name">-line.amount_currency</field>
<field name="is_sum">True</field>
<field
name="export_id"
......@@ -151,7 +152,9 @@
<record id="intercom_vt_15" model="export.journal.field">
<field name="name">Pays de destination</field>
<field name="sequence">15</field>
<field name="field_name">line.move_id.partner_shipping_id.country_id.display_name</field>
<field name="field_name">
line.move_id.partner_shipping_id.country_id.display_name
</field>
<field
name="export_id"
ref="emgidi_export_intercom.emgidi_export_intercom_journal"
......@@ -178,7 +181,8 @@
<record id="intercom_vt_18" model="export.journal.field">
<field name="name">Département d'expédition</field>
<field name="sequence">18</field>
<field name="field_name">''</field>
<field name="field_name">31</field>
<field name="is_python" eval="False"/>
<field
name="export_id"
ref="emgidi_export_intercom.emgidi_export_intercom_journal"
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter