diff --git a/addons/account_anglo_saxon/i18n/sk.po b/addons/account_anglo_saxon/i18n/sk.po
new file mode 100644
index 00000000000..ff14bd7feb4
--- /dev/null
+++ b/addons/account_anglo_saxon/i18n/sk.po
@@ -0,0 +1,62 @@
+# Slovak translation for openobject-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR
, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2014-04-26 16:04+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Slovak \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-04-27 05:58+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_category
+msgid "Product Category"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice_line
+msgid "Invoice Line"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: field:product.category,property_account_creditor_price_difference_categ:0
+#: field:product.template,property_account_creditor_price_difference:0
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice
+msgid "Invoice"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_stock_picking
+msgid "Picking List"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: help:product.category,property_account_creditor_price_difference_categ:0
+#: help:product.template,property_account_creditor_price_difference:0
+msgid ""
+"This account will be used to value price difference between purchase price "
+"and cost price."
+msgstr ""
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 771c6e15bd8..982d53ef4e6 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -189,7 +189,7 @@ class account_voucher(osv.osv):
if not ids:
return []
if context is None: context = {}
- return [(r['id'], (str("%.2f" % r['amount']) or '')) for r in self.read(cr, uid, ids, ['amount'], context, load='_classic_write')]
+ return [(r['id'], (r['number'] or _('Voucher'))) for r in self.read(cr, uid, ids, ['number'], context, load='_classic_write')]
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
mod_obj = self.pool.get('ir.model.data')
diff --git a/addons/association/i18n/sk.po b/addons/association/i18n/sk.po
new file mode 100644
index 00000000000..c1c16d88cd8
--- /dev/null
+++ b/addons/association/i18n/sk.po
@@ -0,0 +1,135 @@
+# Slovak translation for openobject-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2014-04-26 16:22+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Slovak \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-04-27 05:58+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,wiki:0
+msgid "Wiki"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Event Management"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,project_gtd:0
+msgid "Getting Things Done"
+msgstr ""
+
+#. module: association
+#: model:ir.module.module,description:association.module_meta_information
+msgid "This module is to create Profile for Associates"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid ""
+"Here are specific applications related to the Association Profile you "
+"selected."
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "title"
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,event_project:0
+msgid "Helps you to manage and organize your events."
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,hr_expense:0
+msgid ""
+"Tracks and manages employee expenses, and can automatically re-invoice "
+"clients if the expenses are project-related."
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project_gtd:0
+msgid ""
+"GTD is a methodology to efficiently organise yourself and your tasks. This "
+"module fully integrates GTD principle with OpenERP's project management."
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Resources Management"
+msgstr ""
+
+#. module: association
+#: model:ir.module.module,shortdesc:association.module_meta_information
+msgid "Association profile"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,hr_expense:0
+msgid "Expenses Tracking"
+msgstr ""
+
+#. module: association
+#: model:ir.actions.act_window,name:association.action_config_install_module
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Association Application Configuration"
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project:0
+msgid ""
+"Helps you manage your projects and tasks by tracking them, generating "
+"plannings, etc..."
+msgstr ""
+
+#. module: association
+#: model:ir.model,name:association.model_profile_association_config_install_modules_wizard
+msgid "profile.association.config.install_modules_wizard"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,event_project:0
+msgid "Events"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+#: field:profile.association.config.install_modules_wizard,project:0
+msgid "Project Management"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Configure"
+msgstr ""
diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py
index 8c87e779b3b..7a7cca9be0e 100644
--- a/addons/base_import/__openerp__.py
+++ b/addons/base_import/__openerp__.py
@@ -38,5 +38,4 @@ Re-implement openerp's file import system:
'static/src/js/import.js',
],
'qweb': ['static/src/xml/import.xml'],
- 'test': ['static/test/states.js'],
}
diff --git a/addons/base_import/static/test/states.js b/addons/base_import/static/test/states.js
deleted file mode 100644
index 3e349907a6f..00000000000
--- a/addons/base_import/static/test/states.js
+++ /dev/null
@@ -1,6 +0,0 @@
-$(document).ready(function () {
- module('foo');
- test('dummy', function () {
- ok(42);
- });
-});
diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py
index ea9b45c1b35..c65c7966b7c 100644
--- a/addons/hw_proxy/controllers/main.py
+++ b/addons/hw_proxy/controllers/main.py
@@ -24,9 +24,6 @@ from openerp.addons.web.controllers.main import manifest_list, module_boot, html
drivers = {}
class Proxy(http.Controller):
- def __init__(self):
- self.scale = 'closed'
- self.scale_weight = 0.0
def get_status(self):
statuses = {}
@@ -154,40 +151,6 @@ class Proxy(http.Controller):
"""
print "help_canceled"
- @http.route('/hw_proxy/weighting_start', type='json', auth='none', cors='*')
- def weighting_start(self):
- if self.scale == 'closed':
- print "Opening (Fake) Connection to Scale..."
- self.scale = 'open'
- self.scale_weight = 0.0
- time.sleep(0.1)
- print "... Scale Open."
- else:
- print "WARNING: Scale already Connected !!!"
-
- @http.route('/hw_proxy/weighting_read_kg', type='json', auth='none', cors='*')
- def weighting_read_kg(self):
- if self.scale == 'open':
- print "Reading Scale..."
- time.sleep(0.025)
- self.scale_weight += 0.01
- print "... Done."
- return self.scale_weight
- else:
- print "WARNING: Reading closed scale !!!"
- return 0.0
-
- @http.route('/hw_proxy/weighting_end', type='json', auth='none', cors='*')
- def weighting_end(self):
- if self.scale == 'open':
- print "Closing Connection to Scale ..."
- self.scale = 'closed'
- self.scale_weight = 0.0
- time.sleep(0.1)
- print "... Scale Closed."
- else:
- print "WARNING: Scale already Closed !!!"
-
@http.route('/hw_proxy/payment_request', type='json', auth='none', cors='*')
def payment_request(self, price):
"""
diff --git a/addons/hw_scale/__init__.py b/addons/hw_scale/__init__.py
new file mode 100644
index 00000000000..a208bc1c551
--- /dev/null
+++ b/addons/hw_scale/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import controllers
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/hw_scale/__openerp__.py b/addons/hw_scale/__openerp__.py
new file mode 100644
index 00000000000..c986d88e44c
--- /dev/null
+++ b/addons/hw_scale/__openerp__.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+
+{
+ 'name': 'Weighting Scale Hardware Driver',
+ 'version': '1.0',
+ 'category': 'Hardware Drivers',
+ 'sequence': 6,
+ 'summary': 'Hardware Driver for Weighting Scales',
+ 'description': """
+Barcode Scanner Hardware Driver
+================================
+
+This module allows the point of sale to connect to a scale using a USB HSM Serial Scale Interface,
+such as the Mettler Toledo Ariva.
+
+""",
+ 'author': 'OpenERP SA',
+ 'depends': ['hw_proxy'],
+ 'test': [
+ ],
+ 'installable': True,
+ 'auto_install': False,
+}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hw_scale/controllers/__init__.py b/addons/hw_scale/controllers/__init__.py
new file mode 100644
index 00000000000..b5f0bcc9ec6
--- /dev/null
+++ b/addons/hw_scale/controllers/__init__.py
@@ -0,0 +1,3 @@
+import main
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/hw_scale/controllers/main.py b/addons/hw_scale/controllers/main.py
new file mode 100644
index 00000000000..161a7896b38
--- /dev/null
+++ b/addons/hw_scale/controllers/main.py
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+import logging
+import os
+import time
+from os import listdir
+from os.path import join
+from threading import Thread, Lock
+from select import select
+from Queue import Queue, Empty
+
+import openerp
+import openerp.addons.hw_proxy.controllers.main as hw_proxy
+from openerp import http
+from openerp.http import request
+from openerp.tools.translate import _
+
+_logger = logging.getLogger(__name__)
+
+try:
+ import serial
+except ImportError:
+ _logger.error('OpenERP module hw_scale depends on the pyserial python module')
+ serial = None
+
+
+class Scale(Thread):
+ def __init__(self):
+ Thread.__init__(self)
+ self.lock = Lock()
+ self.scalelock = Lock()
+ self.status = {'status':'connecting', 'messages':[]}
+ self.input_dir = '/dev/serial/by-id/'
+ self.weight = 0
+ self.weight_info = 'ok'
+ self.device = None
+
+ def lockedstart(self):
+ with self.lock:
+ if not self.isAlive():
+ self.daemon = True
+ self.start()
+
+ def set_status(self, status, message = None):
+ if status == self.status['status']:
+ if message != None and message != self.status['messages'][-1]:
+ self.status['messages'].append(message)
+ else:
+ self.status['status'] = status
+ if message:
+ self.status['messages'] = [message]
+ else:
+ self.status['messages'] = []
+
+ if status == 'error' and message:
+ _logger.error('Scale Error: '+message)
+ elif status == 'disconnected' and message:
+ _logger.warning('Disconnected Scale: '+message)
+
+ def get_device(self):
+ try:
+ 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.01,
+ writeTimeout= 0.01)
+ else:
+ self.set_status('disconnected','Scale Not Found')
+ return None
+ except Exception as e:
+ self.set_status('error',str(e))
+ return None
+
+ def get_weight(self):
+ self.lockedstart()
+ return self.weight
+
+ def get_weight_info(self):
+ self.lockedstart()
+ return self.weight_info
+
+ def get_status(self):
+ self.lockedstart()
+ return self.status
+
+ def read_weight(self):
+ with self.scalelock:
+ if self.device:
+ try:
+ self.device.write('W')
+ time.sleep(0.1)
+ answer = []
+
+ while True:
+ char = self.device.read(1)
+ if not char:
+ break
+ else:
+ answer.append(char)
+
+ if '?' in answer:
+ stat = ord(answer[answer.index('?')+1])
+ if stat == 0:
+ self.weight_info = 'ok'
+ else:
+ self.weight_info = []
+ if stat & 1 :
+ self.weight_info.append('moving')
+ if stat & 1 << 1:
+ self.weight_info.append('over_capacity')
+ if stat & 1 << 2:
+ self.weight_info.append('negative')
+ self.weight = 0.0
+ if stat & 1 << 3:
+ self.weight_info.append('outside_zero_capture_range')
+ if stat & 1 << 4:
+ self.weight_info.append('center_of_zero')
+ if stat & 1 << 5:
+ self.weight_info.append('net_weight')
+ else:
+ answer = answer[1:-1]
+ if 'N' in answer:
+ answer = answer[0:-1]
+ try:
+ self.weight = float(''.join(answer))
+ except ValueError as v:
+ self.set_status('error','No data Received, please power-cycle the scale');
+ self.device = None
+
+ except Exception as e:
+ self.set_status('error',str(e))
+ self.device = None
+
+ def set_zero(self):
+ with self.scalelock:
+ if self.device:
+ try:
+ self.device.write('Z')
+ except Exception as e:
+ self.set_status('error',str(e))
+ self.device = None
+
+ def set_tare(self):
+ with self.scalelock:
+ if self.device:
+ try:
+ self.device.write('T')
+ except Exception as e:
+ self.set_status('error',str(e))
+ self.device = None
+
+ def clear_tare(self):
+ with self.scalelock:
+ if self.device:
+ try:
+ self.device.write('C')
+ except Exception as e:
+ self.set_status('error',str(e))
+ self.device = None
+
+ def run(self):
+ self.device = None
+
+ while True:
+ if self.device:
+ self.read_weight()
+ time.sleep(0.05)
+ else:
+ with self.scalelock:
+ self.device = self.get_device()
+ if not self.device:
+ time.sleep(5)
+
+s = Scale()
+
+hw_proxy.drivers['scale'] = s
+
+class ScaleDriver(hw_proxy.Proxy):
+ @http.route('/hw_proxy/scale_read/', type='json', auth='none', cors='*')
+ def scale_read(self):
+ return {'weight':s.get_weight(), 'unit':'kg', 'info':s.get_weight_info()}
+
+ @http.route('/hw_proxy/scale_zero/', type='json', auth='none', cors='*')
+ def scale_zero(self):
+ s.set_zero()
+ return True
+
+ @http.route('/hw_proxy/scale_tare/', type='json', auth='none', cors='*')
+ def scale_tare(self):
+ s.set_tare()
+ return True
+
+ @http.route('/hw_proxy/scale_clear_tare/', type='json', auth='none', cors='*')
+ def scale_clear_tare(self):
+ s.clear_tare()
+ return True
+
+
diff --git a/addons/mail/data/mail_demo.xml b/addons/mail/data/mail_demo.xml
index 09415ba89e0..d9f8ea33d28 100644
--- a/addons/mail/data/mail_demo.xml
+++ b/addons/mail/data/mail_demo.xml
@@ -259,7 +259,7 @@
Feedback about our On Site Assistance
- Hi Virginie,I writing to you about our On Site Assistance Service that we delivered to Agrolait last week. Do you have any feedback or remark about our service? I noticed you requested new IP phones. Will it be used for new employees, or did you have any issue with the ones we provided?
Best regards,
]]>
+ Hi Virginie,I wrote to you about our On Site Assistance Service that we delivered to Agrolait last week. Do you have any feedback or remark about our service? I noticed you requested new IP phones. Will it be used for new employees, or did you have any issue with the ones we provided?
Best regards,
]]>
comment
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
index 50b579d9ec2..ab1b1013e50 100644
--- a/addons/membership/report/report_membership_view.xml
+++ b/addons/membership/report/report_membership_view.xml
@@ -49,17 +49,11 @@
Members Analysis
report.membership
form
+ graph
{"search_default_year":1,"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1,'group_by_no_leaf':1}
-
-
- graph
-
-
-
-