mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
[WIP] Commit before rebase on latest #109 for user and view updates
Migration of printer_tray to v11 and integration with base_report_to_printer
This commit is contained in:
committed by
Rod Schouteden
parent
877e5cbcc9
commit
52a8e0ec2b
@@ -7,8 +7,8 @@
|
||||
# Copyright (C) 2016 SYLEAM (<http://www.syleam.fr>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import errno
|
||||
import logging
|
||||
|
||||
import os
|
||||
from tempfile import mkstemp
|
||||
|
||||
@@ -17,6 +17,11 @@ from odoo import models, fields, api
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
import cups
|
||||
except ImportError:
|
||||
_logger.debug('Cannot `import cups`.')
|
||||
|
||||
|
||||
class PrintingPrinter(models.Model):
|
||||
"""
|
||||
@@ -52,6 +57,55 @@ class PrintingPrinter(models.Model):
|
||||
model = fields.Char(readonly=True)
|
||||
location = fields.Char(readonly=True)
|
||||
uri = fields.Char(string='URI', readonly=True)
|
||||
tray_ids = fields.One2many(comodel_name='printing.tray',
|
||||
inverse_name='printer_id',
|
||||
string='Paper Sources')
|
||||
|
||||
@api.multi
|
||||
def _prepare_update_from_cups(self, cups_connection, cups_printer):
|
||||
vals = super(PrintingPrinter, self)._prepare_update_from_cups(
|
||||
cups_connection, cups_printer)
|
||||
|
||||
printer_uri = cups_printer['printer-uri-supported']
|
||||
printer_system_name = printer_uri[printer_uri.rfind('/') + 1:]
|
||||
ppd_info = cups_connection.getPPD3(printer_system_name)
|
||||
ppd_path = ppd_info[2]
|
||||
if not ppd_path:
|
||||
return vals
|
||||
|
||||
ppd = cups.PPD(ppd_path)
|
||||
option = ppd.findOption('InputSlot')
|
||||
try:
|
||||
os.unlink(ppd_path)
|
||||
except OSError as err:
|
||||
# ENOENT means No such file or directory
|
||||
# The file has already been deleted, we can continue the update
|
||||
if err.errno != errno.ENOENT:
|
||||
raise
|
||||
if not option:
|
||||
return vals
|
||||
|
||||
vals['tray_ids'] = []
|
||||
cups_trays = {
|
||||
tray_option['choice']: tray_option['text']
|
||||
for tray_option in option.choices
|
||||
}
|
||||
|
||||
# Add new trays
|
||||
vals['tray_ids'].extend([
|
||||
(0, 0, {'name': text, 'system_name': choice})
|
||||
for choice, text in cups_trays.items()
|
||||
if choice not in self.tray_ids.mapped('system_name')
|
||||
])
|
||||
|
||||
# Remove deleted trays
|
||||
vals['tray_ids'].extend([
|
||||
(2, tray.id)
|
||||
for tray in self.tray_ids.filtered(
|
||||
lambda record: record.system_name not in cups_trays.keys())
|
||||
])
|
||||
|
||||
return vals
|
||||
|
||||
@api.multi
|
||||
def _prepare_update_from_cups(self, cups_connection, cups_printer):
|
||||
@@ -79,6 +133,25 @@ class PrintingPrinter(models.Model):
|
||||
options['raw'] = 'True'
|
||||
if copies > 1:
|
||||
options['copies'] = str(copies)
|
||||
if report is not None:
|
||||
printing_act_obj = self.env['printing.report.xml.action']
|
||||
if report.printer_tray_id:
|
||||
tray = report.printer_tray_id
|
||||
else:
|
||||
# Retrieve user default values
|
||||
tray = self.env.user.printer_tray_id
|
||||
|
||||
# Retrieve report-user specific values
|
||||
action = printing_act_obj.search([
|
||||
('report_id', '=', report.id),
|
||||
('user_id', '=', self.env.uid),
|
||||
('action', '!=', 'user_default'),
|
||||
], limit=1)
|
||||
if action.printer_tray_id:
|
||||
tray = action.printer_tray_id
|
||||
|
||||
if tray:
|
||||
options['InputSlot'] = str(tray.system_name)
|
||||
return options
|
||||
|
||||
@api.multi
|
||||
|
||||
Reference in New Issue
Block a user