[MERGE] forward port of branch saas-5 up to 7e117b1
This commit is contained in:
commit
8046b7367d
|
@ -488,7 +488,7 @@ class account_invoice(models.Model):
|
||||||
@api.multi
|
@api.multi
|
||||||
def onchange_payment_term_date_invoice(self, payment_term_id, date_invoice):
|
def onchange_payment_term_date_invoice(self, payment_term_id, date_invoice):
|
||||||
if not date_invoice:
|
if not date_invoice:
|
||||||
date_invoice = fields.Date.today()
|
date_invoice = fields.Date.context_today(self)
|
||||||
if not payment_term_id:
|
if not payment_term_id:
|
||||||
# To make sure the invoice due date should contain due date which is
|
# To make sure the invoice due date should contain due date which is
|
||||||
# entered by user when there is no payment term defined
|
# entered by user when there is no payment term defined
|
||||||
|
@ -729,7 +729,7 @@ class account_invoice(models.Model):
|
||||||
total_currency = 0
|
total_currency = 0
|
||||||
for line in invoice_move_lines:
|
for line in invoice_move_lines:
|
||||||
if self.currency_id != company_currency:
|
if self.currency_id != company_currency:
|
||||||
currency = self.currency_id.with_context(date=self.date_invoice or fields.Date.today())
|
currency = self.currency_id.with_context(date=self.date_invoice or fields.Date.context_today(self))
|
||||||
line['currency_id'] = currency.id
|
line['currency_id'] = currency.id
|
||||||
line['amount_currency'] = line['price']
|
line['amount_currency'] = line['price']
|
||||||
line['price'] = currency.compute(line['price'], company_currency)
|
line['price'] = currency.compute(line['price'], company_currency)
|
||||||
|
@ -892,7 +892,7 @@ class account_invoice(models.Model):
|
||||||
'ref': inv.reference or inv.name,
|
'ref': inv.reference or inv.name,
|
||||||
'line_id': line,
|
'line_id': line,
|
||||||
'journal_id': journal.id,
|
'journal_id': journal.id,
|
||||||
'date': date,
|
'date': inv.date_invoice,
|
||||||
'narration': inv.comment,
|
'narration': inv.comment,
|
||||||
'company_id': inv.company_id.id,
|
'company_id': inv.company_id.id,
|
||||||
}
|
}
|
||||||
|
@ -1088,7 +1088,7 @@ class account_invoice(models.Model):
|
||||||
values['journal_id'] = journal.id
|
values['journal_id'] = journal.id
|
||||||
|
|
||||||
values['type'] = TYPE2REFUND[invoice['type']]
|
values['type'] = TYPE2REFUND[invoice['type']]
|
||||||
values['date_invoice'] = date or fields.Date.today()
|
values['date_invoice'] = date or fields.Date.context_today(invoice)
|
||||||
values['state'] = 'draft'
|
values['state'] = 'draft'
|
||||||
values['number'] = False
|
values['number'] = False
|
||||||
|
|
||||||
|
@ -1118,7 +1118,7 @@ class account_invoice(models.Model):
|
||||||
SIGN = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1}
|
SIGN = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1}
|
||||||
direction = SIGN[self.type]
|
direction = SIGN[self.type]
|
||||||
# take the chosen date
|
# take the chosen date
|
||||||
date = self._context.get('date_p') or fields.Date.today()
|
date = self._context.get('date_p') or fields.Date.context_today(self)
|
||||||
|
|
||||||
# Take the amount in currency and the currency of the payment
|
# Take the amount in currency and the currency of the payment
|
||||||
if self._context.get('amount_currency') and self._context.get('currency_id'):
|
if self._context.get('amount_currency') and self._context.get('currency_id'):
|
||||||
|
@ -1506,7 +1506,7 @@ class account_invoice_tax(models.Model):
|
||||||
company = self.env['res.company'].browse(company_id)
|
company = self.env['res.company'].browse(company_id)
|
||||||
if currency_id and company.currency_id:
|
if currency_id and company.currency_id:
|
||||||
currency = self.env['res.currency'].browse(currency_id)
|
currency = self.env['res.currency'].browse(currency_id)
|
||||||
currency = currency.with_context(date=date_invoice or fields.Date.today())
|
currency = currency.with_context(date=date_invoice or fields.Date.context_today(self))
|
||||||
base = currency.compute(base * factor, company.currency_id, round=False)
|
base = currency.compute(base * factor, company.currency_id, round=False)
|
||||||
return {'value': {'base_amount': base}}
|
return {'value': {'base_amount': base}}
|
||||||
|
|
||||||
|
@ -1516,14 +1516,14 @@ class account_invoice_tax(models.Model):
|
||||||
company = self.env['res.company'].browse(company_id)
|
company = self.env['res.company'].browse(company_id)
|
||||||
if currency_id and company.currency_id:
|
if currency_id and company.currency_id:
|
||||||
currency = self.env['res.currency'].browse(currency_id)
|
currency = self.env['res.currency'].browse(currency_id)
|
||||||
currency = currency.with_context(date=date_invoice or fields.Date.today())
|
currency = currency.with_context(date=date_invoice or fields.Date.context_today(self))
|
||||||
amount = currency.compute(amount * factor, company.currency_id, round=False)
|
amount = currency.compute(amount * factor, company.currency_id, round=False)
|
||||||
return {'value': {'tax_amount': amount}}
|
return {'value': {'tax_amount': amount}}
|
||||||
|
|
||||||
@api.v8
|
@api.v8
|
||||||
def compute(self, invoice):
|
def compute(self, invoice):
|
||||||
tax_grouped = {}
|
tax_grouped = {}
|
||||||
currency = invoice.currency_id.with_context(date=invoice.date_invoice or fields.Date.today())
|
currency = invoice.currency_id.with_context(date=invoice.date_invoice or fields.Date.context_today(invoice))
|
||||||
company_currency = invoice.company_id.currency_id
|
company_currency = invoice.company_id.currency_id
|
||||||
for line in invoice.invoice_line:
|
for line in invoice.invoice_line:
|
||||||
taxes = line.invoice_line_tax_id.compute_all(
|
taxes = line.invoice_line_tax_id.compute_all(
|
||||||
|
|
|
@ -237,7 +237,7 @@ class res_company(osv.osv):
|
||||||
_inherit = "res.company"
|
_inherit = "res.company"
|
||||||
_columns = {
|
_columns = {
|
||||||
'ldaps': fields.one2many(
|
'ldaps': fields.one2many(
|
||||||
'res.company.ldap', 'company', 'LDAP Parameters', copy=True),
|
'res.company.ldap', 'company', 'LDAP Parameters', copy=True, groups="base.group_system"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,10 @@ class res_company(osv.Model):
|
||||||
_name = "res.company"
|
_name = "res.company"
|
||||||
_inherit = "res.company"
|
_inherit = "res.company"
|
||||||
_columns = {
|
_columns = {
|
||||||
"gengo_private_key": fields.text("Gengo Private Key", copy=False),
|
"gengo_private_key": fields.text("Gengo Private Key", copy=False, groups="base.group_system"),
|
||||||
"gengo_public_key": fields.text("Gengo Public Key", copy=False),
|
"gengo_public_key": fields.text("Gengo Public Key", copy=False, groups="base.group_user"),
|
||||||
"gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo"),
|
"gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo", groups="base.group_user"),
|
||||||
"gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo."),
|
"gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo.", groups="base.group_user"),
|
||||||
"gengo_sandbox": fields.boolean("Sandbox Mode", help="Check this box if you're using the sandbox mode of Gengo, mainly used for testing purpose."),
|
"gengo_sandbox": fields.boolean("Sandbox Mode", help="Check this box if you're using the sandbox mode of Gengo, mainly used for testing purpose."),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -429,7 +429,7 @@ instance.web.SearchViewDrawer.include({
|
||||||
add_common_inputs: function() {
|
add_common_inputs: function() {
|
||||||
this._super();
|
this._super();
|
||||||
var vm = this.getParent().getParent();
|
var vm = this.getParent().getParent();
|
||||||
if (vm.inner_action && vm.inner_action.views) {
|
if (vm.inner_action && vm.inner_action.id && vm.inner_action.views) {
|
||||||
(new instance.board.AddToDashboard(this));
|
(new instance.board.AddToDashboard(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,9 +91,10 @@ class stock_picking(osv.osv):
|
||||||
_('The carrier %s (id: %d) has no delivery grid!') \
|
_('The carrier %s (id: %d) has no delivery grid!') \
|
||||||
% (picking.carrier_id.name,
|
% (picking.carrier_id.name,
|
||||||
picking.carrier_id.id))
|
picking.carrier_id.id))
|
||||||
|
quantity = sum([line.product_uom_qty for line in picking.move_lines])
|
||||||
price = grid_obj.get_price_from_picking(cr, uid, grid_id,
|
price = grid_obj.get_price_from_picking(cr, uid, grid_id,
|
||||||
invoice.amount_untaxed, picking.weight, picking.volume,
|
invoice.amount_untaxed, picking.weight, picking.volume,
|
||||||
context=context)
|
quantity, context=context)
|
||||||
account_id = picking.carrier_id.product_id.property_account_income.id
|
account_id = picking.carrier_id.product_id.property_account_income.id
|
||||||
if not account_id:
|
if not account_id:
|
||||||
account_id = picking.carrier_id.product_id.categ_id\
|
account_id = picking.carrier_id.product_id.categ_id\
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_email_template,email.template,model_email_template,,1,1,1,0
|
access_email_template,email.template,model_email_template,base.group_user,1,1,1,0
|
||||||
access_email_template_system,email.template system,model_email_template,base.group_system,1,1,1,1
|
access_email_template_system,email.template system,model_email_template,base.group_system,1,1,1,1
|
||||||
|
|
|
|
@ -59,7 +59,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'template_id': fields.many2one('email.template', 'Use template', select=True),
|
'template_id': fields.many2one('email.template', 'Use template', select=True, groups="base.group_user"),
|
||||||
}
|
}
|
||||||
|
|
||||||
def send_mail(self, cr, uid, ids, context=None):
|
def send_mail(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<field name="name">mail.compose.message.form</field>
|
<field name="name">mail.compose.message.form</field>
|
||||||
<field name="model">mail.compose.message</field>
|
<field name="model">mail.compose.message</field>
|
||||||
<field name="inherit_id" ref="mail.email_compose_message_wizard_form"/>
|
<field name="inherit_id" ref="mail.email_compose_message_wizard_form"/>
|
||||||
|
<field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//footer" position="inside">
|
<xpath expr="//footer" position="inside">
|
||||||
<group class="oe_right oe_form" col="1">
|
<group class="oe_right oe_form" col="1">
|
||||||
|
|
|
@ -235,12 +235,12 @@ openerp_mailgate: "|/path/to/openerp-mailgate.py --host=localhost -u %(uid)d -p
|
||||||
save_original=server.original,
|
save_original=server.original,
|
||||||
strip_attachments=(not server.attach),
|
strip_attachments=(not server.attach),
|
||||||
context=context)
|
context=context)
|
||||||
|
pop_server.dele(num)
|
||||||
except Exception:
|
except Exception:
|
||||||
_logger.exception('Failed to process mail from %s server %s.', server.type, server.name)
|
_logger.exception('Failed to process mail from %s server %s.', server.type, server.name)
|
||||||
failed += 1
|
failed += 1
|
||||||
if res_id and server.action_id:
|
if res_id and server.action_id:
|
||||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids': [res_id], 'active_model': context.get("thread_model", server.object_id.model)})
|
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids': [res_id], 'active_model': context.get("thread_model", server.object_id.model)})
|
||||||
pop_server.dele(num)
|
|
||||||
cr.commit()
|
cr.commit()
|
||||||
_logger.info("Fetched %d email(s) on %s server %s; %d succeeded, %d failed.", numMsgs, server.type, server.name, (numMsgs - failed), failed)
|
_logger.info("Fetched %d email(s) on %s server %s; %d succeeded, %d failed.", numMsgs, server.type, server.name, (numMsgs - failed), failed)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
@ -325,8 +325,14 @@ class hr_holidays(osv.osv):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
context = dict(context, mail_create_nolog=True)
|
context = dict(context, mail_create_nolog=True)
|
||||||
hol_id = super(hr_holidays, self).create(cr, uid, values, context=context)
|
if values.get('state') and values['state'] not in ['draft', 'confirm', 'cancel'] and not self.pool['res.users'].has_group(cr, uid, 'base.group_hr_user'):
|
||||||
return hol_id
|
raise osv.except_osv(_('Warning!'), _('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % values.get('state'))
|
||||||
|
return super(hr_holidays, self).create(cr, uid, values, context=context)
|
||||||
|
|
||||||
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
|
if vals.get('state') and vals['state'] not in ['draft', 'confirm', 'cancel'] and not self.pool['res.users'].has_group(cr, uid, 'base.group_hr_user'):
|
||||||
|
raise osv.except_osv(_('Warning!'), _('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % vals.get('state'))
|
||||||
|
return super(hr_holidays, self).write(cr, uid, ids, vals, context=context)
|
||||||
|
|
||||||
def holidays_reset(self, cr, uid, ids, context=None):
|
def holidays_reset(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {
|
self.write(cr, uid, ids, {
|
||||||
|
|
|
@ -5,6 +5,17 @@
|
||||||
<field name="name">Employee Holidays</field>
|
<field name="name">Employee Holidays</field>
|
||||||
<field name="model_id" ref="model_hr_holidays"/>
|
<field name="model_id" ref="model_hr_holidays"/>
|
||||||
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
|
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
|
||||||
|
<field name="perm_create" eval="False"/>
|
||||||
|
<field name="perm_write" eval="False"/>
|
||||||
|
<field name="perm_unlink" eval="False"/>
|
||||||
|
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="property_rule_holidays_employee_write" model="ir.rule">
|
||||||
|
<field name="name">Employee Holidays Create, Write, Unlink</field>
|
||||||
|
<field model="ir.model" name="model_id" ref="model_hr_holidays"/>
|
||||||
|
<field name="domain_force">[('employee_id.user_id','=',user.id), ('state', 'in', ['draft', 'confirm', 'cancel'])]</field>
|
||||||
|
<field name="perm_read" eval="False"/>
|
||||||
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
|
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ class mail_alias(osv.Model):
|
||||||
|
|
||||||
def _get_alias_domain(self, cr, uid, ids, name, args, context=None):
|
def _get_alias_domain(self, cr, uid, ids, name, args, context=None):
|
||||||
ir_config_parameter = self.pool.get("ir.config_parameter")
|
ir_config_parameter = self.pool.get("ir.config_parameter")
|
||||||
domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context)
|
domain = ir_config_parameter.get_param(cr, SUPERUSER_ID, "mail.catchall.domain", context=context)
|
||||||
return dict.fromkeys(ids, domain or "")
|
return dict.fromkeys(ids, domain or "")
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
|
|
@ -42,6 +42,8 @@ openerp_announcement = function(instance) {
|
||||||
|
|
||||||
$('.openerp_webclient_container').css('height', 'calc(100% - 64px)');
|
$('.openerp_webclient_container').css('height', 'calc(100% - 64px)');
|
||||||
$('head').append($css);
|
$('head').append($css);
|
||||||
|
}).fail(function(result, ev){
|
||||||
|
ev.preventDefault();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,6 +5,7 @@ import re
|
||||||
import string
|
import string
|
||||||
import urllib2
|
import urllib2
|
||||||
import logging
|
import logging
|
||||||
|
from openerp import SUPERUSER_ID
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools import html2plaintext
|
from openerp.tools import html2plaintext
|
||||||
from py_etherpad import EtherpadLiteClient
|
from py_etherpad import EtherpadLiteClient
|
||||||
|
@ -19,7 +20,7 @@ class pad_common(osv.osv_memory):
|
||||||
return bool(user.company_id.pad_server)
|
return bool(user.company_id.pad_server)
|
||||||
|
|
||||||
def pad_generate_url(self, cr, uid, context=None):
|
def pad_generate_url(self, cr, uid, context=None):
|
||||||
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id;
|
company = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context).company_id
|
||||||
|
|
||||||
pad = {
|
pad = {
|
||||||
"server" : company.pad_server,
|
"server" : company.pad_server,
|
||||||
|
|
|
@ -5,7 +5,7 @@ class company_pad(osv.osv):
|
||||||
_inherit = 'res.company'
|
_inherit = 'res.company'
|
||||||
_columns = {
|
_columns = {
|
||||||
'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"),
|
'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"),
|
||||||
'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key."),
|
'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key.", groups="base.group_system"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -836,7 +836,7 @@ class pos_order(osv.osv):
|
||||||
'amount': data['amount'],
|
'amount': data['amount'],
|
||||||
'date': data.get('payment_date', time.strftime('%Y-%m-%d')),
|
'date': data.get('payment_date', time.strftime('%Y-%m-%d')),
|
||||||
'name': order.name + ': ' + (data.get('payment_name', '') or ''),
|
'name': order.name + ': ' + (data.get('payment_name', '') or ''),
|
||||||
'partner_id': order.partner_id and order.partner_id.id or None,
|
'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False,
|
||||||
}
|
}
|
||||||
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
|
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
|
||||||
args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \
|
args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \
|
||||||
|
|
|
@ -83,9 +83,11 @@ class sale_order_line(osv.osv):
|
||||||
if so_pricelist.visible_discount and list_price[pricelist] != 0 and new_list_price != 0:
|
if so_pricelist.visible_discount and list_price[pricelist] != 0 and new_list_price != 0:
|
||||||
if product.company_id and so_pricelist.currency_id.id != product.company_id.currency_id.id:
|
if product.company_id and so_pricelist.currency_id.id != product.company_id.currency_id.id:
|
||||||
# new_list_price is in company's currency while price in pricelist currency
|
# new_list_price is in company's currency while price in pricelist currency
|
||||||
|
ctx = context.copy()
|
||||||
|
ctx['date'] = date_order
|
||||||
new_list_price = self.pool['res.currency'].compute(cr, uid,
|
new_list_price = self.pool['res.currency'].compute(cr, uid,
|
||||||
product.company_id.currency_id.id, so_pricelist.currency_id.id,
|
product.company_id.currency_id.id, so_pricelist.currency_id.id,
|
||||||
new_list_price, context=context)
|
new_list_price, context=ctx)
|
||||||
discount = (new_list_price - price) / new_list_price * 100
|
discount = (new_list_price - price) / new_list_price * 100
|
||||||
if discount > 0:
|
if discount > 0:
|
||||||
result['price_unit'] = new_list_price
|
result['price_unit'] = new_list_price
|
||||||
|
|
|
@ -2,6 +2,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_resource_calendar,resource.calendar,model_resource_calendar,base.group_system,1,1,1,1
|
access_resource_calendar,resource.calendar,model_resource_calendar,base.group_system,1,1,1,1
|
||||||
access_resource_calendar_attendance,resource.calendar.attendance,model_resource_calendar_attendance,base.group_system,1,1,1,1
|
access_resource_calendar_attendance,resource.calendar.attendance,model_resource_calendar_attendance,base.group_system,1,1,1,1
|
||||||
access_resource_resource,resource.resource,model_resource_resource,base.group_system,1,0,0,0
|
access_resource_resource,resource.resource,model_resource_resource,base.group_system,1,0,0,0
|
||||||
access_resource_resource_all,resource.resource all,model_resource_resource,,1,0,0,0
|
access_resource_resource_all,resource.resource all,model_resource_resource,base.group_user,1,0,0,0
|
||||||
access_resource_calendar_leaves_user,resource.calendar.leaves,model_resource_calendar_leaves,base.group_user,1,0,0,0
|
access_resource_calendar_leaves_user,resource.calendar.leaves,model_resource_calendar_leaves,base.group_user,1,0,0,0
|
||||||
access_resource_calendar_leaves,resource.calendar.leaves,model_resource_calendar_leaves,base.group_system,1,1,1,1
|
access_resource_calendar_leaves,resource.calendar.leaves,model_resource_calendar_leaves,base.group_system,1,1,1,1
|
||||||
|
|
|
|
@ -1036,6 +1036,8 @@ class sale_order_line(osv.osv):
|
||||||
flag=False, # Force name update
|
flag=False, # Force name update
|
||||||
context=context
|
context=context
|
||||||
)['value']
|
)['value']
|
||||||
|
if defaults.get('tax_id'):
|
||||||
|
defaults['tax_id'] = [[6, 0, defaults['tax_id']]]
|
||||||
values = dict(defaults, **values)
|
values = dict(defaults, **values)
|
||||||
return super(sale_order_line, self).create(cr, uid, values, context=context)
|
return super(sale_order_line, self).create(cr, uid, values, context=context)
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,15 @@ class sale_order_line(osv.osv):
|
||||||
lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context)
|
lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context)
|
||||||
if not pricelist:
|
if not pricelist:
|
||||||
return res
|
return res
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
frm_cur = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
|
frm_cur = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
|
||||||
to_cur = self.pool.get('product.pricelist').browse(cr, uid, [pricelist])[0].currency_id.id
|
to_cur = self.pool.get('product.pricelist').browse(cr, uid, [pricelist])[0].currency_id.id
|
||||||
if product:
|
if product:
|
||||||
purchase_price = self.pool.get('product.product').browse(cr, uid, product).standard_price
|
purchase_price = self.pool.get('product.product').browse(cr, uid, product).standard_price
|
||||||
price = self.pool.get('res.currency').compute(cr, uid, frm_cur, to_cur, purchase_price, round=False)
|
ctx = context.copy()
|
||||||
|
ctx['date'] = date_order
|
||||||
|
price = self.pool.get('res.currency').compute(cr, uid, frm_cur, to_cur, purchase_price, round=False, context=ctx)
|
||||||
res['value'].update({'purchase_price': price})
|
res['value'].update({'purchase_price': price})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -51,15 +51,15 @@
|
||||||
</record>
|
</record>
|
||||||
<record id="incoterm_DAT" model="stock.incoterms">
|
<record id="incoterm_DAT" model="stock.incoterms">
|
||||||
<field name="code">DAT</field>
|
<field name="code">DAT</field>
|
||||||
<field name="name">Delivered At Terminal</field>
|
<field name="name">DELIVERED AT TERMINAL</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="incoterm_DAP" model="stock.incoterms">
|
<record id="incoterm_DAP" model="stock.incoterms">
|
||||||
<field name="code">DAP</field>
|
<field name="code">DAP</field>
|
||||||
<field name="name">Delivered At Place</field>
|
<field name="name">DELIVERED AT PLACE</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="incoterm_DDP" model="stock.incoterms">
|
<record id="incoterm_DDP" model="stock.incoterms">
|
||||||
<field name="code">DDP</field>
|
<field name="code">DDP</field>
|
||||||
<field name="name">Delivered Duty Paid</field>
|
<field name="name">DELIVERED DUTY PAID</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -1589,7 +1589,7 @@
|
||||||
<xpath expr="//group[@name='propagation_group']" position="before">
|
<xpath expr="//group[@name='propagation_group']" position="before">
|
||||||
<group attrs="{'invisible': [('action', '!=', 'move')]}" string="Moving Options">
|
<group attrs="{'invisible': [('action', '!=', 'move')]}" string="Moving Options">
|
||||||
<field name="procure_method" groups="stock.group_adv_location"/>
|
<field name="procure_method" groups="stock.group_adv_location"/>
|
||||||
<field name="location_src_id" attrs="{'required': [('action', '=', 'move')]}"/>
|
<field name="location_src_id" attrs="{'required': [('action', '=', 'move')]}" domain="[('usage','!=','view')]" />
|
||||||
<field name="partner_address_id" groups="stock.group_adv_location" context="{'show_address': 1}" options="{'always_reload': 1}"/>
|
<field name="partner_address_id" groups="stock.group_adv_location" context="{'show_address': 1}" options="{'always_reload': 1}"/>
|
||||||
<label for="delay" string="Delay" groups="stock.group_adv_location"/>
|
<label for="delay" string="Delay" groups="stock.group_adv_location"/>
|
||||||
<div groups="stock.group_adv_location">
|
<div groups="stock.group_adv_location">
|
||||||
|
|
|
@ -1078,6 +1078,9 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
||||||
scope: 'userinfo',
|
scope: 'userinfo',
|
||||||
};
|
};
|
||||||
instance.web.redirect('https://accounts.odoo.com/oauth2/auth?'+$.param(params));
|
instance.web.redirect('https://accounts.odoo.com/oauth2/auth?'+$.param(params));
|
||||||
|
}).fail(function(result, ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
instance.web.redirect('https://accounts.openerp.com/web');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -3660,10 +3660,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
|
||||||
focusout: anyoneLoosesFocus,
|
focusout: anyoneLoosesFocus,
|
||||||
focus: function () { self.trigger('focused'); },
|
focus: function () { self.trigger('focused'); },
|
||||||
autocompleteopen: function () { ignore_blur = true; },
|
autocompleteopen: function () { ignore_blur = true; },
|
||||||
autocompleteclose: function () { ignore_blur = false; },
|
autocompleteclose: function () { setTimeout(function() {ignore_blur = false;},0); },
|
||||||
blur: function () {
|
blur: function () {
|
||||||
// autocomplete open
|
// autocomplete open
|
||||||
if (ignore_blur) { return; }
|
if (ignore_blur) { $(this).focus(); return; }
|
||||||
if (_(self.getChildren()).any(function (child) {
|
if (_(self.getChildren()).any(function (child) {
|
||||||
return child instanceof instance.web.form.AbstractFormPopup;
|
return child instanceof instance.web.form.AbstractFormPopup;
|
||||||
})) { return; }
|
})) { return; }
|
||||||
|
|
|
@ -170,8 +170,13 @@ class website_sale(http.Controller):
|
||||||
|
|
||||||
product_obj = pool.get('product.template')
|
product_obj = pool.get('product.template')
|
||||||
|
|
||||||
|
url = "/shop"
|
||||||
product_count = product_obj.search_count(cr, uid, domain, context=context)
|
product_count = product_obj.search_count(cr, uid, domain, context=context)
|
||||||
pager = request.website.pager(url="/shop", total=product_count, page=page, step=PPG, scope=7, url_args=post)
|
if search:
|
||||||
|
post["search"] = search
|
||||||
|
if category:
|
||||||
|
url = "/shop/category/%s" % slug(category)
|
||||||
|
pager = request.website.pager(url=url, total=product_count, page=page, step=PPG, scope=7, url_args=post)
|
||||||
product_ids = product_obj.search(cr, uid, domain, limit=PPG+10, offset=pager['offset'], order='website_published desc, website_sequence desc', context=context)
|
product_ids = product_obj.search(cr, uid, domain, limit=PPG+10, offset=pager['offset'], order='website_published desc, website_sequence desc', context=context)
|
||||||
products = product_obj.browse(cr, uid, product_ids, context=context)
|
products = product_obj.browse(cr, uid, product_ids, context=context)
|
||||||
|
|
||||||
|
|
|
@ -35,18 +35,21 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="search" name="Search hidden fields">
|
<template id="search" name="Search hidden fields">
|
||||||
|
<form t-att-action="keep('/shop'+ ('/category/'+slug(category)) if category else '', search=0)" method="get" t-att-class="search_class">
|
||||||
|
|
||||||
<t t-if="attrib_values">
|
<t t-if="attrib_values">
|
||||||
<t t-foreach="attrib_values" t-as="a">
|
<t t-foreach="attrib_values" t-as="a">
|
||||||
<input type="hidden" name="attrib" t-att-value="'%s-%s' % (a[0], a[1])"/>
|
<input type="hidden" name="attrib" t-att-value="'%s-%s' % (a[0], a[1])"/>
|
||||||
</t>
|
</t>
|
||||||
</t>
|
</t>
|
||||||
<input t-if="category" type="hidden" name="category" t-att-value="int(category or 0)"/>
|
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search"/>
|
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search"/>
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<a class="btn btn-default a-submit"><i class="fa fa-search"/></a>
|
<a class="btn btn-default a-submit"><i class="fa fa-search"/></a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template id="404">
|
<template id="404">
|
||||||
|
@ -133,9 +136,7 @@
|
||||||
<div class="container oe_website_sale">
|
<div class="container oe_website_sale">
|
||||||
<div class="products_pager">
|
<div class="products_pager">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form t-att-action="keep('/shop',search='')" method="get" class="pagination form-inline col-md-3">
|
<t t-call="website_sale.search"><t t-set="search_class">pagination form-inline col-md-3</t></t>
|
||||||
<t t-call="website_sale.search"/>
|
|
||||||
</form>
|
|
||||||
<t t-call="website.pager"/>
|
<t t-call="website.pager"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -358,9 +359,7 @@
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<form t-att-action="keep(search=0)" method="get" class="pull-right">
|
<t t-call="website_sale.search"><t t-set="search_class">pull-right</t></t>
|
||||||
<t t-call="website_sale.search"/>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4" groups="base.group_sale_manager">
|
<div class="col-sm-4" groups="base.group_sale_manager">
|
||||||
<t t-call="website.publish_management">
|
<t t-call="website.publish_management">
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
"access_ir_property_group_user_manager","ir_property group_manager","model_ir_property","base.group_partner_manager",1,1,1,0
|
"access_ir_property_group_user_manager","ir_property group_manager","model_ir_property","base.group_partner_manager",1,1,1,0
|
||||||
"access_ir_rule_group_user","ir_rule group_user","model_ir_rule",,1,0,0,0
|
"access_ir_rule_group_user","ir_rule group_user","model_ir_rule",,1,0,0,0
|
||||||
"access_ir_rule_group_erp_manager","ir_rule group_erp_manager","model_ir_rule","group_erp_manager",1,1,1,1
|
"access_ir_rule_group_erp_manager","ir_rule group_erp_manager","model_ir_rule","group_erp_manager",1,1,1,1
|
||||||
"access_ir_sequence_group_user","ir_sequence group_user","model_ir_sequence",,1,0,0,0
|
"access_ir_sequence_group_user","ir_sequence group_user","model_ir_sequence","group_user",1,0,0,0
|
||||||
"access_ir_sequence_group_system","ir_sequence group_system","model_ir_sequence","group_system",1,1,1,1
|
"access_ir_sequence_group_system","ir_sequence group_system","model_ir_sequence","group_system",1,1,1,1
|
||||||
"access_ir_sequence_type_group_user","ir_sequence_type group_user","model_ir_sequence_type",,1,0,0,0
|
"access_ir_sequence_type_group_user","ir_sequence_type group_user","model_ir_sequence_type",,1,0,0,0
|
||||||
"access_ir_sequence_type_group_system","ir_sequence_type group_system","model_ir_sequence_type","group_system",1,1,1,1
|
"access_ir_sequence_type_group_system","ir_sequence_type group_system","model_ir_sequence_type","group_system",1,1,1,1
|
||||||
|
@ -54,7 +54,6 @@
|
||||||
"access_res_currency_group_system","res_currency group_system","model_res_currency","group_system",1,1,1,1
|
"access_res_currency_group_system","res_currency group_system","model_res_currency","group_system",1,1,1,1
|
||||||
"access_res_currency_rate_group_system","res_currency_rate group_system","model_res_currency_rate","group_system",1,1,1,1
|
"access_res_currency_rate_group_system","res_currency_rate group_system","model_res_currency_rate","group_system",1,1,1,1
|
||||||
"access_res_groups_group_erp_manager","res_groups group_erp_manager","model_res_groups","group_erp_manager",1,1,1,1
|
"access_res_groups_group_erp_manager","res_groups group_erp_manager","model_res_groups","group_erp_manager",1,1,1,1
|
||||||
"access_res_groups_group_user","res_groups group_user","model_res_groups",,1,0,0,0
|
|
||||||
"access_res_lang_group_all","res_lang group_all","model_res_lang",,1,0,0,0
|
"access_res_lang_group_all","res_lang group_all","model_res_lang",,1,0,0,0
|
||||||
"access_res_lang_group_user","res_lang group_user","model_res_lang","group_system",1,1,1,1
|
"access_res_lang_group_user","res_lang group_user","model_res_lang","group_system",1,1,1,1
|
||||||
"access_res_partner_public","res_partner group_public","model_res_partner","group_public",1,0,0,0
|
"access_res_partner_public","res_partner group_public","model_res_partner","group_public",1,0,0,0
|
||||||
|
@ -108,7 +107,7 @@
|
||||||
"access_multi_company_default user","multi_company_default all","model_multi_company_default",,1,0,0,0
|
"access_multi_company_default user","multi_company_default all","model_multi_company_default",,1,0,0,0
|
||||||
"access_multi_company_default manager","multi_company_default Manager","model_multi_company_default","group_erp_manager",1,1,1,1
|
"access_multi_company_default manager","multi_company_default Manager","model_multi_company_default","group_erp_manager",1,1,1,1
|
||||||
"access_ir_filter all","ir_filters all","model_ir_filters",,1,1,1,1
|
"access_ir_filter all","ir_filters all","model_ir_filters",,1,1,1,1
|
||||||
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0
|
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter","group_user",1,0,0,0
|
||||||
"access_ir_config_parameter_system","ir_config_parameter_system","model_ir_config_parameter","group_system",1,1,1,1
|
"access_ir_config_parameter_system","ir_config_parameter_system","model_ir_config_parameter","group_system",1,1,1,1
|
||||||
"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1
|
"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1
|
||||||
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
|
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
|
||||||
|
|
|
|
@ -251,7 +251,8 @@ class rml_parse(object):
|
||||||
res='%s %s'%(currency_obj.symbol, res)
|
res='%s %s'%(currency_obj.symbol, res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def display_address(self, address_record):
|
def display_address(self, address_record, without_company=False):
|
||||||
|
# FIXME handle `without_company`
|
||||||
return address_record.contact_address
|
return address_record.contact_address
|
||||||
|
|
||||||
def repeatIn(self, lst, name,nodes_parent=False):
|
def repeatIn(self, lst, name,nodes_parent=False):
|
||||||
|
|
Loading…
Reference in New Issue