[MERGE] forward port of branch saas-3 up to db75994

This commit is contained in:
Christophe Simonis 2014-10-14 15:13:14 +02:00
commit 2e3f59181d
15 changed files with 1888 additions and 1199 deletions

View File

@ -221,7 +221,7 @@ class account_bank_statement(osv.osv):
'ref': st_line.ref, 'ref': st_line.ref,
} }
def _get_counter_part_account(sefl, cr, uid, st_line, context=None): def _get_counter_part_account(self, cr, uid, st_line, context=None):
"""Retrieve the account to use in the counterpart move. """Retrieve the account to use in the counterpart move.
:param browse_record st_line: account.bank.statement.line record to create the move from. :param browse_record st_line: account.bank.statement.line record to create the move from.
@ -231,7 +231,7 @@ class account_bank_statement(osv.osv):
return st_line.statement_id.journal_id.default_credit_account_id.id return st_line.statement_id.journal_id.default_credit_account_id.id
return st_line.statement_id.journal_id.default_debit_account_id.id return st_line.statement_id.journal_id.default_debit_account_id.id
def _get_counter_part_partner(sefl, cr, uid, st_line, context=None): def _get_counter_part_partner(self, cr, uid, st_line, context=None):
"""Retrieve the partner to use in the counterpart move. """Retrieve the partner to use in the counterpart move.
:param browse_record st_line: account.bank.statement.line record to create the move from. :param browse_record st_line: account.bank.statement.line record to create the move from.

View File

@ -24,6 +24,7 @@ from lxml import etree
from openerp import models, fields, api, _ from openerp import models, fields, api, _
from openerp.exceptions import except_orm, Warning, RedirectWarning from openerp.exceptions import except_orm, Warning, RedirectWarning
from openerp.tools import float_compare
import openerp.addons.decimal_precision as dp import openerp.addons.decimal_precision as dp
# mapping invoice type to journal type # mapping invoice type to journal type
@ -705,6 +706,7 @@ class account_invoice(models.Model):
account_invoice_tax.create(tax) account_invoice_tax.create(tax)
else: else:
tax_key = [] tax_key = []
precision = self.env['decimal.precision'].precision_get('Account')
for tax in self.tax_line: for tax in self.tax_line:
if tax.manual: if tax.manual:
continue continue
@ -713,7 +715,7 @@ class account_invoice(models.Model):
if key not in compute_taxes: if key not in compute_taxes:
raise except_orm(_('Warning!'), _('Global taxes defined, but they are not in invoice lines !')) raise except_orm(_('Warning!'), _('Global taxes defined, but they are not in invoice lines !'))
base = compute_taxes[key]['base'] base = compute_taxes[key]['base']
if abs(base - tax.base) > company_currency.rounding: if float_compare(abs(base - tax.base), company_currency.rounding, precision_digits=precision) == 1:
raise except_orm(_('Warning!'), _('Tax base different!\nClick on compute to update the tax base.')) raise except_orm(_('Warning!'), _('Tax base different!\nClick on compute to update the tax base.'))
for key in compute_taxes: for key in compute_taxes:
if key not in tax_key: if key not in tax_key:

View File

@ -486,7 +486,8 @@ class email_template(osv.osv):
# body: add user signature, sanitize # body: add user signature, sanitize
if 'body_html' in fields and template.user_signature: if 'body_html' in fields and template.user_signature:
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
values['body_html'] = tools.append_content_to_html(values['body_html'], signature, plaintext=False) if signature:
values['body_html'] = tools.append_content_to_html(values['body_html'], signature, plaintext=False)
if values.get('body_html'): if values.get('body_html'):
values['body'] = tools.html_sanitize(values['body_html']) values['body'] = tools.html_sanitize(values['body_html'])
# technical settings # technical settings

View File

