[MERGE] forward port of branch 8.0 up to 948befb
This commit is contained in:
@@ -194,8 +194,10 @@
|
||||
<field name="date_due"/>
|
||||
<field domain="[('company_id', '=', company_id), ('type', '=', 'payable')]"
|
||||
name="account_id" groups="account.group_account_user"/>
|
||||
<field name="internal_number" invisible="1"/>
|
||||
<field name="journal_id" groups="account.group_account_user"
|
||||
on_change="onchange_journal_id(journal_id)" options="{'no_create': True}"/>
|
||||
on_change="onchange_journal_id(journal_id)" options="{'no_create': True}"
|
||||
attrs="{'readonly':[('internal_number','!=',False)]}"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="check_total" groups="account.group_supplier_inv_check_total"/>
|
||||
</group>
|
||||
@@ -339,8 +341,10 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_invoice" on_change="onchange_payment_term_date_invoice(payment_term, date_invoice)" />
|
||||
<field name="internal_number" invisible="1"/>
|
||||
<field name="journal_id" groups="account.group_account_user"
|
||||
on_change="onchange_journal_id(journal_id)" options="{'no_create': True}"/>
|
||||
on_change="onchange_journal_id(journal_id)" options="{'no_create': True}"
|
||||
attrs="{'readonly':[('internal_number','!=',False)]}"/>
|
||||
<field domain="[('company_id', '=', company_id),('type','=', 'receivable')]"
|
||||
name="account_id" groups="account.group_account_user"/>
|
||||
|
||||
|
||||
@@ -452,7 +452,7 @@ class account_move_line(osv.osv):
|
||||
'debit': fields.float('Debit', digits_compute=dp.get_precision('Account')),
|
||||
'credit': fields.float('Credit', digits_compute=dp.get_precision('Account')),
|
||||
'account_id': fields.many2one('account.account', 'Account', required=True, ondelete="cascade", domain=[('type','<>','view'), ('type', '<>', 'closed')], select=2),
|
||||
'move_id': fields.many2one('account.move', 'Journal Entry', ondelete="cascade", help="The move of this entry line.", select=2, required=True),
|
||||
'move_id': fields.many2one('account.move', 'Journal Entry', ondelete="cascade", help="The move of this entry line.", select=2, required=True, auto_join=True),
|
||||
'narration': fields.related('move_id','narration', type='text', relation='account.move', string='Internal Note'),
|
||||
'ref': fields.related('move_id', 'ref', string='Reference', type='char', store=True),
|
||||
'statement_id': fields.many2one('account.bank.statement', 'Statement', help="The bank statement used for bank reconciliation", select=1, copy=False),
|
||||
|
||||
@@ -310,6 +310,7 @@ class res_partner(osv.osv):
|
||||
('reconcile_id', '=', False),
|
||||
('state', '!=', 'draft'),
|
||||
('company_id', '=', company_id),
|
||||
('date_maturity', '<=', fields.date.context_today(self,cr,uid)),
|
||||
], context=context):
|
||||
raise UserError(_("The partner does not have any accounting entries to print in the overdue report for the current company."))
|
||||
self.message_post(cr, uid, [ids[0]], body=_('Printed overdue payments report'), context=context)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from openerp.osv import osv
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.report import report_sxw
|
||||
from openerp.exceptions import UserError
|
||||
|
||||
@@ -56,6 +56,7 @@ class report_rappel(report_sxw.rml_parse):
|
||||
('reconcile_id', '=', False),
|
||||
('state', '!=', 'draft'),
|
||||
('company_id', '=', company_id),
|
||||
('date_maturity', '<=', fields.date.context_today(self,self.cr,self.uid)),
|
||||
])
|
||||
|
||||
# lines_per_currency = {currency: [line data, ...], ...}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<field name="type" invisible="context.get('default_type', False)"/>
|
||||
<field name="template_id" on_change="on_change_template(template_id, date_start)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/>
|
||||
<field name="code"/>
|
||||
<field name="parent_id" on_change="on_change_parent(parent_id)" attrs="{'invisible': [('type','in',['contract'])]}"/>
|
||||
<field name="parent_id" on_change="on_change_parent(parent_id)"/>
|
||||
<field name="company_id" on_change="on_change_company(company_id)" options="{'no_create': True}" groups="base.group_multi_company" attrs="{'required': [('type','<>','view')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
from operator import itemgetter
|
||||
from textwrap import dedent
|
||||
|
||||
from openerp import tools
|
||||
from openerp import tools, SUPERUSER_ID
|
||||
from openerp.osv import fields, osv
|
||||
|
||||
class board_board(osv.osv):
|
||||
@@ -143,7 +143,7 @@ class board_create(osv.osv_memory):
|
||||
''')
|
||||
}, context=context)
|
||||
|
||||
menu_id = self.pool.get('ir.ui.menu').create(cr, uid, {
|
||||
menu_id = self.pool.get('ir.ui.menu').create(cr, SUPERUSER_ID, {
|
||||
'name': this.name,
|
||||
'parent_id': this.menu_parent_id.id,
|
||||
'action': 'ir.actions.act_window,%s' % (action_id,)
|
||||
|
||||
@@ -321,6 +321,7 @@ class crm_lead(format_address, osv.osv):
|
||||
values = {
|
||||
'partner_name': partner.parent_id.name if partner.parent_id else partner.name,
|
||||
'contact_name': partner.name if partner.parent_id else False,
|
||||
'title': partner.title and partner.title.id or False,
|
||||
'street': partner.street,
|
||||
'street2': partner.street2,
|
||||
'city': partner.city,
|
||||
@@ -331,6 +332,7 @@ class crm_lead(format_address, osv.osv):
|
||||
'mobile': partner.mobile,
|
||||
'fax': partner.fax,
|
||||
'zip': partner.zip,
|
||||
'function': partner.function,
|
||||
}
|
||||
return {'value': values}
|
||||
|
||||
|
||||
@@ -568,12 +568,13 @@ class hr_timesheet_sheet_sheet_day(osv.osv):
|
||||
MAX(id) as id,
|
||||
name,
|
||||
sheet_id,
|
||||
timezone,
|
||||
SUM(total_timesheet) as total_timesheet,
|
||||
CASE WHEN SUM(total_attendance) < 0
|
||||
CASE WHEN SUM(orphan_attendances) != 0
|
||||
THEN (SUM(total_attendance) +
|
||||
CASE WHEN current_date <> name
|
||||
THEN 1440
|
||||
ELSE (EXTRACT(hour FROM current_time AT TIME ZONE 'UTC') * 60) + EXTRACT(minute FROM current_time AT TIME ZONE 'UTC')
|
||||
ELSE (EXTRACT(hour FROM current_time AT TIME ZONE 'UTC' AT TIME ZONE coalesce(timezone, 'UTC')) * 60) + EXTRACT(minute FROM current_time AT TIME ZONE 'UTC' AT TIME ZONE coalesce(timezone, 'UTC'))
|
||||
END
|
||||
)
|
||||
ELSE SUM(total_attendance)
|
||||
@@ -582,21 +583,25 @@ class hr_timesheet_sheet_sheet_day(osv.osv):
|
||||
((
|
||||
select
|
||||
min(hrt.id) as id,
|
||||
'UTC' as timezone,
|
||||
l.date::date as name,
|
||||
s.id as sheet_id,
|
||||
sum(l.unit_amount) as total_timesheet,
|
||||
0 as orphan_attendances,
|
||||
0.0 as total_attendance
|
||||
from
|
||||
hr_analytic_timesheet hrt
|
||||
JOIN account_analytic_line l ON l.id = hrt.line_id
|
||||
LEFT JOIN hr_timesheet_sheet_sheet s ON s.id = hrt.sheet_id
|
||||
group by l.date::date, s.id
|
||||
group by l.date::date, s.id, timezone
|
||||
) union (
|
||||
select
|
||||
-min(a.id) as id,
|
||||
p.tz as timezone,
|
||||
(a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))::date as name,
|
||||
s.id as sheet_id,
|
||||
0.0 as total_timesheet,
|
||||
SUM(CASE WHEN a.action = 'sign_in' THEN -1 ELSE 1 END) as orphan_attendances,
|
||||
SUM(((EXTRACT(hour FROM (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))) * 60) + EXTRACT(minute FROM (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC')))) * (CASE WHEN a.action = 'sign_in' THEN -1 ELSE 1 END)) as total_attendance
|
||||
from
|
||||
hr_attendance a
|
||||
@@ -611,9 +616,9 @@ class hr_timesheet_sheet_sheet_day(osv.osv):
|
||||
LEFT JOIN res_partner p
|
||||
ON u.partner_id = p.id
|
||||
WHERE action in ('sign_in', 'sign_out')
|
||||
group by (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))::date, s.id
|
||||
group by (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))::date, s.id, timezone
|
||||
)) AS foo
|
||||
GROUP BY name, sheet_id
|
||||
GROUP BY name, sheet_id, timezone
|
||||
)) AS bar""")
|
||||
|
||||
|
||||
|
||||
+4
-3
@@ -21,6 +21,7 @@
|
||||
|
||||
import time
|
||||
import openerp.addons.decimal_precision as dp
|
||||
from collections import OrderedDict
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
|
||||
from openerp.tools.translate import _
|
||||
@@ -851,7 +852,7 @@ class mrp_production(osv.osv):
|
||||
product_qty = uom_obj._compute_qty(cr, uid, production.product_uom.id, production.product_qty, production.product_id.uom_id.id) - produced_qty
|
||||
production_qty = uom_obj._compute_qty(cr, uid, production.product_uom.id, production.product_qty, production.product_id.uom_id.id)
|
||||
|
||||
scheduled_qty = {}
|
||||
scheduled_qty = OrderedDict()
|
||||
for scheduled in production.product_lines:
|
||||
if scheduled.product_id.type == 'service':
|
||||
continue
|
||||
@@ -860,7 +861,7 @@ class mrp_production(osv.osv):
|
||||
scheduled_qty[scheduled.product_id.id] += qty
|
||||
else:
|
||||
scheduled_qty[scheduled.product_id.id] = qty
|
||||
dicts = {}
|
||||
dicts = OrderedDict()
|
||||
# Find product qty to be consumed and consume it
|
||||
for product_id in scheduled_qty.keys():
|
||||
|
||||
@@ -903,7 +904,7 @@ class mrp_production(osv.osv):
|
||||
else:
|
||||
dicts[product_id][lot_id] = quant_qty
|
||||
qty -= quant_qty
|
||||
if qty > 0:
|
||||
if float_compare(qty, 0, self.pool['decimal.precision'].precision_get(cr, uid, 'Product Unit of Measure')) == 1:
|
||||
if dicts[product_id].get(False):
|
||||
dicts[product_id][False] += qty
|
||||
else:
|
||||
|
||||
@@ -29,7 +29,7 @@ class mrp_product_produce_line(osv.osv_memory):
|
||||
|
||||
_columns = {
|
||||
'product_id': fields.many2one('product.product', string='Product'),
|
||||
'product_qty': fields.float('Quantity (in default UoM)'),
|
||||
'product_qty': fields.float('Quantity (in default UoM)', digits_compute=dp.get_precision('Product Unit of Measure')),
|
||||
'lot_id': fields.many2one('stock.production.lot', string='Lot'),
|
||||
'produce_id': fields.many2one('mrp.product.produce', string="Produce"),
|
||||
'track_production': fields.related('product_id', 'track_production', type='boolean', string="Track Production"),
|
||||
|
||||
@@ -370,7 +370,7 @@ class project(osv.osv):
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_dates, 'Error! project start-date must be lower then project end-date.', ['date_start', 'date'])
|
||||
(_check_dates, 'Error! project start-date must be lower than project end-date.', ['date_start', 'date'])
|
||||
]
|
||||
|
||||
def set_template(self, cr, uid, ids, context=None):
|
||||
@@ -897,7 +897,7 @@ class task(osv.osv):
|
||||
|
||||
_constraints = [
|
||||
(_check_recursion, 'Error ! You cannot create recursive tasks.', ['parent_ids']),
|
||||
(_check_dates, 'Error ! Task starting date must be lower then its ending date.', ['date_start','date_end'])
|
||||
(_check_dates, 'Error ! Task starting date must be lower than its ending date.', ['date_start','date_end'])
|
||||
]
|
||||
|
||||
# Override view according to the company definition
|
||||
|
||||
@@ -149,6 +149,19 @@ class purchase_order(osv.osv):
|
||||
limit=1)
|
||||
return res and res[0] or False
|
||||
|
||||
def _has_non_stockable_item(self, cr, uid, ids, *args):
|
||||
res = dict.fromkeys(ids, False)
|
||||
for order in self.browse(cr, uid, ids):
|
||||
for order_line in order.order_line:
|
||||
if (
|
||||
not order_line.product_id
|
||||
or
|
||||
order_line.product_id
|
||||
and order_line.product_id.type not in ('product', 'consu')
|
||||
):
|
||||
res[order.id] = True
|
||||
return res
|
||||
|
||||
def _get_picking_in(self, cr, uid, context=None):
|
||||
obj_data = self.pool.get('ir.model.data')
|
||||
type_obj = self.pool.get('stock.picking.type')
|
||||
@@ -298,6 +311,7 @@ class purchase_order(osv.osv):
|
||||
'create_uid': fields.many2one('res.users', 'Responsible'),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1, states={'confirmed': [('readonly', True)], 'approved': [('readonly', True)]}),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal'),
|
||||
'has_non_stockable_item': fields.function(_has_non_stockable_item, method=True, type='boolean', string='Contains a non-stockable item'),
|
||||
'bid_date': fields.date('Bid Received On', readonly=True, help="Date on which the bid was received"),
|
||||
'bid_validity': fields.date('Bid Valid Until', help="Date on which the bid expired"),
|
||||
'picking_type_id': fields.many2one('stock.picking.type', 'Deliver To', help="This will determine picking type of incoming shipment", required=True,
|
||||
@@ -481,6 +495,7 @@ class purchase_order(osv.osv):
|
||||
action['res_id'] = pick_ids and pick_ids[0] or False
|
||||
return action
|
||||
|
||||
|
||||
def wkf_approve_order(self, cr, uid, ids, context=None):
|
||||
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
|
||||
return True
|
||||
@@ -539,6 +554,10 @@ class purchase_order(osv.osv):
|
||||
for po in self.browse(cr, uid, ids, context=context):
|
||||
if not po.order_line:
|
||||
raise UserError(_('You cannot confirm a purchase order without any purchase order line.'))
|
||||
if po.invoice_method == 'picking' and po.has_non_stockable_item is True:
|
||||
raise osv.except_osv(
|
||||
_('Error!'),
|
||||
_("You cannot confirm a purchase order with Invoice Control Method 'Based on incoming shipments' that contains non-stockable items."))
|
||||
for line in po.order_line:
|
||||
if line.state=='draft':
|
||||
todo.append(line.id)
|
||||
|
||||
@@ -74,7 +74,7 @@ class stock_move(osv.osv):
|
||||
purchase_obj = self.pool.get('purchase.order')
|
||||
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||
purchase_id = move.purchase_line_id.order_id.id
|
||||
purchase_line_ids = purchase_line_obj.search(cr, uid, [('order_id', '=', purchase_id), ('product_id.type', '=', 'service'), ('invoice_lines', '=', False)], context=context)
|
||||
purchase_line_ids = purchase_line_obj.search(cr, uid, [('order_id', '=', purchase_id), ('invoice_lines', '=', False), '|', ('product_id', '=', False), ('product_id.type', '=', 'service')], context=context)
|
||||
if purchase_line_ids:
|
||||
inv_lines = []
|
||||
for po_line in purchase_line_obj.browse(cr, uid, purchase_line_ids, context=context):
|
||||
|
||||
+3
-2
@@ -708,8 +708,9 @@ class sale_order(osv.osv):
|
||||
procurement_obj.check(cr, uid, [x.id for x in line.procurement_ids if x.state not in ['cancel', 'done']])
|
||||
line.refresh()
|
||||
#run again procurement that are in exception in order to trigger another move
|
||||
proc_ids += [x.id for x in line.procurement_ids if x.state in ('exception', 'cancel')]
|
||||
procurement_obj.reset_to_confirmed(cr, uid, proc_ids, context=context)
|
||||
except_proc_ids = [x.id for x in line.procurement_ids if x.state in ('exception', 'cancel')]
|
||||
procurement_obj.reset_to_confirmed(cr, uid, except_proc_ids, context=context)
|
||||
proc_ids += except_proc_ids
|
||||
elif sale_line_obj.need_procurement(cr, uid, [line.id], context=context):
|
||||
if (line.state == 'done') or not line.product_id:
|
||||
continue
|
||||
|
||||
@@ -305,6 +305,14 @@ class sale_order_line(osv.osv):
|
||||
res['value'].update({'product_packaging': False})
|
||||
return res
|
||||
|
||||
# set product uom in context to get virtual stock in current uom
|
||||
if res.get('value', {}).get('product_uom'):
|
||||
# use the uom changed by super call
|
||||
context.update({'uom': res['value']['product_uom']})
|
||||
elif uom:
|
||||
# fallback on selected
|
||||
context.update({'uom': uom})
|
||||
|
||||
#update of result obtained in super function
|
||||
product_obj = product_obj.browse(cr, uid, product, context=context)
|
||||
res['value'].update({'product_tmpl_id': product_obj.product_tmpl_id.id, 'delay': (product_obj.sale_delay or 0.0)})
|
||||
@@ -376,7 +384,7 @@ class stock_move(osv.osv):
|
||||
})
|
||||
sale_line_obj = self.pool.get('sale.order.line')
|
||||
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||
sale_line_ids = sale_line_obj.search(cr, uid, [('order_id', '=', move.procurement_id.sale_line_id.order_id.id), ('product_id.type', '=', 'service'), ('invoiced', '=', False)], context=context)
|
||||
sale_line_ids = sale_line_obj.search(cr, uid, [('order_id', '=', move.procurement_id.sale_line_id.order_id.id), ('invoiced', '=', False), '|', ('product_id', '=', False), ('product_id.type', '=', 'service')], context=context)
|
||||
if sale_line_ids:
|
||||
created_lines = sale_line_obj.invoice_line_create(cr, uid, sale_line_ids, context=context)
|
||||
invoice_line_obj.write(cr, uid, created_lines, {'invoice_id': invoice_line_vals['invoice_id']}, context=context)
|
||||
|
||||
+15
-2
@@ -3065,20 +3065,33 @@ class stock_warehouse(osv.osv):
|
||||
raise UserError(_('Can\'t find any customer or supplier location.'))
|
||||
return location_obj.browse(cr, uid, [customer_loc, supplier_loc], context=context)
|
||||
|
||||
def _location_used(self, cr, uid, location_id, warehouse, context=None):
|
||||
pull_obj = self.pool['procurement.rule']
|
||||
push_obj = self.pool['stock.location.path']
|
||||
pulls = pull_obj.search(cr, uid, ['&', ('route_id', 'not in', [x.id for x in warehouse.route_ids]), '|', ('location_src_id', '=', location_id), ('location_id', '=', location_id)], context=context)
|
||||
pushs = push_obj.search(cr, uid, ['&', ('route_id', 'not in', [x.id for x in warehouse.route_ids]), '|', ('location_from_id', '=', location_id), ('location_dest_id', '=', location_id)], context=context)
|
||||
if pulls or pushs:
|
||||
return True
|
||||
return False
|
||||
|
||||
def switch_location(self, cr, uid, ids, warehouse, new_reception_step=False, new_delivery_step=False, context=None):
|
||||
location_obj = self.pool.get('stock.location')
|
||||
|
||||
new_reception_step = new_reception_step or warehouse.reception_steps
|
||||
new_delivery_step = new_delivery_step or warehouse.delivery_steps
|
||||
if warehouse.reception_steps != new_reception_step:
|
||||
location_obj.write(cr, uid, [warehouse.wh_input_stock_loc_id.id, warehouse.wh_qc_stock_loc_id.id], {'active': False}, context=context)
|
||||
if not self._location_used(cr, uid, warehouse.wh_input_stock_loc_id.id, warehouse, context=context):
|
||||
location_obj.write(cr, uid, [warehouse.wh_input_stock_loc_id.id, warehouse.wh_qc_stock_loc_id.id], {'active': False}, context=context)
|
||||
if new_reception_step != 'one_step':
|
||||
location_obj.write(cr, uid, warehouse.wh_input_stock_loc_id.id, {'active': True}, context=context)
|
||||
if new_reception_step == 'three_steps':
|
||||
location_obj.write(cr, uid, warehouse.wh_qc_stock_loc_id.id, {'active': True}, context=context)
|
||||
|
||||
if warehouse.delivery_steps != new_delivery_step:
|
||||
location_obj.write(cr, uid, [warehouse.wh_output_stock_loc_id.id, warehouse.wh_pack_stock_loc_id.id], {'active': False}, context=context)
|
||||
if not self._location_used(cr, uid, warehouse.wh_output_stock_loc_id.id, warehouse, context=context):
|
||||
location_obj.write(cr, uid, [warehouse.wh_output_stock_loc_id.id], {'active': False}, context=context)
|
||||
if not self._location_used(cr, uid, warehouse.wh_pack_stock_loc_id.id, warehouse, context=context):
|
||||
location_obj.write(cr, uid, [warehouse.wh_pack_stock_loc_id.id], {'active': False}, context=context)
|
||||
if new_delivery_step != 'ship_only':
|
||||
location_obj.write(cr, uid, warehouse.wh_output_stock_loc_id.id, {'active': True}, context=context)
|
||||
if new_delivery_step == 'pick_pack_ship':
|
||||
|
||||
@@ -2168,6 +2168,10 @@
|
||||
.openerp .oe_form_field_many2one input {
|
||||
padding-right: 13px;
|
||||
}
|
||||
.openerp.ui-autocomplete {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.openerp.ui-autocomplete li.oe_m2o_dropdown_option a {
|
||||
font-style: italic;
|
||||
padding-left: 2em;
|
||||
|
||||
@@ -1809,6 +1809,11 @@ $sheet-padding: 16px
|
||||
input
|
||||
padding-right: 13px
|
||||
&.ui-autocomplete
|
||||
// http://bugs.jqueryui.com/ticket/8749
|
||||
// https://github.com/jquery/jquery-ui/commit/d693ce5324f6f3be8479ef083e4eaf3c705ef043
|
||||
// Odoo 8.0 currently uses JQuery 1.9.1, and the above fix, that we need, is in 1.9.2.
|
||||
top: 0
|
||||
left: 0
|
||||
li.oe_m2o_dropdown_option a
|
||||
font-style: italic
|
||||
padding-left: 2em
|
||||
|
||||
@@ -2850,6 +2850,7 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we
|
||||
this.$textarea = this.$el.find('textarea');
|
||||
this.auto_sized = false;
|
||||
this.default_height = this.$textarea.css('height');
|
||||
if (this.default_height === '0px') this.default_height = '90px';
|
||||
if (this.get("effective_readonly")) {
|
||||
this.$textarea.attr('disabled', 'disabled');
|
||||
}
|
||||
|
||||
@@ -299,21 +299,24 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
||||
this.$pager
|
||||
.on('click', 'a[data-pager-action]', function () {
|
||||
var $this = $(this);
|
||||
var max_page = Math.floor(self.dataset.size() / self.limit());
|
||||
var max_page_index = Math.ceil(self.dataset.size() / self.limit()) - 1;
|
||||
switch ($this.data('pager-action')) {
|
||||
case 'first':
|
||||
self.page = 0; break;
|
||||
self.page = 0;
|
||||
break;
|
||||
case 'last':
|
||||
self.page = max_page - 1;
|
||||
self.page = max_page_index;
|
||||
break;
|
||||
case 'next':
|
||||
self.page += 1; break;
|
||||
self.page += 1;
|
||||
break;
|
||||
case 'previous':
|
||||
self.page -= 1; break;
|
||||
self.page -= 1;
|
||||
break;
|
||||
}
|
||||
if (self.page < 0) {
|
||||
self.page = max_page;
|
||||
} else if (self.page > max_page) {
|
||||
self.page = max_page_index;
|
||||
} else if (self.page > max_page_index) {
|
||||
self.page = 0;
|
||||
}
|
||||
self.reload_content();
|
||||
|
||||
Vendored
+81
-78
@@ -6609,6 +6609,9 @@ body {
|
||||
dt:hover > a > .viewcode-link {
|
||||
display: inline;
|
||||
}
|
||||
blockquote.highlights {
|
||||
border: none;
|
||||
}
|
||||
div.section > h1 {
|
||||
padding-bottom: 9px;
|
||||
margin: 40px 0 20px;
|
||||
@@ -6822,7 +6825,7 @@ td.field-body > ul {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] {
|
||||
float: none;
|
||||
clear: none;
|
||||
margin-left: 50%;
|
||||
@@ -6830,31 +6833,31 @@ td.field-body > ul {
|
||||
color: #eeeeee;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right legend,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] legend {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] legend {
|
||||
color: inherit;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right input,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] input {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] input {
|
||||
color: inherit;
|
||||
background-color: #555555;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right a,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] a {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] a {
|
||||
color: #d9a8cc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right code,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] code,
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] code,
|
||||
.stripe .section:not(.force-right) > .force-right .literal,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .literal {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .literal {
|
||||
color: #f9f2f4;
|
||||
background-color: #555555;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right:not(.highlight-json) .highlight,
|
||||
.stripe .section:not(.force-right) > [class*=highlight]:not(.highlight-json) .highlight {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-]:not(.highlight-json) .highlight {
|
||||
border-bottom-color: #777777;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right.admonition,
|
||||
.stripe .section:not(.force-right) > [class*=highlight].admonition {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-].admonition {
|
||||
margin-left: 51%;
|
||||
width: 49%;
|
||||
border-top-color: #777777;
|
||||
@@ -6862,7 +6865,7 @@ td.field-body > ul {
|
||||
border-right-color: #777777;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight {
|
||||
border-color: #555555;
|
||||
border-style: solid;
|
||||
border-width: 1px 0;
|
||||
@@ -6940,281 +6943,281 @@ td.field-body > ul {
|
||||
/* Literal.Number.Integer.Long */
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .lineno,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .lineno {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .lineno {
|
||||
color: #586e75;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .c,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .c {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .c {
|
||||
color: #586e75;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .err,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .err {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .err {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .g,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .g {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .g {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .k,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .k {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .k {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .l,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .l {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .l {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .n,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .n {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .n {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .o,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .o {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .o {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .x,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .x {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .x {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .p,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .p {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .p {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .cm,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cm {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .cm {
|
||||
color: #586e75;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .cp,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cp {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .cp {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .c1,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .c1 {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .c1 {
|
||||
color: #586e75;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .cs,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .cs {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .cs {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gd,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gd {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gd {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ge,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ge {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ge {
|
||||
color: #cccccc;
|
||||
font-style: italic;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gr,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gr {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gr {
|
||||
color: #dc322f;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gh,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gh {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gh {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gi,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gi {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gi {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .go,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .go {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .go {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gp,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gp {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gp {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gs,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gs {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gs {
|
||||
color: #cccccc;
|
||||
font-weight: bold;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gu,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gu {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gu {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .gt,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .gt {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .gt {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kc,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kc {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kc {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kd,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kd {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kd {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kn,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kn {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kn {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kp,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kp {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kp {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kr,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kr {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kr {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .kt,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .kt {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .kt {
|
||||
color: #dc322f;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ld,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ld {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ld {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .m,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .m {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .m {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .s,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .s {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .na,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .na {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .na {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nb,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nb {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nb {
|
||||
color: #b58900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nc,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nc {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nc {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .no,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .no {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .no {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nd,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nd {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nd {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ni,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ni {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ni {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ne,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ne {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ne {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nf,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nf {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nf {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nl,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nl {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nl {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nn,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nn {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nn {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nx,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nx {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nx {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .py,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .py {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .py {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nt,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nt {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nt {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .nv,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .nv {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .nv {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ow,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ow {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ow {
|
||||
color: #859900;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .w,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .w {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .w {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .mf,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mf {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .mf {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .mh,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mh {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .mh {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .mi,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mi {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .mi {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .mo,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .mo {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .mo {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sb,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sb {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sb {
|
||||
color: #586e75;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sc,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sc {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sc {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sd,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sd {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sd {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .s2,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s2 {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .s2 {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .se,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .se {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .se {
|
||||
color: #cb4b16;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sh,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sh {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sh {
|
||||
color: #cccccc;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .si,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .si {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .si {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sx,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sx {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sx {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .sr,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .sr {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .sr {
|
||||
color: #dc322f;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .s1,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .s1 {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .s1 {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .ss,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .ss {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .ss {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .bp,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .bp {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .bp {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .vc,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vc {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .vc {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .vg,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vg {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .vg {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .vi,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .vi {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .vi {
|
||||
color: #268bd2;
|
||||
}
|
||||
.stripe .section:not(.force-right) > .force-right .highlight .il,
|
||||
.stripe .section:not(.force-right) > [class*=highlight] .highlight .il {
|
||||
.stripe .section:not(.force-right) > [class*=highlight-] .highlight .il {
|
||||
color: #2aa198;
|
||||
}
|
||||
.stripe .body > .section > .section {
|
||||
|
||||
+4
-1
@@ -393,6 +393,9 @@ dt:hover > a > .viewcode-link {
|
||||
|
||||
// either that or overwrite visit_attribution/depart_attribution
|
||||
blockquote p.attribution:extend(blockquote footer) {}
|
||||
blockquote.highlights {
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.section > h1 {
|
||||
.page-header();
|
||||
@@ -622,7 +625,7 @@ td.field-body {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.section:not(.force-right) > .force-right,
|
||||
.section:not(.force-right) > [class*=highlight] {
|
||||
.section:not(.force-right) > [class*=highlight-] {
|
||||
float: none;
|
||||
clear: none;
|
||||
margin-left: 50%;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
Spain, 2015-03-06
|
||||
|
||||
I hereby agree to the terms of the Odoo Individual Contributor License
|
||||
Agreement v1.0.
|
||||
|
||||
I declare that I am authorized and able to make this agreement and sign this
|
||||
declaration.
|
||||
|
||||
Signed,
|
||||
|
||||
Jesús Ventosinos Mayor jesus@pexego.es https://github.com/jesusVMayor
|
||||
|
||||
@@ -184,7 +184,9 @@ class ir_attachment(osv.osv):
|
||||
return fname
|
||||
|
||||
def _file_delete(self, cr, uid, fname):
|
||||
count = self.search_count(cr, 1, [('store_fname','=',fname)])
|
||||
# using SQL to include files hidden through unlink or due to record rules
|
||||
cr.execute("SELECT COUNT(*) FROM ir_attachment WHERE store_fname = %s", (fname,))
|
||||
count = cr.fetchone()[0]
|
||||
full_path = self._full_path(cr, uid, fname)
|
||||
if not count and os.path.exists(full_path):
|
||||
try:
|
||||
|
||||
@@ -140,13 +140,14 @@ class ir_filters(osv.osv):
|
||||
]
|
||||
|
||||
def _auto_init(self, cr, context=None):
|
||||
super(ir_filters, self)._auto_init(cr, context)
|
||||
result = super(ir_filters, self)._auto_init(cr, context)
|
||||
# Use unique index to implement unique constraint on the lowercase name (not possible using a constraint)
|
||||
cr.execute("DROP INDEX IF EXISTS ir_filters_name_model_uid_unique_index") # drop old index w/o action
|
||||
cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = 'ir_filters_name_model_uid_unique_action_index'")
|
||||
if not cr.fetchone():
|
||||
cr.execute("""CREATE UNIQUE INDEX "ir_filters_name_model_uid_unique_action_index" ON ir_filters
|
||||
(lower(name), model_id, COALESCE(user_id,-1), COALESCE(action_id,-1))""")
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Filter Name', translate=True, required=True),
|
||||
|
||||
Reference in New Issue
Block a user