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

# -*- 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
)