@ -38,7 +38,7 @@ class gamification_badge_user(osv.Model):
_rec_name = "badge_name" _rec_name = "badge_name"
_columns = { _columns = {
'user_id': fields.many2one('res.users', string="User", required=True), 'user_id': fields.many2one('res.users', string="User", required=True, ondelete="cascade"),
'sender_id': fields.many2one('res.users', string="Sender", help="The user who has send the badge"), 'sender_id': fields.many2one('res.users', string="Sender", help="The user who has send the badge"),
'badge_id': fields.many2one('gamification.badge', string='Badge', required=True, ondelete="cascade"), 'badge_id': fields.many2one('gamification.badge', string='Badge', required=True, ondelete="cascade"),
'challenge_id': fields.many2one('gamification.challenge', string='Challenge originating', help="If this badge was rewarded through a challenge"), 'challenge_id': fields.many2one('gamification.challenge', string='Challenge originating', help="If this badge was rewarded through a challenge"),

View File

@ -40,6 +40,7 @@ This is the base module to manage the accounting chart for Luxembourg.
'data': [ 'data': [
# basic accounting data # basic accounting data
'account_financial_report.xml', 'account_financial_report.xml',
'account_financial_report_abr.xml',
'account.account.type-2011.csv', 'account.account.type-2011.csv',
'account.account.template-2011.csv', 'account.account.template-2011.csv',
'account.tax.code.template-2011.csv', 'account.tax.code.template-2011.csv',

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,635 @@
<openerp>
<data>
<!-- balance sheet abbreviated model (CA_BILANABR) -->
<record model="account.financial.report" id="account_financial_report_abr_13">
<field name="name">Luxembourg Balance Sheet (abbreviated)</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
</record>
<record model="account.financial.report" id="account_financial_report_abr_15">
<field name="name">ACTIF</field>
<field name="sequence">201</field>
<field name="style_overwrite" eval="1"/>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_13"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_16">
<field name="name">A. Capital souscrit non vers&#233;</field>
<field name="sequence">101</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_15"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_17">
<field name="name">I. Capital souscrit non appel&#233;</field>
<field name="sequence">103</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_16"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_18">
<field name="name">II. Capital souscrit appel&#233; et non vers&#233;</field>
<field name="sequence">105</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_16"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_19">
<field name="name">B. Frais d&#8217;&#233;tablissement</field>
<field name="sequence">107</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_15"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_20">
<field name="name">C. Actif immobilis&#233;</field>
<field name="sequence">109</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_15"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_21">
<field name="name">I. Immobilisations incorporelles</field>
<field name="sequence">111</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_20"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_28">
<field name="name">II. Immobilisations corporelles</field>
<field name="sequence">125</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_20"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_33">
<field name="name">III. Immobilisations financi&#232;res</field>
<field name="sequence">135</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_20"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_41">
<field name="name">D. Actif circulant</field>
<field name="sequence">151</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_15"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_42">
<field name="name">I. Stocks</field>
<field name="sequence">153</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_41"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_47">
<field name="name">II. Cr&#233;ances</field>
<field name="sequence">163</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_41"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_49">
<field name="name">a) dont la dur&#233;e r&#233;siduelle est inf&#233;rieure ou &#233;gale &#224; un an</field>
<field name="sequence">167</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_47"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_50">
<field name="name">b) dont la dur&#233;e r&#233;siduelle est sup&#233;rieure &#224; un an</field>
<field name="sequence">169</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_47"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_60">
<field name="name">III. Valeurs mobili&#232;res</field>
<field name="sequence">189</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_41"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_64">
<field name="name">IV. Avoirs en banques, avoirs en compte de ch&#232;ques postaux, ch&#232;ques et en caisse</field>
<field name="sequence">197</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_41"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_65">
<field name="name">E. Comptes de r&#233;gularisation</field>
<field name="sequence">199</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_15"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_66">
<field name="name">PASSIF</field>
<field name="sequence">405</field>
<field name="style_overwrite" eval="1"/>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_13"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_67">
<field name="name">A. Capitaux propres</field>
<field name="sequence">301</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_66"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_68">
<field name="name">I. Capital souscrit</field>
<field name="sequence">303</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_69">
<field name="name">II. Primes d'&#233;missions et primes assimil&#233;es</field>
<field name="sequence">305</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_70">
<field name="name">III. R&#233;serves de r&#233;&#233;valuation</field>
<field name="sequence">307</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_71">
<field name="name">IV. R&#233;serves</field>
<field name="sequence">309</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_76">
<field name="name">V. R&#233;sultats report&#233;s</field>
<field name="sequence">319</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_77">
<field name="name">VI. R&#233;sultat de l'exercice</field>
<field name="sequence">321</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_78">
<field name="name">VII. Acomptes sur dividendes</field>
<field name="sequence">323</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_79">
<field name="name">VIII. Subventions d&#8217;investissement en capital</field>
<field name="sequence">325</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_80">
<field name="name">IX. Plus-values immunis&#233;es</field>
<field name="sequence">327</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_67"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_81">
<field name="name">B. Dettes subordonn&#233;es</field>
<field name="sequence">329</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_66"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_82">
<field name="name">C. Provisions</field>
<field name="sequence">331</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_66"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_86">
<field name="name">D. Dettes non subordonn&#233;es</field>
<field name="sequence">339</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_66"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_89">
<field name="name">a) dont la dur&#233;e r&#233;siduelle est inf&#233;rieure ou &#233;gale &#224; un an</field>
<field name="sequence">345</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_86"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_90">
<field name="name">b) dont la dur&#233;e r&#233;siduelle est sup&#233;rieure &#224; un an</field>
<field name="sequence">347</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_86"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_118">
<field name="name">E. Comptes de r&#233;gularisation</field>
<field name="sequence">403</field>
<field name="style_overwrite" eval="2"/>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_66"/>
</record>
<!-- profit and loss abbreviated model (CA_COMPPABR) -->
<record model="account.financial.report" id="account_financial_report_abr_14">
<field name="name">Luxembourg Profit &amp; Loss (abbreviated)</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
</record>
<!-- p&l full model (CA_COMPP) -->
<record model="account.financial.report" id="account_financial_report_abr_119">
<field name="name">A. CHARGES</field>
<field name="sequence">641</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_14"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_120">
<field name="name">1. &#224; 2. Charges brutes (moins B.1 &#224; B.4)</field>
<field name="sequence">601</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_122">
<field name="name">3. Frais de personnel</field>
<field name="sequence">605</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_123">
<field name="name">a) Salaires et traitements</field>
<field name="sequence">607</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_122"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_124">
<field name="name">b) Charges sociales couvrant les salaires et traitements</field>
<field name="sequence">609</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_122"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_125">
<field name="name">c) Pensions compl&#233;mentaires</field>
<field name="sequence">611</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_122"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_126">
<field name="name">d) Autres charges sociales</field>
<field name="sequence">613</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_122"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_127">
<field name="name">4. Corrections de valeur</field>
<field name="sequence">615</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_128">
<field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles et incorporelles</field>
<field name="sequence">617</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_127"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_129">
<field name="name">b) sur &#233;l&#233;ments de l'actif circulant</field>
<field name="sequence">619</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_127"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_130">
<field name="name">5. Autres charges d&#8217;exploitation</field>
<field name="sequence">621</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_131">
<field name="name">6. Corrections de valeur sur immobilisations financi&#232;res et ajustement de juste valeur sur immobilisations financières</field>
<field name="sequence">623</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_132">
<field name="name">7. Corrections de valeur et ajustement de juste valeur sur &#233;l&#233;ments financiers de l'actif circulant. Moins-values de cessions des valeurs mobilières</field>
<field name="sequence">625</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_133">
<field name="name">8. Int&#233;r&#234;ts et autres charges financi&#232;res</field>
<field name="sequence">627</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_134">
<field name="name">a) concernant des entreprises li&#233;es</field>
<field name="sequence">629</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_133"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_135">
<field name="name">b) autres int&#233;r&#234;ts et charges</field>
<field name="sequence">631</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_133"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_136">
<field name="name">9. Charges exceptionnelles</field>
<field name="sequence">633</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_137">
<field name="name">10. Imp&#244;ts sur le r&#233;sultat</field>
<field name="sequence">635</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_138">
<field name="name">11. Autres imp&#244;ts ne figurant pas sous le poste ci-dessus</field>
<field name="sequence">637</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_119"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_140">
<field name="name">B. PRODUITS</field>
<field name="sequence">737</field>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_14"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_141">
<field name="name">1. &#224; 4. Produits bruts (moins A.1 et A.2)</field>
<field name="sequence">701</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_147">
<field name="name">5. Autres produits d&#8217;exploitation</field>
<field name="sequence">713</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_148">
<field name="name">6. Produits des immobilisations financi&#232;res</field>
<field name="sequence">715</field>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_149">
<field name="name">a) provenant d&#8217;entreprises li&#233;es</field>
<field name="sequence">717</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_148"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_150">
<field name="name">b) autres produits de participations</field>
<field name="sequence">719</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_148"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_151">
<field name="name">7. Produits des &#233;l&#233;ments financiers de l'actif circulant</field>
<field name="sequence">721</field>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_152">
<field name="name">a) provenant d&#8217;entreprises li&#233;es</field>
<field name="sequence">723</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_151"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_153">
<field name="name">b) autres produits</field>
<field name="sequence">725</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_151"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_154">
<field name="name">8. Autres int&#233;r&#234;ts et autres produits financiers</field>
<field name="sequence">727</field>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
<field name="type">sum</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_155">
<field name="name">a) provenant d&#8217;entreprises li&#233;es</field>
<field name="sequence">729</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_154"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_156">
<field name="name">b) autres int&#233;r&#234;ts et produits financiers</field>
<field name="sequence">731</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_154"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_157">
<field name="name">9. Produits exceptionnels</field>
<field name="sequence">733</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_140"/>
</record>
<record model="account.financial.report" id="account_financial_report_abr_161">
<field name="name">RESULTAT DE L'EXERCICE</field>
<field name="sequence">800</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
<field name="type">accounts</field>
<field name="parent_id" ref="account_financial_report_abr_14"/>
</record>
</data>
</openerp>

