[MERGE] upstream
bzr revid: fme@openerp.com-20140325103928-ja3bqy6xmyp91gva
This commit is contained in:
commit
8435da41bc
|
@ -19,5 +19,11 @@
|
|||
<field name="global" eval="True" />
|
||||
<field name="domain_force">[('company_id', '=', user.company_id.id)]</field>
|
||||
</record>
|
||||
<record id="rule_pos_config_multi_company" model="ir.rule">
|
||||
<field name="name">Point Of Sale Config</field>
|
||||
<field name="model_id" ref="model_pos_config" />
|
||||
<field name="global" eval="True" />
|
||||
<field name="domain_force">[('warehouse_id.company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<separator string="Select your Point of Sale" colspan="4" attrs="{'invisible' : [('show_config', '=', False)]}" />
|
||||
<group attrs="{'invisible' : [('show_config', '=', False)]}">
|
||||
<field name="pos_config_id" on_change="on_change_config(pos_config_id)"
|
||||
widget="selection" domain="[('state','=','active')]"
|
||||
options="{'no_create': True}" domain="[('state','=','active')]"
|
||||
class="oe_inline"/>
|
||||
<field name="pos_state" invisible="1" />
|
||||
</group>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
|
||||
|
|
|
@ -112,6 +112,7 @@ def webkit_report_extender(report_name):
|
|||
return fct
|
||||
return fct1
|
||||
|
||||
|
||||
class WebKitParser(report_sxw):
|
||||
"""Custom class that use webkit to render HTML reports
|
||||
Code partially taken from report openoffice. Thanks guys :)
|
||||
|
@ -173,7 +174,7 @@ class WebKitParser(report_sxw):
|
|||
),
|
||||
'w'
|
||||
)
|
||||
head_file.write(header.encode('utf-8'))
|
||||
head_file.write(self._sanitize_html(header.encode('utf-8')))
|
||||
head_file.close()
|
||||
file_to_del.append(head_file.name)
|
||||
command.extend(['--header-html', head_file.name])
|
||||
|
@ -184,7 +185,7 @@ class WebKitParser(report_sxw):
|
|||
),
|
||||
'w'
|
||||
)
|
||||
foot_file.write(footer.encode('utf-8'))
|
||||
foot_file.write(self._sanitize_html(footer.encode('utf-8')))
|
||||
foot_file.close()
|
||||
file_to_del.append(foot_file.name)
|
||||
command.extend(['--footer-html', foot_file.name])
|
||||
|
@ -205,7 +206,7 @@ class WebKitParser(report_sxw):
|
|||
for html in html_list :
|
||||
html_file = file(os.path.join(tmp_dir, str(time.time()) + str(count) +'.body.html'), 'w')
|
||||
count += 1
|
||||
html_file.write(html.encode('utf-8'))
|
||||
html_file.write(self._sanitize_html(html.encode('utf-8')))
|
||||
html_file.close()
|
||||
file_to_del.append(html_file.name)
|
||||
command.append(html_file.name)
|
||||
|
@ -366,7 +367,6 @@ class WebKitParser(report_sxw):
|
|||
pdf = self.generate_pdf(bin, report_xml, head, foot, htmls)
|
||||
return (pdf, 'pdf')
|
||||
|
||||
|
||||
def create(self, cursor, uid, ids, data, context=None):
|
||||
"""We override the create function in order to handle generator
|
||||
Code taken from report openoffice. Thanks guys :) """
|
||||
|
@ -387,11 +387,18 @@ class WebKitParser(report_sxw):
|
|||
report_xml.report_sxw = None
|
||||
else:
|
||||
return super(WebKitParser, self).create(cursor, uid, ids, data, context)
|
||||
if report_xml.report_type != 'webkit' :
|
||||
if report_xml.report_type != 'webkit':
|
||||
return super(WebKitParser, self).create(cursor, uid, ids, data, context)
|
||||
result = self.create_source_pdf(cursor, uid, ids, data, report_xml, context)
|
||||
if not result:
|
||||
return (False,False)
|
||||
return result
|
||||
|
||||
def _sanitize_html(self, html):
|
||||
"""wkhtmltopdf expects the html page to declare a doctype.
|
||||
"""
|
||||
if html and html[:9].upper() != "<!DOCTYPE":
|
||||
html = "<!DOCTYPE html>\n" + html
|
||||
return html
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -55,11 +55,12 @@ class sale_make_invoice(osv.osv_memory):
|
|||
raise osv.except_osv(_('Warning!'), _("You shouldn't manually invoice the following sale order %s") % (sale_order.name))
|
||||
|
||||
order_obj.action_invoice_create(cr, uid, context.get(('active_ids'), []), data['grouped'], date_invoice=data['invoice_date'])
|
||||
|
||||
for o in order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context):
|
||||
orders = order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context)
|
||||
for o in orders:
|
||||
for i in o.invoice_ids:
|
||||
newinv.append(i.id)
|
||||
|
||||
# Dummy call to workflow, will not create another invoice but bind the new invoice to the subflow
|
||||
order_obj.signal_manual_invoice(cr, uid, [o.id for o in orders if o.order_policy == 'manual'])
|
||||
result = mod_obj.get_object_reference(cr, uid, 'account', 'action_invoice_tree1')
|
||||
id = result and result[1] or False
|
||||
result = act_obj.read(cr, uid, [id], context=context)[0]
|
||||
|
|
|
@ -33,6 +33,10 @@ class stock_change_product_qty(osv.osv_memory):
|
|||
'prodlot_id': fields.many2one('stock.production.lot', 'Serial Number', domain="[('product_id','=',product_id)]"),
|
||||
'location_id': fields.many2one('stock.location', 'Location', required=True, domain="[('usage', '=', 'internal')]"),
|
||||
}
|
||||
_defaults = {
|
||||
'new_quantity': 1,
|
||||
'product_id': lambda self, cr, uid, ctx: ctx and ctx.get('active_id', False) or False
|
||||
}
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
if context is None: context = {}
|
||||
|
@ -54,20 +58,22 @@ class stock_change_product_qty(osv.osv_memory):
|
|||
@param context: A standard dictionary
|
||||
@return: A dictionary which of fields with values.
|
||||
"""
|
||||
product_id = context and context.get('active_id', False) or False
|
||||
|
||||
res = super(stock_change_product_qty, self).default_get(cr, uid, fields, context=context)
|
||||
|
||||
if 'new_quantity' in fields:
|
||||
res.update({'new_quantity': 1})
|
||||
if 'product_id' in fields:
|
||||
res.update({'product_id': product_id})
|
||||
if 'location_id' in fields:
|
||||
try:
|
||||
model, location_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'stock', 'stock_location_stock')
|
||||
self.pool.get('stock.location').check_access_rule(cr, uid, [location_id], 'read', context=context)
|
||||
except (orm.except_orm, ValueError):
|
||||
location_id = False
|
||||
res.update({'location_id': location_id})
|
||||
location_id = res.get('location_id', False)
|
||||
if not location_id:
|
||||
try:
|
||||
model, location_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'stock', 'stock_location_stock')
|
||||
except (orm.except_orm, ValueError):
|
||||
pass
|
||||
if location_id:
|
||||
try:
|
||||
self.pool.get('stock.location').check_access_rule(cr, uid, [location_id], 'read', context=context)
|
||||
except (orm.except_orm, ValueError):
|
||||
pass
|
||||
res['location_id'] = location_id
|
||||
return res
|
||||
|
||||
def change_product_qty(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'form_view_ref': False}</field>
|
||||
</record>
|
||||
|
||||
<record id="view_split_in_lots" model="ir.ui.view">
|
||||
|
@ -124,6 +125,7 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'form_view_ref': False}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
|
|
@ -37,7 +37,7 @@ e.g. To have an invoice generated automatically periodically:
|
|||
above. Specify the interval information and partner to be invoice.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': [],
|
||||
'depends': ['base'],
|
||||
'data': ['security/subcription_security.xml', 'security/ir.model.access.csv', 'subscription_view.xml'],
|
||||
'demo': ['subscription_demo.xml',],
|
||||
'installable': True,
|
||||
|
|
|
@ -128,23 +128,14 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we
|
|||
for use in exist_user:
|
||||
new_user.append(use.id)
|
||||
for id in survey_ref.browse(cr, uid, survey_ids):
|
||||
report = self.create_report(cr, uid, [id.id], 'report.survey.form', id.title)
|
||||
file = open(get_module_resource('survey', 'report') + id.title +".pdf")
|
||||
file_data = ""
|
||||
while 1:
|
||||
line = file.readline()
|
||||
file_data += line
|
||||
if not line:
|
||||
break
|
||||
file.close()
|
||||
attachments[id.title +".pdf"] = file_data
|
||||
os.remove(get_module_resource('survey', 'report') + id.title +".pdf")
|
||||
result, format = openerp.report.render_report(cr, uid, [id.id], 'survey.form', {}, {})
|
||||
attachments[id.title +".pdf"] = result
|
||||
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids):
|
||||
if not partner.email:
|
||||
skipped+= 1
|
||||
continue
|
||||
user = user_ref.search(cr, uid, [('login', "=", partner.email)])
|
||||
user = user_ref.search(cr, uid, [('partner_id', "=", partner.id)])
|
||||
if user:
|
||||
if user[0] not in new_user:
|
||||
new_user.append(user[0])
|
||||
|
@ -185,6 +176,8 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we
|
|||
if ans:
|
||||
res_data = {'name': partner.name or _('Unknown'),
|
||||
'login': partner.email,
|
||||
'email': partner.email,
|
||||
'partner_id': partner.id,
|
||||
'password': passwd,
|
||||
'address_id': partner.id,
|
||||
'groups_id': [[6, 0, [group_id]]],
|
||||
|
|
|
@ -168,20 +168,9 @@ class view(osv.osv):
|
|||
arch_no_whitespace = etree.fromstring(
|
||||
etree.tostring(arch, encoding='utf-8'),
|
||||
parser=etree.XMLParser(encoding='utf-8', remove_blank_text=True))
|
||||
arch_pretty_indent_2 = etree.tostring(
|
||||
return etree.tostring(
|
||||
arch_no_whitespace, encoding='unicode', pretty_print=True)
|
||||
|
||||
# pretty_print uses a fixed indent level of 2, we want an indent of 4,
|
||||
# double up leading spaces.
|
||||
def repl(m):
|
||||
indent = len(m.group(0)) / 2
|
||||
return u' ' * 4 * indent
|
||||
# FIXME: If py2.7 only, can use re.M in sub and don't have to do replacement line by line
|
||||
return u'\n'.join(
|
||||
re.sub(ur'^((?: )+)', repl, line)
|
||||
for line in arch_pretty_indent_2.split(u'\n')
|
||||
)
|
||||
|
||||
def save(self, cr, uid, res_id, value, xpath=None, context=None):
|
||||
""" Update a view section. The view section may embed fields to write
|
||||
|
||||
|
|
|
@ -1752,6 +1752,9 @@
|
|||
if (node.nodeName === 'BR' && node.getAttribute('type') === '_moz') {
|
||||
// <br type="_moz"> appears when focusing RTE in FF, ignore
|
||||
continue;
|
||||
} else if (node.nodeName === 'DIV' && $(node).hasClass('oe_drop_zone')) {
|
||||
// ignore dropzone inserted by snippets
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,23 +19,11 @@
|
|||
edit: function () {
|
||||
var self = this;
|
||||
$("body").off('click');
|
||||
website.snippet.stop_animation();
|
||||
window.snippets = this.snippets = new website.snippet.BuildingBlock(this);
|
||||
this.snippets.appendTo(this.$el);
|
||||
this.on('rte:ready', this, function () {
|
||||
self.snippets.$button.removeClass("hidden");
|
||||
website.snippet.start_animation();
|
||||
$(website.snippet.readyAnimation).each(function() {
|
||||
var animation = $(this).data("snippet-view");
|
||||
if (animation) {
|
||||
animation.$target.on('focus', '*', function(){
|
||||
animation.stop();
|
||||
});
|
||||
animation.$target.on('blur', '*', function(){
|
||||
animation.start();
|
||||
});
|
||||
}
|
||||
});
|
||||
website.snippet.stop_animation();
|
||||
});
|
||||
|
||||
return this._super.apply(this, arguments);
|
||||
|
@ -392,8 +380,6 @@
|
|||
if(action === 'insert'){
|
||||
$target = $toInsert;
|
||||
|
||||
website.snippet.start_animation();
|
||||
|
||||
self.create_overlay($target);
|
||||
if ($target.data("snippet-editor")) {
|
||||
$target.data("snippet-editor").drop_and_build_snippet($target);
|
||||
|
@ -1315,6 +1301,7 @@
|
|||
start : function () {
|
||||
var self = this;
|
||||
this._super();
|
||||
this.$target.carousel({interval: false});
|
||||
this.id = this.$target.attr("id");
|
||||
this.$inner = this.$target.find('.carousel-inner');
|
||||
this.$indicators = this.$target.find('.carousel-indicators');
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h2 class="oe_slogan">Awesome Open Source Blogging Plateform</h2>
|
||||
<h2 class="oe_slogan">Awesome Open Source Blogging Platform</h2>
|
||||
<h3 class="oe_slogan">Write, Design, Promote, Engage</h3>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
|
@ -15,7 +15,7 @@
|
|||
<div class="oe_span6">
|
||||
<p class='oe_mt32'>
|
||||
Express yourself with the OpenERP enterprise grade blogging
|
||||
plateform. Write beautiful blog posts, engage with visitors,
|
||||
platform. Write beautiful blog posts, engage with visitors,
|
||||
translate content and moderate social streams.
|
||||
</p><p>
|
||||
Get your blog posts efficiently referenced in Google and
|
||||
|
|
|
@ -171,6 +171,7 @@ class event_sponsors(osv.osv):
|
|||
'partner_id': fields.many2one('res.partner', 'Sponsor/Customer', required=True),
|
||||
'url': fields.text('Sponsor Website'),
|
||||
'sequence': fields.related('sponsor_type_id', 'sequence', string='Sequence', store=True),
|
||||
'image_medium': fields.related('partner_id', 'image_medium', string='Logo')
|
||||
}
|
||||
|
||||
def has_access_to_partner(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<h2 class="text-center mb32">Our Sponsors</h2>
|
||||
</section>
|
||||
<div class="row">
|
||||
<div t-attf-class="col-md-#{(len(event.sponsor_ids) > 6) and 2 or (12/ len(event.sponsor_ids))} text-center" t-foreach="event.sponsor_ids" t-as="sponsor">
|
||||
<div t-attf-class="col-md-#{(len(event.sponsor_ids) > 6) and 2 or (12/ len(event.sponsor_ids))} text-center mb16" t-foreach="event.sponsor_ids" t-as="sponsor">
|
||||
<t t-if="sponsor.url">
|
||||
<a t-att-href="sponsor.url" style="position: relative; display: inline-block;">
|
||||
<span t-field="sponsor.partner_id.image"
|
||||
<span t-field="sponsor.image_medium"
|
||||
t-field-options='{"widget": "image", "class": "shadow"}'/>
|
||||
<div class="ribbon-wrapper">
|
||||
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
|
||||
|
@ -27,7 +27,7 @@
|
|||
</t>
|
||||
<t t-if="not sponsor.url">
|
||||
<span style="position: relative; display: inline-block;">
|
||||
<span t-field="sponsor.partner_id.image"
|
||||
<span t-field="sponsor.image_medium"
|
||||
t-field-options='{"widget": "image", "class": "shadow"}'/>
|
||||
<div class="ribbon-wrapper">
|
||||
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
|
||||
|
|
|
@ -729,7 +729,7 @@
|
|||
<div class="col-md-8 oe_mycart">
|
||||
<h3 class="page-header mt16">Billing Information
|
||||
<small groups="base.group_public"> or
|
||||
<a class='btn btn-primary' t-if="not partner" t-attf-href="/web?redirect=#{ request.httprequest.url }">Sign in</a>
|
||||
<a class='btn btn-primary' t-if="not partner" t-attf-href="/web/login?redirect=#{ request.httprequest.url }">Sign in</a>
|
||||
</small>
|
||||
</h3>
|
||||
<div class="row">
|
||||
|
|
Loading…
Reference in New Issue