[MERGE] forward port of branch saas-3 up to 3d4b82c
This commit is contained in:
commit
388f1a1d7e
|
@ -110,6 +110,7 @@ class third_party_ledger(report_sxw.rml_parse, common_report_header):
|
||||||
"AND account.active ", params)
|
"AND account.active ", params)
|
||||||
self.partner_ids = [res['partner_id'] for res in self.cr.dictfetchall()]
|
self.partner_ids = [res['partner_id'] for res in self.cr.dictfetchall()]
|
||||||
objects = obj_partner.browse(self.cr, self.uid, self.partner_ids)
|
objects = obj_partner.browse(self.cr, self.uid, self.partner_ids)
|
||||||
|
objects.sort(key=lambda x: (x.ref, x.name))
|
||||||
return super(third_party_ledger, self).set_context(objects, data, self.partner_ids, report_type)
|
return super(third_party_ledger, self).set_context(objects, data, self.partner_ids, report_type)
|
||||||
|
|
||||||
def lines(self, partner):
|
def lines(self, partner):
|
||||||
|
|
|
@ -297,6 +297,7 @@ class hr_expense_expense(osv.osv):
|
||||||
if not taxes:
|
if not taxes:
|
||||||
continue
|
continue
|
||||||
tax_l = []
|
tax_l = []
|
||||||
|
base_tax_amount = line.total_amount
|
||||||
#Calculating tax on the line and creating move?
|
#Calculating tax on the line and creating move?
|
||||||
for tax in tax_obj.compute_all(cr, uid, taxes,
|
for tax in tax_obj.compute_all(cr, uid, taxes,
|
||||||
line.unit_amount ,
|
line.unit_amount ,
|
||||||
|
@ -312,10 +313,10 @@ class hr_expense_expense(osv.osv):
|
||||||
## We need to deduce the price for the tax
|
## We need to deduce the price for the tax
|
||||||
res[-1]['price'] = res[-1]['price'] - (tax['amount'] * tax['base_sign'] or 0.0)
|
res[-1]['price'] = res[-1]['price'] - (tax['amount'] * tax['base_sign'] or 0.0)
|
||||||
# tax amount countains base amount without the tax
|
# tax amount countains base amount without the tax
|
||||||
tax_amount = (line.total_amount - tax['amount']) * tax['base_sign']
|
base_tax_amount = (base_tax_amount - tax['amount']) * tax['base_sign']
|
||||||
else:
|
else:
|
||||||
tax_amount = line.total_amount * tax['base_sign']
|
base_tax_amount = base_tax_amount * tax['base_sign']
|
||||||
res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
|
|
||||||
assoc_tax = {
|
assoc_tax = {
|
||||||
'type':'tax',
|
'type':'tax',
|
||||||
'name':tax['name'],
|
'name':tax['name'],
|
||||||
|
@ -327,6 +328,8 @@ class hr_expense_expense(osv.osv):
|
||||||
'tax_amount': tax['amount'] * tax['base_sign'],
|
'tax_amount': tax['amount'] * tax['base_sign'],
|
||||||
}
|
}
|
||||||
tax_l.append(assoc_tax)
|
tax_l.append(assoc_tax)
|
||||||
|
|
||||||
|
res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, base_tax_amount, context={'date': exp.date_confirm})
|
||||||
res += tax_l
|
res += tax_l
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ import time
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools import config, float_compare
|
from openerp.tools import float_compare, float_is_zero
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
class hr_payslip(osv.osv):
|
class hr_payslip(osv.osv):
|
||||||
|
@ -104,6 +104,8 @@ class hr_payslip(osv.osv):
|
||||||
}
|
}
|
||||||
for line in slip.details_by_salary_rule_category:
|
for line in slip.details_by_salary_rule_category:
|
||||||
amt = slip.credit_note and -line.total or line.total
|
amt = slip.credit_note and -line.total or line.total
|
||||||
|
if float_is_zero(amt, precision_digits=precision):
|
||||||
|
continue
|
||||||
partner_id = line.salary_rule_id.register_id.partner_id and line.salary_rule_id.register_id.partner_id.id or default_partner_id
|
partner_id = line.salary_rule_id.register_id.partner_id and line.salary_rule_id.register_id.partner_id.id or default_partner_id
|
||||||
debit_account_id = line.salary_rule_id.account_debit.id
|
debit_account_id = line.salary_rule_id.account_debit.id
|
||||||
credit_account_id = line.salary_rule_id.account_credit.id
|
credit_account_id = line.salary_rule_id.account_credit.id
|
||||||
|
@ -175,6 +177,7 @@ class hr_payslip(osv.osv):
|
||||||
'credit': 0.0,
|
'credit': 0.0,
|
||||||
})
|
})
|
||||||
line_ids.append(adjust_debit)
|
line_ids.append(adjust_debit)
|
||||||
|
|
||||||
move.update({'line_id': line_ids})
|
move.update({'line_id': line_ids})
|
||||||
move_id = move_pool.create(cr, uid, move, context=context)
|
move_id = move_pool.create(cr, uid, move, context=context)
|
||||||
self.write(cr, uid, [slip.id], {'move_id': move_id, 'period_id' : period_id}, context=context)
|
self.write(cr, uid, [slip.id], {'move_id': move_id, 'period_id' : period_id}, context=context)
|
||||||
|
|
|
@ -55,7 +55,7 @@ class im_livechat_channel(osv.Model):
|
||||||
|
|
||||||
def _script_external(self, cr, uid, ids, name, arg, context=None):
|
def _script_external(self, cr, uid, ids, name, arg, context=None):
|
||||||
values = {
|
values = {
|
||||||
"url": self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'),
|
"url": self.pool.get('ir.config_parameter').get_param(cr, openerp.SUPERUSER_ID, 'web.base.url'),
|
||||||
"dbname":cr.dbname
|
"dbname":cr.dbname
|
||||||
}
|
}
|
||||||
res = {}
|
res = {}
|
||||||
|
@ -66,7 +66,7 @@ class im_livechat_channel(osv.Model):
|
||||||
|
|
||||||
def _script_internal(self, cr, uid, ids, name, arg, context=None):
|
def _script_internal(self, cr, uid, ids, name, arg, context=None):
|
||||||
values = {
|
values = {
|
||||||
"url": self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'),
|
"url": self.pool.get('ir.config_parameter').get_param(cr, openerp.SUPERUSER_ID 'web.base.url'),
|
||||||
"dbname":cr.dbname
|
"dbname":cr.dbname
|
||||||
}
|
}
|
||||||
res = {}
|
res = {}
|
||||||
|
@ -78,7 +78,7 @@ class im_livechat_channel(osv.Model):
|
||||||
def _web_page(self, cr, uid, ids, name, arg, context=None):
|
def _web_page(self, cr, uid, ids, name, arg, context=None):
|
||||||
res = {}
|
res = {}
|
||||||
for record in self.browse(cr, uid, ids, context=context):
|
for record in self.browse(cr, uid, ids, context=context):
|
||||||
res[record.id] = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') + \
|
res[record.id] = self.pool.get('ir.config_parameter').get_param(cr, openerp.SUPERUSER_ID, 'web.base.url') + \
|
||||||
"/im_livechat/support/%s/%i" % (cr.dbname, record.id)
|
"/im_livechat/support/%s/%i" % (cr.dbname, record.id)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ from _common import ceiling
|
||||||
|
|
||||||
from openerp import SUPERUSER_ID
|
from openerp import SUPERUSER_ID
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields, expression
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
import psycopg2
|
import psycopg2
|
||||||
|
@ -1031,10 +1031,13 @@ class product_product(osv.osv):
|
||||||
if not args:
|
if not args:
|
||||||
args = []
|
args = []
|
||||||
if name:
|
if name:
|
||||||
|
positive_operators = ['=', 'ilike', '=ilike', 'like', '=like']
|
||||||
|
ids = []
|
||||||
|
if operator in positive_operators:
|
||||||
ids = self.search(cr, user, [('default_code','=',name)]+ args, limit=limit, context=context)
|
ids = self.search(cr, user, [('default_code','=',name)]+ args, limit=limit, context=context)
|
||||||
if not ids:
|
if not ids:
|
||||||
ids = self.search(cr, user, [('ean13','=',name)]+ args, limit=limit, context=context)
|
ids = self.search(cr, user, [('ean13','=',name)]+ args, limit=limit, context=context)
|
||||||
if not ids:
|
if not ids and operator not in expression.NEGATIVE_TERM_OPERATORS:
|
||||||
# Do not merge the 2 next lines into one single search, SQL search performance would be abysmal
|
# Do not merge the 2 next lines into one single search, SQL search performance would be abysmal
|
||||||
# on a database with thousands of matching products, due to the huge merge+unique needed for the
|
# on a database with thousands of matching products, due to the huge merge+unique needed for the
|
||||||
# OR operator (and given the fact that the 'name' lookup results come from the ir.translation table
|
# OR operator (and given the fact that the 'name' lookup results come from the ir.translation table
|
||||||
|
@ -1045,7 +1048,9 @@ class product_product(osv.osv):
|
||||||
limit2 = (limit - len(ids)) if limit else False
|
limit2 = (limit - len(ids)) if limit else False
|
||||||
ids.update(self.search(cr, user, args + [('name', operator, name)], limit=limit2, context=context))
|
ids.update(self.search(cr, user, args + [('name', operator, name)], limit=limit2, context=context))
|
||||||
ids = list(ids)
|
ids = list(ids)
|
||||||
if not ids:
|
elif not ids and operator in expression.NEGATIVE_TERM_OPERATORS:
|
||||||
|
ids = self.search(cr, user, args + ['&', ('default_code', operator, name), ('name', operator, name)], limit=limit, context=context)
|
||||||
|
if not ids and operator in positive_operators:
|
||||||
ptrn = re.compile('(\[(.*?)\])')
|
ptrn = re.compile('(\[(.*?)\])')
|
||||||
res = ptrn.search(name)
|
res = ptrn.search(name)
|
||||||
if res:
|
if res:
|
||||||
|
|
|
@ -30,6 +30,7 @@ from openerp.tools.translate import _
|
||||||
import openerp.addons.decimal_precision as dp
|
import openerp.addons.decimal_precision as dp
|
||||||
from openerp.osv.orm import browse_record_list, browse_record, browse_null
|
from openerp.osv.orm import browse_record_list, browse_record, browse_null
|
||||||
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
|
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
|
||||||
|
from openerp.tools.float_utils import float_compare
|
||||||
|
|
||||||
class purchase_order(osv.osv):
|
class purchase_order(osv.osv):
|
||||||
|
|
||||||
|
@ -1112,13 +1113,14 @@ class purchase_order_line(osv.osv):
|
||||||
|
|
||||||
|
|
||||||
supplierinfo = False
|
supplierinfo = False
|
||||||
|
precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Product Unit of Measure')
|
||||||
for supplier in product.seller_ids:
|
for supplier in product.seller_ids:
|
||||||
if partner_id and (supplier.name.id == partner_id):
|
if partner_id and (supplier.name.id == partner_id):
|
||||||
supplierinfo = supplier
|
supplierinfo = supplier
|
||||||
if supplierinfo.product_uom.id != uom_id:
|
if supplierinfo.product_uom.id != uom_id:
|
||||||
res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier only sells this product by %s') % supplierinfo.product_uom.name }
|
res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier only sells this product by %s') % supplierinfo.product_uom.name }
|
||||||
min_qty = product_uom._compute_qty(cr, uid, supplierinfo.product_uom.id, supplierinfo.min_qty, to_uom_id=uom_id)
|
min_qty = product_uom._compute_qty(cr, uid, supplierinfo.product_uom.id, supplierinfo.min_qty, to_uom_id=uom_id)
|
||||||
if (qty or 0.0) < min_qty: # If the supplier quantity is greater than entered from user, set minimal.
|
if float_compare(min_qty , qty, precision_digits=precision) == 1: # If the supplier quantity is greater than entered from user, set minimal.
|
||||||
if qty:
|
if qty:
|
||||||
res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier has a minimal quantity set to %s %s, you should not purchase less.') % (supplierinfo.min_qty, supplierinfo.product_uom.name)}
|
res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier has a minimal quantity set to %s %s, you should not purchase less.') % (supplierinfo.min_qty, supplierinfo.product_uom.name)}
|
||||||
qty = min_qty
|
qty = min_qty
|
||||||
|
|
Loading…
Reference in New Issue