View File

@ -1234,9 +1234,13 @@ class mail_thread(osv.AbstractModel):
body = tools.append_content_to_html(u'', body, preserve=True) body = tools.append_content_to_html(u'', body, preserve=True)
else: else:
alternative = False alternative = False
mixed = False
html = u''
for part in message.walk(): for part in message.walk():
if part.get_content_type() == 'multipart/alternative': if part.get_content_type() == 'multipart/alternative':
alternative = True alternative = True
if part.get_content_type() == 'multipart/mixed':
mixed = True
if part.get_content_maintype() == 'multipart': if part.get_content_maintype() == 'multipart':
continue # skip container continue # skip container
# part.get_filename returns decoded value if able to decode, coded otherwise. # part.get_filename returns decoded value if able to decode, coded otherwise.
@ -1263,8 +1267,11 @@ class mail_thread(osv.AbstractModel):
encoding, errors='replace'), preserve=True) encoding, errors='replace'), preserve=True)
# 3) text/html -> raw # 3) text/html -> raw
elif part.get_content_type() == 'text/html': elif part.get_content_type() == 'text/html':
# mutlipart/alternative have one text and a html part, keep only the second
# mixed allows several html parts, append html content
append_content = not alternative or (html and mixed)
html = tools.ustr(part.get_payload(decode=True), encoding, errors='replace') html = tools.ustr(part.get_payload(decode=True), encoding, errors='replace')
if alternative: if not append_content:
body = html body = html
else: else:
body = tools.append_content_to_html(body, html, plaintext=False) body = tools.append_content_to_html(body, html, plaintext=False)

