You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
7.2 KiB
201 lines
7.2 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 RGB Consulting S.L. (http://www.rgbconsulting.com)
|
|
# Copyright 2017 Eficent Business and IT Consulting Services S.L.
|
|
# (http://www.eficent.com)
|
|
# Miquel Raich <miquel.raich@eficent.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
try:
|
|
from openerp.addons.report_xlsx.report.report_xlsx import ReportXlsx
|
|
except ImportError:
|
|
ReportXlsx = object
|
|
from openerp.report import report_sxw
|
|
from openerp import _
|
|
|
|
|
|
class JournalLedgerXlsx(ReportXlsx):
|
|
def __init__(self, name, table, rml=False, parser=False, header=True,
|
|
store=False):
|
|
super(ReportXlsx, self).__init__(
|
|
name, table, rml, parser, header, store)
|
|
|
|
self.sheet = None
|
|
self.row_pos = None
|
|
|
|
self.format_title = None
|
|
self.format_border_top = None
|
|
|
|
def _define_formats(self, workbook):
|
|
""" Add cell formats to current workbook.
|
|
Available formats:
|
|
* format_title
|
|
* format_header
|
|
* format_header_right
|
|
* format_header_italic
|
|
* format_border_top
|
|
"""
|
|
self.format_title = workbook.add_format({
|
|
'bold': True,
|
|
'align': 'center',
|
|
'bg_color': '#46C646',
|
|
'border': True
|
|
})
|
|
self.format_header = workbook.add_format({
|
|
'bold': True,
|
|
'bg_color': '#FFFFCC',
|
|
'border': True
|
|
})
|
|
self.format_header_right = workbook.add_format({
|
|
'bold': True,
|
|
'bg_color': '#FFFFCC',
|
|
'border': True,
|
|
'align': 'right'
|
|
})
|
|
self.format_header_italic = workbook.add_format({
|
|
'bold': True,
|
|
'bg_color': '#FFFFCC',
|
|
'border': True,
|
|
'italic': True
|
|
})
|
|
self.format_border_top = workbook.add_format({
|
|
'top': 1,
|
|
'bg_color': '#eeeeee'
|
|
})
|
|
|
|
def _write_report_title(self, title):
|
|
self.sheet.merge_range(
|
|
self.row_pos, 0, self.row_pos, 6, title, self.format_title
|
|
)
|
|
self.row_pos += 1
|
|
|
|
def _write_report_range(self, date1, date2):
|
|
self.sheet.merge_range(
|
|
self.row_pos, 0, self.row_pos, 1,
|
|
_('From ')+date1+_(' to ')+date2+_(':'))
|
|
self.row_pos += 1
|
|
|
|
def _set_headers(self):
|
|
# Journal
|
|
self.sheet.write_string(self.row_pos, 2, _('Journal'),
|
|
self.format_header)
|
|
# Partner
|
|
self.sheet.write_string(self.row_pos, 3, _('Partner'),
|
|
self.format_header)
|
|
# Reference
|
|
self.sheet.write_string(self.row_pos, 4, _('Reference'),
|
|
self.format_header)
|
|
self.row_pos += 1
|
|
# Entry
|
|
self.sheet.write_string(self.row_pos, 0, _('Entry'),
|
|
self.format_header)
|
|
# Date
|
|
self.sheet.write_string(self.row_pos, 1, _('Date'), self.format_header)
|
|
|
|
# Account
|
|
self.sheet.write_string(self.row_pos, 2, _('Account'),
|
|
self.format_header_italic)
|
|
# Account name
|
|
self.sheet.write_string(self.row_pos, 3, _('Account name'),
|
|
self.format_header_italic)
|
|
# Description
|
|
self.sheet.write_string(self.row_pos, 4, _('Description'),
|
|
self.format_header_italic)
|
|
# Debit
|
|
self.sheet.write_string(self.row_pos, 5, _('Debit'),
|
|
self.format_header_right)
|
|
# Credit
|
|
self.sheet.write_string(self.row_pos, 6, _('Credit'),
|
|
self.format_header_right)
|
|
self.sheet.freeze_panes(4, 0)
|
|
self.row_pos += 1
|
|
|
|
def _generate_report_content(self, report_data):
|
|
for move in report_data:
|
|
# Entry
|
|
self.sheet.write_string(self.row_pos, 0, move.name or '',
|
|
self.format_border_top)
|
|
self.sheet.set_column(0, 0, 18)
|
|
# Date
|
|
self.sheet.write_string(self.row_pos, 1, move.date or '',
|
|
self.format_border_top)
|
|
self.sheet.set_column(1, 1, 12)
|
|
# Journal
|
|
self.sheet.write_string(self.row_pos, 2,
|
|
move.journal_id.name or '',
|
|
self.format_border_top)
|
|
self.sheet.set_column(2, 2, 30)
|
|
# Partner
|
|
self.sheet.write_string(self.row_pos, 3,
|
|
move.partner_id.name or '',
|
|
self.format_border_top)
|
|
self.sheet.set_column(3, 3, 40)
|
|
# Reference
|
|
self.sheet.write_string(self.row_pos, 4, move.ref or '',
|
|
self.format_border_top)
|
|
self.sheet.set_column(4, 4, 40)
|
|
# Debit
|
|
self.sheet.write_number(self.row_pos, 5, move.amount or 0,
|
|
self.format_border_top)
|
|
self.sheet.set_column(5, 5, 12)
|
|
# Credit
|
|
self.sheet.write_number(self.row_pos, 6, move.amount or 0,
|
|
self.format_border_top)
|
|
self.sheet.set_column(6, 6, 12)
|
|
|
|
self.row_pos += 1
|
|
for line in move.line_ids:
|
|
# Account code
|
|
self.sheet.write_string(self.row_pos, 2,
|
|
line.account_id.code or '')
|
|
# Account name
|
|
self.sheet.write_string(self.row_pos, 3,
|
|
line.account_id.name or '')
|
|
# Line description
|
|
self.sheet.write_string(self.row_pos, 4, line.name or '')
|
|
# Debit
|
|
self.sheet.write_number(self.row_pos, 5, line.debit or 0)
|
|
# Credit
|
|
self.sheet.write_number(self.row_pos, 6, line.credit or 0)
|
|
self.row_pos += 1
|
|
|
|
def generate_xlsx_report(self, workbook, data, objects):
|
|
date_start = data.get('date_start')
|
|
date_end = data.get('date_end')
|
|
journal_ids = data.get('journal_ids', [])
|
|
|
|
report_data = self.env['account.move'].search(
|
|
[('date', '<=', date_end),
|
|
('date', '>=', date_start),
|
|
('journal_id', 'in', journal_ids),
|
|
('state', '!=', 'draft')],
|
|
order=data.get('sort_selection', 'date') + ', id')
|
|
|
|
# Initial row
|
|
self.row_pos = 0
|
|
|
|
# Load formats to workbook
|
|
self._define_formats(workbook)
|
|
|
|
# Set report name
|
|
report_name = _('Journal Ledger') + ' - ' + \
|
|
self.env.user.company_id.name
|
|
self.sheet = workbook.add_worksheet(report_name[:31])
|
|
if data.get('landscape'):
|
|
self.sheet.set_landscape()
|
|
self.sheet.fit_to_pages(1, 0)
|
|
self.sheet.set_zoom(80)
|
|
self._write_report_title(report_name)
|
|
self._write_report_range(date_start, date_end)
|
|
|
|
# Set headers
|
|
self._set_headers()
|
|
|
|
# Generate data
|
|
self._generate_report_content(report_data)
|
|
|
|
|
|
if ReportXlsx != object:
|
|
JournalLedgerXlsx(
|
|
'report.account_journal_report.journal_ledger_xlsx',
|
|
'account.journal', parser=report_sxw.rml_parse
|
|
)
|