[MERGE] Forward-port saas-3 up to e79a367
This commit is contained in:
commit
8b15482e00
|
@ -74,13 +74,19 @@ class account_analytic_line(osv.osv):
|
|||
product_obj = self.pool.get('product.product')
|
||||
analytic_journal_obj =self.pool.get('account.analytic.journal')
|
||||
product_price_type_obj = self.pool.get('product.price.type')
|
||||
product_uom_obj = self.pool.get('product.uom')
|
||||
j_id = analytic_journal_obj.browse(cr, uid, journal_id, context=context)
|
||||
prod = product_obj.browse(cr, uid, prod_id, context=context)
|
||||
result = 0.0
|
||||
if prod_id:
|
||||
unit = prod.uom_id.id
|
||||
unit_obj = False
|
||||
if unit:
|
||||
unit_obj = product_uom_obj.browse(cr, uid, unit, context=context)
|
||||
if not unit_obj or prod.uom_id.category_id.id != unit_obj.category_id.id:
|
||||
unit = prod.uom_id.id
|
||||
if j_id.type == 'purchase':
|
||||
unit = prod.uom_po_id.id
|
||||
if not unit_obj or prod.uom_po_id.category_id.id != unit_obj.category_id.id:
|
||||
unit = prod.uom_po_id.id
|
||||
if j_id.type <> 'sale':
|
||||
a = prod.property_account_expense.id
|
||||
if not a:
|
||||
|
|
|
@ -378,11 +378,20 @@ class MergePartnerAutomatic(osv.TransientModel):
|
|||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
def _generate_query(self, fields, maximum_group=100):
|
||||
group_fields = ', '.join(fields)
|
||||
sql_fields = []
|
||||
for field in fields:
|
||||
if field in ['email', 'name']:
|
||||
sql_fields.append('lower(%s)' % field)
|
||||
elif field in ['vat']:
|
||||
sql_fields.append("replace(%s, ' ', '')" % field)
|
||||
else:
|
||||
sql_fields.append(field)
|
||||
|
||||
group_fields = ', '.join(sql_fields)
|
||||
|
||||
filters = []
|
||||
for field in fields:
|
||||
if field in ['email', 'name']:
|
||||
if field in ['email', 'name', 'vat']:
|
||||
filters.append((field, 'IS NOT', 'NULL'))
|
||||
|
||||
criteria = ' AND '.join('%s %s %s' % (field, operator, value)
|
||||
|
|
|
@ -896,7 +896,7 @@ class mail_thread(osv.AbstractModel):
|
|||
|
||||
# 1. message is a reply to an existing message (exact match of message_id)
|
||||
ref_match = thread_references and tools.reference_re.search(thread_references)
|
||||
msg_references = thread_references.split()
|
||||
msg_references = mail_header_msgid_re.findall(thread_references)
|
||||
mail_message_ids = mail_msg_obj.search(cr, uid, [('message_id', 'in', msg_references)], context=context)
|
||||
if ref_match and mail_message_ids:
|
||||
original_msg = mail_msg_obj.browse(cr, SUPERUSER_ID, mail_message_ids[0], context=context)
|
||||
|
@ -939,7 +939,7 @@ class mail_thread(osv.AbstractModel):
|
|||
email_from, email_to, message_id, model, thread_id, custom_values, uid)
|
||||
return [route]
|
||||
|
||||
# 2. Reply to a private message
|
||||
# 3. Reply to a private message
|
||||
if in_reply_to:
|
||||
mail_message_ids = mail_msg_obj.search(cr, uid, [
|
||||
('message_id', '=', in_reply_to),
|
||||
|
@ -956,7 +956,7 @@ class mail_thread(osv.AbstractModel):
|
|||
email_from, email_to, message_id, mail_message.id, custom_values, uid)
|
||||
return [route]
|
||||
|
||||
# 3. Look for a matching mail.alias entry
|
||||
# 4. Look for a matching mail.alias entry
|
||||
# Delivered-To is a safe bet in most modern MTAs, but we have to fallback on To + Cc values
|
||||
# for all the odd MTAs out there, as there is no standard header for the envelope's `rcpt_to` value.
|
||||
rcpt_tos = \
|
||||
|
@ -991,7 +991,7 @@ class mail_thread(osv.AbstractModel):
|
|||
routes.append(route)
|
||||
return routes
|
||||
|
||||
# 4. Fallback to the provided parameters, if they work
|
||||
# 5. Fallback to the provided parameters, if they work
|
||||
if not thread_id:
|
||||
# Legacy: fallback to matching [ID] in the Subject
|
||||
match = tools.res_re.search(decode_header(message, 'Subject'))
|
||||
|
|
|
@ -4653,18 +4653,19 @@ class BaseModel(object):
|
|||
order_by = self._generate_order_by(order, query)
|
||||
from_clause, where_clause, where_clause_params = query.get_sql()
|
||||
|
||||
limit_str = limit and ' limit %d' % limit or ''
|
||||
offset_str = offset and ' offset %d' % offset or ''
|
||||
where_str = where_clause and (" WHERE %s" % where_clause) or ''
|
||||
query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str
|
||||
|
||||
if count:
|
||||
# /!\ the main query must be executed as a subquery, otherwise
|
||||
# offset and limit apply to the result of count()!
|
||||
cr.execute('SELECT count(*) FROM (%s) AS count' % query_str, where_clause_params)
|
||||
# Ignore order, limit and offset when just counting, they don't make sense and could
|
||||
# hurt performance
|
||||
query_str = 'SELECT count(1) FROM ' + from_clause + where_str
|
||||
cr.execute(query_str, where_clause_params)
|
||||
res = cr.fetchone()
|
||||
return res[0]
|
||||
|
||||
limit_str = limit and ' limit %d' % limit or ''
|
||||
offset_str = offset and ' offset %d' % offset or ''
|
||||
query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str
|
||||
cr.execute(query_str, where_clause_params)
|
||||
res = cr.fetchall()
|
||||
|
||||
|
|
Loading…
Reference in New Issue