View File

@ -143,6 +143,53 @@ X-Attachment-Id: f_hkpb27k00
dGVzdAo= dGVzdAo=
--089e01536c4ed4d17204e49b8e96--""" --089e01536c4ed4d17204e49b8e96--"""
MAIL_MULTIPART_MIXED_TWO = """X-Original-To: raoul@grosbedon.fr
Delivered-To: raoul@grosbedon.fr
Received: by mail1.grosbedon.com (Postfix, from userid 10002)
id E8166BFACA; Fri, 23 Aug 2013 13:18:01 +0200 (CEST)
From: "Bruce Wayne" <bruce@wayneenterprises.com>
Content-Type: multipart/alternative;
boundary="Apple-Mail=_9331E12B-8BD2-4EC7-B53E-01F3FBEC9227"
Message-Id: <6BB1FAB2-2104-438E-9447-07AE2C8C4A92@sexample.com>
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
--Apple-Mail=_9331E12B-8BD2-4EC7-B53E-01F3FBEC9227
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=us-ascii
First and second part
--Apple-Mail=_9331E12B-8BD2-4EC7-B53E-01F3FBEC9227
Content-Type: multipart/mixed;
boundary="Apple-Mail=_CA6C687E-6AA0-411E-B0FE-F0ABB4CFED1F"
--Apple-Mail=_CA6C687E-6AA0-411E-B0FE-F0ABB4CFED1F
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head></head><body>First part</body></html>
--Apple-Mail=_CA6C687E-6AA0-411E-B0FE-F0ABB4CFED1F
Content-Disposition: inline;
filename=thetruth.pdf
Content-Type: application/pdf;
name="thetruth.pdf"
Content-Transfer-Encoding: base64
SSBhbSB0aGUgQmF0TWFuCg==
--Apple-Mail=_CA6C687E-6AA0-411E-B0FE-F0ABB4CFED1F
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head></head><body>Second part</body></html>
--Apple-Mail=_CA6C687E-6AA0-411E-B0FE-F0ABB4CFED1F--
--Apple-Mail=_9331E12B-8BD2-4EC7-B53E-01F3FBEC9227--
"""
class TestMailgateway(TestMail): class TestMailgateway(TestMail):
@ -164,6 +211,14 @@ class TestMailgateway(TestMail):
self.assertIn('<div dir="ltr">Should create a multipart/mixed: from gmail, <b>bold</b>, with attachment.<br clear="all"><div><br></div>', res.get('body', ''), self.assertIn('<div dir="ltr">Should create a multipart/mixed: from gmail, <b>bold</b>, with attachment.<br clear="all"><div><br></div>', res.get('body', ''),
'message_parse: html version should be in body after parsing multipart/mixed') 'message_parse: html version should be in body after parsing multipart/mixed')
res = self.mail_thread.message_parse(cr, uid, MAIL_MULTIPART_MIXED_TWO)
self.assertNotIn('First and second part', res.get('body', ''),
'message_parse: text version should not be in body after parsing multipart/mixed')
self.assertIn('First part', res.get('body', ''),
'message_parse: first part of the html version should be in body after parsing multipart/mixed')
self.assertIn('Second part', res.get('body', ''),
'message_parse: second part of the html version should be in body after parsing multipart/mixed')
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.models') @mute_logger('openerp.addons.mail.mail_thread', 'openerp.models')
def test_10_message_process(self): def test_10_message_process(self):
""" Testing incoming emails processing. """ """ Testing incoming emails processing. """

