214 lines
6.6 KiB
Python
214 lines
6.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
# see http://doc.qt.io/archives/qt-4.8/qprinter.html#PaperSize-enum
|
|
PAPER_SIZES = [
|
|
{
|
|
'description': 'A0 5 841 x 1189 mm',
|
|
'key': 'A0',
|
|
'height': 1189.0,
|
|
'width': 841.0,
|
|
}, {
|
|
'key': 'A1',
|
|
'description': 'A1 6 594 x 841 mm',
|
|
'height': 841.0,
|
|
'width': 594.0,
|
|
}, {
|
|
'key': 'A2',
|
|
'description': 'A2 7 420 x 594 mm',
|
|
'height': 594.0,
|
|
'width': 420.0,
|
|
}, {
|
|
'key': 'A3',
|
|
'description': 'A3 8 297 x 420 mm',
|
|
'height': 420.0,
|
|
'width': 297.0,
|
|
}, {
|
|
'key': 'A4',
|
|
'description': 'A4 0 210 x 297 mm, 8.26 x 11.69 inches',
|
|
'height': 297.0,
|
|
'width': 210.0,
|
|
}, {
|
|
'key': 'A5',
|
|
'description': 'A5 9 148 x 210 mm',
|
|
'height': 210.0,
|
|
'width': 148.0,
|
|
}, {
|
|
'key': 'A6',
|
|
'description': 'A6 10 105 x 148 mm',
|
|
'height': 148.0,
|
|
'width': 105.0,
|
|
}, {
|
|
'key': 'A7',
|
|
'description': 'A7 11 74 x 105 mm',
|
|
'height': 105.0,
|
|
'width': 74.0,
|
|
}, {
|
|
'key': 'A8',
|
|
'description': 'A8 12 52 x 74 mm',
|
|
'height': 74.0,
|
|
'width': 52.0,
|
|
}, {
|
|
'key': 'A9',
|
|
'description': 'A9 13 37 x 52 mm',
|
|
'height': 52.0,
|
|
'width': 37.0,
|
|
}, {
|
|
'key': 'B0',
|
|
'description': 'B0 14 1000 x 1414 mm',
|
|
'height': 1414.0,
|
|
'width': 1000.0,
|
|
}, {
|
|
'key': 'B1',
|
|
'description': 'B1 15 707 x 1000 mm',
|
|
'height': 1000.0,
|
|
'width': 707.0,
|
|
}, {
|
|
'key': 'B2',
|
|
'description': 'B2 17 500 x 707 mm',
|
|
'height': 707.0,
|
|
'width': 500.0,
|
|
}, {
|
|
'key': 'B3',
|
|
'description': 'B3 18 353 x 500 mm',
|
|
'height': 500.0,
|
|
'width': 353.0,
|
|
}, {
|
|
'key': 'B4',
|
|
'description': 'B4 19 250 x 353 mm',
|
|
'height': 353.0,
|
|
'width': 250.0,
|
|
}, {
|
|
'key': 'B5',
|
|
'description': 'B5 1 176 x 250 mm, 6.93 x 9.84 inches',
|
|
'height': 250.0,
|
|
'width': 176.0,
|
|
}, {
|
|
'key': 'B6',
|
|
'description': 'B6 20 125 x 176 mm',
|
|
'height': 176.0,
|
|
'width': 125.0,
|
|
}, {
|
|
'key': 'B7',
|
|
'description': 'B7 21 88 x 125 mm',
|
|
'height': 125.0,
|
|
'width': 88.0,
|
|
}, {
|
|
'key': 'B8',
|
|
'description': 'B8 22 62 x 88 mm',
|
|
'height': 88.0,
|
|
'width': 62.0,
|
|
}, {
|
|
'key': 'B9',
|
|
'description': 'B9 23 33 x 62 mm',
|
|
'height': 62.0,
|
|
'width': 33.0,
|
|
}, {
|
|
'key': 'B10',
|
|
'description': 'B10 16 31 x 44 mm',
|
|
'height': 44.0,
|
|
'width': 31.0,
|
|
}, {
|
|
'key': 'C5E',
|
|
'description': 'C5E 24 163 x 229 mm',
|
|
'height': 229.0,
|
|
'width': 163.0,
|
|
}, {
|
|
'key': 'Comm10E',
|
|
'description': 'Comm10E 25 105 x 241 mm, U.S. Common 10 Envelope',
|
|
'height': 241.0,
|
|
'width': 105.0,
|
|
}, {
|
|
'key': 'DLE',
|
|
'description': 'DLE 26 110 x 220 mm',
|
|
'height': 220.0,
|
|
'width': 110.0,
|
|
}, {
|
|
'key': 'Executive',
|
|
'description': 'Executive 4 7.5 x 10 inches, 190.5 x 254 mm',
|
|
'height': 254.0,
|
|
'width': 190.5,
|
|
}, {
|
|
'key': 'Folio',
|
|
'description': 'Folio 27 210 x 330 mm',
|
|
'height': 330.0,
|
|
'width': 210.0,
|
|
}, {
|
|
'key': 'Ledger',
|
|
'description': 'Ledger 28 431.8 x 279.4 mm',
|
|
'height': 279.4,
|
|
'width': 431.8,
|
|
}, {
|
|
'key': 'Legal',
|
|
'description': 'Legal 3 8.5 x 14 inches, 215.9 x 355.6 mm',
|
|
'height': 355.6,
|
|
'width': 215.9,
|
|
}, {
|
|
'key': 'Letter',
|
|
'description': 'Letter 2 8.5 x 11 inches, 215.9 x 279.4 mm',
|
|
'height': 279.4,
|
|
'width': 215.9,
|
|
}, {
|
|
'key': 'Tabloid',
|
|
'description': 'Tabloid 29 279.4 x 431.8 mm',
|
|
'height': 431.8,
|
|
'width': 279.4,
|
|
}, {
|
|
'key': 'custom',
|
|
'description': 'Custom',
|
|
},
|
|
]
|
|
|
|
|
|
class report_paperformat(models.Model):
|
|
_name = "report.paperformat"
|
|
_description = "Paper Format Config"
|
|
|
|
name = fields.Char('Name', required=True)
|
|
default = fields.Boolean('Default paper format?')
|
|
format = fields.Selection([(ps['key'], ps['description']) for ps in PAPER_SIZES], 'Paper size', default='A4', help="Select Proper Paper size")
|
|
margin_top = fields.Float('Top Margin (mm)', default=40)
|
|
margin_bottom = fields.Float('Bottom Margin (mm)', default=20)
|
|
margin_left = fields.Float('Left Margin (mm)', default=7)
|
|
margin_right = fields.Float('Right Margin (mm)', default=7)
|
|
page_height = fields.Integer('Page height (mm)', default=False)
|
|
page_width = fields.Integer('Page width (mm)', default=False)
|
|
orientation = fields.Selection([
|
|
('Landscape', 'Landscape'),
|
|
('Portrait', 'Portrait')
|
|
], 'Orientation', default='Landscape')
|
|
header_line = fields.Boolean('Display a header line', default=False)
|
|
header_spacing = fields.Integer('Header spacing', default=35)
|
|
disable_shrinking = fields.Boolean('Disable smart shrinking')
|
|
dpi = fields.Integer('Output DPI', required=True, default=90)
|
|
report_ids = fields.One2many('ir.actions.report', 'paperformat_id', 'Associated reports', help="Explicitly associated reports")
|
|
print_page_width = fields.Float('Print page width (mm)', compute='_compute_print_page_size')
|
|
print_page_height = fields.Float('Print page height (mm)', compute='_compute_print_page_size')
|
|
|
|
@api.constrains('format')
|
|
def _check_format_or_page(self):
|
|
if self.filtered(lambda x: x.format != 'custom' and (x.page_width or x.page_height)):
|
|
raise ValidationError(_('You can select either a format or a specific page width/height, but not both.'))
|
|
|
|
def _compute_print_page_size(self):
|
|
for record in self:
|
|
width = height = 0.0
|
|
if record.format:
|
|
if record.format == 'custom':
|
|
width = record.page_width
|
|
height = record.page_height
|
|
else:
|
|
paper_size = next(ps for ps in PAPER_SIZES if ps['key'] == record.format)
|
|
width = paper_size['width']
|
|
height = paper_size['height']
|
|
|
|
if record.orientation == 'Landscape':
|
|
# swap sizes
|
|
width, height = height, width
|
|
|
|
record.print_page_width = width
|
|
record.print_page_height = height
|