[MERGE] forward port of branch 8.0 up to 40fdb84

This commit is contained in:
Christophe Simonis
2016-03-04 14:33:37 +01:00
11 changed files with 98 additions and 30 deletions
+1
View File
@@ -777,6 +777,7 @@ class account_invoice(models.Model):
line2[tmp]['debit'] = (am > 0) and am or 0.0
line2[tmp]['credit'] = (am < 0) and -am or 0.0
line2[tmp]['tax_amount'] += l['tax_amount']
line2[tmp]['amount_currency'] += l['amount_currency']
line2[tmp]['analytic_lines'] += l['analytic_lines']
else:
line2[tmp] = l
+1 -1
View File
@@ -166,7 +166,7 @@ class res_partner(osv.Model):
if partner.user_ids:
res['login'] = partner.user_ids[0].login
else:
res['email'] = partner.email or ''
res['login'] = res['email'] = partner.email or ''
return res
class res_users(osv.Model):
+1 -1
View File
@@ -37,7 +37,7 @@ class Blackbox(Thread):
# request. The first device to give an answer that makes sense
# wins.
def _find_device_path_by_probing(self):
path = "/dev/serial/by-id/"
path = "/dev/serial/by-path/"
probe_message = self._wrap_low_level_message_around("S000")
try:
+46 -16
View File
@@ -29,10 +29,12 @@ class Scale(Thread):
self.lock = Lock()
self.scalelock = Lock()
self.status = {'status':'connecting', 'messages':[]}
self.input_dir = '/dev/serial/by-id/'
self.input_dir = '/dev/serial/by-path/'
self.weight = 0
self.weight_info = 'ok'
self.device = None
self.probed_device_paths = []
self.path_to_scale = ''
def lockedstart(self):
with self.lock:
@@ -61,27 +63,55 @@ class Scale(Thread):
elif status == 'disconnected' and message:
_logger.info('Disconnected Scale: %s', message)
def _get_raw_response(self, connection):
response = ""
while True:
byte = connection.read(1)
if byte:
response += byte
else:
return response
def get_device(self):
try:
if not os.path.exists(self.input_dir):
self.set_status('disconnected','Scale Not Found')
return None
devices = [ device for device in listdir(self.input_dir)]
scales = [ device for device in devices if ('mettler' in device.lower()) or ('toledo' in device.lower()) ]
if len(scales) > 0:
print join(self.input_dir,scales[0])
self.set_status('connected','Connected to '+scales[0])
return serial.Serial(join(self.input_dir,scales[0]),
baudrate = 9600,
bytesize = serial.SEVENBITS,
stopbits = serial.STOPBITS_ONE,
parity = serial.PARITY_EVEN,
#xonxoff = serial.XON,
timeout = 0.02,
writeTimeout= 0.02)
else:
self.set_status('disconnected','Scale Not Found')
return None
if len(devices) > 0:
for device in devices:
path = self.input_dir + device
# don't keep probing devices that are not a scale,
# only keep probing if in the past the device was
# confirmed to be a scale
if path not in self.probed_device_paths or path == self.path_to_scale:
_logger.debug('Probing: ' + path)
connection = serial.Serial(path,
baudrate = 9600,
bytesize = serial.SEVENBITS,
stopbits = serial.STOPBITS_ONE,
parity = serial.PARITY_EVEN,
timeout = 1,
writeTimeout = 1)
connection.write("W")
self.probed_device_paths.append(path)
if self._get_raw_response(connection):
_logger.debug(path + ' is scale')
self.path_to_scale = path
self.set_status('connected','Connected to '+device)
connection.timeout = 0.02
connection.writeTimeout = 0.02
return connection
else:
_logger.debug('Already probed: ' + path)
self.set_status('disconnected','Scale Not Found')
return None
except Exception as e:
self.set_status('error',str(e))
return None
+1 -6
View File
@@ -85,12 +85,7 @@ class ReportController(Controller):
at the bottom of the output image
"""
try:
width, height, humanreadable = int(width), int(height), bool(humanreadable)
barcode = createBarcodeDrawing(
type, value=value, format='png', width=width, height=height,
humanReadable = humanreadable
)
barcode = barcode.asString('png')
barcode = request.registry['report'].barcode(type, value, width=width, height=height, humanreadable=humanreadable)
except (ValueError, AttributeError):
raise exceptions.HTTPException(description='Cannot convert into barcode.')
+1
View File
@@ -1,3 +1,4 @@
import report
import report_paperformat
import abstract_report
import ir_qweb
+21
View File
@@ -0,0 +1,21 @@
from reportlab.graphics.barcode import createBarcodeDrawing
from openerp.osv import osv
from openerp.addons.base.ir.ir_qweb import HTMLSafe
class BarcodeConverter(osv.AbstractModel):
""" ``barcode`` widget rendering, inserts a data:uri-using image tag in the
document. May be overridden by e.g. the website module to generate links
instead.
"""
_name = 'ir.qweb.field.barcode'
_inherit = 'ir.qweb.field'
def value_to_html(self, cr, uid, value, field, options=None, context=None):
barcode_type = options.get('type', 'Code128')
barcode = self.pool['report'].barcode(
barcode_type,
value,
**dict((key, value) for key, value in options.items() if key in ['width', 'height', 'humanreadable']))
return HTMLSafe('<img src="data:%s;base64,%s">' % ('png', barcode.encode('base64')))
+16
View File
@@ -42,6 +42,7 @@ from contextlib import closing
from distutils.version import LooseVersion
from functools import partial
from pyPdf import PdfFileWriter, PdfFileReader
from reportlab.graphics.barcode import createBarcodeDrawing
#--------------------------------------------------------------------------
@@ -570,3 +571,18 @@ class Report(osv.Model):
stream.close()
return merged_file_path
def barcode(self, barcode_type, value, width=600, height=100, humanreadable=0):
if barcode_type == 'UPCA' and len(value) in (11, 12, 13):
barcode_type = 'EAN13'
if len(value) in (11, 12):
value = '0%s' % value
try:
width, height, humanreadable = int(width), int(height), bool(humanreadable)
barcode = createBarcodeDrawing(
barcode_type, value=value, format='png', width=width, height=height,
humanReadable=humanreadable
)
return barcode.asString('png')
except (ValueError, AttributeError):
raise ValueError("Cannot convert into barcode.")
-6
View File
@@ -51,12 +51,6 @@ msgstr ""
msgid " (reserved)"
msgstr ""
#. module: stock
#: code:addons/stock/stock.py:2954
#, python-format
msgid "You cannot have two inventory adjustements in state 'in Progess' with the same product(%s), same location(%s), same package, same owner and same lot. Please first validate the first inventory adjustement with this product before creating another one."
msgstr ""
#. module: stock
#: code:addons/stock/stock.py:3090
#, python-format
+1
View File
@@ -1,2 +1,3 @@
import controllers
import report
import ir_qweb
+9
View File
@@ -0,0 +1,9 @@
from openerp.osv import orm
class Barcode(orm.AbstractModel):
_name = 'website.qweb.field.barcode'
_inherit = ['website.qweb.field', 'ir.qweb.field.barcode']
def from_html(self, cr, uid, model, field, element, context=None):
return None