View File

@ -120,6 +120,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.is_initialized = $.Deferred(); this.is_initialized = $.Deferred();
this.mutating_mutex = new $.Mutex(); this.mutating_mutex = new $.Mutex();
this.save_list = []; this.save_list = [];
this.render_value_defs = [];
this.reload_mutex = new $.Mutex(); this.reload_mutex = new $.Mutex();
this.__clicked_inside = false; this.__clicked_inside = false;
this.__blur_timeout = null; this.__blur_timeout = null;
@ -674,6 +675,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
} else if (mode === "create") { } else if (mode === "create") {
mode = "edit"; mode = "edit";
} }
this.render_value_defs = [];
this.set({actual_mode: mode}); this.set({actual_mode: mode});
}, },
check_actual_mode: function(source, options) { check_actual_mode: function(source, options) {
@ -724,12 +726,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
}); });
}, },
on_button_cancel: function(event) { on_button_cancel: function(event) {
var self = this;
if (this.can_be_discarded()) { if (this.can_be_discarded()) {
if (this.get('actual_mode') === 'create') { if (this.get('actual_mode') === 'create') {
this.trigger('history_back'); this.trigger('history_back');
} else { } else {
this.to_view_mode(); this.to_view_mode();
this.trigger('load_record', this.datarecord); $.when.apply(null, this.render_value_defs).then(function(){
self.trigger('load_record', self.datarecord);
});
} }
} }
this.trigger('on_button_cancel'); this.trigger('on_button_cancel');
@ -2239,7 +2244,7 @@ instance.web.form.ReinitializeWidgetMixin = {
instance.web.form.ReinitializeFieldMixin = _.extend({}, instance.web.form.ReinitializeWidgetMixin, { instance.web.form.ReinitializeFieldMixin = _.extend({}, instance.web.form.ReinitializeWidgetMixin, {
reinitialize: function() { reinitialize: function() {
instance.web.form.ReinitializeWidgetMixin.reinitialize.call(this); instance.web.form.ReinitializeWidgetMixin.reinitialize.call(this);
this.render_value(); this.view.render_value_defs.push(this.render_value());
}, },
}); });
@ -4747,9 +4752,8 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in
self.render_tag(data); self.render_tag(data);
} }
if (! values || values.length > 0) { if (! values || values.length > 0) {
this._display_orderer.add(self.get_render_data(values)).done(handle_names); return this._display_orderer.add(self.get_render_data(values)).done(handle_names);
} } else {
else{
handle_names([]); handle_names([]);
} }
}, },

View File

@ -89,7 +89,7 @@
<ul class="nav nav-pills nav-stacked mt16"> <ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>Location</h3></li> <li class="nav-header"><h3>Location</h3></li>
<t t-foreach="countries" t-as="country"> <t t-foreach="countries" t-as="country">
<li t-if="country['country_id']" t-att-class="country['country_id'][0] == current_country_id and 'active' or ''"> <li t-if="country['country_id']" t-att-class="country['country_id'] and country['country_id'][0] == current_country_id and 'active' or ''">
<a t-attf-href="/members#{ membership and '/association/%s' % membership.id or '' }#{ country['country_id'][0] and '/country/%s' % slug(country['country_id']) or '' }#{ search }"><t t-esc="country['country_id'][1]"/> <a t-attf-href="/members#{ membership and '/association/%s' % membership.id or '' }#{ country['country_id'][0] and '/country/%s' % slug(country['country_id']) or '' }#{ search }"><t t-esc="country['country_id'][1]"/>
<span class="badge pull-right"><t t-esc="country['country_id_count'] or '0'"/></span> <span class="badge pull-right"><t t-esc="country['country_id_count'] or '0'"/></span>
</a> </a>

