diff --git a/addons/account/account.py b/addons/account/account.py
index c2e6f3d1221..fbbbfd64537 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -31,7 +31,7 @@ import decimal_precision as dp
from tools.translate import _
from tools.float_utils import float_round
from openerp import SUPERUSER_ID
-
+import tools
_logger = logging.getLogger(__name__)
@@ -227,7 +227,7 @@ class account_account(osv.osv):
while pos < len(args):
if args[pos][0] == 'code' and args[pos][1] in ('like', 'ilike') and args[pos][2]:
- args[pos] = ('code', '=like', str(args[pos][2].replace('%', ''))+'%')
+ args[pos] = ('code', '=like', tools.ustr(args[pos][2].replace('%', ''))+'%')
if args[pos][0] == 'journal_id':
if not args[pos][2]:
del args[pos]
@@ -682,7 +682,7 @@ class account_journal_view(osv.osv):
_name = "account.journal.view"
_description = "Journal View"
_columns = {
- 'name': fields.char('Journal View', size=64, required=True),
+ 'name': fields.char('Journal View', size=64, required=True, translate=True),
'columns_id': fields.one2many('account.journal.column', 'view_id', 'Columns')
}
_order = "name"
@@ -1908,7 +1908,7 @@ class account_tax(osv.osv):
'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."),
'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"),
'company_id': fields.many2one('res.company', 'Company', required=True),
- 'description': fields.char('Tax Code',size=32),
+ 'description': fields.char('Tax Code'),
'price_include': fields.boolean('Tax Included in Price', help="Check this if the price you use on the product and invoices includes this tax."),
'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Application', required=True)
@@ -2518,7 +2518,7 @@ class account_account_template(osv.osv):
'reconcile': fields.boolean('Allow Reconciliation', help="Check this option if you want the user to reconcile entries in this account."),
'shortcut': fields.char('Shortcut', size=12),
'note': fields.text('Note'),
- 'parent_id': fields.many2one('account.account.template', 'Parent Account Template', ondelete='cascade'),
+ 'parent_id': fields.many2one('account.account.template', 'Parent Account Template', ondelete='cascade', domain=[('type','=','view')]),
'child_parent_ids':fields.one2many('account.account.template', 'parent_id', 'Children'),
'tax_ids': fields.many2many('account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id', 'Default Taxes'),
'nocreate': fields.boolean('Optional create', help="If checked, the new chart of accounts will not contain this by default."),
@@ -2536,20 +2536,6 @@ class account_account_template(osv.osv):
(_check_recursion, 'Error!\nYou cannot create recursive account templates.', ['parent_id']),
]
- def create(self, cr, uid, vals, context=None):
- if 'parent_id' in vals:
- parent = self.read(cr, uid, [vals['parent_id']], ['type'])
- if parent and parent[0]['type'] != 'view':
- raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'."))
- return super(account_account_template, self).create(cr, uid, vals, context=context)
-
- def write(self, cr, uid, ids, vals, context=None):
- if 'parent_id' in vals:
- parent = self.read(cr, uid, [vals['parent_id']], ['type'])
- if parent and parent[0]['type'] != 'view':
- raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'."))
- return super(account_account_template, self).write(cr, uid, ids, vals, context=context)
-
def name_get(self, cr, uid, ids, context=None):
if not ids:
return []
@@ -2828,7 +2814,7 @@ class account_tax_template(osv.osv):
'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."),
'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."),
'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."),
- 'description': fields.char('Internal Name', size=32),
+ 'description': fields.char('Internal Name'),
'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Use In', required=True,),
'price_include': fields.boolean('Tax Included in Price', help="Check this if the price you use on the product and invoices includes this tax."),
}
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 9889eadf387..b4fc2388a68 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -457,6 +457,8 @@ class account_bank_statement(osv.osv):
return res and res[0] or 0.0
def onchange_journal_id(self, cr, uid, statement_id, journal_id, context=None):
+ if not journal_id:
+ return {}
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['default_debit_account_id', 'company_id'], context=context)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index aff38d71cfe..a1c53eff4b1 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -508,8 +508,10 @@ class account_invoice(osv.osv):
if journal_id:
journal = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context)
currency_id = journal.currency and journal.currency.id or journal.company_id.currency_id.id
+ company_id = journal.company_id.id
result = {'value': {
'currency_id': currency_id,
+ 'company_id': company_id,
}
}
return result
@@ -1371,7 +1373,10 @@ class account_invoice_line(osv.osv):
'partner_id': fields.related('invoice_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True)
}
- def _default_account_id(self, cr, uid, ids, context=None):
+ def _default_account_id(self, cr, uid, context=None):
+ # XXX this gets the default account for the user's company,
+ # it should get the default account for the invoice's company
+ # however, the invoice's company does not reach this point
prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
return prop and prop.id or False
@@ -1401,7 +1406,7 @@ class account_invoice_line(osv.osv):
context = {}
company_id = company_id if company_id != None else context.get('company_id',False)
context = dict(context)
- context.update({'company_id': company_id})
+ context.update({'company_id': company_id, 'force_company': company_id})
if not partner_id:
raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") )
if not product:
@@ -1556,16 +1561,19 @@ class account_invoice_line(osv.osv):
def onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id):
if not account_id:
return {}
- taxes = self.pool.get('account.account').browse(cr, uid, account_id).tax_ids
+ unique_tax_ids = []
fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False
- tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes)
-
- product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type,
- partner_id=partner_id, fposition_id=fposition_id)
- unique_tax_ids = set(tax_ids)
- if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']:
- unique_tax_ids |= set(product_change_result['value']['invoice_line_tax_id'])
- return {'value':{'invoice_line_tax_id': list(unique_tax_ids)}}
+ account = self.pool.get('account.account').browse(cr, uid, account_id)
+ if not product_id:
+ taxes = account.tax_ids
+ unique_tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes)
+ else:
+ product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type,
+ partner_id=partner_id, fposition_id=fposition_id,
+ company_id=account.company_id.id)
+ if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']:
+ unique_tax_ids = product_change_result['value']['invoice_line_tax_id']
+ return {'value':{'invoice_line_tax_id': unique_tax_ids}}
account_invoice_line()
@@ -1650,14 +1658,13 @@ class account_invoice_tax(osv.osv):
for line in inv.invoice_line:
for tax in tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, (line.price_unit* (1-(line.discount or 0.0)/100.0)), line.quantity, line.product_id, inv.partner_id)['taxes']:
- tax['price_unit'] = cur_obj.round(cr, uid, cur, tax['price_unit'])
val={}
val['invoice_id'] = inv.id
val['name'] = tax['name']
val['amount'] = tax['amount']
val['manual'] = False
val['sequence'] = tax['sequence']
- val['base'] = tax['price_unit'] * line['quantity']
+ val['base'] = cur_obj.round(cr, uid, cur, tax['price_unit'] * line['quantity'])
if inv.type in ('out_invoice','in_invoice'):
val['base_code_id'] = tax['base_code_id']
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 1c4d83106ca..4a587eee6fe 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -278,6 +278,7 @@
+
@@ -299,8 +300,8 @@
-
-
+
+
@@ -437,6 +438,7 @@
+
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 5ddbbee74f2..bb1ace992ca 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -562,6 +562,7 @@ class account_move_line(osv.osv):
'journal_id': lambda self, cr, uid, c: c.get('journal_id', False),
'credit': 0.0,
'debit': 0.0,
+ 'amount_currency': 0.0,
'account_id': lambda self, cr, uid, c: c.get('account_id', False),
'period_id': lambda self, cr, uid, c: c.get('period_id', False),
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.move.line', context=c)
@@ -1193,12 +1194,12 @@ class account_move_line(osv.osv):
jour_period_obj = self.pool.get('account.journal.period')
cr.execute('SELECT state FROM account_journal_period WHERE journal_id = %s AND period_id = %s', (journal_id, period_id))
result = cr.fetchall()
+ journal = journal_obj.browse(cr, uid, journal_id, context=context)
+ period = period_obj.browse(cr, uid, period_id, context=context)
for (state,) in result:
if state == 'done':
- raise osv.except_osv(_('Error!'), _('You cannot add/modify entries in a closed journal.'))
+ raise osv.except_osv(_('Error !'), _('You can not add/modify entries in a closed period %s of journal %s.' % (period.name,journal.name)))
if not result:
- journal = journal_obj.browse(cr, uid, journal_id, context=context)
- period = period_obj.browse(cr, uid, period_id, context=context)
jour_period_obj.create(cr, uid, {
'name': (journal.code or journal.name)+':'+(period.name or ''),
'journal_id': journal.id,
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 2c204fdf707..1fbda80a0fe 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -1305,16 +1305,6 @@
Account.Entry Edition
-->
-
- account.move.graph
- account.move
-
-
-
-
-
-
- account.move.treeaccount.move
@@ -1338,8 +1328,8 @@
@@ -114,9 +114,6 @@
-
account.analytic.line.form
@@ -351,15 +348,6 @@
# Reporting
#
-
- Print Analytic Journals
- account.analytic.journal
- tree
- To print an analytics (or costs) journal for a given period. The report give code, move name, account number, general amount and analytic amount.
-
-
account.journal.form.1
@@ -372,16 +360,5 @@
-
- analytic.accounts.graph
- account.analytic.account
-
-
-
-
-
-
-
-
diff --git a/addons/account/project/wizard/account_analytic_journal_report.py b/addons/account/project/wizard/account_analytic_journal_report.py
index 9a2eee020b1..8148a016927 100644
--- a/addons/account/project/wizard/account_analytic_journal_report.py
+++ b/addons/account/project/wizard/account_analytic_journal_report.py
@@ -29,6 +29,7 @@ class account_analytic_journal_report(osv.osv_memory):
_columns = {
'date1': fields.date('Start of period', required=True),
'date2': fields.date('End of period', required=True),
+ 'analytic_account_journal_id': fields.many2many('account.analytic.journal', 'account_analytic_journal_name', 'journal_line_id', 'journal_print_id', 'Analytic Journals', required=True),
}
_defaults = {
@@ -40,8 +41,15 @@ class account_analytic_journal_report(osv.osv_memory):
if context is None:
context = {}
data = self.read(cr, uid, ids)[0]
+ ids_list = []
+ if context.get('active_id',False):
+ ids_list.append(context.get('active_id',False))
+ else:
+ record = self.browse(cr,uid,ids[0],context=context)
+ for analytic_record in record.analytic_account_journal_id:
+ ids_list.append(analytic_record.id)
datas = {
- 'ids': context.get('active_ids',[]),
+ 'ids': ids_list,
'model': 'account.analytic.journal',
'form': data
}
@@ -50,6 +58,14 @@ class account_analytic_journal_report(osv.osv_memory):
'report_name': 'account.analytic.journal',
'datas': datas,
}
+
+ def default_get(self, cr, uid, fields, context=None):
+ if context is None:
+ context = {}
+ res = super(account_analytic_journal_report, self).default_get(cr, uid, fields, context=context)
+ if 'analytic_account_journal_id' in fields:
+ res.update({'analytic_account_journal_id': context.get('active_ids',[])})
+ return res
account_analytic_journal_report()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/project/wizard/account_analytic_journal_report_view.xml b/addons/account/project/wizard/account_analytic_journal_report_view.xml
index e4c4cd314db..b0cb0293270 100644
--- a/addons/account/project/wizard/account_analytic_journal_report_view.xml
+++ b/addons/account/project/wizard/account_analytic_journal_report_view.xml
@@ -7,15 +7,16 @@
account.analytic.journal.report
-
-
- or
-
-
+
+
@@ -38,6 +39,13 @@
actionaccount.analytic.journal
+
+
+
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index 442b51466f8..4b90e0c8ad5 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -16,7 +16,7 @@
- Manager
+ Financial Manager
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index b7d278b8849..38a22baa9f1 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -32,11 +32,11 @@ class account_invoice_refund(osv.osv_memory):
_name = "account.invoice.refund"
_description = "Invoice Refund"
_columns = {
- 'date': fields.date('Operation Date', help='This date will be used as the invoice date for credit note and period will be chosen accordingly!'),
+ 'date': fields.date('Date', help='This date will be used as the invoice date for credit note and period will be chosen accordingly!'),
'period': fields.many2one('account.period', 'Force period'),
'journal_id': fields.many2one('account.journal', 'Refund Journal', help='You can select here the journal to use for the credit note that will be created. If you leave that field empty, it will use the same journal as the current invoice.'),
- 'description': fields.char('Description', size=128, required=True),
- 'filter_refund': fields.selection([('refund', 'Create a draft refund'), ('cancel', 'Cancel: create credit note and reconcile'),('modify', 'Modify: create credit note, reconcile and create a new draft invoice')], "Refund Method", required=True, help='Credit note base on this type. You can not Modify and Cancel if the invoice is already reconciled'),
+ 'description': fields.char('Reason', size=128, required=True),
+ 'filter_refund': fields.selection([('refund', 'Create a draft credit note'), ('cancel', 'Cancel: create credit note and reconcile'),('modify', 'Modify: create credit note, reconcile and create a new draft invoice')], "Refund Method", required=True, help='Credit note base on this type. You can not Modify and Cancel if the invoice is already reconciled'),
}
def _get_journal(self, cr, uid, context=None):
diff --git a/addons/account/wizard/account_invoice_refund_view.xml b/addons/account/wizard/account_invoice_refund_view.xml
index 78a9b085bf1..3945a6f57e6 100644
--- a/addons/account/wizard/account_invoice_refund_view.xml
+++ b/addons/account/wizard/account_invoice_refund_view.xml
@@ -7,19 +7,40 @@
account.invoice.refund
-
-
-
-
-
-
-
+
+
+
+
+
+
+ You will be able to edit and validate this
+ credit note directly or keep it draft,
+ waiting for the document to be issued by
+ your supplier/customer.
+
+
+ Use this option if you want to cancel an invoice you should not
+ have issued. The credit note will be created, validated and reconciled
+ with the invoice. You will not be able to modify the credit note.
+
+
+ Use this option if you want to cancel an invoice and create a new
+ one. The credit note will be created, validated and reconciled
+ with the current invoice. A new, draft, invoice will be created
+ so that you can edit it.
+
+
+
+
+
+
+
+
+
+
-
-
-
@@ -28,7 +49,7 @@
- Refund
+ Refund Invoiceaccount.invoice.refundformtree,form
diff --git a/addons/account/wizard/account_reconcile.py b/addons/account/wizard/account_reconcile.py
index 9fa521c09f7..f3d25b1c8db 100644
--- a/addons/account/wizard/account_reconcile.py
+++ b/addons/account/wizard/account_reconcile.py
@@ -23,6 +23,7 @@ import time
from osv import fields, osv
from tools.translate import _
+import decimal_precision as dp
class account_move_line_reconcile(osv.osv_memory):
"""
@@ -32,9 +33,9 @@ class account_move_line_reconcile(osv.osv_memory):
_description = 'Account move line reconcile'
_columns = {
'trans_nbr': fields.integer('# of Transaction', readonly=True),
- 'credit': fields.float('Credit amount', readonly=True),
- 'debit': fields.float('Debit amount', readonly=True),
- 'writeoff': fields.float('Write-Off amount', readonly=True),
+ 'credit': fields.float('Credit amount', readonly=True, digits_compute=dp.get_precision('Account')),
+ 'debit': fields.float('Debit amount', readonly=True, digits_compute=dp.get_precision('Account')),
+ 'writeoff': fields.float('Write-Off amount', readonly=True, digits_compute=dp.get_precision('Account')),
}
def default_get(self, cr, uid, fields, context=None):
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
index ffbe48f0b19..d56b6ee4760 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
@@ -48,7 +48,7 @@
Contracts to Renewaccount.analytic.accountform
- tree,form,graph
+ tree,form{'search_default_user_id':uid, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1, 'search_default_renew':1}[('type','=','contract')]
@@ -72,7 +72,7 @@
Contractsaccount.analytic.accountform
- tree,form,graph
+ tree,form{'default_type':'contract', 'search_default_open':1, 'search_default_pending':1}[('type','=','contract')]
diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py
index b6828062a85..e6861d0db67 100644
--- a/addons/account_asset/account_asset.py
+++ b/addons/account_asset/account_asset.py
@@ -350,7 +350,7 @@ class account_asset_depreciation_line(osv.osv):
'amount': fields.float('Depreciation Amount', required=True),
'remaining_value': fields.float('Amount to Depreciate', required=True),
'depreciated_value': fields.float('Amount Already Depreciated', required=True),
- 'depreciation_date': fields.char('Depreciation Date', size=64, select=1),
+ 'depreciation_date': fields.date('Depreciation Date', select=1),
'move_id': fields.many2one('account.move', 'Depreciation Entry'),
'move_check': fields.function(_get_move_check, method=True, type='boolean', string='Posted', store=True)
}
@@ -368,7 +368,7 @@ class account_asset_depreciation_line(osv.osv):
for line in self.browse(cr, uid, ids, context=context):
if currency_obj.is_zero(cr, uid, line.asset_id.currency_id, line.remaining_value):
can_close = True
- depreciation_date = line.asset_id.prorata and line.asset_id.purchase_date or time.strftime('%Y-%m-%d')
+ depreciation_date = time.strftime('%Y-%m-%d')
period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_id.currency_id.id
diff --git a/addons/account_asset/account_asset_invoice.py b/addons/account_asset/account_asset_invoice.py
index 700832881c4..4b38834bdc3 100644
--- a/addons/account_asset/account_asset_invoice.py
+++ b/addons/account_asset/account_asset_invoice.py
@@ -57,6 +57,7 @@ class account_invoice_line(osv.osv):
'partner_id': line.invoice_id.partner_id.id,
'company_id': line.invoice_id.company_id.id,
'currency_id': line.invoice_id.currency_id.id,
+ 'purchase_date' : line.invoice_id.date_invoice,
}
changed_vals = asset_obj.onchange_category_id(cr, uid, [], vals['category_id'], context=context)
vals.update(changed_vals['value'])
diff --git a/addons/account_asset/report/account_asset_report.py b/addons/account_asset/report/account_asset_report.py
index 000967a555c..583e5534613 100644
--- a/addons/account_asset/report/account_asset_report.py
+++ b/addons/account_asset/report/account_asset_report.py
@@ -50,7 +50,7 @@ class asset_asset_report(osv.osv):
select
min(dl.id) as id,
dl.name as name,
- to_date(dl.depreciation_date, 'YYYY-MM-DD') as depreciation_date,
+ dl.depreciation_date as depreciation_date,
a.purchase_date as purchase_date,
(CASE WHEN (select min(d.id) from account_asset_depreciation_line as d
left join account_asset_asset as ac ON (ac.id=d.asset_id)
@@ -77,7 +77,7 @@ class asset_asset_report(osv.osv):
from account_asset_depreciation_line dl
left join account_asset_asset a on (dl.asset_id=a.id)
group by
- dl.amount,dl.asset_id,to_date(dl.depreciation_date, 'YYYY-MM-DD'),dl.name,
+ dl.amount,dl.asset_id,dl.depreciation_date,dl.name,
a.purchase_date, dl.move_check, a.state, a.category_id, a.partner_id, a.company_id,
a.purchase_value, a.id, a.salvage_value
)""")
diff --git a/addons/account_bank_statement_extensions/account_bank_statement_view.xml b/addons/account_bank_statement_extensions/account_bank_statement_view.xml
index 30b2778817c..1c076426752 100644
--- a/addons/account_bank_statement_extensions/account_bank_statement_view.xml
+++ b/addons/account_bank_statement_extensions/account_bank_statement_view.xml
@@ -76,7 +76,7 @@
-
+
@@ -100,7 +100,7 @@
-
+
diff --git a/addons/account_coda/i18n/en_AU.po b/addons/account_coda/i18n/en_AU.po
index 05ee43ee631..319220741c5 100644
--- a/addons/account_coda/i18n/en_AU.po
+++ b/addons/account_coda/i18n/en_AU.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-27 04:36+0000\n"
-"X-Generator: Launchpad (build 16033)\n"
+"X-Launchpad-Export-Date: 2012-09-28 04:39+0000\n"
+"X-Generator: Launchpad (build 16043)\n"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_21
diff --git a/addons/account_payment/wizard/account_payment_order.py b/addons/account_payment/wizard/account_payment_order.py
index 713784798fc..455475b0ae5 100644
--- a/addons/account_payment/wizard/account_payment_order.py
+++ b/addons/account_payment/wizard/account_payment_order.py
@@ -88,7 +88,7 @@ class payment_order_create(osv.osv_memory):
'partner_id': line.partner_id and line.partner_id.id or False,
'communication': line.ref or '/',
'date': date_to_pay,
- 'currency': line.invoice and line.invoice.currency_id.id or False,
+ 'currency': (line.invoice and line.invoice.currency_id.id) or line.journal_id.currency.id or line.journal_id.company_id.currency_id.id,
}, context=context)
return {'type': 'ir.actions.act_window_close'}
@@ -120,4 +120,4 @@ class payment_order_create(osv.osv_memory):
payment_order_create()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index c74ca5f833a..30358f701ef 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -32,11 +32,11 @@ class res_company(osv.osv):
_columns = {
'income_currency_exchange_account_id': fields.many2one(
'account.account',
- string="Income Currency Rate",
+ string="Gain Exchange Rate Account",
domain="[('type', '=', 'other')]",),
'expense_currency_exchange_account_id': fields.many2one(
'account.account',
- string="Expense Currency Rate",
+ string="Loss Exchange Rate Account",
domain="[('type', '=', 'other')]",),
}
@@ -782,9 +782,16 @@ class account_voucher(osv.osv):
vals[key].update(res[key])
return vals
+ def button_proforma_voucher(self, cr, uid, ids, context=None):
+ context = context or {}
+ wf_service = netsvc.LocalService("workflow")
+ for vid in ids:
+ wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr)
+ return {'type': 'ir.actions.act_window_close'}
+
def proforma_voucher(self, cr, uid, ids, context=None):
self.action_move_line_create(cr, uid, ids, context=context)
- return {'type': 'ir.actions.act_window_close'}
+ return True
def action_cancel_draft(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
@@ -950,11 +957,11 @@ class account_voucher(osv.osv):
if amount_residual > 0:
account_id = line.voucher_id.company_id.expense_currency_exchange_account_id
if not account_id:
- raise osv.except_osv(_('Warning!'),_("First you have to configure the 'Income Currency Rate' on the company, then create accounting entry for currency rate difference."))
+ raise osv.except_osv(_('Warning!'),_("First you have to configure the 'Expense Currency Rate' on the company, then create accounting entry for currency rate difference."))
else:
account_id = line.voucher_id.company_id.income_currency_exchange_account_id
if not account_id:
- raise osv.except_osv(_('Warning!'),_("First you have to configure the 'Expense Currency Rate' on the company, then create accounting entry for currency rate difference."))
+ raise osv.except_osv(_('Warning!'),_("First you have to configure the 'Income Currency Rate' on the company, then create accounting entry for currency rate difference."))
# Even if the amount_currency is never filled, we need to pass the foreign currency because otherwise
# the receivable/payable account may have a secondary currency, which render this field mandatory
account_currency_id = company_currency <> current_currency and current_currency or False
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index 5e26c366778..697d2affcf0 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -108,6 +108,7 @@
+
diff --git a/addons/account_voucher/invoice.py b/addons/account_voucher/invoice.py
index 14b725cbeca..91ba438756e 100644
--- a/addons/account_voucher/invoice.py
+++ b/addons/account_voucher/invoice.py
@@ -27,11 +27,12 @@ class invoice(osv.osv):
def invoice_pay_customer(self, cr, uid, ids, context=None):
if not ids: return []
+ mod,modid = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_voucher', 'view_vendor_receipt_dialog_form')
inv = self.browse(cr, uid, ids[0], context=context)
return {
'name':_("Pay Invoice"),
'view_mode': 'form',
- 'view_id': False,
+ 'view_id': modid,
'view_type': 'form',
'res_model': 'account.voucher',
'type': 'ir.actions.act_window',
@@ -41,13 +42,13 @@ class invoice(osv.osv):
'context': {
'default_partner_id': inv.partner_id.id,
'default_amount': inv.type in ('out_refund', 'in_refund') and -inv.residual or inv.residual,
- 'default_name':inv.name,
+ 'default_number':inv.name,
'close_after_process': True,
- 'invoice_type':inv.type,
- 'invoice_id':inv.id,
+ 'invoice_type': inv.type,
+ 'invoice_id': inv.id,
'default_type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment',
'type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment'
- }
+ }
}
invoice()
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 65bcdad8a9b..8e86e44942a 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -243,6 +243,7 @@
diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py
index 3dff7c1cb00..332808d8a18 100644
--- a/addons/audittrail/audittrail.py
+++ b/addons/audittrail/audittrail.py
@@ -442,11 +442,13 @@ class audittrail_objects_proxy(object_proxy):
# if at least one modification has been found
for model_id, resource_id in lines:
+ name = pool.get(model.model).name_get(cr, uid, [resource_id])[0][1]
vals = {
'method': method,
'object_id': model_id,
'user_id': uid,
'res_id': resource_id,
+ 'name': name,
}
if (model_id, resource_id) not in old_values and method not in ('copy', 'read'):
# the resource was not existing so we are forcing the method to 'create'
@@ -484,7 +486,7 @@ class audittrail_objects_proxy(object_proxy):
if len(rule['user_id']) == 0 or uid in rule['user_id']:
if rule.get('log_'+method,0):
return True
- elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create'):
+ elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create', 'read_group', 'import_data'):
if rule['log_action']:
return True
diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py
index 47fc41c3645..c2c0ac557bf 100644
--- a/addons/auth_ldap/users_ldap.py
+++ b/addons/auth_ldap/users_ldap.py
@@ -180,8 +180,8 @@ class CompanyLDAP(osv.osv):
"""
user_id = False
- login = tools.ustr(login)
- cr.execute("SELECT id, active FROM res_users WHERE login=%s", (login,))
+ login = tools.ustr(login.lower())
+ cr.execute("SELECT id, active FROM res_users WHERE lower(login)=%s", (login,))
res = cr.fetchone()
if res:
if res[1]:
diff --git a/addons/auth_ldap/users_ldap_view.xml b/addons/auth_ldap/users_ldap_view.xml
index c4fc7cebbbe..47c15badd7c 100644
--- a/addons/auth_ldap/users_ldap_view.xml
+++ b/addons/auth_ldap/users_ldap_view.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index 7555621945d..5b8c41787d4 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -971,8 +971,8 @@ class calendar_event(osv.osv):
event = datas['id']
if datas.get('interval', 0) < 0:
raise osv.except_osv(_('Warning!'), _('Interval cannot be negative.'))
- if datas.get('count', 0) < 0:
- raise osv.except_osv(_('Warning!'), _('Count cannot be negative.'))
+ if datas.get('count', 0) <= 0:
+ raise osv.except_osv(_('Warning!'), _('Count cannot be negative or 0.'))
if datas['recurrency']:
result[event] = self.compute_rule_string(datas)
else:
@@ -1113,6 +1113,16 @@ rule or repeating pattern of time to exclude from the recurring rule."),
'user_id': lambda self, cr, uid, ctx: uid,
'organizer': default_organizer,
}
+
+ def _check_closing_date(self, cr, uid, ids, context=None):
+ for event in self.browse(cr, uid, ids, context=context):
+ if event.date_deadline < event.date:
+ return False
+ return True
+
+ _constraints = [
+ (_check_closing_date, 'Error ! End date cannot be set before start date.', ['date_deadline']),
+ ]
def get_recurrent_ids(self, cr, uid, select, domain, limit=100, context=None):
"""Gives virtual event ids for recurring events based on value of Recurrence Rule
diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml
index 2da18447820..8373d32ab0d 100644
--- a/addons/base_calendar/crm_meeting_view.xml
+++ b/addons/base_calendar/crm_meeting_view.xml
@@ -182,13 +182,14 @@
+ type="object" icon="gtk-apply"/>
+ type="object" icon="gtk-cancel"/>
@@ -222,6 +223,7 @@
+
diff --git a/addons/base_iban/i18n/nl_BE.po b/addons/base_iban/i18n/nl_BE.po
index 51fb108b6b8..a7b7b057e56 100644
--- a/addons/base_iban/i18n/nl_BE.po
+++ b/addons/base_iban/i18n/nl_BE.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2009-04-20 10:04+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2012-10-01 11:08+0000\n"
+"Last-Translator: Els Van Vossel (Agaplan) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 05:58+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-02 05:20+0000\n"
+"X-Generator: Launchpad (build 16061)\n"
#. module: base_iban
#: constraint:res.partner.bank:0
@@ -23,22 +23,27 @@ msgid ""
"Please define BIC/Swift code on bank for bank type IBAN Account to make "
"valid payments"
msgstr ""
+"\n"
+"Definieer een BIC/Swift-code voor IBAN-rekeningen om geldige betalingen te "
+"maken."
#. module: base_iban
#: code:addons/base_iban/base_iban.py:139
#, python-format
msgid "This IBAN does not pass the validation check, please verify it"
msgstr ""
+"Dit IBAN-nummer voldoet niet aan de controle. Gelieve het nummer na te "
+"kijken."
#. module: base_iban
#: model:res.partner.bank.type,format_layout:base_iban.bank_iban
msgid "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
-msgstr ""
+msgstr "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
msgid "bank_bic"
-msgstr ""
+msgstr "bank_bic"
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
@@ -67,6 +72,8 @@ msgid ""
"The IBAN does not seem to be correct. You should have entered something like "
"this %s"
msgstr ""
+"Dit IBAN-nummer lijkt niet juist te zijn. U dient een nummer in te geven in "
+"dit formaat %s."
#. module: base_iban
#: field:res.partner.bank,iban:0
@@ -77,7 +84,7 @@ msgstr "IBAN"
#: code:addons/base_iban/base_iban.py:140
#, python-format
msgid "The IBAN is invalid, it should begin with the country code"
-msgstr ""
+msgstr "Dit IBAN-nummer is ongeldig; het moet beginnen met de landcode."
#. module: base_iban
#: model:res.partner.bank.type,name:base_iban.bank_iban
@@ -87,7 +94,7 @@ msgstr "IBAN-rekening"
#. module: base_iban
#: constraint:res.partner.bank:0
msgid "The RIB and/or IBAN is not valid"
-msgstr ""
+msgstr "RIB en/of IBAN is niet geldig."
#, python-format
#~ msgid "The IBAN is invalid, It should begin with the country code"
diff --git a/addons/base_setup/i18n/nl_BE.po b/addons/base_setup/i18n/nl_BE.po
index 1662fc1a1dc..ba30f4dd262 100644
--- a/addons/base_setup/i18n/nl_BE.po
+++ b/addons/base_setup/i18n/nl_BE.po
@@ -7,44 +7,44 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2009-04-24 15:11+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2012-10-01 11:22+0000\n"
+"Last-Translator: Els Van Vossel (Agaplan) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:08+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-02 05:20+0000\n"
+"X-Generator: Launchpad (build 16061)\n"
#. module: base_setup
#: field:user.preferences.config,menu_tips:0
msgid "Display Tips"
-msgstr ""
+msgstr "Tips weergeven"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Guest"
-msgstr ""
+msgstr "Gast"
#. module: base_setup
#: model:ir.model,name:base_setup.model_product_installer
msgid "product.installer"
-msgstr ""
+msgstr "product.installer"
#. module: base_setup
#: selection:product.installer,customers:0
msgid "Create"
-msgstr ""
+msgstr "Maken"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Member"
-msgstr ""
+msgstr "Lid"
#. module: base_setup
#: field:migrade.application.installer.modules,sync_google_contact:0
msgid "Sync Google Contact"
-msgstr ""
+msgstr "Google-contacten synchroniseren"
#. module: base_setup
#: help:user.preferences.config,context_tz:0
@@ -52,21 +52,23 @@ msgid ""
"Set default for new user's timezone, used to perform timezone conversions "
"between the server and the client."
msgstr ""
+"Stel de standaardtijdzone in voor nieuwe gebruikers. Deze wordt gebruikt om "
+"tijdzoneconversies te doen tussen server en client."
#. module: base_setup
#: selection:product.installer,customers:0
msgid "Import"
-msgstr ""
+msgstr "Importeren"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Donor"
-msgstr ""
+msgstr "Donor"
#. module: base_setup
#: model:ir.actions.act_window,name:base_setup.action_base_setup_company
msgid "Set Company Header and Footer"
-msgstr ""
+msgstr "Stel uw kop- en voettekst in"
#. module: base_setup
#: model:ir.actions.act_window,help:base_setup.action_base_setup_company
@@ -75,21 +77,24 @@ msgid ""
"printed on your reports. You can click on the button 'Preview Header' in "
"order to check the header/footer of PDF documents."
msgstr ""
+"Vul uw bedrijfsgegevens in (adres, logo, bankrekeningen), zodat deze worden "
+"afgedrukt op uw rapporten. U kunt op de knop 'Voorbeeld koptekst' klikken om "
+"de koptekst en voettekst van pdf-documenten te controleren."
#. module: base_setup
#: field:product.installer,customers:0
msgid "Customers"
-msgstr ""
+msgstr "Klanten"
#. module: base_setup
#: selection:user.preferences.config,view:0
msgid "Extended"
-msgstr ""
+msgstr "Uitgebreid"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Patient"
-msgstr ""
+msgstr "Patiënt"
#. module: base_setup
#: model:ir.actions.act_window,help:base_setup.action_import_create_installer
@@ -98,26 +103,29 @@ msgid ""
"you can import your existing partners by CSV spreadsheet from \"Import "
"Data\" wizard"
msgstr ""
+"Maak of importeer klanten en contactpersonen manueel vanuit dit scherm. U "
+"kunt ook bestaande klanten importeren vanuit een csv-bestand met de wizard "
+"\"Gegevens importeren\"."
#. module: base_setup
#: view:user.preferences.config:0
msgid "Define Users's Preferences"
-msgstr ""
+msgstr "Stel de gebruikersvoorkeuren in"
#. module: base_setup
#: model:ir.actions.act_window,name:base_setup.action_user_preferences_config_form
msgid "Define default users preferences"
-msgstr ""
+msgstr "Stel de standaard gebruikersvoorkeuren in"
#. module: base_setup
#: help:migrade.application.installer.modules,import_saleforce:0
msgid "For Import Saleforce"
-msgstr ""
+msgstr "Voor Salesforce-import"
#. module: base_setup
#: help:migrade.application.installer.modules,quickbooks_ippids:0
msgid "For Quickbooks Ippids"
-msgstr ""
+msgstr "Voor Quickboos Ippids"
#. module: base_setup
#: help:user.preferences.config,view:0
@@ -126,6 +134,9 @@ msgid ""
"simplified interface, which has less features but is easier. You can always "
"switch later from the user preferences."
msgstr ""
+"Als u OpenERP voor de eerste keer gebruikt, raden wij u aan de eenvoudige "
+"weergave te kiezen, met minder functies en een eenvoudige werking. U kunt "
+"deze keuze altijd wijzigen via de gebruikersvoorkeuren."
#. module: base_setup
#: view:base.setup.terminology:0
@@ -136,12 +147,12 @@ msgstr "res_config_contents"
#. module: base_setup
#: field:user.preferences.config,view:0
msgid "Interface"
-msgstr ""
+msgstr "Interface"
#. module: base_setup
#: model:ir.model,name:base_setup.model_migrade_application_installer_modules
msgid "migrade.application.installer.modules"
-msgstr ""
+msgstr "migrade.application.installer.modules"
#. module: base_setup
#: view:base.setup.terminology:0
@@ -149,21 +160,23 @@ msgid ""
"You can use this wizard to change the terminologies for customers in the "
"whole application."
msgstr ""
+"Met deze wizard kunt u een andere benaming kiezen voor klanten, die in de "
+"volledige toepassing zal worden gebruikt."
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Tenant"
-msgstr ""
+msgstr "Huurder"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Customer"
-msgstr ""
+msgstr "Klant"
#. module: base_setup
#: field:user.preferences.config,context_lang:0
msgid "Language"
-msgstr ""
+msgstr "Taal"
#. module: base_setup
#: help:user.preferences.config,context_lang:0
@@ -172,6 +185,9 @@ msgid ""
"available. If you want to Add new Language, you can add it from 'Load an "
"Official Translation' wizard from 'Administration' menu."
msgstr ""
+"Kiest de standaardtaal voor de gebruik, als er vertalingen beschikbaar zijn. "
+"Een Nieuwe taal instellen kan via het menu Beheer, Laad een officiële "
+"vertaling."
#. module: base_setup
#: view:user.preferences.config:0
@@ -180,47 +196,50 @@ msgid ""
"ones. Afterwards, users are free to change those values on their own user "
"preference form."
msgstr ""
+"Hiermee wijst u de standaardinstellingen toe aan nieuwe en bestaande "
+"gebruikers. Een gebruiker kan deze waarden altijd wijzigen via zijn "
+"voorkeuren."
#. module: base_setup
#: field:base.setup.terminology,partner:0
msgid "How do you call a Customer"
-msgstr ""
+msgstr "Hoe wordt een klant bij u genoemd?"
#. module: base_setup
#: field:migrade.application.installer.modules,quickbooks_ippids:0
msgid "Quickbooks Ippids"
-msgstr ""
+msgstr "Quickbooks Ippids"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Client"
-msgstr ""
+msgstr "Cliënt"
#. module: base_setup
#: field:migrade.application.installer.modules,import_saleforce:0
msgid "Import Saleforce"
-msgstr ""
+msgstr "Salesforce-import"
#. module: base_setup
#: field:user.preferences.config,context_tz:0
msgid "Timezone"
-msgstr ""
+msgstr "Tijdzone"
#. module: base_setup
#: model:ir.actions.act_window,name:base_setup.action_partner_terminology_config_form
msgid "Use another word to say \"Customer\""
-msgstr ""
+msgstr "Gebruik een andere benaming voor Klant"
#. module: base_setup
#: model:ir.model,name:base_setup.model_base_setup_terminology
msgid "base.setup.terminology"
-msgstr ""
+msgstr "base.setup.terminology"
#. module: base_setup
#: help:user.preferences.config,menu_tips:0
msgid ""
"Check out this box if you want to always display tips on each menu action"
-msgstr ""
+msgstr "Schakel dit vakje in als u voor elke menuactie tips wilt weergaven."
#. module: base_setup
#: field:base.setup.terminology,config_logo:0
@@ -233,52 +252,52 @@ msgstr "Afbeelding"
#. module: base_setup
#: model:ir.model,name:base_setup.model_user_preferences_config
msgid "user.preferences.config"
-msgstr ""
+msgstr "user.preferences.config"
#. module: base_setup
#: model:ir.actions.act_window,name:base_setup.action_config_access_other_user
msgid "Create Additional Users"
-msgstr ""
+msgstr "Extra gebruikers maken"
#. module: base_setup
#: model:ir.actions.act_window,name:base_setup.action_import_create_installer
msgid "Create or Import Customers"
-msgstr ""
+msgstr "Klanten maken of importeren"
#. module: base_setup
#: field:migrade.application.installer.modules,import_sugarcrm:0
msgid "Import Sugarcrm"
-msgstr ""
+msgstr "SugarCRM-import"
#. module: base_setup
#: help:product.installer,customers:0
msgid "Import or create customers"
-msgstr ""
+msgstr "Klanten maken of importeren"
#. module: base_setup
#: selection:user.preferences.config,view:0
msgid "Simplified"
-msgstr ""
+msgstr "Eenvoudig"
#. module: base_setup
#: help:migrade.application.installer.modules,import_sugarcrm:0
msgid "For Import Sugarcrm"
-msgstr ""
+msgstr "Voor SugarCRM-import"
#. module: base_setup
#: selection:base.setup.terminology,partner:0
msgid "Partner"
-msgstr ""
+msgstr "Relatie"
#. module: base_setup
#: view:base.setup.terminology:0
msgid "Specify Your Terminology"
-msgstr ""
+msgstr "Kies uw terminologie"
#. module: base_setup
#: help:migrade.application.installer.modules,sync_google_contact:0
msgid "For Sync Google Contact"
-msgstr ""
+msgstr "Voor synchronisatie met Google-contacten"
#~ msgid "Logo"
#~ msgstr "Logo"
diff --git a/addons/base_vat/i18n/nl_BE.po b/addons/base_vat/i18n/nl_BE.po
index f468f96cd38..9d68fcb0f78 100644
--- a/addons/base_vat/i18n/nl_BE.po
+++ b/addons/base_vat/i18n/nl_BE.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2009-04-24 15:11+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2012-10-01 11:23+0000\n"
+"Last-Translator: Els Van Vossel (Agaplan) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:07+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-02 05:20+0000\n"
+"X-Generator: Launchpad (build 16061)\n"
#. module: base_vat
#: code:addons/base_vat/base_vat.py:141
@@ -34,7 +34,7 @@ msgstr "De naam van de firma moet uniek zijn"
#. module: base_vat
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
-msgstr ""
+msgstr "U kunt niet dezelfde verenigingsleden maken."
#. module: base_vat
#: field:res.company,vat_check_vies:0
diff --git a/addons/claim_from_delivery/i18n/nl_BE.po b/addons/claim_from_delivery/i18n/nl_BE.po
new file mode 100644
index 00000000000..51f4f9c276c
--- /dev/null
+++ b/addons/claim_from_delivery/i18n/nl_BE.po
@@ -0,0 +1,23 @@
+# Dutch (Belgium) translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-10-01 11:24+0000\n"
+"Last-Translator: Els Van Vossel (Agaplan) \n"
+"Language-Team: Dutch (Belgium) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-02 05:20+0000\n"
+"X-Generator: Launchpad (build 16061)\n"
+
+#. module: claim_from_delivery
+#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
+msgid "Claim"
+msgstr "Klacht"
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index 2a7996655a2..dd36aa19041 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -36,7 +36,7 @@ It manages key tasks such as communication, identification, prioritization, assi
OpenERP ensures that all cases are successfully tracked by users, customers and suppliers. It can automatically send reminders, escalate the request, trigger specific methods and many other actions based on your own enterprise rules.
-The greatest thing about this system is that users don't need to do anything special. The CRM module has an email gateway for the synchronization interface between mails and OpenERP. That way, users can just send emails to the request tracker.
+The greatest thing about this system is that users don't need to do anything special. The CRM module has an email gateway for the synchronization interface between mails and OpenERP. That way, users can just send emails to the request tracker.
OpenERP will take care of thanking them for their message, automatically routing it to the appropriate staff and make sure all future correspondence gets to the right place.
@@ -99,7 +99,7 @@ Dashboard for CRM will include:
'res_partner_view.xml',
'board_crm_view.xml',
-
+
'res_config_view.xml',
],
@@ -115,9 +115,10 @@ Dashboard for CRM will include:
'test/process/cancel_lead.yml',
'test/process/action_rule.yml',
'test/process/segmentation.yml',
+ 'test/process/phonecalls.yml',
'test/ui/crm_demo.yml',
'test/ui/duplicate_lead.yml',
- 'test/ui/delete_lead.yml'
+ 'test/ui/delete_lead.yml',
],
'installable': True,
'application': True,
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 330bbb1fc9b..cca195a1539 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -102,6 +102,7 @@ class crm_case_section(osv.osv):
""" Model for sales teams. """
_name = "crm.case.section"
_inherits = {'mail.alias': 'alias_id'}
+ _inherit = "mail.thread"
_description = "Sales Teams"
_order = "complete_name"
diff --git a/addons/crm/crm_demo.xml b/addons/crm/crm_demo.xml
index 551e4e93fb8..dde3e63cc4a 100644
--- a/addons/crm/crm_demo.xml
+++ b/addons/crm/crm_demo.xml
@@ -1,46 +1,47 @@
-
+
+
-
+
-
- Meetings
- ir.ui.menu
-
-
-
+
+ Meetings
+ ir.ui.menu
+
+
+
-
+ Sales Marketing DepartmentSMD
-
-
+
+
-
+ Support DepartmentSPD
-
-
+
+
-
+ Direct MarketingDM
-
-
+
+
-
+ Online SupportOS
-
-
+
+
-
- OpenERP partners
- True
-
-
+
+ OpenERP partners
+ True
+
+
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index d8b7fb58e49..d668ea710c1 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -277,6 +277,10 @@ class crm_lead(base_stage, format_address, osv.osv):
def create(self, cr, uid, vals, context=None):
obj_id = super(crm_lead, self).create(cr, uid, vals, context)
+ section_id = self.browse(cr, uid, obj_id, context=context).section_id
+ if section_id:
+ followers = [follow.id for follow in section_id.message_follower_ids]
+ self.message_subscribe(cr, uid, [obj_id], followers, context=context)
self.create_send_note(cr, uid, [obj_id], context=context)
return obj_id
@@ -294,7 +298,7 @@ class crm_lead(base_stage, format_address, osv.osv):
if partner_id:
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
values = {
- 'partner_name' : partner.name,
+ 'partner_name' : partner.name,
'street' : partner.street,
'street2' : partner.street2,
'city' : partner.city,
@@ -491,7 +495,8 @@ class crm_lead(base_stage, format_address, osv.osv):
title = "%s : %s" % (merge_message, opportunity.name)
details.append(self._mail_body(cr, uid, opportunity, fields, title=title, context=context))
- subject = subject[0] + ", ".join(subject[1:])
+ # Chatter message's subject
+ subject = subject[0] + ": " + ", ".join(subject[1:])
details = "\n\n".join(details)
return self.message_post(cr, uid, [opportunity_id], body=details, subject=subject, context=context)
@@ -560,19 +565,18 @@ class crm_lead(base_stage, format_address, osv.osv):
data = self._merge_data(cr, uid, ids, oldest, fields, context=context)
- # merge data into first opportunity
- self.write(cr, uid, [first_opportunity.id], data, context=context)
-
- #copy message and attachements into the first opportunity
+ # Merge messages and attachements into the first opportunity
self._merge_opportunity_history(cr, uid, first_opportunity.id, tail_opportunities, context=context)
self._merge_opportunity_attachments(cr, uid, first_opportunity.id, tail_opportunities, context=context)
- #Notification about loss of information
+ # Merge notifications about loss of information
self._merge_notification(cr, uid, first_opportunity, opportunities, context=context)
- #delete tail opportunities
+ # Write merged data into first opportunity
+ self.write(cr, uid, [first_opportunity.id], data, context=context)
+ # Delete tail opportunities
self.unlink(cr, uid, [x.id for x in tail_opportunities], context=context)
- #open first opportunity
+ # Open first opportunity
self.case_open(cr, uid, [first_opportunity.id])
return first_opportunity.id
@@ -581,13 +585,16 @@ class crm_lead(base_stage, format_address, osv.osv):
contact_id = False
if customer:
contact_id = self.pool.get('res.partner').address_get(cr, uid, [customer.id])['default']
+
if not section_id:
section_id = lead.section_id and lead.section_id.id or False
+
if section_id:
stage_ids = crm_stage.search(cr, uid, [('sequence','>=',1), ('section_ids','=', section_id)])
else:
stage_ids = crm_stage.search(cr, uid, [('sequence','>=',1)])
stage_id = stage_ids and stage_ids[0] or False
+
return {
'planned_revenue': lead.planned_revenue,
'probability': lead.probability,
@@ -604,7 +611,6 @@ class crm_lead(base_stage, format_address, osv.osv):
def convert_opportunity(self, cr, uid, ids, partner_id, user_ids=False, section_id=False, context=None):
partner = self.pool.get('res.partner')
- mail_message = self.pool.get('mail.message')
customer = False
if partner_id:
customer = partner.browse(cr, uid, partner_id, context=context)
@@ -790,7 +796,12 @@ class crm_lead(base_stage, format_address, osv.osv):
stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
if stage.on_change:
vals['probability'] = stage.probability
- return super(crm_lead,self).write(cr, uid, ids, vals, context)
+ if vals.get('section_id'):
+ section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context)
+ if section_id:
+ vals.setdefault('message_follower_ids', [])
+ vals['message_follower_ids'] += [(4, follower.id) for follower in section_id.message_follower_ids]
+ return super(crm_lead,self).write(cr, uid, ids, vals, context)
# ----------------------------------------
# Mail Gateway
diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml
index b3c00256b06..7849125282e 100644
--- a/addons/crm/crm_lead_demo.xml
+++ b/addons/crm/crm_lead_demo.xml
@@ -1,10 +1,8 @@
-
+
leadPlan to Attend a Training
@@ -26,9 +24,9 @@
Hello,
-I am Jason from Le Club SARL,
-I am intertested to attend Training organized in your company,
-Can you send details,
+I am Jason from Le Club SARL.
+I am intertested to attend a training organized in your company.
+Can you send me the details ?
@@ -110,7 +108,8 @@ Can you send details,
- Hi, Can you send a quotation for 20 Computers with speakers?
+ Hi,
+Can you send me a quotation for 20 computers with speakers?
Regards,
Carrie Helle,
Purchase Manager
@@ -215,8 +214,9 @@ Contact: +1 813 494 5005
- hi,
-I want to know specification and cost of laptops of your company.
+ Hi,
+I would like to know more about specification and cost of laptops of your company.
+
Thanks,
Andrew
@@ -260,25 +260,20 @@ Andrew
-
-
+
-
+
+
-
-
-
-
+
opportunityPlan to buy 60 keyboards and mouses
@@ -563,9 +558,9 @@ AndrewDear Customer,
Thanks for showing interest in our products.
We have attached the catalogue,
-We would like to know your interests, Let us know if we can call you for more details.
+We would like to know your interests, so let us know when we can call you for more details.
-Thanks
+Regards
@@ -600,9 +595,9 @@ Thanks
crm.leadHello,
-I am Jason from Le Club SARL,
-I am intertested to attend Training organized in your company,
-Can you send details,
+I am Jason from Le Club SARL.
+I am intertested to attend a training organized in your company.
+Can you send me the details ?
email
@@ -613,7 +608,7 @@ Can you send details,
comment
-
+
Click to create an unqualified lead.
- A lead is usually the first step in your sales cycle. It can be
- a contact with a new prospect, a company you target, a contact form
- filled in your website, etc.
+ Use leads if you need a qualification step before creating an
+ opportunity or a customer. It can be a business card you received,
+ a contact form filled in your website, or a file of unqualified
+ prospects you import, etc.
Once qualified, the lead can be converted into a business
- opportunity and a new customer in your address book.
+ opportunity and/or a new customer in your address book.