Files
odoo_source/odoo/addons/base/models/report_paperformat.py
T
Louis Wicket (wil) 9afe7c74c9 [IMP] *: remove "French spacing" 👺
According to Wiktionary, French spacing is "the archaic practice (though
still current in French) of inserting a space around colons, semicolons,
question marks, and exclamation marks". This is not standard practice in
English and most languages of the world.

The purpose of this commit is to start purging the code from this typo,
as it may reflect poorly on the software for some people.

closes odoo/odoo#114533

Related: odoo/enterprise#37853
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
2023-03-14 15:52:10 +01:00

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