[MERGE] forward port of branch saas-6 up to 589751c
This commit is contained in:
@@ -1107,7 +1107,7 @@ class AccountInvoiceLine(models.Model):
|
|||||||
default=0.0)
|
default=0.0)
|
||||||
invoice_line_tax_ids = fields.Many2many('account.tax',
|
invoice_line_tax_ids = fields.Many2many('account.tax',
|
||||||
'account_invoice_line_tax', 'invoice_line_id', 'tax_id',
|
'account_invoice_line_tax', 'invoice_line_id', 'tax_id',
|
||||||
string='Taxes', domain=[('type_tax_use','!=','none')], oldname='invoice_line_tax_id')
|
string='Taxes', domain=[('type_tax_use','!=','none'), '|', ('active', '=', False), ('active', '=', True)], oldname='invoice_line_tax_id')
|
||||||
account_analytic_id = fields.Many2one('account.analytic.account',
|
account_analytic_id = fields.Many2one('account.analytic.account',
|
||||||
string='Analytic Account')
|
string='Analytic Account')
|
||||||
company_id = fields.Many2one('res.company', string='Company',
|
company_id = fields.Many2one('res.company', string='Company',
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class AccountAssetAsset(models.Model):
|
|||||||
def compute_depreciation_board(self):
|
def compute_depreciation_board(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
|
||||||
posted_depreciation_line_ids = self.depreciation_line_ids.filtered(lambda x: x.move_check)
|
posted_depreciation_line_ids = self.depreciation_line_ids.filtered(lambda x: x.move_check).sorted(key=lambda l: l.depreciation_date, reverse=True)
|
||||||
unposted_depreciation_line_ids = self.depreciation_line_ids.filtered(lambda x: not x.move_check)
|
unposted_depreciation_line_ids = self.depreciation_line_ids.filtered(lambda x: not x.move_check)
|
||||||
|
|
||||||
# Remove old unposted depreciation lines. We cannot use unlink() with One2many field
|
# Remove old unposted depreciation lines. We cannot use unlink() with One2many field
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<field name="sequence">1</field>
|
<field name="sequence">1</field>
|
||||||
<field name="kind">on_time</field>
|
<field name="kind">on_time</field>
|
||||||
<field name="filter_domain">[('stage_id.sequence', '=', 1)]</field>
|
<field name="filter_domain">[('stage_id.sequence', '=', 1)]</field>
|
||||||
<field name="trg_date_id" ref="field_crm_lead_create_date"/>
|
<field name="trg_date_id" search="[('model','=','crm.lead'),('name','=','create_date')]"/>
|
||||||
<field name="trg_date_range">5</field>
|
<field name="trg_date_range">5</field>
|
||||||
<field name="trg_date_range_type">day</field>
|
<field name="trg_date_range_type">day</field>
|
||||||
<field name="server_action_ids" eval="[(6,0,[ref('action_email_reminder_lead')])]"/>
|
<field name="server_action_ids" eval="[(6,0,[ref('action_email_reminder_lead')])]"/>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<field name="computation_mode">count</field>
|
<field name="computation_mode">count</field>
|
||||||
<field name="suffix">leads</field>
|
<field name="suffix">leads</field>
|
||||||
<field name="model_id" eval="ref('crm.model_crm_lead')" />
|
<field name="model_id" eval="ref('crm.model_crm_lead')" />
|
||||||
<field name="field_date_id" eval="ref('crm.field_crm_lead_create_date')" />
|
<field name="field_date_id" search="[('model','=','crm.lead'),('name','=','create_date')]" />
|
||||||
<!-- lead AND opportunity as don't want to be penalised for lead converted to opportunity -->
|
<!-- lead AND opportunity as don't want to be penalised for lead converted to opportunity -->
|
||||||
<field name="domain">[('user_id','=',user.id), '|', ('type', '=', 'lead'), ('type', '=', 'opportunity')]</field>
|
<field name="domain">[('user_id','=',user.id), '|', ('type', '=', 'lead'), ('type', '=', 'opportunity')]</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -562,7 +562,8 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
|
|||||||
'invoiced': fields.boolean('Invoiced', readonly=True, copy=False),
|
'invoiced': fields.boolean('Invoiced', readonly=True, copy=False),
|
||||||
'price_unit': fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Product Price')),
|
'price_unit': fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Product Price')),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits=0),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits=0),
|
||||||
'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes'),
|
'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes',
|
||||||
|
domain=['|', ('active', '=', False), ('active', '=', True)]),
|
||||||
'product_uom_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True),
|
'product_uom_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True),
|
||||||
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
||||||
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True, copy=False),
|
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True, copy=False),
|
||||||
@@ -656,7 +657,8 @@ class mrp_repair_fee(osv.osv, ProductChangeMixin):
|
|||||||
'price_unit': fields.float('Unit Price', required=True),
|
'price_unit': fields.float('Unit Price', required=True),
|
||||||
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits=0),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits=0),
|
||||||
'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes'),
|
'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes',
|
||||||
|
domain=['|', ('active', '=', False), ('active', '=', True)]),
|
||||||
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True, copy=False),
|
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True, copy=False),
|
||||||
'to_invoice': fields.boolean('To Invoice'),
|
'to_invoice': fields.boolean('To Invoice'),
|
||||||
'invoiced': fields.boolean('Invoiced', readonly=True, copy=False),
|
'invoiced': fields.boolean('Invoiced', readonly=True, copy=False),
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ class PaymentAcquirerOgone(osv.Model):
|
|||||||
'NCERRORED',
|
'NCERRORED',
|
||||||
'ORDERID',
|
'ORDERID',
|
||||||
'PAYID',
|
'PAYID',
|
||||||
|
'PAYIDSUB',
|
||||||
'PM',
|
'PM',
|
||||||
'SCO_CATEGORY',
|
'SCO_CATEGORY',
|
||||||
'SCORING',
|
'SCORING',
|
||||||
|
|||||||
@@ -24,6 +24,19 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
return user_obj.search(self.cr, self.uid, [])
|
return user_obj.search(self.cr, self.uid, [])
|
||||||
|
|
||||||
|
def _get_utc_time_range(self, form):
|
||||||
|
user = self.pool['res.users'].browse(self.cr, self.uid, self.uid)
|
||||||
|
tz_name = user.tz or self.localcontext.get('tz') or 'UTC'
|
||||||
|
user_tz = pytz.timezone(tz_name)
|
||||||
|
between_dates = {}
|
||||||
|
|
||||||
|
for date_field, delta in {'date_start': {'days': 0}, 'date_end': {'days': 1}}.items():
|
||||||
|
timestamp = datetime.datetime.strptime(form[date_field] + ' 00:00:00', tools.DEFAULT_SERVER_DATETIME_FORMAT) + datetime.timedelta(**delta)
|
||||||
|
timestamp = user_tz.localize(timestamp).astimezone(pytz.utc)
|
||||||
|
between_dates[date_field] = timestamp.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
|
|
||||||
|
return between_dates['date_start'], between_dates['date_end']
|
||||||
|
|
||||||
def _pos_sales_details(self, form):
|
def _pos_sales_details(self, form):
|
||||||
pos_obj = self.pool.get('pos.order')
|
pos_obj = self.pool.get('pos.order')
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
@@ -31,18 +44,11 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
result = {}
|
result = {}
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
user = self.pool['res.users'].browse(self.cr, self.uid, self.uid)
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
tz_name = user.tz or self.localcontext.get('tz') or 'UTC'
|
|
||||||
user_tz = pytz.timezone(tz_name)
|
|
||||||
between_dates = {}
|
|
||||||
for date_field, delta in {'date_start': {'days': 0}, 'date_end': {'days': 1}}.items():
|
|
||||||
timestamp = datetime.datetime.strptime(form[date_field] + ' 00:00:00', tools.DEFAULT_SERVER_DATETIME_FORMAT) + datetime.timedelta(**delta)
|
|
||||||
timestamp = user_tz.localize(timestamp).astimezone(pytz.utc)
|
|
||||||
between_dates[date_field] = timestamp.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
|
||||||
|
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [
|
pos_ids = pos_obj.search(self.cr, self.uid, [
|
||||||
('date_order', '>=', between_dates['date_start']),
|
('date_order', '>=', date_start),
|
||||||
('date_order', '<', between_dates['date_end']),
|
('date_order', '<', date_end),
|
||||||
('user_id', 'in', user_ids),
|
('user_id', 'in', user_ids),
|
||||||
('state', 'in', ['done', 'paid', 'invoiced']),
|
('state', 'in', ['done', 'paid', 'invoiced']),
|
||||||
('company_id', '=', company_id)
|
('company_id', '=', company_id)
|
||||||
@@ -81,7 +87,8 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id),('invoice_id','<>',False)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=', date_start),('date_order','<=',date_end),('user_id','in',user_ids),('company_id','=',company_id),('invoice_id','<>',False)])
|
||||||
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
for pol in pos.lines:
|
for pol in pos.lines:
|
||||||
self.total_invoiced += (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))
|
self.total_invoiced += (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))
|
||||||
@@ -99,7 +106,8 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('user_id','in',user_ids),('company_id','=',company_id)])
|
||||||
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
for pol in pos.lines:
|
for pol in pos.lines:
|
||||||
self.total_discount += ((pol.price_unit * pol.qty) * (pol.discount / 100))
|
self.total_discount += ((pol.price_unit * pol.qty) * (pol.discount / 100))
|
||||||
@@ -110,7 +118,8 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
pos_order_obj = self.pool.get("pos.order")
|
pos_order_obj = self.pool.get("pos.order")
|
||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
||||||
data={}
|
data={}
|
||||||
if pos_ids:
|
if pos_ids:
|
||||||
st_line_ids = statement_line_obj.search(self.cr, self.uid, [('pos_statement_id', 'in', pos_ids)])
|
st_line_ids = statement_line_obj.search(self.cr, self.uid, [('pos_statement_id', 'in', pos_ids)])
|
||||||
@@ -153,7 +162,8 @@ class pos_details(report_sxw.rml_parse):
|
|||||||
user_ids = form['user_ids'] or self._get_all_users()
|
user_ids = form['user_ids'] or self._get_all_users()
|
||||||
pos_order_obj = self.pool.get('pos.order')
|
pos_order_obj = self.pool.get('pos.order')
|
||||||
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
company_id = self.pool['res.users'].browse(self.cr, self.uid, self.uid).company_id.id
|
||||||
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
date_start, date_end = self._get_utc_time_range(form)
|
||||||
|
pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',date_start),('date_order','<=',date_end),('state','in',['paid','invoiced','done']),('user_id','in',user_ids), ('company_id', '=', company_id)])
|
||||||
for order in pos_order_obj.browse(self.cr, self.uid, pos_ids):
|
for order in pos_order_obj.browse(self.cr, self.uid, pos_ids):
|
||||||
currency = order.session_id.currency_id
|
currency = order.session_id.currency_id
|
||||||
for line in order.lines:
|
for line in order.lines:
|
||||||
|
|||||||
@@ -1662,8 +1662,6 @@ exports.Order = Backbone.Model.extend({
|
|||||||
client: client ? client.name : null ,
|
client: client ? client.name : null ,
|
||||||
invoice_id: null, //TODO
|
invoice_id: null, //TODO
|
||||||
cashier: cashier ? cashier.name : null,
|
cashier: cashier ? cashier.name : null,
|
||||||
header: this.pos.config.receipt_header || '',
|
|
||||||
footer: this.pos.config.receipt_footer || '',
|
|
||||||
precision: {
|
precision: {
|
||||||
price: 2,
|
price: 2,
|
||||||
money: 2,
|
money: 2,
|
||||||
@@ -1696,11 +1694,17 @@ exports.Order = Backbone.Model.extend({
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (is_xml(this.pos.config.receipt_header)){
|
if (is_xml(this.pos.config.receipt_header)){
|
||||||
|
receipt.header = '';
|
||||||
receipt.header_xml = render_xml(this.pos.config.receipt_header);
|
receipt.header_xml = render_xml(this.pos.config.receipt_header);
|
||||||
|
} else {
|
||||||
|
receipt.header = this.pos.config.receipt_header || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_xml(this.pos.config.receipt_footer)){
|
if (is_xml(this.pos.config.receipt_footer)){
|
||||||
|
receipt.footer = '';
|
||||||
receipt.footer_xml = render_xml(this.pos.config.receipt_footer);
|
receipt.footer_xml = render_xml(this.pos.config.receipt_footer);
|
||||||
|
} else {
|
||||||
|
receipt.footer = this.pos.config.receipt_footer || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
return receipt;
|
return receipt;
|
||||||
|
|||||||
@@ -514,7 +514,7 @@ class PurchaseOrderLine(models.Model):
|
|||||||
name = fields.Text(string='Description', required=True)
|
name = fields.Text(string='Description', required=True)
|
||||||
product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True)
|
product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True)
|
||||||
date_planned = fields.Datetime(string='Scheduled Date', required=True, select=True)
|
date_planned = fields.Datetime(string='Scheduled Date', required=True, select=True)
|
||||||
taxes_id = fields.Many2many('account.tax', string='Taxes')
|
taxes_id = fields.Many2many('account.tax', string='Taxes', domain=['|', ('active', '=', False), ('active', '=', True)])
|
||||||
product_uom = fields.Many2one('product.uom', string='Product Unit of Measure', required=True)
|
product_uom = fields.Many2one('product.uom', string='Product Unit of Measure', required=True)
|
||||||
product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], change_default=True, required=True)
|
product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], change_default=True, required=True)
|
||||||
move_ids = fields.One2many('stock.move', 'purchase_line_id', string='Reservation', readonly=True, ondelete='set null', copy=False)
|
move_ids = fields.One2many('stock.move', 'purchase_line_id', string='Reservation', readonly=True, ondelete='set null', copy=False)
|
||||||
|
|||||||
+1
-1
@@ -652,7 +652,7 @@ class SaleOrderLine(models.Model):
|
|||||||
price_total = fields.Monetary(compute='_compute_amount', string='Total', readonly=True, store=True)
|
price_total = fields.Monetary(compute='_compute_amount', string='Total', readonly=True, store=True)
|
||||||
|
|
||||||
price_reduce = fields.Monetary(compute='_get_price_reduce', string='Price Reduce', readonly=True, store=True)
|
price_reduce = fields.Monetary(compute='_get_price_reduce', string='Price Reduce', readonly=True, store=True)
|
||||||
tax_id = fields.Many2many('account.tax', string='Taxes')
|
tax_id = fields.Many2many('account.tax', string='Taxes', domain=['|', ('active', '=', False), ('active', '=', True)])
|
||||||
|
|
||||||
discount = fields.Float(string='Discount (%)', digits=dp.get_precision('Discount'), default=0.0)
|
discount = fields.Float(string='Discount (%)', digits=dp.get_precision('Discount'), default=0.0)
|
||||||
|
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ return Widget.extend({
|
|||||||
var chart = nv.models.multiBarChart();
|
var chart = nv.models.multiBarChart();
|
||||||
var maxVal = _.max(values, function(v) {return v.y})
|
var maxVal = _.max(values, function(v) {return v.y})
|
||||||
chart.options({
|
chart.options({
|
||||||
margin: {left: 12 * String(maxVal && maxVal.y || 0).length},
|
margin: {left: 12 * String(maxVal && maxVal.y || 10000000).length},
|
||||||
delay: 250,
|
delay: 250,
|
||||||
transition: 10,
|
transition: 10,
|
||||||
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
|
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
|
||||||
@@ -296,7 +296,7 @@ return Widget.extend({
|
|||||||
var chart = nv.models.lineChart();
|
var chart = nv.models.lineChart();
|
||||||
var maxVal = _.max(values, function(v) {return v.y})
|
var maxVal = _.max(values, function(v) {return v.y})
|
||||||
chart.options({
|
chart.options({
|
||||||
margin: {left: 12 * String(maxVal && maxVal.y || 0).length, right: 50},
|
margin: {left: 12 * String(maxVal && maxVal.y || 10000000).length, right: 50},
|
||||||
useInteractiveGuideline: true,
|
useInteractiveGuideline: true,
|
||||||
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
|
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
|
||||||
showXAxis: true,
|
showXAxis: true,
|
||||||
|
|||||||
@@ -51,8 +51,12 @@ class MassMailController(MassMailController):
|
|||||||
def subscribe(self, list_id, email, **post):
|
def subscribe(self, list_id, email, **post):
|
||||||
cr, uid, context = request.cr, request.uid, request.context
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
Contacts = request.registry['mail.mass_mailing.contact']
|
Contacts = request.registry['mail.mass_mailing.contact']
|
||||||
|
parsed_email = Contacts.get_name_email(email, context=context)[1]
|
||||||
|
|
||||||
contact_ids = Contacts.search_read(cr, SUPERUSER_ID, [('list_id', '=', int(list_id)), ('email', '=', email)], ['opt_out'], context=context)
|
contact_ids = Contacts.search_read(
|
||||||
|
cr, SUPERUSER_ID,
|
||||||
|
[('list_id', '=', int(list_id)), ('email', '=', parsed_email)],
|
||||||
|
['opt_out'], context=context)
|
||||||
if not contact_ids:
|
if not contact_ids:
|
||||||
Contacts.add_to_list(cr, SUPERUSER_ID, email, int(list_id), context=context)
|
Contacts.add_to_list(cr, SUPERUSER_ID, email, int(list_id), context=context)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -132,6 +132,10 @@ class website_sale(http.Controller):
|
|||||||
for p in product.product_variant_ids]
|
for p in product.product_variant_ids]
|
||||||
return attribute_value_ids
|
return attribute_value_ids
|
||||||
|
|
||||||
|
def _get_search_order(self, post):
|
||||||
|
# OrderBy will be parsed in orm and so no direct sql injection
|
||||||
|
return 'website_published desc,%s' % post.get('order', 'website_sequence desc')
|
||||||
|
|
||||||
@http.route(['/shop/change_pricelist/<model("product.pricelist"):pl_id>'], type='http', auth="public", website=True)
|
@http.route(['/shop/change_pricelist/<model("product.pricelist"):pl_id>'], type='http', auth="public", website=True)
|
||||||
def pricelist_change(self, pl_id, **post):
|
def pricelist_change(self, pl_id, **post):
|
||||||
if request.website.is_pricelist_available(pl_id.id, context=request.context):
|
if request.website.is_pricelist_available(pl_id.id, context=request.context):
|
||||||
@@ -230,7 +234,7 @@ class website_sale(http.Controller):
|
|||||||
|
|
||||||
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=url, total=product_count, page=page, step=ppg, scope=7, url_args=post)
|
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, offset=pager['offset'], order='website_published desc, website_sequence desc', context=context)
|
product_ids = product_obj.search(cr, uid, domain, limit=ppg, offset=pager['offset'], order=self._get_search_order(post), context=context)
|
||||||
products = product_obj.browse(cr, uid, product_ids, context=context)
|
products = product_obj.browse(cr, uid, product_ids, context=context)
|
||||||
|
|
||||||
attributes_obj = request.registry['product.attribute']
|
attributes_obj = request.registry['product.attribute']
|
||||||
|
|||||||
@@ -781,6 +781,12 @@ Weight: 31 grams</field>
|
|||||||
<record id="product.product_product_48_product_template" model="product.template">
|
<record id="product.product_product_48_product_template" model="product.template">
|
||||||
<field name="public_categ_ids" eval="[(6,0,[ref('product.Components')])]"/>
|
<field name="public_categ_ids" eval="[(6,0,[ref('product.Components')])]"/>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="product.product_attribute_value_3" model="product.attribute.value">
|
||||||
|
<field name="color">#FFFFFF</field>
|
||||||
|
</record>
|
||||||
|
<record id="product.product_attribute_value_4" model="product.attribute.value">
|
||||||
|
<field name="color">#000000</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record id="list_christmas" model="product.pricelist">
|
<record id="list_christmas" model="product.pricelist">
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
France, 2016-05-30
|
||||||
|
|
||||||
|
Aetna Softwares. agrees to the terms of the Odoo Corporate Contributor License Agreement v1.0.
|
||||||
|
|
||||||
|
I declare that I am authorized and able to make this agreement and sign this declaration.
|
||||||
|
|
||||||
|
Signed,
|
||||||
|
|
||||||
|
Olivier Oriol aetna.softwares@gmail.com https://github.com/aetna-softwares
|
||||||
|
|
||||||
|
List of contributors:
|
||||||
|
|
||||||
|
Olivier Oriol aetna.softwares@gmail.com https://github.com/aetna-softwares
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Colombia, 2016-04-20
|
||||||
|
|
||||||
|
DevCO Colombia agrees to the terms of the Odoo Corporate Contributor License
|
||||||
|
Agreement v1.0.
|
||||||
|
|
||||||
|
I declare that I am authorized and able to make this agreement and sign this
|
||||||
|
declaration.
|
||||||
|
|
||||||
|
Signed,
|
||||||
|
|
||||||
|
David Arnold dar@devco.co https://github.com/blaggacao
|
||||||
|
|
||||||
|
List of contributors:
|
||||||
|
|
||||||
|
Juan Pablo Arias jpa@devco.co https://github.com/kurkop
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
Netherlands, 2015-03-09
|
Netherlands, 2015-03-09
|
||||||
|
|
||||||
|
Updated 2016-05-27
|
||||||
|
|
||||||
Therp BV agrees to the terms of the Odoo Corporate
|
Therp BV agrees to the terms of the Odoo Corporate
|
||||||
Contributor License Agreement v1.0.
|
Contributor License Agreement v1.0.
|
||||||
|
|
||||||
@@ -8,14 +10,12 @@ this declaration.
|
|||||||
|
|
||||||
Signed,
|
Signed,
|
||||||
|
|
||||||
* Ronald Portier rportier@therp.nl https://github.com/nl66278
|
* Ronald Portier ronald@therp.nl https://github.com/nl66278
|
||||||
* Stefan Rijnhart stefan@therp.nl https://github.com/stefanrijnhart
|
|
||||||
|
|
||||||
List of contributors:
|
List of contributors:
|
||||||
|
|
||||||
* Giovanni Capalbo giovanni@therp.nl https://github.com/gfcapalbo
|
* Giovanni Capalbo giovanni@therp.nl https://github.com/gfcapalbo
|
||||||
* Holger Brunn hbrunn@therp.nl https://github.com/hbrunn
|
* Holger Brunn hbrunn@therp.nl https://github.com/hbrunn
|
||||||
* Lara Freeke lfreeke@therp.nl https://github.com/lfreeke
|
* Lara Freeke lfreeke@therp.nl https://github.com/lfreeke
|
||||||
* Ronald Portier rportier@therp.nl https://github.com/nl66278
|
* Ronald Portier ronald@therp.nl https://github.com/nl66278
|
||||||
* Stefan Rijnhart stefan@therp.nl https://github.com/stefanrijnhart
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user