View File

@ -2,7 +2,7 @@
############################################################################## ##############################################################################
# #
# OpenERP, Open Source Management Solution # OpenERP, Open Source Management Solution
# Copyright (C) 2011-2012 OpenERP S.A (<http://www.openerp.com>) # Copyright (C) 2011-2014 OpenERP S.A. (<http://www.openerp.com>)
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as # it under the terms of the GNU Affero General Public License as
@ -24,7 +24,7 @@ from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.charset import Charset from email.charset import Charset
from email.header import Header from email.header import Header
from email.utils import formatdate, make_msgid, COMMASPACE, parseaddr from email.utils import formatdate, make_msgid, COMMASPACE, getaddresses, formataddr
from email import Encoders from email import Encoders
import logging import logging
import re import re
@ -140,30 +140,15 @@ def encode_rfc2822_address_header(header_text):
``"Name"`` portion by the RFC2047-encoded ``"Name"`` portion by the RFC2047-encoded
version, preserving the address part untouched. version, preserving the address part untouched.
""" """
header_text_utf8 = tools.ustr(header_text).encode('utf-8') def encode_addr(addr):
header_text_ascii = try_coerce_ascii(header_text_utf8) name, email = addr
if header_text_ascii: if not try_coerce_ascii(name):
return header_text_ascii name = str(Header(name, 'utf-8'))
return formataddr((name, email))
name, email = parseaddr(header_text_utf8) addresses = getaddresses([tools.ustr(header_text).encode('utf-8')])
if not name: return COMMASPACE.join(map(encode_addr, addresses))
return email
# non-ASCII characters are present, attempt to
# replace all "Name" patterns with the RFC2047-
# encoded version
name_encoded = str(Header(name, 'utf-8'))
header_text_utf8 = "%s <%s>" % (name_encoded, email)
# try again after encoding
header_text_ascii = try_coerce_ascii(header_text_utf8)
if header_text_ascii:
return header_text_ascii
# fallback to extracting pure addresses only, which could
# still cause a failure downstream if the actual addresses
# contain non-ASCII characters
return COMMASPACE.join(extract_rfc2822_addresses(header_text_utf8))
class ir_mail_server(osv.osv): class ir_mail_server(osv.osv):
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities.""" """Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
_name = "ir.mail_server" _name = "ir.mail_server"

View File

@ -248,7 +248,7 @@ class view(osv.osv):
return values return values
def create(self, cr, uid, values, context=None): def create(self, cr, uid, values, context=None):
if 'type' not in values: if not values.get('type'):
if values.get('inherit_id'): if values.get('inherit_id'):
values['type'] = self.browse(cr, uid, values['inherit_id'], context).type values['type'] = self.browse(cr, uid, values['inherit_id'], context).type
else: else:

View File

@ -358,7 +358,7 @@ class res_users(osv.osv):
if not context: if not context:
context={} context={}
ids = [] ids = []
if name: if name and operator in ['=', 'ilike']:
ids = self.search(cr, user, [('login','=',name)]+ args, limit=limit, context=context) ids = self.search(cr, user, [('login','=',name)]+ args, limit=limit, context=context)
if not ids: if not ids:
ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context) ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context)

View File

@ -579,7 +579,7 @@ def append_content_to_html(html, content, plaintext=True, preserve=False, contai
elif plaintext: elif plaintext:
content = '\n%s\n' % plaintext2html(content, container_tag) content = '\n%s\n' % plaintext2html(content, container_tag)
else: else:
content = re.sub(r'(?i)(</?html.*>|</?body.*>|<!\W*DOCTYPE.*>)', '', content) content = re.sub(r'(?i)(</?(?:html|body|head|!\s*DOCTYPE)[^>]*>)', '', content)
content = u'\n%s\n' % ustr(content) content = u'\n%s\n' % ustr(content)
# Force all tags to lowercase # Force all tags to lowercase
html = re.sub(r'(</?)\W*(\w+)([ >])', html = re.sub(r'(</?)\W*(\w+)([ >])',