diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index af6ad48a747..9b2f4829786 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -574,7 +574,8 @@ class account_move_line(osv.osv):
res = super(account_move_line, self)._auto_init(cr, context=context)
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'account_move_line_journal_id_period_id_index\'')
if not cr.fetchone():
- cr.execute('CREATE INDEX account_move_line_journal_id_period_id_index ON account_move_line (journal_id, period_id)')
+ cr.execute('CREATE INDEX account_move_line_journal_id_period_id_index '
+ 'ON account_move_line (journal_id, period_id, state, create_uid, id DESC)')
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('account_move_line_date_id_index',))
if not cr.fetchone():
cr.execute('CREATE INDEX account_move_line_date_id_index ON account_move_line (date DESC, id desc)')
diff --git a/addons/account_asset/account_asset_invoice.py b/addons/account_asset/account_asset_invoice.py
index d5b1c298c0b..0d1903cfbc9 100644
--- a/addons/account_asset/account_asset_invoice.py
+++ b/addons/account_asset/account_asset_invoice.py
@@ -24,8 +24,8 @@ from openerp.osv import fields, osv
class account_invoice(osv.osv):
_inherit = 'account.invoice'
- def action_number(self, cr, uid, ids, *args):
- result = super(account_invoice, self).action_number(cr, uid, ids, *args)
+ def action_number(self, cr, uid, ids, *args, **kargs):
+ result = super(account_invoice, self).action_number(cr, uid, ids, *args, **kargs)
for inv in self.browse(cr, uid, ids):
self.pool.get('account.invoice.line').asset_create(cr, uid, inv.invoice_line)
return result
diff --git a/addons/auth_oauth_signup/res_users.py b/addons/auth_oauth_signup/res_users.py
index a06968fa46f..3f011aa14db 100644
--- a/addons/auth_oauth_signup/res_users.py
+++ b/addons/auth_oauth_signup/res_users.py
@@ -31,6 +31,20 @@ _logger = logging.getLogger(__name__)
class res_users(osv.Model):
_inherit = 'res.users'
+ def _generate_signup_values(self, cr, uid, provider, validation, params, context=None):
+ oauth_uid = validation['user_id']
+ email = validation.get('email', 'provider_%s_user_%s' % (provider, oauth_uid))
+ name = validation.get('name', email)
+ return {
+ 'name': name,
+ 'login': email,
+ 'email': email,
+ 'oauth_provider_id': provider,
+ 'oauth_uid': oauth_uid,
+ 'oauth_access_token': params['access_token'],
+ 'active': True,
+ }
+
def _auth_oauth_signin(self, cr, uid, provider, validation, params, context=None):
# overridden to use signup method if regular oauth signin fails
try:
@@ -41,18 +55,7 @@ class res_users(osv.Model):
return None
state = simplejson.loads(params['state'])
token = state.get('t')
- oauth_uid = validation['user_id']
- email = validation.get('email', 'provider_%s_user_%s' % (provider, oauth_uid))
- name = validation.get('name', email)
- values = {
- 'name': name,
- 'login': email,
- 'email': email,
- 'oauth_provider_id': provider,
- 'oauth_uid': oauth_uid,
- 'oauth_access_token': params['access_token'],
- 'active': True,
- }
+ values = self._generate_signup_values(cr, uid, provider, validation, params, context=context)
try:
_, login, _ = self.signup(cr, uid, values, token, context=context)
except SignupError:
diff --git a/addons/l10n_ch/sterchi_chart/vat2011.xml b/addons/l10n_ch/sterchi_chart/vat2011.xml
index c6732a00ed4..29e84aa1c1f 100644
--- a/addons/l10n_ch/sterchi_chart/vat2011.xml
+++ b/addons/l10n_ch/sterchi_chart/vat2011.xml
@@ -148,8 +148,8 @@
-
-
+
+
sale
@@ -169,8 +169,8 @@
purchase
-
-
+
+
TVA 2.5% sur invest. et autres ch. (TR)
@@ -210,8 +210,8 @@
sale
-
-
+
+
TVA 3.8% sur achat B&S (TS)
@@ -230,8 +230,8 @@
purchase
-
-
+
+
TVA 3.8% sur invest. et autres ch. (TS)
@@ -271,8 +271,8 @@
sale
-
-
+
+
TVA 8.0% sur achat B&S (TN)
@@ -292,8 +292,8 @@
purchase
-
-
+
+
TVA 8.0% sur invest. et autres ch. (TN)
@@ -330,8 +330,8 @@
sale
-
-
+
+
TVA 0% exclue
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 47b5925df18..687a6f751d0 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -377,6 +377,40 @@ class mrp_bom(osv.osv):
res = self._bom_explode(cr, uid, bom2, factor, properties, addthis=True, level=level+10)
result = result + res[0]
result2 = result2 + res[1]
+
+ # We merge the results for the same product. The reason is that action_produce does not
+ # support the case where the same product appears on multiple lines. To avoid major changes
+ # in a stable version, we do this simple hack at this point.
+ # Only for v7.0, do not use in v8.0
+ result_dict = {}
+ result_dup = False
+ for product_detail in result:
+ key = (
+ product_detail['name'],
+ product_detail['product_id'],
+ product_detail['product_uom'],
+ product_detail['product_uos_qty'],
+ product_detail['product_uos']
+ )
+ if key in result_dict:
+ result_dict[key] += product_detail['product_qty']
+ result_dup = True
+ else:
+ result_dict[key] = product_detail['product_qty']
+
+ if result_dup:
+ result = []
+ for key in result_dict.keys():
+ result.append(
+ {
+ 'name': key[0],
+ 'product_id': key[1],
+ 'product_qty': result_dict[key],
+ 'product_uom': key[2],
+ 'product_uos_qty': key[3],
+ 'product_uos': key[4],
+ })
+
return result, result2
def copy_data(self, cr, uid, id, default=None, context=None):
diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py
index c465fb9a37f..9569403f2e3 100644
--- a/openerp/tools/misc.py
+++ b/openerp/tools/misc.py
@@ -465,6 +465,7 @@ ALL_LANGUAGES = {
'id_ID': u'Indonesian / Bahasa Indonesia',
'it_IT': u'Italian / Italiano',
'ja_JP': u'Japanese / 日本語',
+ 'ka_GE': u'Georgian / ქართული ენა',
'ko_KP': u'Korean (KP) / 한국어 (KP)',
'ko_KR': u'Korean (KR) / 한국어 (KR)',
'lo_LA': u'Lao / ພາສາລາວ',