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.
 
 
 

69 lines
2.2 KiB

# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class XLSXReport(models.AbstractModel):
""" Common class for xlsx reporting wizard """
_name = 'xlsx.report'
_description = 'Excel Report AbstractModel'
name = fields.Char(
string='File Name',
readonly=True,
size=500,
)
data = fields.Binary(
string='File',
readonly=True,
)
template_id = fields.Many2one(
'xlsx.template',
string='Template',
required=True,
ondelete='cascade',
domain=lambda self: self._context.get('template_domain', []),
)
choose_template = fields.Boolean(
string='Allow Choose Template',
default=False,
)
state = fields.Selection(
[('choose', 'Choose'),
('get', 'Get')],
default='choose',
help="* Choose: wizard show in user selection mode"
"\n* Get: wizard show results from user action",
)
@api.model
def default_get(self, fields):
template_domain = self._context.get('template_domain', [])
templates = self.env['xlsx.template'].search(template_domain)
if not templates:
raise ValidationError(_('No template found'))
defaults = super(XLSXReport, self).default_get(fields)
for template in templates:
if not template.datas:
raise ValidationError(_('No file in %s') % (template.name,))
defaults['template_id'] = len(templates) == 1 and templates.id or False
return defaults
@api.multi
def report_xlsx(self):
self.ensure_one()
Export = self.env['xlsx.export']
out_file, out_name = \
Export.export_xlsx(self.template_id, self._name, self.id)
self.write({'state': 'get', 'data': out_file, 'name': out_name})
return {
'type': 'ir.actions.act_window',
'res_model': self._name,
'view_mode': 'form',
'view_type': 'form',
'res_id': self.id,
'views': [(False, 'form')],
'target': 'new',
}