[MERGE] Rename the categories (__openerp__.py) of the modules
bzr revid: stw@openerp.com-20110929121512-bl21yfzmdieeq9si
This commit is contained in:
commit
bfc823812d
|
@ -22,7 +22,7 @@
|
|||
"name" : "Accounting and Financial Management",
|
||||
"version" : "1.1",
|
||||
"author" : "OpenERP SA",
|
||||
"category": 'Finance',
|
||||
"category": 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
"description": """
|
||||
Accounting and Financial Management.
|
||||
|
|
|
@ -722,8 +722,6 @@ class account_journal(osv.osv):
|
|||
name = rs.name
|
||||
if rs.currency:
|
||||
name = "%s (%s)" % (rs.name, rs.currency.name)
|
||||
else:
|
||||
name = "%s (%s)" % (rs.name, rs.company_id.currency_id.name)
|
||||
res += [(rs.id, name)]
|
||||
return res
|
||||
|
||||
|
@ -932,17 +930,10 @@ class account_period(osv.osv):
|
|||
return False
|
||||
|
||||
def find(self, cr, uid, dt=None, context=None):
|
||||
if context is None: context = {}
|
||||
if not dt:
|
||||
dt = time.strftime('%Y-%m-%d')
|
||||
#CHECKME: shouldn't we check the state of the period?
|
||||
args = [('date_start', '<=' ,dt), ('date_stop', '>=', dt)]
|
||||
if context.get('company_id', False):
|
||||
args.append(('company_id', '=', context['company_id']))
|
||||
else:
|
||||
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
||||
args.append(('company_id', '=', company_id))
|
||||
ids = self.search(cr, uid, args, context=context)
|
||||
ids = self.search(cr, uid, [('date_start','<=',dt),('date_stop','>=',dt)])
|
||||
if not ids:
|
||||
raise osv.except_osv(_('Error !'), _('No period defined for this date: %s !\nPlease create one.')%dt)
|
||||
return ids
|
||||
|
@ -1265,7 +1256,7 @@ class account_move(osv.osv):
|
|||
context = {}
|
||||
c = context.copy()
|
||||
c['novalidate'] = True
|
||||
result = super(osv.osv, self).write(cr, uid, ids, vals, c)
|
||||
result = super(account_move, self).write(cr, uid, ids, vals, c)
|
||||
self.validate(cr, uid, ids, context=context)
|
||||
return result
|
||||
|
||||
|
|
|
@ -234,7 +234,6 @@
|
|||
<field name="payment_ids" colspan="4" nolabel="1" >
|
||||
<tree string="Payments">
|
||||
<field name="date" string="Payment Date"/>
|
||||
<field name="move_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="name" groups="base.group_extended"/>
|
||||
<field name="journal_id"/>
|
||||
|
@ -333,7 +332,6 @@
|
|||
<field name="payment_ids" colspan="4" nolabel="1">
|
||||
<tree string="Payments">
|
||||
<field name="date"/>
|
||||
<field name="move_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id" groups="base.group_user"/>
|
||||
|
|
|
@ -718,7 +718,7 @@ class account_move_line(osv.osv):
|
|||
)
|
||||
return cr.fetchone()
|
||||
|
||||
def reconcile_partial(self, cr, uid, ids, type='auto', context=None):
|
||||
def reconcile_partial(self, cr, uid, ids, type='auto', context=None, writeoff_acc_id=False, writeoff_period_id=False, writeoff_journal_id=False):
|
||||
move_rec_obj = self.pool.get('account.move.reconcile')
|
||||
merges = []
|
||||
unmerge = []
|
||||
|
@ -747,7 +747,7 @@ class account_move_line(osv.osv):
|
|||
unmerge.append(line.id)
|
||||
total += (line.debit or 0.0) - (line.credit or 0.0)
|
||||
if self.pool.get('res.currency').is_zero(cr, uid, company_currency_id, total):
|
||||
res = self.reconcile(cr, uid, merges+unmerge, context=context)
|
||||
res = self.reconcile(cr, uid, merges+unmerge, context=context, writeoff_acc_id=writeoff_acc_id, writeoff_period_id=writeoff_period_id, writeoff_journal_id=writeoff_journal_id)
|
||||
return res
|
||||
r_id = move_rec_obj.create(cr, uid, {
|
||||
'type': type,
|
||||
|
@ -812,7 +812,7 @@ class account_move_line(osv.osv):
|
|||
if (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
|
||||
(account.currency_id and (not currency_obj.is_zero(cr, uid, account.currency_id, currency))):
|
||||
if not writeoff_acc_id:
|
||||
raise osv.except_osv(_('Warning'), _('You have to provide an account for the write off entry !'))
|
||||
raise osv.except_osv(_('Warning'), _('You have to provide an account for the write off/exchange difference entry !'))
|
||||
if writeoff > 0:
|
||||
debit = writeoff
|
||||
credit = 0.0
|
||||
|
@ -1249,7 +1249,7 @@ class account_move_line(osv.osv):
|
|||
break
|
||||
# Automatically convert in the account's secondary currency if there is one and
|
||||
# the provided values were not already multi-currency
|
||||
if account.currency_id and 'amount_currency' not in vals and account.currency_id.id != account.company_id.currency_id.id:
|
||||
if account.currency_id and not vals.get('ammount_currency') and account.currency_id.id != account.company_id.currency_id.id:
|
||||
vals['currency_id'] = account.currency_id.id
|
||||
ctx = {}
|
||||
if 'date' in vals:
|
||||
|
@ -1273,7 +1273,7 @@ class account_move_line(osv.osv):
|
|||
'user_id': uid
|
||||
})]
|
||||
|
||||
result = super(osv.osv, self).create(cr, uid, vals, context=context)
|
||||
result = super(account_move_line, self).create(cr, uid, vals, context=context)
|
||||
# CREATE Taxes
|
||||
if vals.get('account_tax_id', False):
|
||||
tax_id = tax_obj.browse(cr, uid, vals['account_tax_id'])
|
||||
|
|
|
@ -32,7 +32,7 @@ class res_company(osv.osv):
|
|||
string="Reserve and Profit/Loss Account",
|
||||
view_load=True,
|
||||
domain="[('type', '=', 'other')]",
|
||||
help="This Account is used for transferring Profit/Loss(If It is Profit: Amount will be added, Loss : Amount will be deducted.), Which is calculated from Profit & Loss Report"),
|
||||
help="This account is used for transferring Profit/Loss (If It is Profit: Amount will be added, Loss : Amount will be deducted.), as calculated in Profit & Loss Report"),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
<record model="account.account.type" id="conf_account_type_equity">
|
||||
<field name="name">Equity</field>
|
||||
<field name="code">equity</field>
|
||||
<field name="report_type">asset</field>
|
||||
<field name="report_type">liability</field>
|
||||
<field name="close_method">balance</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
<record id="account_type_cash_equity" model="account.account.type">
|
||||
<field name="name">Equity</field>
|
||||
<field name="code">equity</field>
|
||||
<field name="report_type">asset</field>
|
||||
<field name="report_type">liability</field>
|
||||
<field name="close_method">balance</field>
|
||||
</record>
|
||||
<record id="account_type_cash_moves" model="account.account.type">
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2010-12-11 23:34+0000\n"
|
||||
"Last-Translator: BlueT - Matthew Lien - 練喆明 <bluet@ubuntu-tw.org>\n"
|
||||
"PO-Revision-Date: 2011-09-27 10:01+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\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: 2011-09-17 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 13955)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
|
@ -48,7 +48,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.installer.modules,account_voucher:0
|
||||
msgid "Voucher Management"
|
||||
msgstr ""
|
||||
msgstr "換票券管理"
|
||||
|
||||
#. module: account
|
||||
#: view:account.account:0
|
||||
|
@ -3550,7 +3550,7 @@ msgstr ""
|
|||
#: view:product.template:0
|
||||
#: view:res.partner:0
|
||||
msgid "Accounting"
|
||||
msgstr "账号"
|
||||
msgstr "會計"
|
||||
|
||||
#. module: account
|
||||
#: help:account.central.journal,amount_currency:0
|
||||
|
@ -6779,7 +6779,7 @@ msgstr ""
|
|||
#: field:account.invoice.tax,invoice_id:0
|
||||
#: model:ir.model,name:account.model_account_invoice_line
|
||||
msgid "Invoice Line"
|
||||
msgstr "发票行"
|
||||
msgstr "發票明細"
|
||||
|
||||
#. module: account
|
||||
#: field:account.balance.report,display_account:0
|
||||
|
@ -6788,7 +6788,7 @@ msgstr "发票行"
|
|||
#: field:account.pl.report,display_account:0
|
||||
#: field:account.report.general.ledger,display_account:0
|
||||
msgid "Display accounts"
|
||||
msgstr ""
|
||||
msgstr "顯示帳號"
|
||||
|
||||
#. module: account
|
||||
#: field:account.account.type,sign:0
|
||||
|
@ -9305,7 +9305,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.invoice,invoice_line:0
|
||||
msgid "Invoice Lines"
|
||||
msgstr "发票行"
|
||||
msgstr "發票明細"
|
||||
|
||||
#. module: account
|
||||
#: constraint:account.account.template:0
|
||||
|
|
|
@ -65,21 +65,6 @@ class account_installer(osv.osv_memory):
|
|||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
return user.company_id and user.company_id.id or False
|
||||
|
||||
def _get_default_charts(self, cr, uid, context=None):
|
||||
module_name = False
|
||||
company_id = self._default_company(cr, uid, context=context)
|
||||
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
|
||||
address_id = self.pool.get('res.partner').address_get(cr, uid, [company.partner_id.id])
|
||||
if address_id['default']:
|
||||
address = self.pool.get('res.partner.address').browse(cr, uid, address_id['default'], context=context)
|
||||
code = address.country_id.code
|
||||
module_name = (code and 'l10n_' + code.lower()) or False
|
||||
if module_name:
|
||||
module_id = self.pool.get('ir.module.module').search(cr, uid, [('name', '=', module_name)], context=context)
|
||||
if module_id:
|
||||
return module_name
|
||||
return 'configurable'
|
||||
|
||||
_defaults = {
|
||||
'date_start': lambda *a: time.strftime('%Y-01-01'),
|
||||
'date_stop': lambda *a: time.strftime('%Y-12-31'),
|
||||
|
@ -87,7 +72,7 @@ class account_installer(osv.osv_memory):
|
|||
'sale_tax': 0.0,
|
||||
'purchase_tax': 0.0,
|
||||
'company_id': _default_company,
|
||||
'charts': _get_default_charts
|
||||
'charts': 'configurable'
|
||||
}
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
|
|
|
@ -209,7 +209,7 @@ class account_invoice(osv.osv):
|
|||
\n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \
|
||||
\n* The \'Paid\' state is set automatically when invoice is paid.\
|
||||
\n* The \'Cancelled\' state is used when user cancel invoice.'),
|
||||
'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"),
|
||||
'date_invoice': fields.date('Invoice Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True, help="Keep empty to use the current date"),
|
||||
'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True,
|
||||
help="If you use payment terms, the due date will be computed automatically at the generation "\
|
||||
"of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."),
|
||||
|
|
|
@ -29,7 +29,7 @@ class account_analytic_cost_ledger_journal_report(osv.osv_memory):
|
|||
_columns = {
|
||||
'date1': fields.date('Start of period', required=True),
|
||||
'date2': fields.date('End of period', required=True),
|
||||
'journal': fields.many2many('account.analytic.journal', 'ledger_journal_rel', 'ledger_id', 'Journal_id', 'Journals'),
|
||||
'journal': fields.many2many('account.analytic.journal', 'ledger_journal_rel', 'ledger_id', 'journal_id', 'Journals'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
!python {model: account.account}: |
|
||||
ctx={}
|
||||
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
|
||||
data_dict = {'chart_account_id':ref('account.chart0'),'display_type': False}
|
||||
data_dict = {'chart_account_id':ref('account.chart0'),'display_type': False,'target_move': 'all'}
|
||||
from tools import test_reports
|
||||
test_reports.try_report_action(cr, uid, 'action_account_pl_report',wiz_data=data_dict, context=ctx, our_module='account')
|
||||
-
|
||||
|
@ -156,7 +156,7 @@
|
|||
!python {model: account.account}: |
|
||||
ctx={}
|
||||
ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
|
||||
data_dict = {'chart_account_id':ref('account.chart0'),'display_type': True}
|
||||
data_dict = {'chart_account_id':ref('account.chart0'),'display_type': True,'target_move': 'all'}
|
||||
from tools import test_reports
|
||||
test_reports.try_report_action(cr, uid, 'action_account_pl_report',wiz_data=data_dict, context=ctx, our_module='account')
|
||||
-
|
||||
|
|
|
@ -19,13 +19,17 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv
|
||||
from osv import osv, fields
|
||||
|
||||
class account_balance_report(osv.osv_memory):
|
||||
_inherit = "account.common.account.report"
|
||||
_name = 'account.balance.report'
|
||||
_description = 'Trial Balance Report'
|
||||
|
||||
_columns = {
|
||||
'journal_ids': fields.many2many('account.journal', 'account_balance_report_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'journal_ids': [],
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ class account_aged_trial_balance(osv.osv_memory):
|
|||
'direction_selection': fields.selection([('past','Past'),
|
||||
('future','Future')],
|
||||
'Analysis Direction', required=True),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_aged_trial_balance_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'period_length': 30,
|
||||
|
|
|
@ -40,11 +40,9 @@ class account_bs_report(osv.osv_memory):
|
|||
_columns = {
|
||||
'display_type': fields.boolean("Landscape Mode"),
|
||||
'reserve_account_id': fields.many2one('account.account', 'Reserve & Profit/Loss Account',
|
||||
required=True,
|
||||
help='This Account is used for transfering Profit/Loss ' \
|
||||
'(Profit: Amount will be added, Loss: Amount will be duducted), ' \
|
||||
'which is calculated from Profilt & Loss Report',
|
||||
help='This account is used for transferring Profit/Loss (If It is Profit: Amount will be added, Loss : Amount will be deducted.), as calculated in Profit & Loss Report',
|
||||
domain = [('type','=','other')]),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_bs_report_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
_defaults={
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
</xpath>
|
||||
<xpath expr="//field[@name='target_move']" position="after">
|
||||
<field name="display_account"/>
|
||||
<field name="reserve_account_id" required="1"/>
|
||||
<field name="reserve_account_id"/>
|
||||
<field name="display_type"/>
|
||||
<newline/>
|
||||
</xpath>
|
||||
|
|
|
@ -19,13 +19,17 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv
|
||||
from osv import osv, fields
|
||||
|
||||
class account_central_journal(osv.osv_memory):
|
||||
_name = 'account.central.journal'
|
||||
_description = 'Account Central Journal'
|
||||
_inherit = "account.common.journal.report"
|
||||
|
||||
_columns = {
|
||||
'journal_ids': fields.many2many('account.journal', 'account_central_journal_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
def _print_report(self, cr, uid, ids, data, context=None):
|
||||
data = self.pre_print_report(cr, uid, ids, data, context=context)
|
||||
return {
|
||||
|
|
|
@ -35,7 +35,7 @@ class account_common_report(osv.osv_memory):
|
|||
'filter': fields.selection([('filter_no', 'No Filters'), ('filter_date', 'Date'), ('filter_period', 'Periods')], "Filter by", required=True),
|
||||
'period_from': fields.many2one('account.period', 'Start Period'),
|
||||
'period_to': fields.many2one('account.period', 'End Period'),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_common_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
'journal_ids': fields.many2many('account.journal', string='Journals', required=True),
|
||||
'date_from': fields.date("Start Date"),
|
||||
'date_to': fields.date("End Date"),
|
||||
'target_move': fields.selection([('posted', 'All Posted Entries'),
|
||||
|
|
|
@ -19,17 +19,21 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv
|
||||
from osv import osv, fields
|
||||
|
||||
class account_general_journal(osv.osv_memory):
|
||||
_inherit = "account.common.journal.report"
|
||||
_name = 'account.general.journal'
|
||||
_description = 'Account General Journal'
|
||||
|
||||
_columns = {
|
||||
'journal_ids': fields.many2many('account.journal', 'account_general_journal_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
def _print_report(self, cr, uid, ids, data, context=None):
|
||||
data = self.pre_print_report(cr, uid, ids, data, context=context)
|
||||
return {'type': 'ir.actions.report.xml', 'report_name': 'account.general.journal', 'datas': data}
|
||||
|
||||
account_general_journal()
|
||||
|
||||
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -32,6 +32,7 @@ class account_report_general_ledger(osv.osv_memory):
|
|||
help='If you selected to filter by date or period, this field allow you to add a row to display the amount of debit/credit/balance that precedes the filter you\'ve set.'),
|
||||
'amount_currency': fields.boolean("With Currency", help="It adds the currency column if the currency is different then the company currency"),
|
||||
'sortby': fields.selection([('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')], 'Sort by', required=True),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_report_general_ledger_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'landscape': True,
|
||||
|
|
|
@ -31,6 +31,7 @@ class account_partner_balance(osv.osv_memory):
|
|||
_columns = {
|
||||
'display_partner': fields.selection([('non-zero_balance', 'With balance is not equal to 0'), ('all', 'All Partners')]
|
||||
,'Display Partners'),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_partner_balance_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -51,4 +52,4 @@ class account_partner_balance(osv.osv_memory):
|
|||
|
||||
account_partner_balance()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -35,6 +35,7 @@ class account_partner_ledger(osv.osv_memory):
|
|||
'filter': fields.selection([('filter_no', 'No Filters'), ('filter_date', 'Date'), ('filter_period', 'Periods'), ('unreconciled', 'Unreconciled Entries')], "Filter by", required=True),
|
||||
'page_split': fields.boolean('One Partner Per Page', help='Display Ledger Report with One partner per page'),
|
||||
'amount_currency': fields.boolean("With Currency", help="It adds the currency column if the currency is different then the company currency"),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_partner_ledger_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'initial_balance': False,
|
||||
|
|
|
@ -30,6 +30,7 @@ class account_print_journal(osv.osv_memory):
|
|||
'sort_selection': fields.selection([('date', 'Date'),
|
||||
('ref', 'Reference Number'),],
|
||||
'Entries Sorted by', required=True),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_print_journal_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'sort_selection': 'date',
|
||||
|
@ -44,4 +45,4 @@ class account_print_journal(osv.osv_memory):
|
|||
|
||||
account_print_journal()
|
||||
|
||||
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -28,14 +28,15 @@ class account_pl_report(osv.osv_memory):
|
|||
_inherit = "account.common.account.report"
|
||||
_name = "account.pl.report"
|
||||
_description = "Account Profit And Loss Report"
|
||||
|
||||
_columns = {
|
||||
'display_type': fields.boolean("Landscape Mode"),
|
||||
'journal_ids': fields.many2many('account.journal', 'account_pl_report_journal_rel', 'account_id', 'journal_id', 'Journals', required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'display_type': False,
|
||||
'journal_ids': [],
|
||||
'target_move': False
|
||||
}
|
||||
|
||||
def _print_report(self, cr, uid, ids, data, context=None):
|
||||
|
|
|
@ -9,9 +9,6 @@
|
|||
<field name="inherit_id" ref="account.account_common_report_view" />
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='target_move']" position="replace">
|
||||
<field name="target_move" required="0" readonly="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='journal_ids']" position="replace">
|
||||
<field name="journal_ids" required="0" colspan="4" nolabel="1" readonly="1"/>
|
||||
</xpath>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
"name" : "Accountant Access",
|
||||
"version" : "1.1",
|
||||
"author" : "OpenERP SA",
|
||||
"category": 'Finance',
|
||||
"category": 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
"description": """
|
||||
Accounting Access Rights.
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 09:57+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: account_accountant
|
||||
#: model:ir.module.module,description:account_accountant.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
"This module gives the admin user the access to all the accounting features "
|
||||
"like the journal\n"
|
||||
"items and the chart of accounts.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_accountant
|
||||
#: model:ir.module.module,shortdesc:account_accountant.module_meta_information
|
||||
msgid "Accountant"
|
||||
msgstr "會計師"
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name' : 'Analytic Account View',
|
||||
'version' : '1.1',
|
||||
'category' : 'Finance',
|
||||
'category' : 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
This module is for modifying account analytic view to show important data to project manager of services companies.
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
{
|
||||
'name' : 'Account Analytic Defaults',
|
||||
'version' : '1.0',
|
||||
'category' : 'Finance',
|
||||
'category' : 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
'description': """Set default values for your analytic accounts
|
||||
Allows to automatically select analytic accounts based on criterions:
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name' : 'Manage multiple plans in Analytic Accounting',
|
||||
'version' : '1.0',
|
||||
'category' : 'Finance',
|
||||
'category' : 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
This module allows to use several analytic plans, according to the general journal.
|
||||
|
|
|
@ -366,7 +366,7 @@ class account_move_line(osv.osv):
|
|||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
if context is None:
|
||||
context = {}
|
||||
result = super(osv.osv, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
|
||||
result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
|
||||
return result
|
||||
|
||||
account_move_line()
|
||||
|
@ -496,4 +496,4 @@ class account_bank_statement_line(osv.osv):
|
|||
}
|
||||
account_bank_statement_line()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -36,7 +36,7 @@ when the invoice is created to transfer this amount to the debtor or creditor ac
|
|||
Secondly, price differences between actual purchase price and fixed product standard price are booked on a separate account""",
|
||||
"images" : ["images/account_anglo_saxon.jpeg"],
|
||||
"depends" : ["product", "purchase"],
|
||||
"category" : "Warehouse",
|
||||
"category" : "Accounting & Finance",
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"update_xml" : ["product_view.xml",],
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 10:28+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: view:product.category:0
|
||||
msgid " Accounting Property"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: sql_constraint:purchase.order:0
|
||||
msgid "Order Reference must be unique !"
|
||||
msgstr "訂單參考不能重覆!"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: constraint:product.category:0
|
||||
msgid "Error ! You can not create recursive categories."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: constraint:product.template:0
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_account_invoice_line
|
||||
msgid "Invoice Line"
|
||||
msgstr "發票明細"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_purchase_order
|
||||
msgid "Purchase Order"
|
||||
msgstr "購貨單"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_product_template
|
||||
msgid "Product Template"
|
||||
msgstr "產品範本"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_product_category
|
||||
msgid "Product Category"
|
||||
msgstr "產品分類"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
|
||||
msgid "Stock Accounting for Anglo Saxon countries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: field:product.category,property_account_creditor_price_difference_categ:0
|
||||
#: field:product.template,property_account_creditor_price_difference:0
|
||||
msgid "Price Difference Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_account_invoice
|
||||
msgid "Invoice"
|
||||
msgstr "發票"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.model,name:account_anglo_saxon.model_stock_picking
|
||||
msgid "Picking List"
|
||||
msgstr "提貨清單"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.module.module,description:account_anglo_saxon.module_meta_information
|
||||
msgid ""
|
||||
"This module will support the Anglo-Saxons accounting methodology by\n"
|
||||
" changing the accounting logic with stock transactions. The difference "
|
||||
"between the Anglo-Saxon accounting countries\n"
|
||||
" and the Rhine or also called Continental accounting countries is the "
|
||||
"moment of taking the Cost of Goods Sold versus Cost of Sales.\n"
|
||||
" Anglo-Saxons accounting does take the cost when sales invoice is "
|
||||
"created, Continental accounting will take the cost at the moment the goods "
|
||||
"are shipped.\n"
|
||||
" This module will add this functionality by using a interim account, to "
|
||||
"store the value of shipped goods and will contra book this interim account\n"
|
||||
" when the invoice is created to transfer this amount to the debtor or "
|
||||
"creditor account.\n"
|
||||
" Secondly, price differences between actual purchase price and fixed "
|
||||
"product standard price are booked on a separate account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: help:product.category,property_account_creditor_price_difference_categ:0
|
||||
#: help:product.template,property_account_creditor_price_difference:0
|
||||
msgid ""
|
||||
"This account will be used to value price difference between purchase price "
|
||||
"and cost price."
|
||||
msgstr ""
|
|
@ -29,7 +29,7 @@
|
|||
those assets. And it allows to create Move's of the depreciation lines.
|
||||
""",
|
||||
"website" : "http://www.openerp.com",
|
||||
"category" : "Generic Modules/Accounting",
|
||||
"category" : "Accounting & Finance",
|
||||
"init_xml" : [
|
||||
],
|
||||
"demo_xml" : [ 'account_asset_demo.xml'
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-24 12:54+0000\n"
|
||||
"PO-Revision-Date: 2011-09-17 13:42+0000\n"
|
||||
"PO-Revision-Date: 2011-09-26 12:09+0000\n"
|
||||
"Last-Translator: lholivier <olivier.lenoir@free.fr>\n"
|
||||
"Language-Team: French <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-18 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 13955)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14028)\n"
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
|
||||
|
@ -131,7 +131,7 @@ msgstr "Commentaires"
|
|||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Change history"
|
||||
msgstr ""
|
||||
msgstr "Historique des modifications"
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
|
@ -341,7 +341,7 @@ msgstr ""
|
|||
#: field:account.asset.asset,date:0
|
||||
#: field:account.asset.property.history,date:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "Date"
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.board,value_net:0
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Budget Management',
|
||||
'version': '1.0',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
This module allows accountants to manage analytic and crossovered budgets.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"name" : "Cancel Entries",
|
||||
"version" : "1.1",
|
||||
"author" : "OpenERP SA",
|
||||
"category": 'Finance',
|
||||
"category": 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
"description": """
|
||||
Allows cancelling accounting entries.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Charts of Accounts',
|
||||
'version': '1.1',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'description': """
|
||||
Remove minimal account chart.
|
||||
=============================
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"name" : "Account CODA - import bank statements from coda file",
|
||||
"version" : "1.0",
|
||||
"author" : "OpenERP SA",
|
||||
"category" : "Finance",
|
||||
"category" : "Accounting & Finance",
|
||||
'complexity': "normal",
|
||||
"description": """
|
||||
Module provides functionality to import bank statements from coda files.
|
||||
|
|
|
@ -0,0 +1,259 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 10:40+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda,journal_id:0
|
||||
#: field:account.coda.import,journal_id:0
|
||||
msgid "Bank Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
#: field:account.coda.import,note:0
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.model,name:account_coda.model_account_coda_import
|
||||
msgid "Account Coda Import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda,name:0
|
||||
msgid "Coda file"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda.import,awaiting_account:0
|
||||
msgid "Default Account for Unrecognized Movement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda,date:0
|
||||
msgid "Import Date"
|
||||
msgstr "匯入日期"
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda,note:0
|
||||
msgid "Import log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Import"
|
||||
msgstr "匯入"
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
msgid "Coda import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: code:addons/account_coda/account_coda.py:51
|
||||
#, python-format
|
||||
msgid "Coda file not found for bank statement !!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda.import,awaiting_account:0
|
||||
msgid ""
|
||||
"Set here the default account that will be used, if the partner is found but "
|
||||
"does not have the bank account, or if he is domiciled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
#: field:account.coda,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "公司"
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda.import,def_payable:0
|
||||
msgid ""
|
||||
"Set here the payable account that will be used, by default, if the partner "
|
||||
"is not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
msgid "Search Coda"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
#: field:account.coda,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
#: field:account.coda,date:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
|
||||
msgid "Coda Import Logs"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.model,name:account_coda.model_account_coda
|
||||
msgid "coda for an Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda.import,def_payable:0
|
||||
msgid "Default Payable Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda,name:0
|
||||
msgid "Store the detail of bank statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Open Statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: code:addons/account_coda/wizard/account_coda_import.py:167
|
||||
#, python-format
|
||||
msgid "The bank account %s is not defined for the partner %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
|
||||
msgid "Import Coda Statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
|
||||
msgid "Import Coda Statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.module.module,description:account_coda.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" Module provides functionality to import\n"
|
||||
" bank statements from coda files.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
msgid "Statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.bank.statement,coda_id:0
|
||||
msgid "Coda"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Results :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Result of Imported Coda Statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: help:account.coda.import,def_receivable:0
|
||||
msgid ""
|
||||
"Set here the receivable account that will be used, by default, if the "
|
||||
"partner is not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda.import,coda:0
|
||||
#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
|
||||
msgid "Coda File"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.model,name:account_coda.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.actions.act_window,name:account_coda.action_account_coda
|
||||
msgid "Coda Logs"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: code:addons/account_coda/wizard/account_coda_import.py:311
|
||||
#, python-format
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Click on 'New' to select your file :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda.import,def_receivable:0
|
||||
msgid "Default Receivable Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Close"
|
||||
msgstr "關閉"
|
||||
|
||||
#. module: account_coda
|
||||
#: field:account.coda,statement_ids:0
|
||||
msgid "Generated Bank Statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
|
||||
msgid "Account CODA - import bank statements from coda file"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda.import:0
|
||||
msgid "Configure Your Journal and Account :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
msgid "Coda Import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_coda
|
||||
#: view:account.coda:0
|
||||
#: field:account.coda,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr ""
|
|
@ -22,7 +22,7 @@
|
|||
{
|
||||
'name': 'Reminders',
|
||||
'version': '1.0',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
Modules to automate letters for unpaid invoices, with multi-level recalls.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Improve Invoice Layout',
|
||||
'version': '1.0',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
This module provides some features to improve the layout of the invoices.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"name": "Payment Management",
|
||||
"version": "1.1",
|
||||
"author": "OpenERP SA",
|
||||
"category": "Finance",
|
||||
"category": "Accounting & Finance",
|
||||
'complexity': "easy",
|
||||
"description": """
|
||||
Module to manage invoice payment.
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
{
|
||||
'name': 'Entries Sequence Numbering',
|
||||
'version': '1.1',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
This module maintains internal sequence number for accounting entries.
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 11:32+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: account_sequence
|
||||
#: view:account.sequence.installer:0
|
||||
#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer
|
||||
msgid "Account Sequence Application Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move:0
|
||||
msgid ""
|
||||
"You cannot create entries on different periods/journals in the same move"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.move,internal_sequence_number:0
|
||||
#: help:account.move.line,internal_sequence_number:0
|
||||
msgid "Internal Sequence Number"
|
||||
msgstr "內部序列號碼"
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.sequence.installer,number_next:0
|
||||
msgid "Next number of this sequence"
|
||||
msgstr "本序列下個號碼"
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,number_next:0
|
||||
msgid "Next Number"
|
||||
msgstr "下個號碼"
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,number_increment:0
|
||||
msgid "Increment Number"
|
||||
msgstr "編號增量"
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.module.module,description:account_sequence.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" This module maintains internal sequence number for accounting entries.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.module.module,shortdesc:account_sequence.module_meta_information
|
||||
msgid "Entries Sequence Numbering"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.sequence.installer,number_increment:0
|
||||
msgid "The next number of the sequence will be incremented by this number"
|
||||
msgstr "序列下個號碼按此數字遞增"
|
||||
|
||||
#. module: account_sequence
|
||||
#: view:account.sequence.installer:0
|
||||
msgid "Configure Your Account Sequence Application"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,progress:0
|
||||
msgid "Configuration Progress"
|
||||
msgstr "配置進度"
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.sequence.installer,suffix:0
|
||||
msgid "Suffix value of the record for the sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "公司"
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.journal,internal_sequence_id:0
|
||||
msgid ""
|
||||
"This sequence will be used to maintain the internal number for the journal "
|
||||
"entries related to this journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,padding:0
|
||||
msgid "Number padding"
|
||||
msgstr "數字位數"
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.model,name:account_sequence.model_account_move_line
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.move,internal_sequence_number:0
|
||||
#: field:account.move.line,internal_sequence_number:0
|
||||
msgid "Internal Number"
|
||||
msgstr "內部號碼"
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move.line:0
|
||||
msgid "Company must be same for its related account and period."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.sequence.installer,padding:0
|
||||
msgid ""
|
||||
"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
|
||||
"get the required padding size."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,name:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move.line:0
|
||||
msgid "You can not create move line on closed account."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move:0
|
||||
msgid ""
|
||||
"You cannot create more than one move per period on centralized journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: sql_constraint:account.move.line:0
|
||||
msgid "Wrong credit or debit value in accounting entry !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.journal,internal_sequence_id:0
|
||||
msgid "Internal Sequence"
|
||||
msgstr "內部序列"
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.model,name:account_sequence.model_account_sequence_installer
|
||||
msgid "account.sequence.installer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: view:account.sequence.installer:0
|
||||
msgid "Configure"
|
||||
msgstr "設定"
|
||||
|
||||
#. module: account_sequence
|
||||
#: help:account.sequence.installer,prefix:0
|
||||
msgid "Prefix value of the record for the sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.model,name:account_sequence.model_account_move
|
||||
msgid "Account Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,suffix:0
|
||||
msgid "Suffix"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "圖像"
|
||||
|
||||
#. module: account_sequence
|
||||
#: view:account.sequence.installer:0
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: sql_constraint:account.journal:0
|
||||
msgid "The name of the journal must be unique per company !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: field:account.sequence.installer,prefix:0
|
||||
msgid "Prefix"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: sql_constraint:account.journal:0
|
||||
msgid "The code of the journal must be unique per company !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move.line:0
|
||||
msgid ""
|
||||
"You can not create move line on receivable/payable account without partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: model:ir.model,name:account_sequence.model_account_journal
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: view:account.sequence.installer:0
|
||||
msgid "You can enhance the Account Sequence Application by installing ."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_sequence
|
||||
#: constraint:account.move.line:0
|
||||
msgid "You can not create move line on view account."
|
||||
msgstr ""
|
|
@ -20,9 +20,8 @@
|
|||
##############################################################################
|
||||
|
||||
import account_voucher
|
||||
import company
|
||||
import invoice
|
||||
import report
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -25,22 +25,15 @@
|
|||
"author" : 'OpenERP SA',
|
||||
'complexity': "normal",
|
||||
"description": """
|
||||
Account Voucher module offers an easy way to deal with all the basic requirements of Voucher Entries
|
||||
====================================================================================================
|
||||
Account Voucher module includes all the basic requirements of Voucher Entries for Bank, Cash, Sales, Purchase, Expanse, Contra, etc.
|
||||
====================================================================================================================================
|
||||
|
||||
Its increased usabililty allows you to create easily sales/purchases documents but also to encode payments.
|
||||
Doing so, you'll be able to see all the open transactions for the selected partner and that will help you
|
||||
to reconcile your entry with its invoice.
|
||||
|
||||
Account Voucher module multi-currency support
|
||||
=============================================
|
||||
|
||||
Thanks to the contribution of Camptocamp, the vouchers fully support the multi currency and compute the
|
||||
currency rate difference besides the write off amount. Of course, the accounting entries are also created
|
||||
accordingly.
|
||||
* Voucher Entry
|
||||
* Voucher Receipt
|
||||
* Cheque Register
|
||||
""",
|
||||
"category" : "Finance",
|
||||
"website" : "http://www.openerp.com",
|
||||
"category" : "Accounting & Finance",
|
||||
"website" : "http://tinyerp.com",
|
||||
"images" : ["images/customer_payment.jpeg","images/journal_voucher.jpeg","images/sales_receipt.jpeg","images/supplier_voucher.jpeg"],
|
||||
"depends" : ["account"],
|
||||
"init_xml" : [],
|
||||
|
@ -55,7 +48,6 @@ accordingly.
|
|||
"wizard/account_voucher_unreconcile_view.xml",
|
||||
"wizard/account_statement_from_invoice_view.xml",
|
||||
"account_voucher_view.xml",
|
||||
"company_view.xml",
|
||||
"voucher_payment_receipt_view.xml",
|
||||
"voucher_sales_purchase_view.xml",
|
||||
"account_voucher_wizard.xml",
|
||||
|
@ -67,12 +59,7 @@ accordingly.
|
|||
"test/account_voucher.yml",
|
||||
"test/sales_receipt.yml",
|
||||
"test/sales_payment.yml",
|
||||
"test/account_voucher_report.yml",
|
||||
"test/case1_usd_usd.yml",
|
||||
"test/case2_usd_eur.yml",
|
||||
"test/case2_suppl_usd_eur.yml",
|
||||
"test/case3_eur_eur.yml",
|
||||
"test/case4_cad_chf.yml",
|
||||
"test/account_voucher_report.yml"
|
||||
],
|
||||
'certificate': '0037580727101',
|
||||
"active": False,
|
||||
|
|
|
@ -29,6 +29,17 @@ from tools.translate import _
|
|||
|
||||
|
||||
class account_voucher(osv.osv):
|
||||
def _check_paid(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for voucher in self.browse(cr, uid, ids, context=context):
|
||||
ok = True
|
||||
for line in voucher.move_ids:
|
||||
if (line.account_id.type, 'in', ('receivable', 'payable')) and not line.reconcile_id:
|
||||
ok = False
|
||||
res[voucher.id] = ok
|
||||
return res
|
||||
|
||||
|
||||
|
||||
def _get_type(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
|
@ -39,10 +50,7 @@ class account_voucher(osv.osv):
|
|||
if context is None: context = {}
|
||||
if context.get('period_id', False):
|
||||
return context.get('period_id')
|
||||
if context.get('invoice_id', False):
|
||||
company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id
|
||||
context.update({'company_id': company_id})
|
||||
periods = self.pool.get('account.period').find(cr, uid, context=context)
|
||||
periods = self.pool.get('account.period').find(cr, uid)
|
||||
return periods and periods[0] or False
|
||||
|
||||
def _get_journal(self, cr, uid, context=None):
|
||||
|
@ -145,102 +153,39 @@ class account_voucher(osv.osv):
|
|||
res['arch'] = etree.tostring(doc)
|
||||
return res
|
||||
|
||||
def _check_paid(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for voucher in self.browse(cr, uid, ids, context=context):
|
||||
ok = True
|
||||
for line in voucher.move_ids:
|
||||
if (line.account_id.type, 'in', ('receivable', 'payable')) and not line.reconcile_id:
|
||||
ok = False
|
||||
res[voucher.id] = ok
|
||||
return res
|
||||
|
||||
def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
ctx = context.copy()
|
||||
voucher_type = context.get('type', False)
|
||||
counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0
|
||||
ctx.update({'date': voucher_date})
|
||||
def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount):
|
||||
debit = credit = 0.0
|
||||
for l in line_dr_ids:
|
||||
#compute the amount in voucher currency and in company currency if there aren't set yet
|
||||
if not l.get('amount_in_company_currency', False):
|
||||
ctx.update({'date': l['date_original']})
|
||||
amount_in_company_currency = currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
|
||||
ctx.update({'date': voucher_date})
|
||||
else:
|
||||
amount_in_company_currency = l.get('amount_in_company_currency', 0.0)
|
||||
if not l.get('amount_in_voucher_currency'):
|
||||
amount_in_voucher_currency = currency_pool.compute(cr, uid, l['currency_id'], l['voucher_currency_id'], l['amount'], context=ctx)
|
||||
else:
|
||||
amount_in_voucher_currency = l.get('amount_in_voucher_currency', 0.0)
|
||||
real_amount -= amount_in_company_currency
|
||||
counter_for_writeoff -= l.get('voucher_currency_id') == l.get('currency_id') and l['amount'] or amount_in_voucher_currency
|
||||
counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
|
||||
debit += l['amount']
|
||||
for l in line_cr_ids:
|
||||
#compute the amount in voucher currency and in company currency if there aren't set yet
|
||||
if not l.get('amount_in_company_currency', False):
|
||||
ctx.update({'date': l['date_original']})
|
||||
amount_in_company_currency = currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
|
||||
ctx.update({'date': voucher_date})
|
||||
else:
|
||||
amount_in_company_currency = l.get('amount_in_company_currency', 0.0)
|
||||
if not l.get('amount_in_voucher_currency'):
|
||||
amount_in_voucher_currency = currency_pool.compute(cr, uid, l['currency_id'], l['voucher_currency_id'], l['amount'], context=ctx)
|
||||
else:
|
||||
amount_in_voucher_currency = l.get('amount_in_voucher_currency', 0.0)
|
||||
real_amount += amount_in_company_currency
|
||||
counter_for_writeoff += l.get('voucher_currency_id') == l.get('currency_id') and l['amount'] or amount_in_voucher_currency
|
||||
counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
|
||||
sign = voucher_type in ['sale','receipt'] and 1 or -1
|
||||
writeoff_amount = (sign * amount) - counter_for_writeoff
|
||||
currency_rate_difference = real_amount - counter_for_currency_diff
|
||||
return writeoff_amount, currency_rate_difference
|
||||
credit += l['amount']
|
||||
return abs(amount - abs(credit - debit))
|
||||
|
||||
def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_date, context=None):
|
||||
def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, context=None):
|
||||
context = context or {}
|
||||
if not line_dr_ids and not line_cr_ids:
|
||||
return {'value':{}}
|
||||
line_osv = self.pool.get("account.voucher.line")
|
||||
line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context)
|
||||
line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context)
|
||||
writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context)
|
||||
return {'value': {'writeoff_amount': writeoff_amount, 'currency_rate_difference': currency_rate_diff}}
|
||||
return {'value': {'writeoff_amount': self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount)}}
|
||||
|
||||
def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None):
|
||||
if not ids: return {}
|
||||
if context is None:
|
||||
context = {}
|
||||
res = {}.fromkeys(ids,{})
|
||||
counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
for voucher in self.browse(cr, uid, ids, context=context):
|
||||
ctx = context.copy()
|
||||
ctx.update({'date': voucher.date})
|
||||
for l in voucher.line_dr_ids:
|
||||
real_amount -= l.amount_in_company_currency
|
||||
counter_for_writeoff -= (l.voucher_currency_id.id == l.currency_id.id) and l.amount or l.amount_in_voucher_currency
|
||||
counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx)
|
||||
for l in voucher.line_cr_ids:
|
||||
real_amount += l.amount_in_company_currency
|
||||
counter_for_writeoff += (l.voucher_currency_id.id == l.currency_id.id) and l.amount or l.amount_in_voucher_currency
|
||||
counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx)
|
||||
sign = voucher.type in ['sale','receipt'] and 1 or -1
|
||||
writeoff_amount = (sign * voucher.amount) - counter_for_writeoff
|
||||
res[voucher.id]['writeoff_amount'] = writeoff_amount
|
||||
res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff
|
||||
return res
|
||||
|
||||
def _currency_id(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
debit = credit = 0.0
|
||||
for voucher in self.browse(cr, uid, ids, context=context):
|
||||
currency = voucher.journal_id.currency and voucher.journal_id.currency.id or voucher.company_id.currency_id.id
|
||||
res[voucher.id] = {'currency_id': currency, 'currency_id2': currency}
|
||||
for l in voucher.line_dr_ids:
|
||||
debit += l.amount
|
||||
for l in voucher.line_cr_ids:
|
||||
credit += l.amount
|
||||
res[voucher.id] = abs(voucher.amount - abs(credit - debit))
|
||||
return res
|
||||
|
||||
_name = 'account.voucher'
|
||||
_description = 'Accounting Voucher'
|
||||
_order = "date desc, id desc"
|
||||
# _rec_name = 'number'
|
||||
_columns = {
|
||||
'type':fields.selection([
|
||||
('sale','Sale'),
|
||||
|
@ -250,7 +195,7 @@ class account_voucher(osv.osv):
|
|||
],'Default Type', readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'name':fields.char('Memo', size=256, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'date':fields.date('Date', readonly=True, select=True, states={'draft':[('readonly',False)]}, help="Effective date for accounting entries"),
|
||||
'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}, change_default=1),
|
||||
'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'account_id':fields.many2one('account.account', 'Account', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'line_ids':fields.one2many('account.voucher.line','voucher_id','Voucher Lines', readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'line_cr_ids':fields.one2many('account.voucher.line','voucher_id','Credits',
|
||||
|
@ -259,13 +204,11 @@ class account_voucher(osv.osv):
|
|||
domain=[('type','=','dr')], context={'default_type':'dr'}, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'period_id': fields.many2one('account.period', 'Period', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'narration':fields.text('Notes', readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'currency_id': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"),
|
||||
#duplicated field for display purposes
|
||||
'currency_id2': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"),
|
||||
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
|
||||
'company_currency': fields.related('company_id','currency_id', type='many2one', relation='res.currency', string='Currency', readonly=True),
|
||||
# 'currency_id':fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'currency_id': fields.related('journal_id','currency', type='many2one', relation='res.currency', string='Currency', readonly=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'state':fields.selection(
|
||||
[('draft','New'),
|
||||
[('draft','Draft'),
|
||||
('proforma','Pro-forma'),
|
||||
('posted','Posted'),
|
||||
('cancel','Cancelled')
|
||||
|
@ -282,6 +225,7 @@ class account_voucher(osv.osv):
|
|||
'move_ids': fields.related('move_id','line_id', type='one2many', relation='account.move.line', string='Journal Items', readonly=True),
|
||||
'partner_id':fields.many2one('res.partner', 'Partner', change_default=1, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'audit': fields.related('move_id','to_check', type='boolean', help='Check this box if you are unsure of that journal entry and if you want to note it as \'to be reviewed\' by an accounting expert.', relation='account.move', string='To Review'),
|
||||
'paid': fields.function(_check_paid, string='Paid', type='boolean', help="The Voucher has been totally paid."),
|
||||
'pay_now':fields.selection([
|
||||
('pay_now','Pay Directly'),
|
||||
('pay_later','Pay Later or Group Funds'),
|
||||
|
@ -291,14 +235,13 @@ class account_voucher(osv.osv):
|
|||
'date_due': fields.date('Due Date', readonly=True, select=True, states={'draft':[('readonly',False)]}),
|
||||
'payment_option':fields.selection([
|
||||
('without_writeoff', 'Keep Open'),
|
||||
('with_writeoff', 'Reconcile'),
|
||||
('with_writeoff', 'Reconcile Payment Balance'),
|
||||
], 'Payment Difference', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'writeoff_acc_id': fields.many2one('account.account', 'Write-Off account', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'comment': fields.char('Write-Off Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'exchange_acc_id': fields.many2one('account.account', 'Exchange Diff. Account', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'writeoff_acc_id': fields.many2one('account.account', 'Counterpart Account', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'comment': fields.char('Counterpart Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'analytic_id': fields.many2one('account.analytic.account','Write-Off Analytic Account', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True, multi="writeoff"),
|
||||
'currency_rate_difference': fields.function(_get_writeoff_amount, string="Currency Rate Difference", type='float', multi="writeoff"),
|
||||
'paid': fields.function(_check_paid, string='Paid', type='boolean', help="The Voucher has been totally paid."),
|
||||
'writeoff_amount': fields.function(_get_writeoff_amount, string='Reconcile Amount', type='float', readonly=True),
|
||||
}
|
||||
_defaults = {
|
||||
'period_id': _get_period,
|
||||
|
@ -323,7 +266,7 @@ class account_voucher(osv.osv):
|
|||
tax_pool = self.pool.get('account.tax')
|
||||
partner_pool = self.pool.get('res.partner')
|
||||
position_pool = self.pool.get('account.fiscal.position')
|
||||
voucher_voucher_line_obj = self.pool.get('account.voucher.line')
|
||||
voucher_line_pool = self.pool.get('account.voucher.line')
|
||||
voucher_pool = self.pool.get('account.voucher')
|
||||
if context is None: context = {}
|
||||
|
||||
|
@ -332,7 +275,7 @@ class account_voucher(osv.osv):
|
|||
for line in voucher.line_ids:
|
||||
voucher_amount += line.untax_amount or line.amount
|
||||
line.amount = line.untax_amount or line.amount
|
||||
voucher_voucher_line_obj.write(cr, uid, [line.id], {'amount':line.amount, 'untax_amount':line.untax_amount})
|
||||
voucher_line_pool.write(cr, uid, [line.id], {'amount':line.amount, 'untax_amount':line.untax_amount})
|
||||
|
||||
if not voucher.tax_id:
|
||||
self.write(cr, uid, [voucher.id], {'amount':voucher_amount, 'tax_amount':0.0})
|
||||
|
@ -360,7 +303,7 @@ class account_voucher(osv.osv):
|
|||
line_total += tax_line.get('price_unit')
|
||||
total_tax += line_tax
|
||||
untax_amount = line.untax_amount or line.amount
|
||||
voucher_voucher_line_obj.write(cr, uid, [line.id], {'amount':line_total, 'untax_amount':untax_amount})
|
||||
voucher_line_pool.write(cr, uid, [line.id], {'amount':line_total, 'untax_amount':untax_amount})
|
||||
|
||||
self.write(cr, uid, [voucher.id], {'amount':total, 'tax_amount':total_tax})
|
||||
return True
|
||||
|
@ -370,14 +313,14 @@ class account_voucher(osv.osv):
|
|||
tax_pool = self.pool.get('account.tax')
|
||||
partner_pool = self.pool.get('res.partner')
|
||||
position_pool = self.pool.get('account.fiscal.position')
|
||||
voucher_line_obj = self.pool.get('account.voucher.line')
|
||||
line_pool = self.pool.get('account.voucher.line')
|
||||
res = {
|
||||
'tax_amount': False,
|
||||
'amount': False,
|
||||
}
|
||||
voucher_total = 0.0
|
||||
|
||||
line_ids = resolve_o2m_operations(cr, uid, voucher_line_obj, line_ids, ["amount"], context)
|
||||
line_ids = resolve_o2m_operations(cr, uid, line_pool, line_ids, ["amount"], context)
|
||||
|
||||
total = 0.0
|
||||
total_tax = 0.0
|
||||
|
@ -466,8 +409,8 @@ class account_voucher(osv.osv):
|
|||
|
||||
return default
|
||||
|
||||
def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, voucher_currency_id, ttype, date, context=None):
|
||||
"""price
|
||||
def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None):
|
||||
"""
|
||||
Returns a dict that contains new values and context
|
||||
|
||||
@param partner_id: latest value from user input for field partner_id
|
||||
|
@ -476,36 +419,43 @@ class account_voucher(osv.osv):
|
|||
|
||||
@return: Returns a dict which contains new values, and context
|
||||
"""
|
||||
if not journal_id:
|
||||
return {}
|
||||
if context is None:
|
||||
context = {}
|
||||
if not journal_id:
|
||||
return {}
|
||||
context_multi_currency = context.copy()
|
||||
if date:
|
||||
context_multi_currency.update({'date': date})
|
||||
|
||||
line_pool = self.pool.get('account.voucher.line')
|
||||
line_ids = ids and line_pool.search(cr, uid, [('voucher_id', '=', ids[0])]) or False
|
||||
if line_ids:
|
||||
line_pool.unlink(cr, uid, line_ids)
|
||||
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_line_pool = self.pool.get('account.move.line')
|
||||
partner_pool = self.pool.get('res.partner')
|
||||
journal_pool = self.pool.get('account.journal')
|
||||
voucher_line_obj = self.pool.get('account.voucher.line')
|
||||
#get default values
|
||||
vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context=context)
|
||||
vals = vals.get('value',{})
|
||||
voucher_currency_id = vals.get('currency_id', voucher_currency_id)
|
||||
default = {
|
||||
'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id': voucher_currency_id},
|
||||
}
|
||||
|
||||
#drop existing lines
|
||||
line_ids = ids and voucher_line_obj.search(cr, uid, [('voucher_id', 'in', ids)]) or []
|
||||
if line_ids:
|
||||
voucher_line_obj.unlink(cr, uid, line_ids, context=context)
|
||||
vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context)
|
||||
vals = vals.get('value')
|
||||
|
||||
journal = journal_pool.browse(cr, uid, journal_id, context=context)
|
||||
currency_id = vals.get('currency_id', currency_id)
|
||||
default = {
|
||||
'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id':currency_id},
|
||||
}
|
||||
currency_id = currency_id or journal.company_id.currency_id.id
|
||||
|
||||
if not partner_id:
|
||||
return default
|
||||
|
||||
journal = journal_pool.browse(cr, uid, journal_id, context=context)
|
||||
if not partner_id and ids:
|
||||
line_ids = line_pool.search(cr, uid, [('voucher_id', '=', ids[0])])
|
||||
if line_ids:
|
||||
line_pool.unlink(cr, uid, line_ids)
|
||||
return default
|
||||
|
||||
partner = partner_pool.browse(cr, uid, partner_id, context=context)
|
||||
account_id = False
|
||||
if journal.type in ('sale','sale_refund'):
|
||||
|
@ -520,98 +470,78 @@ class account_voucher(osv.osv):
|
|||
if journal.type not in ('cash', 'bank'):
|
||||
return default
|
||||
|
||||
total_credit = 0.0
|
||||
total_debit = 0.0
|
||||
account_type = 'receivable'
|
||||
if ttype == 'payment':
|
||||
account_type = 'payable'
|
||||
total_debit = price or 0.0
|
||||
else:
|
||||
total_credit = price or 0.0
|
||||
account_type = 'receivable'
|
||||
|
||||
if not context.get('move_line_ids', False):
|
||||
ids = move_line_obj.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context)
|
||||
ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context)
|
||||
else:
|
||||
ids = context['move_line_ids']
|
||||
|
||||
#computation of the assignation of voucher amount on voucher lines
|
||||
total_credit = account_type == 'receivable' and price or 0.0
|
||||
total_debit = account_type == 'payable' and price or 0.0
|
||||
moves = move_line_obj.browse(cr, uid, ids, context=context)
|
||||
company_currency = journal.company_id.currency_id.id
|
||||
invoice_id = context.get('invoice_id', False)
|
||||
move_line_found = False
|
||||
#order the lines by most old first
|
||||
ids.reverse()
|
||||
moves = move_line_pool.browse(cr, uid, ids, context=context)
|
||||
|
||||
#company_currency = journal.company_id.currency_id.id
|
||||
#if company_currency != currency_id and ttype == 'payment':
|
||||
# total_debit = currency_pool.compute(cr, uid, currency_id, company_currency, total_debit, context=context_multi_currency)
|
||||
#elif company_currency != currency_id and ttype == 'receipt':
|
||||
# total_credit = currency_pool.compute(cr, uid, currency_id, company_currency, total_credit, context=context_multi_currency)
|
||||
|
||||
company_currency = journal.company_id.currency_id.id
|
||||
for line in moves:
|
||||
if line.credit and line.reconcile_partial_id and ttype == 'receipt':
|
||||
continue
|
||||
if line.debit and line.reconcile_partial_id and ttype == 'payment':
|
||||
continue
|
||||
|
||||
if line.currency_id and currency_id==line.currency_id.id:
|
||||
total_credit += line.amount_currency <0 and -line.amount_currency or 0.0
|
||||
total_debit += line.amount_currency >0 and line.amount_currency or 0.0
|
||||
else:
|
||||
total_credit += currency_pool.compute(cr, uid, company_currency, currency_id, line.credit or 0.0)
|
||||
total_debit += currency_pool.compute(cr, uid, company_currency, currency_id, line.debit or 0.0)
|
||||
|
||||
for line in moves:
|
||||
if line.credit and line.reconcile_partial_id and ttype == 'receipt':
|
||||
continue
|
||||
if line.debit and line.reconcile_partial_id and ttype == 'payment':
|
||||
continue
|
||||
if invoice_id:
|
||||
if line.invoice.id == invoice_id:
|
||||
#if the invoice linked to the voucher line is equal to the invoice_id in context
|
||||
#then we assign the amount on that line, whatever the other voucher lines
|
||||
move_line_found = line.id
|
||||
break
|
||||
elif voucher_currency_id == company_currency:
|
||||
#otherwise treatments is the same but with other field names
|
||||
if line.amount_residual == price:
|
||||
#if the amount residual is equal the amount voucher, we assign it to that voucher
|
||||
#line, whatever the other voucher lines
|
||||
move_line_found = line.id
|
||||
break
|
||||
#otherwise we will split the voucher amount on each line (by most old first)
|
||||
total_credit += line.credit or 0.0
|
||||
total_debit += line.debit or 0.0
|
||||
elif voucher_currency_id == line.currency_id.id:
|
||||
if line.amount_residual_currency == price:
|
||||
move_line_found = line.id
|
||||
break
|
||||
total_credit += line.credit and line.amount_currency or 0.0
|
||||
total_debit += line.debit and line.amount_currency or 0.0
|
||||
|
||||
#voucher line creation
|
||||
for line in moves:
|
||||
if line.credit and line.reconcile_partial_id and ttype == 'receipt':
|
||||
continue
|
||||
if line.debit and line.reconcile_partial_id and ttype == 'payment':
|
||||
continue
|
||||
original_amount = line.credit or line.debit or 0.0
|
||||
amount_original, amount_unreconciled = voucher_line_obj._get_amounts(cr, uid, line, context=context)
|
||||
currency_id = line.currency_id and line.currency_id.id or line.company_id.currency_id.id
|
||||
if line.currency_id and currency_id==line.currency_id.id:
|
||||
amount_original = abs(line.amount_currency)
|
||||
amount_unreconciled = abs(line.amount_residual_currency)
|
||||
else:
|
||||
amount_original = currency_pool.compute(cr, uid, company_currency, currency_id, line.credit or line.debit or 0.0)
|
||||
amount_unreconciled = currency_pool.compute(cr, uid, company_currency, currency_id, abs(line.amount_residual))
|
||||
|
||||
#original_amount = line.credit or line.debit or 0.0
|
||||
#amount_unreconciled = currency_pool.compute(cr, uid, line.currency_id and line.currency_id.id or company_currency, currency_id, abs(line.amount_residual_currency), context=context_multi_currency)
|
||||
rs = {
|
||||
'name':line.move_id.name,
|
||||
'type': line.credit and 'dr' or 'cr',
|
||||
'move_line_id':line.id,
|
||||
'account_id':line.account_id.id,
|
||||
'amount_original': amount_original,
|
||||
'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0,
|
||||
'currency_id': currency_id,
|
||||
'voucher_currency_id': voucher_currency_id,
|
||||
'date_original':line.date,
|
||||
'company_currency_id': line.company_id.currency_id.id,
|
||||
'date_due':line.date_maturity,
|
||||
'amount_unreconciled': amount_unreconciled,
|
||||
|
||||
}
|
||||
#split voucher amount by most old first
|
||||
if not move_line_found:
|
||||
if company_currency == voucher_currency_id:
|
||||
if line.credit:
|
||||
amount = min(amount_unreconciled, abs(total_debit))
|
||||
rs['amount'] = amount
|
||||
total_debit -= amount
|
||||
else:
|
||||
amount = min(amount_unreconciled, abs(total_credit))
|
||||
rs['amount'] = amount
|
||||
total_credit -= amount
|
||||
elif voucher_currency_id == line.currency_id.id:
|
||||
if line.credit:
|
||||
amount = min(amount_unreconciled, abs(total_debit))
|
||||
rs['amount'] = amount
|
||||
total_debit -= amount
|
||||
else:
|
||||
amount = min(amount_unreconciled, abs(total_credit))
|
||||
rs['amount'] = amount
|
||||
total_credit -= amount
|
||||
|
||||
if line.credit:
|
||||
amount = min(amount_unreconciled, total_debit)
|
||||
rs['amount'] = amount
|
||||
total_debit -= amount
|
||||
else:
|
||||
amount = min(amount_unreconciled, total_credit)
|
||||
rs['amount'] = amount
|
||||
total_credit -= amount
|
||||
|
||||
default['value']['line_ids'].append(rs)
|
||||
if rs['type'] == 'cr':
|
||||
|
@ -623,7 +553,7 @@ class account_voucher(osv.osv):
|
|||
default['value']['pre_line'] = 1
|
||||
elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0:
|
||||
default['value']['pre_line'] = 1
|
||||
default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, date, context=context)
|
||||
default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price)
|
||||
return default
|
||||
|
||||
def onchange_date(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None):
|
||||
|
@ -633,13 +563,9 @@ class account_voucher(osv.osv):
|
|||
@param context: context arguments, like lang, time zone
|
||||
@return: Returns a dict which contains new values, and context
|
||||
"""
|
||||
if context is None: context = {}
|
||||
period_pool = self.pool.get('account.period')
|
||||
res = self.onchange_partner_id(cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=context)
|
||||
if context.get('invoice_id', False):
|
||||
company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id
|
||||
context.update({'company_id': company_id})
|
||||
pids = period_pool.find(cr, uid, date, context=context)
|
||||
pids = period_pool.search(cr, uid, [('date_start', '<=', date), ('date_stop', '>=', date)])
|
||||
if pids:
|
||||
if not 'value' in res:
|
||||
res['value'] = {}
|
||||
|
@ -647,9 +573,8 @@ class account_voucher(osv.osv):
|
|||
return res
|
||||
|
||||
def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, context=None):
|
||||
if context is None: context = {}
|
||||
if not journal_id:
|
||||
return {}
|
||||
return False
|
||||
journal_pool = self.pool.get('account.journal')
|
||||
journal = journal_pool.browse(cr, uid, journal_id, context=context)
|
||||
account_id = journal.default_credit_account_id or journal.default_debit_account_id
|
||||
|
@ -659,14 +584,10 @@ class account_voucher(osv.osv):
|
|||
|
||||
vals = self.onchange_price(cr, uid, ids, line_ids, tax_id, partner_id, context)
|
||||
vals['value'].update({'tax_id':tax_id})
|
||||
currency_id = journal.company_id.currency_id.id
|
||||
currency_id = False #journal.company_id.currency_id.id
|
||||
if journal.currency:
|
||||
currency_id = journal.currency.id
|
||||
vals['value'].update({'currency_id':currency_id})
|
||||
context.update({'company_id': journal.company_id.id})
|
||||
periods = self.pool.get('account.period').find(cr, uid, context=context)
|
||||
if periods:
|
||||
vals['value'].update({'period_id':periods[0]})
|
||||
return vals
|
||||
|
||||
def proforma_voucher(self, cr, uid, ids, context=None):
|
||||
|
@ -707,9 +628,10 @@ class account_voucher(osv.osv):
|
|||
def unlink(self, cr, uid, ids, context=None):
|
||||
for t in self.read(cr, uid, ids, ['state'], context=context):
|
||||
if t['state'] not in ('draft', 'cancel'):
|
||||
raise osv.except_osv(_('Invalid action !'), _('In order to delete a voucher, you must cancel it!'))
|
||||
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Voucher(s) which are already opened or paid !'))
|
||||
return super(account_voucher, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
# TODO: may be we can remove this method if not used anyware
|
||||
def onchange_payment(self, cr, uid, ids, pay_now, journal_id, partner_id, ttype='sale'):
|
||||
res = {}
|
||||
if not partner_id:
|
||||
|
@ -730,7 +652,6 @@ class account_voucher(osv.osv):
|
|||
return {'value':res}
|
||||
|
||||
def action_move_line_create(self, cr, uid, ids, context=None):
|
||||
|
||||
def _get_payment_term_lines(term_id, amount):
|
||||
term_pool = self.pool.get('account.payment.term')
|
||||
if term_id and amount:
|
||||
|
@ -740,44 +661,49 @@ class account_voucher(osv.osv):
|
|||
if context is None:
|
||||
context = {}
|
||||
move_pool = self.pool.get('account.move')
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_line_pool = self.pool.get('account.move.line')
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
tax_obj = self.pool.get('account.tax')
|
||||
seq_obj = self.pool.get('ir.sequence')
|
||||
for voucher in self.browse(cr, uid, ids, context=context):
|
||||
if voucher.move_id:
|
||||
for inv in self.browse(cr, uid, ids, context=context):
|
||||
if inv.move_id:
|
||||
continue
|
||||
context_multi_currency = context.copy()
|
||||
context_multi_currency.update({'date': voucher.date})
|
||||
context_multi_currency.update({'date': inv.date})
|
||||
|
||||
if voucher.number:
|
||||
name = voucher.number
|
||||
if inv.number:
|
||||
name = inv.number
|
||||
elif inv.journal_id.sequence_id:
|
||||
name = seq_obj.get_id(cr, uid, inv.journal_id.sequence_id.id)
|
||||
else:
|
||||
name = seq_obj.get_id(cr, uid, voucher.journal_id.sequence_id.id)
|
||||
if not voucher.reference:
|
||||
raise osv.except_osv(_('Error !'), _('Please define a sequence on the journal !'))
|
||||
if not inv.reference:
|
||||
ref = name.replace('/','')
|
||||
else:
|
||||
ref = voucher.reference
|
||||
ref = inv.reference
|
||||
|
||||
move = {
|
||||
'name': name,
|
||||
'journal_id': voucher.journal_id.id,
|
||||
'narration': voucher.narration,
|
||||
'date': voucher.date,
|
||||
'journal_id': inv.journal_id.id,
|
||||
'narration': inv.narration,
|
||||
'date': inv.date,
|
||||
'ref': ref,
|
||||
'period_id': voucher.period_id and voucher.period_id.id or False
|
||||
'period_id': inv.period_id and inv.period_id.id or False
|
||||
}
|
||||
move_id = move_pool.create(cr, uid, move)
|
||||
|
||||
#create the first line manually
|
||||
company_currency = voucher.journal_id.company_id.currency_id.id
|
||||
voucher_currency = voucher.currency_id.id
|
||||
company_currency = inv.journal_id.company_id.currency_id.id
|
||||
current_currency = inv.currency_id.id or company_currency
|
||||
current_currency_obj = inv.currency_id or inv.journal_id.company_id.currency_id
|
||||
debit = 0.0
|
||||
credit = 0.0
|
||||
if voucher.type in ('purchase', 'payment'):
|
||||
credit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency)
|
||||
elif voucher.type in ('sale', 'receipt'):
|
||||
debit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency)
|
||||
# TODO: is there any other alternative then the voucher type ??
|
||||
# -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt
|
||||
if inv.type in ('purchase', 'payment'):
|
||||
credit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency)
|
||||
elif inv.type in ('sale', 'receipt'):
|
||||
debit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency)
|
||||
if debit < 0:
|
||||
credit = -debit
|
||||
debit = 0.0
|
||||
|
@ -785,71 +711,53 @@ class account_voucher(osv.osv):
|
|||
debit = -credit
|
||||
credit = 0.0
|
||||
sign = debit - credit < 0 and -1 or 1
|
||||
#create the first line of the voucher
|
||||
#create the first line of the voucher, the payment made
|
||||
move_line = {
|
||||
'name': voucher.name or '/',
|
||||
'name': inv.name or '/',
|
||||
'debit': debit,
|
||||
'credit': credit,
|
||||
'account_id': voucher.account_id.id,
|
||||
'account_id': inv.account_id.id,
|
||||
'move_id': move_id,
|
||||
'journal_id': voucher.journal_id.id,
|
||||
'period_id': voucher.period_id.id,
|
||||
'partner_id': voucher.partner_id.id,
|
||||
'currency_id': company_currency <> voucher_currency and voucher_currency or False,
|
||||
'amount_currency': company_currency <> voucher_currency and sign * voucher.amount or 0.0,
|
||||
'date': voucher.date,
|
||||
'date_maturity': voucher.date_due
|
||||
'journal_id': inv.journal_id.id,
|
||||
'period_id': inv.period_id.id,
|
||||
'partner_id': inv.partner_id.id,
|
||||
'currency_id': company_currency <> current_currency and current_currency or False,
|
||||
'amount_currency': company_currency <> current_currency and sign * inv.amount or 0.0,
|
||||
'date': inv.date,
|
||||
'date_maturity': inv.date_due
|
||||
}
|
||||
move_line_obj.create(cr, uid, move_line)
|
||||
|
||||
#create the move line for the currency difference
|
||||
if voucher.currency_rate_difference:
|
||||
if voucher.currency_rate_difference > 0:
|
||||
account_id = voucher.company_id.property_expense_currency_exchange
|
||||
if not account_id:
|
||||
raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! "))
|
||||
else:
|
||||
account_id = voucher.company_id.property_income_currency_exchange
|
||||
if not account_id:
|
||||
raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Income Currency Rate' on the company! "))
|
||||
|
||||
currency_diff_line = {
|
||||
'name': _('Currency Difference'),
|
||||
'debit': voucher.currency_rate_difference > 0 and voucher.currency_rate_difference or 0.0,
|
||||
'credit': voucher.currency_rate_difference < 0 and -voucher.currency_rate_difference or 0.0,
|
||||
'account_id': account_id.id,
|
||||
'move_id': move_id,
|
||||
'journal_id': voucher.journal_id.id,
|
||||
'period_id': voucher.period_id.id,
|
||||
'partner_id': voucher.partner_id.id,
|
||||
'date': voucher.date,
|
||||
'date_maturity': voucher.date_due
|
||||
}
|
||||
move_line_obj.create(cr, uid, currency_diff_line, context=context)
|
||||
|
||||
move_line_pool.create(cr, uid, move_line)
|
||||
rec_list_ids = []
|
||||
for line in voucher.line_ids:
|
||||
line_total = debit - credit
|
||||
if inv.type == 'sale':
|
||||
line_total = line_total - currency_pool.compute(cr, uid, current_currency, company_currency, inv.tax_amount, context=context_multi_currency)
|
||||
elif inv.type == 'purchase':
|
||||
line_total = line_total + currency_pool.compute(cr, uid, current_currency, company_currency, inv.tax_amount, context=context_multi_currency)
|
||||
|
||||
for line in inv.line_ids:
|
||||
#create one move line per voucher line where amount is not 0.0
|
||||
if not line.amount:
|
||||
continue
|
||||
#we check if the voucher line is fully paid or not and create a move line to balance the payment and initial invoice if needed
|
||||
if line.amount == line.amount_unreconciled:
|
||||
amount = line.move_line_id.amount_residual #residual amount in company currency
|
||||
amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=context_multi_currency)
|
||||
amount_residual = line.move_line_id.amount_residual - amount #residual amount in company currency
|
||||
else:
|
||||
amount = line.amount_in_company_currency
|
||||
amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=context_multi_currency)
|
||||
amount_residual = 0.0
|
||||
move_line = {
|
||||
'journal_id': voucher.journal_id.id,
|
||||
'period_id': voucher.period_id.id,
|
||||
'journal_id': inv.journal_id.id,
|
||||
'period_id': inv.period_id.id,
|
||||
'name': line.name or '/',
|
||||
'account_id': line.account_id.id,
|
||||
'move_id': move_id,
|
||||
'partner_id': voucher.partner_id.id,
|
||||
'currency_id': company_currency <> line.currency_id.id and line.currency_id.id or False,
|
||||
'partner_id': inv.partner_id.id,
|
||||
'currency_id': company_currency <> current_currency and current_currency or False,
|
||||
'analytic_account_id': line.account_analytic_id and line.account_analytic_id.id or False,
|
||||
'quantity': 1,
|
||||
'credit': 0.0,
|
||||
'debit': 0.0,
|
||||
'date': voucher.date
|
||||
'date': inv.date
|
||||
}
|
||||
if amount < 0:
|
||||
amount = -amount
|
||||
|
@ -858,68 +766,97 @@ class account_voucher(osv.osv):
|
|||
else:
|
||||
line.type = 'dr'
|
||||
if (line.type=='dr'):
|
||||
line_total += amount
|
||||
move_line['debit'] = amount
|
||||
else:
|
||||
line_total -= amount
|
||||
move_line['credit'] = amount
|
||||
|
||||
if voucher.tax_id and voucher.type in ('sale', 'purchase'):
|
||||
if inv.tax_id and inv.type in ('sale', 'purchase'):
|
||||
move_line.update({
|
||||
'account_tax_id': voucher.tax_id.id,
|
||||
'account_tax_id': inv.tax_id.id,
|
||||
})
|
||||
if move_line.get('account_tax_id', False):
|
||||
tax_data = tax_obj.browse(cr, uid, [move_line['account_tax_id']], context=context)[0]
|
||||
if not (tax_data.base_code_id and tax_data.tax_code_id):
|
||||
raise osv.except_osv(_('No Account Base Code and Account Tax Code!'),_("You have to configure account base code and account tax code on the '%s' tax!") % (tax_data.name))
|
||||
sign = (move_line['debit'] - move_line['credit']) < 0 and -1 or 1
|
||||
move_line['amount_currency'] = company_currency <> line.currency_id.id and sign * line.amount or 0.0
|
||||
voucher_line = move_line_obj.create(cr, uid, move_line)
|
||||
move_line['amount_currency'] = company_currency <> current_currency and sign * line.amount or 0.0
|
||||
voucher_line = move_line_pool.create(cr, uid, move_line)
|
||||
rec_ids = [voucher_line, line.move_line_id.id]
|
||||
|
||||
# Change difference entry
|
||||
if amount_residual:
|
||||
if not inv.exchange_acc_id.id:
|
||||
raise osv.except_osv(_('Error!'), _('You must provide an account for the exchange difference.'))
|
||||
move_line = {
|
||||
'journal_id': inv.journal_id.id,
|
||||
'period_id': inv.period_id.id,
|
||||
'name': _('change')+': '+(line.name or '/'),
|
||||
'account_id': line.account_id.id,
|
||||
'move_id': move_id,
|
||||
'partner_id': inv.partner_id.id,
|
||||
'currency_id': company_currency <> current_currency and current_currency or False,
|
||||
'amount_currency': 0.0,
|
||||
'quantity': 1,
|
||||
'credit': amount_residual > 0 and amount_residual or 0.0,
|
||||
'debit': amount_residual < 0 and -amount_residual or 0.0,
|
||||
'date': inv.date
|
||||
}
|
||||
new_id = move_line_pool.create(cr, uid, move_line)
|
||||
move_line = {
|
||||
'journal_id': inv.journal_id.id,
|
||||
'period_id': inv.period_id.id,
|
||||
'name': _('change')+': '+(line.name or '/'),
|
||||
'account_id': inv.exchange_acc_id.id,
|
||||
'move_id': move_id,
|
||||
'amount_currency': 0.0,
|
||||
'partner_id': inv.partner_id.id,
|
||||
'currency_id': company_currency <> current_currency and current_currency or False,
|
||||
'quantity': 1,
|
||||
'debit': amount_residual > 0 and amount_residual or 0.0,
|
||||
'credit': amount_residual < 0 and -amount_residual or 0.0,
|
||||
'date': inv.date
|
||||
}
|
||||
move_line_pool.create(cr, uid, move_line)
|
||||
rec_ids.append(new_id)
|
||||
|
||||
if line.move_line_id.id:
|
||||
rec_ids = [voucher_line, line.move_line_id.id]
|
||||
rec_list_ids.append(rec_ids)
|
||||
|
||||
if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount):
|
||||
#create one line for the write off if needed
|
||||
diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency)
|
||||
if not currency_pool.is_zero(cr, uid, current_currency_obj, line_total):
|
||||
diff = line_total
|
||||
account_id = False
|
||||
write_off_name = ''
|
||||
|
||||
if voucher.payment_option == 'with_writeoff':
|
||||
account_id = voucher.writeoff_acc_id.id
|
||||
write_off_name = voucher.comment
|
||||
elif voucher.type in ('sale', 'receipt'):
|
||||
if not voucher.partner_id:
|
||||
account_id = property_obj.search(cr,uid,[('name','=','property_account_receivable'),('res_id','=',False)])
|
||||
else:
|
||||
account_id = voucher.partner_id.property_account_receivable.id
|
||||
if inv.payment_option == 'with_writeoff':
|
||||
account_id = inv.writeoff_acc_id.id
|
||||
write_off_name = inv.comment
|
||||
elif inv.type in ('sale', 'receipt'):
|
||||
account_id = inv.partner_id.property_account_receivable.id
|
||||
else:
|
||||
if not voucher.partner_id:
|
||||
account_id = property_obj.search(cr,uid,[('name','=','property_account_payable'),('res_id','=',False)])
|
||||
else:
|
||||
account_id = voucher.partner_id.property_account_payable.id
|
||||
if not account_id:
|
||||
raise osv.except_osv(_('Error !'), _('No receivable/payable account defined in properties!'))
|
||||
account_id = inv.partner_id.property_account_payable.id
|
||||
move_line = {
|
||||
'name': write_off_name or name,
|
||||
'account_id': account_id,
|
||||
'move_id': move_id,
|
||||
'partner_id': voucher.partner_id.id,
|
||||
'date': voucher.date,
|
||||
'debit': diff < 0 and -diff or 0.0,
|
||||
'partner_id': inv.partner_id.id,
|
||||
'date': inv.date,
|
||||
'credit': diff > 0 and diff or 0.0,
|
||||
'amount_currency': company_currency <> voucher_currency and -voucher.writeoff_amount or 0.0,
|
||||
'currency_id': company_currency <> voucher_currency and voucher_currency or False,
|
||||
'debit': diff < 0 and -diff or 0.0,
|
||||
#'amount_currency': company_currency <> current_currency and currency_pool.compute(cr, uid, company_currency, current_currency, diff * -1, context=context_multi_currency) or 0.0,
|
||||
#'currency_id': company_currency <> current_currency and current_currency or False,
|
||||
}
|
||||
move_line_obj.create(cr, uid, move_line)
|
||||
self.write(cr, uid, [voucher.id], {
|
||||
move_line_pool.create(cr, uid, move_line)
|
||||
self.write(cr, uid, [inv.id], {
|
||||
'move_id': move_id,
|
||||
'state': 'posted',
|
||||
'number': name,
|
||||
})
|
||||
if voucher.journal_id.entry_posted:
|
||||
if inv.journal_id.entry_posted:
|
||||
move_pool.post(cr, uid, [move_id], context={})
|
||||
for rec_ids in rec_list_ids:
|
||||
if len(rec_ids) >= 2:
|
||||
move_line_obj.reconcile_partial(cr, uid, rec_ids)
|
||||
move_line_pool.reconcile_partial(cr, uid, rec_ids, writeoff_acc_id=inv.exchange_acc_id.id, writeoff_period_id=inv.period_id.id, writeoff_journal_id=inv.journal_id.id)
|
||||
return True
|
||||
|
||||
def copy(self, cr, uid, id, default={}, context=None):
|
||||
|
@ -942,86 +879,45 @@ class account_voucher_line(osv.osv):
|
|||
_description = 'Voucher Lines'
|
||||
_order = "move_line_id"
|
||||
|
||||
def _currency_id(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
move_line = line.move_line_id
|
||||
if move_line:
|
||||
res[line.id] = move_line.currency_id and move_line.currency_id.id or move_line.company_id.currency_id.id
|
||||
else:
|
||||
res[line.id] = line.voucher_id.currency_id.id
|
||||
return res
|
||||
|
||||
def _get_amounts(self, cr, uid, line_browse_rec, context=None):
|
||||
if line_browse_rec.currency_id:
|
||||
amount_original = line_browse_rec.amount_currency or 0.0
|
||||
amount_unreconciled = line_browse_rec.amount_residual_currency
|
||||
elif line_browse_rec.credit > 0:
|
||||
amount_original = line_browse_rec.credit or 0.0
|
||||
amount_unreconciled = line_browse_rec.amount_residual
|
||||
else:
|
||||
amount_original = line_browse_rec.debit or 0.0
|
||||
amount_unreconciled = line_browse_rec.amount_residual
|
||||
return amount_original, amount_unreconciled
|
||||
|
||||
# If the payment is in the same currency than the invoice, we keep the same amount
|
||||
# Otherwise, we compute from company currency to payment currency
|
||||
def _compute_balance(self, cr, uid, ids, name, args, context=None):
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
res = {}
|
||||
rs_data = {}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
amount_original, amount_unreconciled = self._get_amounts(cr, uid, line.move_line_id, context)
|
||||
res[line.id] = {
|
||||
'amount_original': amount_original,
|
||||
'amount_unreconciled': amount_unreconciled,
|
||||
}
|
||||
ctx = context.copy()
|
||||
ctx.update({'date': line.voucher_id.date})
|
||||
res = {}
|
||||
company_currency = line.voucher_id.journal_id.company_id.currency_id.id
|
||||
voucher_currency = line.voucher_id.currency_id and line.voucher_id.currency_id.id or company_currency
|
||||
move_line = line.move_line_id or False
|
||||
|
||||
return res
|
||||
if not move_line:
|
||||
res['amount_original'] = 0.0
|
||||
res['amount_unreconciled'] = 0.0
|
||||
elif move_line.currency_id and voucher_currency==move_line.currency_id.id:
|
||||
res['amount_original'] = currency_pool.compute(cr, uid, move_line.currency_id.id, voucher_currency, abs(move_line.amount_currency), context=ctx)
|
||||
res['amount_unreconciled'] = currency_pool.compute(cr, uid, move_line.currency_id and move_line.currency_id.id or company_currency, voucher_currency, abs(move_line.amount_residual_currency), context=ctx)
|
||||
elif move_line and move_line.credit > 0:
|
||||
res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.credit, context=ctx)
|
||||
res['amount_unreconciled'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, abs(move_line.amount_residual), context=ctx)
|
||||
else:
|
||||
res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.debit, context=ctx)
|
||||
res['amount_unreconciled'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, abs(move_line.amount_residual), context=ctx)
|
||||
|
||||
def __company_currency_amount(self, cr, uid, line, amount, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
ctx = context.copy()
|
||||
ctx.update({'date': line.date_original})
|
||||
currency_pool = self.pool.get('res.currency')
|
||||
amount_company_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.company_currency_id.id, amount, context=ctx)
|
||||
ctx.update({'date': line.voucher_id.date})
|
||||
amount_voucher_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.voucher_currency_id.id, amount, context=ctx)
|
||||
return amount_company_cur, amount_voucher_cur
|
||||
|
||||
def onchange_amount(self, cr, uid, ids, amount, context=None):
|
||||
if not amount or not ids:
|
||||
return {'value':{'amount_in_company_currency': 0.0, 'amount_in_voucher_currency': 0.0}}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
amount_company_cur, amount_voucher_cur = self.__company_currency_amount(cr, uid, line, amount, context=context)
|
||||
return {'value': {'amount_in_company_currency': amount_company_cur, 'amount_in_voucher_currency': amount_voucher_cur}}
|
||||
|
||||
def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context)
|
||||
res[line.id] = {
|
||||
'amount_in_company_currency': amount_in_company_currency,
|
||||
'amount_in_voucher_currency': amount_in_voucher_currency,
|
||||
}
|
||||
return res
|
||||
rs_data[line.id] = res
|
||||
return rs_data
|
||||
|
||||
_columns = {
|
||||
'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'),
|
||||
'move_line_id': fields.many2one('account.move.line', 'Journal Item'),
|
||||
'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'),
|
||||
'name':fields.char('Description', size=256),
|
||||
'account_id':fields.many2one('account.account','Account', required=True),
|
||||
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'),
|
||||
'untax_amount':fields.float('Untax Amount'),
|
||||
|
||||
'currency_id': fields.function(_currency_id, string='Currency', type='many2one', relation='res.currency'),
|
||||
'company_currency_id': fields.related('move_line_id','company_id','currency_id', type='many2one', relation='res.currency', string="Company Currency"),
|
||||
'voucher_currency_id': fields.related('voucher_id', 'currency_id', type='many2one', relation='res.currency', string="Voucher Currency"),
|
||||
|
||||
'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')),
|
||||
'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"),
|
||||
'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"),
|
||||
|
||||
'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'),
|
||||
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
'move_line_id': fields.many2one('account.move.line', 'Journal Item'),
|
||||
'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1),
|
||||
'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1),
|
||||
'amount_original': fields.function(_compute_balance, multi='dc', type='float', string='Original Amount', store=True),
|
||||
|
@ -1043,9 +939,9 @@ class account_voucher_line(osv.osv):
|
|||
@return: Returns a dict which contains new values, and context
|
||||
"""
|
||||
res = {}
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_line_pool = self.pool.get('account.move.line')
|
||||
if move_line_id:
|
||||
move_line = move_line_obj.browse(cr, user, move_line_id, context=context)
|
||||
move_line = move_line_pool.browse(cr, user, move_line_id, context=context)
|
||||
if move_line.credit:
|
||||
ttype = 'dr'
|
||||
else:
|
||||
|
@ -1120,7 +1016,7 @@ class account_bank_statement(osv.osv):
|
|||
bank_st_line_obj = self.pool.get('account.bank.statement.line')
|
||||
st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
|
||||
if st_line.voucher_id:
|
||||
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number, 'date': st_line.date}, context=context)
|
||||
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
|
||||
if st_line.voucher_id.state == 'cancel':
|
||||
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context)
|
||||
wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr)
|
||||
|
@ -1130,7 +1026,7 @@ class account_bank_statement(osv.osv):
|
|||
'move_ids': [(4, v.move_id.id, False)]
|
||||
})
|
||||
|
||||
return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id, 'date': st_line.date}, update_check=False, context=context)
|
||||
return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
|
||||
return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line.id, company_currency_id, next_number, context=context)
|
||||
|
||||
account_bank_statement()
|
||||
|
|
|
@ -1,28 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_invoice_customer" model="ir.ui.view">
|
||||
<field name="name">account.invoice.customer.pay</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="account.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="invoice_open" position="after">
|
||||
<button name="invoice_pay_customer" type="object" string="Payment" states="open" icon="gtk-go-forward"/>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_supplier" model="ir.ui.view">
|
||||
<field name="name">account.invoice.supplier.pay</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="account.invoice_supplier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="invoice_open" position="after">
|
||||
<button name="invoice_pay_customer" type="object" string="Pay Invoice" states="open" icon="gtk-go-forward"/>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_invoice_customer" model="ir.ui.view">
|
||||
<field name="name">account.invoice.customer.pay</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="account.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="invoice_open" position="after">
|
||||
<button name="invoice_pay_customer" type="object" string="Payment" states="open" icon="gtk-go-forward"/>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_invoice_supplier" model="ir.ui.view">
|
||||
<field name="name">account.invoice.supplier.pay</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="account.invoice_supplier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="invoice_open" position="after">
|
||||
<button name="invoice_pay_customer" type="object" string="Pay Invoice" states="open" icon="gtk-go-forward"/>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<form string="Accounting Voucher">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
|
||||
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
|
||||
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id" widget="selection" select="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
|
||||
<field name="type" required="1"/>
|
||||
<field name="name" colspan="2"/>
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
|
||||
class res_company(osv.osv):
|
||||
_inherit = "res.company"
|
||||
_columns = {
|
||||
'property_income_currency_exchange': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Income Currency Rate",
|
||||
view_load=True,
|
||||
domain="[('type', '=', 'other')]",),
|
||||
'property_expense_currency_exchange': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Expense Currency Rate",
|
||||
view_load=True,
|
||||
domain="[('type', '=', 'other')]",),
|
||||
}
|
||||
|
||||
res_company()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="view_company_inherit_currency_xchange_form">
|
||||
<field name="name">res.company.form.inherit</field>
|
||||
<field name="inherit_id" ref="base.view_company_form"/>
|
||||
<field name="model">res.company</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="currency_id" position="after">
|
||||
<field name="property_income_currency_exchange" colspan="2"/>
|
||||
<field name="property_expense_currency_exchange" colspan="2"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -45,11 +45,10 @@ class invoice(osv.osv):
|
|||
'close_after_process': True,
|
||||
'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'
|
||||
'default_type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment'
|
||||
}
|
||||
}
|
||||
|
||||
invoice()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -73,7 +73,7 @@ class sale_receipt_report(osv.osv):
|
|||
to_char(av.date, 'MM') as month,
|
||||
to_char(av.date, 'YYYY-MM-DD') as day,
|
||||
av.partner_id as partner_id,
|
||||
av.currency_id as currency_id,
|
||||
aj.currency as currency_id,
|
||||
av.journal_id as journal_id,
|
||||
rp.user_id as user_id,
|
||||
av.company_id as company_id,
|
||||
|
@ -111,7 +111,7 @@ class sale_receipt_report(osv.osv):
|
|||
to_char(av.date, 'MM'),
|
||||
to_char(av.date, 'YYYY-MM-DD'),
|
||||
av.partner_id,
|
||||
av.currency_id,
|
||||
aj.currency,
|
||||
av.journal_id,
|
||||
rp.user_id,
|
||||
av.company_id,
|
||||
|
|
|
@ -1,355 +0,0 @@
|
|||
-
|
||||
In order to check the Account_voucher module with multi-currency in OpenERP,
|
||||
I create 2 Invoices in USD and make 2 Payments in USD based on the currency rating on that particular date
|
||||
-
|
||||
I create currency USD in OpenERP for January of 1.333333 Rate
|
||||
-
|
||||
!python {model: res.currency.rate}: |
|
||||
from datetime import datetime
|
||||
curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')])
|
||||
date = '%s-01-01' %(datetime.now().year)
|
||||
ids = self.search(cr, uid, [('currency_id','=',curr_id), ('name', '=', date)])
|
||||
self.write(cr, uid, ids, {'rate': 1.333333})
|
||||
-
|
||||
I create currency USD in OpenERP for February of 1.250000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: feb_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
rate: 1.250000
|
||||
|
||||
-
|
||||
I create currency USD in OpenERP for March of 1.111111 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: mar_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-03-01' %(datetime.now().year)"
|
||||
rate: 1.111111
|
||||
|
||||
-
|
||||
I create currency USD in OpenERP for April of 1.052632 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: apr_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-04-01' %(datetime.now().year)"
|
||||
rate: 1.052632
|
||||
|
||||
-
|
||||
I create a bank journal with USD as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_USD}:
|
||||
name: Bank Journal(USD)
|
||||
code: BUSD
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.USD
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
|
||||
-
|
||||
I set up some accounts for currency rate expense/income in my company
|
||||
-
|
||||
!record {model: res.company, id: base.main_company}:
|
||||
property_expense_currency_exchange: account.o_expense
|
||||
property_income_currency_exchange: account.o_income
|
||||
-
|
||||
I create new partner Mark Strauss.
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_strauss0}:
|
||||
address:
|
||||
- city: paris
|
||||
country_id: base.fr
|
||||
name: Mark Strauss
|
||||
street: 1 rue Rockfeller
|
||||
type: invoice
|
||||
zip: '75016'
|
||||
name: Mr. Mark Strauss
|
||||
-
|
||||
I create the first invoice on 1st January for 200 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_invoice_jan}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 200.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_strauss0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_invoice_jan}
|
||||
-
|
||||
I check that first invoice move is correct for debtor account (debit - credit == 150.0)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_jan"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 150.0), "Invoice move is not correct for debtors account"
|
||||
-
|
||||
I create the second invoice on 1st February for 100 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_invoice_feb}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
period_id: account.period_2
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 100.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_strauss0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_invoice_feb}
|
||||
-
|
||||
I check that second invoice move is correct for debtor account (debit - credit == 80)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_feb"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 80), "Invoice move is not correct for debtors account"
|
||||
|
||||
-
|
||||
I create the first voucher of payment
|
||||
<create with values 240 USD, journal USD, and fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.00, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 240.00,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.USD'),
|
||||
'journal_id': ref('bank_journal_USD'),
|
||||
'partner_id': ref('res_partner_strauss0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-03-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'First payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 200.00:
|
||||
item['amount'] = 180.00
|
||||
else:
|
||||
item['amount'] = 70.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is -10.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == -10.0), "Writeoff amount is not -10.0"
|
||||
-
|
||||
I check that currency rate difference is -34.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my first voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with -180 and -70 as amount_currency columns and that their credit columns are respectively 135 and 56
|
||||
-
|
||||
I check that my currency rate difference is correct. 34 in credit with no amount_currency
|
||||
-
|
||||
I check that my write-off is correct. 9 debit and 10 amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == -180.00:
|
||||
assert move_line.credit == 135.00, "Debtor account has wrong entry."
|
||||
elif move_line.amount_currency == -70.00:
|
||||
assert move_line.credit == 56.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 34.00:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect currency rate difference."
|
||||
elif move_line.amount_currency == 10.00:
|
||||
assert move_line.debit == 9.00, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of Invoice1, should be 20 in amount_currency and 15 in company currency
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_jan"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15.0) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_feb"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 30.0 and move_line.amount_residual == 24.0) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I create the second voucher of payment
|
||||
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
|
||||
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.00, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 45.00,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.USD'),
|
||||
'journal_id': ref('bank_journal_USD'),
|
||||
'partner_id': ref('res_partner_strauss0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-04-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'Second payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 20.00:
|
||||
item['amount'] = 20.00
|
||||
else:
|
||||
item['amount'] = 30.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is -5.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0"
|
||||
-
|
||||
I check that currency rate difference is -8.50
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my second voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24.
|
||||
-
|
||||
I check that my currency rate difference is correct. 8.5 in credit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. 4.75 debit and 5 amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == -20.00:
|
||||
assert move_line.credit == 15.00, "Debtor account has wrong entry."
|
||||
elif move_line.amount_currency == -30.00:
|
||||
assert move_line.credit == 24.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 8.50:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.amount_currency == 5.00:
|
||||
assert move_line.debit == 4.75, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_jan"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_invoice_feb"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for second Invoice"
|
|
@ -1,328 +0,0 @@
|
|||
-
|
||||
In order to check the Account_voucher module with multi-currency in OpenERP,
|
||||
I create 2 Invoices in USD and make 2 Payments one in USD and another in EUR, based on the currency rating on that particular date
|
||||
-
|
||||
I create a bank journal with EUR as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_EUR}:
|
||||
name: Bank Journal(EUR)
|
||||
code: BEUR
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.EUR
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I create a bank journal with USD as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_USD}:
|
||||
name: Bank Journal(USD)
|
||||
code: BUSD
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.USD
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I create a new partner Robert Clements
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_clements0}:
|
||||
address:
|
||||
- city: marseille
|
||||
country_id: base.fr
|
||||
name: Robert
|
||||
street: 1 rue Rockfeller
|
||||
type: invoice
|
||||
zip: '13016'
|
||||
name: Mr.Robert Clements
|
||||
-
|
||||
I create the first invoice on 1st January for 200 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_first_invoice_jan_suppl}:
|
||||
account_id: account.a_pay
|
||||
type : in_invoice
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_expense
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 200.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_clements0
|
||||
reference_type: none
|
||||
check_total : 200
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_suppl}
|
||||
-
|
||||
I check that first invoice move is correct for debtor account(debit - credit == -150)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_suppl"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == -150.00), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the second invoice on 1st February for 100 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_second_invoice_feb_suppl}:
|
||||
account_id: account.a_pay
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
period_id: account.period_2
|
||||
type : in_invoice
|
||||
invoice_line:
|
||||
- account_id: account.a_expense
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 100.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_clements0
|
||||
reference_type: none
|
||||
check_total : 100.0
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_suppl}
|
||||
-
|
||||
I check that second invoice move is correct for debtor account (debit - credit == -80)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_suppl"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == -80), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the first voucher of payment
|
||||
<create with values 240 EUR, journal EUR, and fills amount 180 for the invoice of 200$ and 70 for the invoice of 100$>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 240.0, 2, ttype='payment', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 240.0,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.EUR'),
|
||||
'journal_id': ref('bank_journal_EUR'),
|
||||
'partner_id': ref('res_partner_clements0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'payment',
|
||||
'date': time.strftime("%Y-03-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'First payment',
|
||||
}
|
||||
if not res['value']['line_dr_ids']:
|
||||
res['value']['line_dr_ids'] = [{'type': 'dr', 'account_id': ref('account.a_pay'),}]
|
||||
for item in res['value']['line_dr_ids']:
|
||||
if item['amount_unreconciled'] == 200.00:
|
||||
item['amount'] = 180.00
|
||||
else:
|
||||
item['amount'] = 70.00
|
||||
vals['line_dr_ids'] = [(0,0,i) for i in res['value']['line_dr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is -15.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == -15.0), "Writeoff amount is not -15.0"
|
||||
-
|
||||
I check that currency rate difference is 34.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == 34.0), "Currency rate difference is not 34.0"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my creditor account is correct
|
||||
-
|
||||
I check that the creditor account has 2 new lines with 180 and 70 in amount_currency columns and their debit columns are respectively 135 and 56 and currency is USD($).
|
||||
-
|
||||
I check that my currency rate difference is correct. -34 in credit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. -15 in credit with no amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == 180.00:
|
||||
assert move_line.debit == 135.00, "Creditor account has wrong entry."
|
||||
elif move_line.amount_currency == 70.00:
|
||||
assert move_line.debit == 56.00, "Debtor account has wrong entry."
|
||||
elif move_line.debit == 34.00:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.debit == 15.00:
|
||||
assert move_line.amount_currency == 0.00, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_suppl"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_suppl"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice"
|
||||
-
|
||||
I create the second voucher of payment
|
||||
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 45.0, 2, ttype='payment', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 45.0,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.USD'),
|
||||
'journal_id': ref('bank_journal_USD'),
|
||||
'partner_id': ref('res_partner_clements0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'payment',
|
||||
'date': time.strftime("%Y-04-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'Second payment',
|
||||
}
|
||||
if not res['value']['line_dr_ids']:
|
||||
res['value']['line_dr_ids'] = [{'type': 'dr', 'account_id': ref('account.a_pay'),}]
|
||||
for item in res['value']['line_dr_ids']:
|
||||
if item['amount_unreconciled'] == 20.00:
|
||||
item['amount'] = 20.00
|
||||
else:
|
||||
item['amount'] = 30.00
|
||||
vals['line_dr_ids'] = [(0,0,i) for i in res['value']['line_dr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is -5.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == 5.0), "Writeoff amount is not 5.0"
|
||||
-
|
||||
I check that currency rate difference is 8.50
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == 8.50), "Currency rate difference is not 8.50"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that my voucher state is posted
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert voucher_id.state == 'posted', "Voucher state is not posted"
|
||||
-
|
||||
I check that my creditor account is correct
|
||||
-
|
||||
I check that the creditor account has 2 new lines with 20 and 30 in amount_currency columns and their debit columns are respectively 15 and 24 and currency is USD($).
|
||||
-
|
||||
I check that my currency rate difference is correct. 8.50 in debit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. 4.75 in credit and 5 in amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == 20.00:
|
||||
assert move_line.debit == 15.00, "Debtor account has wrong entry."
|
||||
elif move_line.amount_currency == 30.00:
|
||||
assert move_line.debit == 24.00, "Debtor account has wrong entry."
|
||||
elif move_line.debit == 8.50:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.amount_currency == -5.00:
|
||||
assert move_line.credit == 4.75, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_suppl"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amount of invoice 2, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_suppl"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for second Invoice"
|
|
@ -1,360 +0,0 @@
|
|||
-
|
||||
In order to check the Account_voucher module with multi-currency in OpenERP,
|
||||
I create 2 Invoices in USD and make 2 Payments one in USD and another in EUR, based on the currency rating on that particular date
|
||||
-
|
||||
I create currency USD in OpenERP for January of 1.333333 Rate
|
||||
-
|
||||
!python {model: res.currency.rate}: |
|
||||
from datetime import datetime
|
||||
curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')])
|
||||
date = '%s-01-01' %(datetime.now().year)
|
||||
ids = self.search(cr, uid, [('currency_id', '=', curr_id), ('name', '=', date)])
|
||||
self.write(cr, uid, ids, {'rate': 1.333333})
|
||||
-
|
||||
I create currency USD in OpenERP for February of 1.250000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: febr_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
rate: 1.250000
|
||||
-
|
||||
I create currency USD in OpenERP for March of 1.111111 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: marc_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-03-01' %(datetime.now().year)"
|
||||
rate: 1.111111
|
||||
-
|
||||
I create currency USD in OpenERP for April of 1.052632 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: apri_usd}:
|
||||
currency_id: base.USD
|
||||
name: !eval "'%s-04-01' %(datetime.now().year)"
|
||||
rate: 1.052632
|
||||
-
|
||||
I create a bank journal with EUR as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_EUR}:
|
||||
name: Bank Journal(EUR)
|
||||
code: BEUR
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.EUR
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I create a bank journal with USD as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_USD}:
|
||||
name: Bank Journal(USD)
|
||||
code: BUSD
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.USD
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I set up some accounts for currency rate expense/income in my company
|
||||
-
|
||||
!record {model: res.company, id: base.main_company}:
|
||||
property_expense_currency_exchange: account.o_expense
|
||||
property_income_currency_exchange: account.o_income
|
||||
-
|
||||
I create a new partner Michael Geller
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_michael0}:
|
||||
address:
|
||||
- city: paris
|
||||
country_id: base.fr
|
||||
name: Michael
|
||||
street: 1 rue Rockfeller
|
||||
type: invoice
|
||||
zip: '75016'
|
||||
name: Mr.Michael Geller
|
||||
-
|
||||
I create the first invoice on 1st January for 200 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_first_invoice_jan}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 200.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_michael0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan}
|
||||
-
|
||||
I check that first invoice move is correct for debtor account(debit - credit == 150)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 150.00), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the second invoice on 1st February for 100 USD
|
||||
-
|
||||
!record {model: account.invoice, id: account_second_invoice_feb}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.USD
|
||||
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
period_id: account.period_2
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 100.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_michael0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb}
|
||||
-
|
||||
I check that second invoice move is correct for debtor account (debit - credit == 80)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 80), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the first voucher of payment
|
||||
<create with values 240 EUR, journal EUR, and fills amount 180 for the invoice of 200$ and 70 for the invoice of 100$>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 240.0, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 240.0,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.EUR'),
|
||||
'journal_id': ref('bank_journal_EUR'),
|
||||
'partner_id': ref('res_partner_michael0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-03-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'First payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 200.00:
|
||||
item['amount'] = 180.00
|
||||
else:
|
||||
item['amount'] = 70.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is 15.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == 15.0), "Writeoff amount is not 15.0"
|
||||
-
|
||||
I check that currency rate difference is -34.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with -180 and -70 in amount_currency columns and their credit columns are respectively 135 and 56 and currency is USD($).
|
||||
-
|
||||
I check that my currency rate difference is correct. 34 in credit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. 15 in credit with no amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == -180.00:
|
||||
assert move_line.credit == 135.00, "Debtor account has wrong entry."
|
||||
elif move_line.amount_currency == -70.00:
|
||||
assert move_line.credit == 56.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 34.00:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.credit == 15.00:
|
||||
assert move_line.amount_currency == 0.00, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice"
|
||||
-
|
||||
I create the second voucher of payment
|
||||
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 45.0, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 45.0,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.USD'),
|
||||
'journal_id': ref('bank_journal_USD'),
|
||||
'partner_id': ref('res_partner_michael0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-04-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'Second payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 20.00:
|
||||
item['amount'] = 20.00
|
||||
else:
|
||||
item['amount'] = 30.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is -5.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0"
|
||||
-
|
||||
I check that currency rate difference is -8.50
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that my voucher state is posted
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert voucher_id.state == 'posted', "Voucher state is not posted"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with -20 and -30 in amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($).
|
||||
-
|
||||
I check that my currency rate difference is correct. 8.50 in credit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. 4.75 in debit and 5 in amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == -20.00:
|
||||
assert move_line.credit == 15.00, "Debtor account has wrong entry."
|
||||
elif move_line.amount_currency == -30.00:
|
||||
assert move_line.credit == 24.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 8.50:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.amount_currency == 5.00:
|
||||
assert move_line.debit == 4.75, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of invoice 2, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for second Invoice"
|
|
@ -1,331 +0,0 @@
|
|||
-
|
||||
In order to check the Account_voucher module with multi-currency in OpenERP,
|
||||
I create 2 Invoices in EUR and make 2 Payments in EUR based on the currency rating on that particular date.
|
||||
-
|
||||
I create currency EUR in OpenERP for January of 1.000000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: jan_eur}:
|
||||
currency_id: base.EUR
|
||||
name: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
rate: 1.000000
|
||||
-
|
||||
I create currency EUR in OpenERP for February of 1.000000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: feb_eur}:
|
||||
currency_id: base.EUR
|
||||
name: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
rate: 1.000000
|
||||
-
|
||||
I create currency EUR in OpenERP for March of 1.000000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: mar_eur}:
|
||||
currency_id: base.EUR
|
||||
name: !eval "'%s-03-01' %(datetime.now().year)"
|
||||
rate: 1.000000
|
||||
-
|
||||
I create currency EUR in OpenERP for April of 1.000000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: apr_eur}:
|
||||
currency_id: base.EUR
|
||||
name: !eval "'%s-04-01' %(datetime.now().year)"
|
||||
rate: 1.000000
|
||||
-
|
||||
I create a bank journal with EUR as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_EUR}:
|
||||
name: Bank Journal(EUR)
|
||||
code: BEUR
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.EUR
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I set up some accounts for currency rate expense/income in my company
|
||||
-
|
||||
!record {model: res.company, id: base.main_company}:
|
||||
property_expense_currency_exchange: account.o_expense
|
||||
property_income_currency_exchange: account.o_income
|
||||
-
|
||||
I create a new partner Peter Lawson.
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_peter0}:
|
||||
address:
|
||||
- city: paris
|
||||
country_id: base.fr
|
||||
name: Peter
|
||||
street: 1 rue Rockfeller
|
||||
type: invoice
|
||||
zip: '75016'
|
||||
name: Mr.Peter Lawson
|
||||
-
|
||||
I create the first invoice on 1st January for 150 EUR
|
||||
-
|
||||
!record {model: account.invoice, id: account_first_invoice_jan_eur}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.EUR
|
||||
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 150.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_peter0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_eur}
|
||||
-
|
||||
I check that first invoice move is correct for debtor account(debit - credit == 150)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 150.00), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the second invoice on 1st February for 80 EUR
|
||||
-
|
||||
!record {model: account.invoice, id: account_second_invoice_feb_eur}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.EUR
|
||||
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 80.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_peter0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_eur}
|
||||
-
|
||||
I check that second invoice move is correct for debtor account (debit - credit == 80)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 80.00), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the first voucher of payment
|
||||
<create with values 120 EUR, journal EUR, and fill amounts 100 for the invoice of 150 EUR and 20 for the invoice of 80 EUR>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 120.00,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.EUR'),
|
||||
'journal_id': ref('bank_journal_EUR'),
|
||||
'partner_id': ref('res_partner_peter0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-03-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'First payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 150.00:
|
||||
item['amount'] = 100.00
|
||||
else:
|
||||
item['amount'] = 20.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is 0.00
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0.00"
|
||||
-
|
||||
I check that currency rate difference is 0.00
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0.00"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my first voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 20 and 100 respectively
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.credit == 20.00:
|
||||
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 100.00:
|
||||
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
|
||||
-
|
||||
I check the residual amount of Invoice1 is 50
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 50.0 and move_line.amount_residual == 50.0) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2 is 60
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 60.0 and move_line.amount_residual == 60.0) , "Residual amount is not correct for second Invoice"
|
||||
-
|
||||
I create the second voucher of payment and check to let open the debtor overpaid amount.
|
||||
<create with values 120 EUR, journal EUR, and fill amounts 50 for the invoice of 150 EUR and 70 for the invoice of 80 EUR>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 120.00,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.EUR'),
|
||||
'journal_id': ref('bank_journal_EUR'),
|
||||
'partner_id': ref('res_partner_peter0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-04-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'Second payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 50.00:
|
||||
item['amount'] = 50.00
|
||||
elif item['amount_unreconciled'] == 60.00:
|
||||
item['amount'] = 70.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is 0.00
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'),('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0"
|
||||
-
|
||||
I check that currency rate difference is 0.00
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my second voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 70 and 50
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.credit == 70.00:
|
||||
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
|
||||
elif move_line.credit == 50.00:
|
||||
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
|
||||
-
|
||||
I check the residual amount of Invoice1 is 0
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0 and move_line.amount_residual == 0) , "Residual amount is not correct for first Invoice"
|
||||
-
|
||||
I check the residual amuont of Invoice2 is -10
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == -10.0 and move_line.amount_residual == -10.0) , "Residual amount is not correct for second Invoice"
|
|
@ -1,194 +0,0 @@
|
|||
-
|
||||
In order to check the Account_voucher module with multi-currency in OpenERP,
|
||||
I create an invoice in CAD and make its Payment in CHF based on the currency rating on that particular date.
|
||||
-
|
||||
I create currency CAD in OpenERP for January of 1.338800 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: jan_cad}:
|
||||
currency_id: base.CAD
|
||||
name: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
rate: 1.338800
|
||||
-
|
||||
I create currency CAD in OpenERP for March of 2.000000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: mar_cad}:
|
||||
currency_id: base.CAD
|
||||
name: !eval "'%s-03-01' %(datetime.now().year)"
|
||||
rate: 2.000000
|
||||
-
|
||||
I create currency CHF in OpenERP for January of 1.308600 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: jan_chf}:
|
||||
currency_id: base.CHF
|
||||
name: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
rate: 1.308600
|
||||
-
|
||||
I create currency CHF in OpenERP for March of 1.250000 Rate
|
||||
-
|
||||
!record {model: res.currency.rate, id: mar_chf}:
|
||||
currency_id: base.CHF
|
||||
name: !eval "'%s-03-01' %(datetime.now().year)"
|
||||
rate: 1.250000
|
||||
-
|
||||
I create a bank journal with CHF as currency
|
||||
-
|
||||
!record {model: account.journal, id: bank_journal_CHF}:
|
||||
name: Bank Journal(CHF)
|
||||
code: BCHF
|
||||
type: bank
|
||||
analytic_journal_id: account.sit
|
||||
sequence_id: account.sequence_bank_journal
|
||||
default_debit_account_id: account.cash
|
||||
default_credit_account_id: account.cash
|
||||
currency: base.CHF
|
||||
company_id: base.main_company
|
||||
view_id: account.account_journal_bank_view
|
||||
-
|
||||
I set up some accounts for currency rate expense/income in my company
|
||||
-
|
||||
!record {model: res.company, id: base.main_company}:
|
||||
property_expense_currency_exchange: account.o_expense
|
||||
property_income_currency_exchange: account.o_income
|
||||
-
|
||||
I create a new partner John Armani.
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_john0}:
|
||||
address:
|
||||
- city: paris
|
||||
country_id: base.fr
|
||||
name: John
|
||||
street: 1 rue Rockfeller
|
||||
type: invoice
|
||||
zip: '75016'
|
||||
name: Mr.John Armani
|
||||
-
|
||||
I create the first invoice on 1st January for 200 CAD
|
||||
-
|
||||
!record {model: account.invoice, id: account_first_invoice_jan_cad}:
|
||||
account_id: account.a_recv
|
||||
address_contact_id: base.res_partner_address_3000
|
||||
address_invoice_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
currency_id: base.CAD
|
||||
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
period_id: account.period_1
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PC1] Basic PC'
|
||||
price_unit: 200.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_pc1
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.sales_journal
|
||||
partner_id: res_partner_john0
|
||||
reference_type: none
|
||||
-
|
||||
I Validate invoice by clicking on Validate button
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_cad}
|
||||
-
|
||||
I check that first invoice move is correct for debtor account (debit - credit == 149.39)
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad"))
|
||||
assert invoice_id.move_id, "Move not created for open invoice"
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.debit - move_line.credit == 149.39), "Invoice move is incorrect for debtors account"
|
||||
-
|
||||
I create the first voucher of payment
|
||||
<create with values 300 CHF, journal CHF, and fill amounts 200 for the invoice of 200 CAD>
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc, time
|
||||
vals = {}
|
||||
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.00, 2, ttype='receipt', date=False)
|
||||
vals = {
|
||||
'account_id': ref('account.cash'),
|
||||
'amount': 300.00,
|
||||
'company_id': ref('base.main_company'),
|
||||
'currency_id': ref('base.CHF'),
|
||||
'journal_id': ref('bank_journal_CHF'),
|
||||
'partner_id': ref('res_partner_john0'),
|
||||
'period_id': ref('account.period_3'),
|
||||
'type': 'receipt',
|
||||
'date': time.strftime("%Y-03-01"),
|
||||
'payment_option': 'with_writeoff',
|
||||
'writeoff_acc_id': ref('account.a_expense'),
|
||||
'comment': 'Write Off',
|
||||
'name': 'First payment',
|
||||
}
|
||||
if not res['value']['line_cr_ids']:
|
||||
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
|
||||
for item in res['value']['line_cr_ids']:
|
||||
if item['amount_unreconciled'] == 200.00:
|
||||
item['amount'] = 200.00
|
||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||
id = self.create(cr, uid, vals)
|
||||
voucher_id = self.browse(cr, uid, id)
|
||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||
-
|
||||
I check that writeoff amount computed is 175.0
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
assert (voucher_id.writeoff_amount == 175.0), "Writeoff amount is not 175.0"
|
||||
-
|
||||
I check that currency rate difference is 49.39
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
curr_diff = float(str(voucher_id.currency_rate_difference))
|
||||
assert (curr_diff == 49.39), "Currency rate difference is not 49.39"
|
||||
-
|
||||
I confirm the voucher
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
import netsvc
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
|
||||
-
|
||||
I check that the move of my voucher is valid
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
assert move_line.state == 'valid', "Voucher move is not valid"
|
||||
assert voucher_id.state == 'posted', "Voucher state is not posted"
|
||||
-
|
||||
I check that my debtor account is correct
|
||||
-
|
||||
I check that the debtor account has 1 new line with -200 as amount_currency columns and 149.39 of credit and currency is CAD($).
|
||||
-
|
||||
I check that my currency rate difference is correct. 49.39 in debit with no amount_currency
|
||||
-
|
||||
I check that my writeoff is correct. 140 credit and -175 amount_currency
|
||||
-
|
||||
!python {model: account.voucher}: |
|
||||
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
|
||||
voucher_id = self.browse(cr, uid, voucher[0])
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
|
||||
for move_line in move_line_obj.browse(cr, uid, move_lines):
|
||||
if move_line.amount_currency == -200:
|
||||
assert move_line.credit == 149.39, "Debtor account has wrong entry."
|
||||
elif move_line.debit == 49.39:
|
||||
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
|
||||
elif move_line.credit == 140.00:
|
||||
assert move_line.amount_currency == -175.00, "Writeoff amount is wrong."
|
||||
-
|
||||
I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad"))
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
|
||||
move_line = move_line_obj.browse(cr, uid, move_lines[0])
|
||||
assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice"
|
|
@ -74,24 +74,14 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Bill Payment">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id"
|
||||
required="1"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
string="Supplier"/>
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" context="{'invoice_currency':currency_id}" string="Supplier"/>
|
||||
<field name="amount" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id"
|
||||
domain="[('type','in',['bank', 'cash'])]"
|
||||
widget="selection" select="1"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
|
||||
string="Payment Method"/>
|
||||
<field name="amount"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="date"
|
||||
select="1"
|
||||
on_change="onchange_date(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="reference" select="1" string="Payment Ref"/>
|
||||
<field name="name" colspan="2"/>
|
||||
<field name="account_id"
|
||||
|
@ -104,37 +94,25 @@
|
|||
<page string="Payment Information">
|
||||
<field name="line_dr_ids" attrs="{'invisible': [('type', '=', 'receipt')]}" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
|
||||
<tree string="Open Supplier Journal Entries" editable="bottom">
|
||||
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
on_change="onchange_move_line_id(move_line_id)"
|
||||
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
|
||||
/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]" invisible="1"/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="amount_original" readonly="1"/>
|
||||
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('type', '=', 'payment')]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
|
||||
<tree string="Open Customer Journal Entries" editable="bottom">
|
||||
<field name="move_line_id" required="1"/>
|
||||
<field name="move_line_id"/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="date_original"/>
|
||||
<field name="amount_original"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group col="2" colspan="3">
|
||||
|
@ -159,28 +137,15 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Bill Payment">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id"
|
||||
domain="[('supplier','=',True)]"
|
||||
required="1"
|
||||
invisible="context.get('line_type', False)"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
string="Supplier"/>
|
||||
<field name="partner_id" domain="[('supplier','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" context="{'invoice_currency':currency_id}" string="Supplier"/>
|
||||
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id"
|
||||
domain="[('type','in',['bank', 'cash'])]"
|
||||
invisible="context.get('line_type', False)"
|
||||
widget="selection" select="1"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
|
||||
string="Payment Method"/>
|
||||
<field name="amount"
|
||||
invisible="context.get('line_type', False)"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="date"
|
||||
invisible="context.get('line_type', False)"
|
||||
on_change="onchange_date(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
|
||||
<field name="name" colspan="2" invisible="context.get('line_type', False)"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
|
@ -194,37 +159,26 @@
|
|||
<page string="Payment Information">
|
||||
<field name="line_dr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140">
|
||||
<tree string="Supplier Invoices and Outstanding transactions" editable="bottom">
|
||||
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
on_change="onchange_move_line_id(move_line_id)"
|
||||
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
|
||||
required="1"
|
||||
/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]"/>
|
||||
<field name="account_id" groups="base.group_no_one" domain="[('type','=','payable')]"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="amount_original" readonly="1"/>
|
||||
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}">
|
||||
<tree string="Credits" editable="bottom">
|
||||
<field name="move_line_id" required="1"/>
|
||||
<field name="move_line_id"/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="date_original"/>
|
||||
<field name="amount_original"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group col="2" colspan="3">
|
||||
|
@ -232,26 +186,27 @@
|
|||
<field name="narration" colspan="2" nolabel="1"/>
|
||||
</group>
|
||||
<group col="2" colspan="1">
|
||||
<group col="4" colspan="1">
|
||||
<separator string="Payment Options" colspan="4"/>
|
||||
<field name="payment_option" required="1" colspan="4"/>
|
||||
<field name="currency_rate_difference" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
<field name="company_currency" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" nolabel="1"/><newline/>
|
||||
<group col="2" colspan="1">
|
||||
<field name="exchange_acc_id"
|
||||
attrs="{'invisible':[('currency_id','=',False)]}"
|
||||
domain="[('type','=','other')]"/>
|
||||
<field name="analytic_id"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
<separator string="Payment Options" colspan="2"/>
|
||||
<field name="payment_option" required="1"/>
|
||||
<field name="writeoff_amount"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
<field name="currency_id2" nolabel="1" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/><newline/>
|
||||
<field name="writeoff_acc_id"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
||||
domain="[('type','=','other')]" colspan="4"/>
|
||||
domain="[('type','=','other')]"/>
|
||||
<field name="comment"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" colspan="4"/>
|
||||
<field name="analytic_id"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"
|
||||
groups="analytic.group_analytic_accounting" colspan="4"/>
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
|
||||
</group>
|
||||
<separator string="Other Information" colspan="2"/>
|
||||
<group col="4" colspan="1">
|
||||
<group col="2" colspan="1">
|
||||
<field name="number"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
@ -318,88 +273,57 @@
|
|||
id="menu_action_vendor_payment" parent="account.menu_finance_payables"/>
|
||||
|
||||
<record model="ir.ui.view" id="view_vendor_receipt_form">
|
||||
<field name="name">voucher.form.customer.payment</field>
|
||||
<field name="name">account.voucher.receipt.form</field>
|
||||
<field name="model">account.voucher</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Customer Payment">
|
||||
<group col="12" colspan="4">
|
||||
<field name="partner_id"
|
||||
colspan="4"
|
||||
required="1"
|
||||
invisible="context.get('line_type', False)"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
string="Customer"/>
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" string="Customer"/>
|
||||
<field name="amount"
|
||||
invisible="context.get('line_type', False)"
|
||||
string="Paid Amount"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id"
|
||||
domain="[('type','in',['bank', 'cash'])]"
|
||||
invisible="context.get('line_type', False)"
|
||||
widget="selection"
|
||||
select="1"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"
|
||||
string="Payment Method"
|
||||
colspan="4"/>
|
||||
<field name="amount"
|
||||
colspan="1"
|
||||
invisible="context.get('line_type', False)"
|
||||
string="Paid Amount"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="currency_id" nolabel="1" invisible="1"/>
|
||||
<field name="date"
|
||||
colspan="4"
|
||||
select="1"
|
||||
invisible="context.get('line_type', False)"
|
||||
on_change="onchange_date(partner_id, journal_id, amount,
|
||||
currency_id, type, date, context)"/>
|
||||
<field name="reference" colspan="4" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
|
||||
<field name="name" colspan="4" invisible="context.get('line_type', False)"/>
|
||||
<field name="company_id" colspan="4" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="account_id" colspan="4"
|
||||
widget="selection" select="1"
|
||||
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
|
||||
string="Payment Method"/>
|
||||
<field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
|
||||
<field name="name" colspan="2" invisible="context.get('line_type', False)"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="account_id"
|
||||
widget="selection"
|
||||
invisible="True"/>
|
||||
<field name="pre_line" colspan="4" invisible="1"/>
|
||||
<field name="type" colspan="4" invisible="True"/>
|
||||
<field name="pre_line" invisible="1"/>
|
||||
<field name="type" invisible="True"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Payment Information">
|
||||
<field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, date, context)">
|
||||
<field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
|
||||
<tree string="Invoices and outstanding transactions" editable="bottom">
|
||||
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
on_change="onchange_move_line_id(move_line_id)"
|
||||
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
|
||||
required="1"
|
||||
/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]" invisible="1"/>
|
||||
<field name="account_id" groups="base.group_no_one" domain="[('type','=','receivable')]"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="amount_original" readonly="1"/>
|
||||
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="line_dr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, date, context)">
|
||||
<field name="line_dr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
|
||||
<tree string="Credits" editable="bottom">
|
||||
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||
on_change="onchange_move_line_id(move_line_id)"
|
||||
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
|
||||
/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]" invisible="1"/>
|
||||
<field name="date_original" readonly="1"/>
|
||||
<field name="date_due" readonly="1"/>
|
||||
<field name="currency_id" readonly="1"/>
|
||||
<field name="amount_original" readonly="1" invisible="1"/>
|
||||
<field name="amount_unreconciled" readonly="1"/>
|
||||
<field name="amount" on_change="onchange_amount(amount)"/>
|
||||
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
|
||||
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
|
||||
<field name="company_currency_id" readonly="1" invisible="1"/>
|
||||
<field name="move_line_id"/>
|
||||
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
|
||||
<field name="date_original"/>
|
||||
<field name="amount_original"/>
|
||||
<field name="amount" sum="Payment"/>
|
||||
</tree>
|
||||
</field>
|
||||
<group col="2" colspan="3">
|
||||
|
@ -407,22 +331,21 @@
|
|||
<field name="narration" colspan="2" nolabel="1"/>
|
||||
</group>
|
||||
<group col="2" colspan="1">
|
||||
<group col="4" colspan="1">
|
||||
<separator string="Payment Options" colspan="4"/>
|
||||
<field name="payment_option" required="1" colspan="4"/>
|
||||
<field name="currency_rate_difference" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
<field name="company_currency" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" nolabel="1"/><newline/>
|
||||
<group col="2" colspan="1">
|
||||
<separator string="Payment Options" colspan="2"/>
|
||||
<field name="analytic_id"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
<field name="exchange_acc_id"
|
||||
attrs="{'invisible':[('currency_id','=',False)]}"
|
||||
domain="[('type','=','other')]"/>
|
||||
<field name="payment_option" required="1"/>
|
||||
<field name="writeoff_amount"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
<field name="currency_id2" nolabel="1" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/><newline/>
|
||||
<field name="writeoff_acc_id"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
||||
domain="[('type','=','other')]" colspan="4"/>
|
||||
domain="[('type','=','other')]"/>
|
||||
<field name="comment"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" colspan="4"/>
|
||||
<field name="analytic_id"
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"
|
||||
groups="analytic.group_analytic_accounting" colspan="4"/>
|
||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
||||
</group>
|
||||
<separator string="Other Information" colspan="2"/>
|
||||
<group col="4" colspan="1">
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
<form string="Sales Receipt">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" string="Customer"/>
|
||||
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
|
||||
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id" domain="[('type','in',['sale','sale_refund'])]" widget="selection" on_change="onchange_journal(journal_id, line_cr_ids, tax_id, partner_id)"/>
|
||||
<field name="number"/>
|
||||
<field name="name" colspan="2"/>
|
||||
|
@ -210,7 +210,7 @@
|
|||
<form string="Supplier Voucher">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" domain="[('supplier','=',True)]" required="1" string="Supplier" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="date" string="Bill Date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
|
||||
<field name="date" string="Bill Date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
|
||||
<field name="journal_id" domain="[('type','in',['purchase','purchase_refund'])]" widget="selection" select="1" on_change="onchange_journal(journal_id, line_dr_ids, tax_id, partner_id)"/>
|
||||
<field name="number"/>
|
||||
<field name="name" colspan="2"/>
|
||||
|
|
|
@ -75,7 +75,7 @@ class account_statement_from_invoice_lines(osv.osv_memory):
|
|||
statement.currency.id, amount, context=ctx)
|
||||
|
||||
context.update({'move_line_ids': [line.id]})
|
||||
result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), voucher_currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context)
|
||||
result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context)
|
||||
voucher_res = { 'type':(amount < 0 and 'payment' or 'receipt'),
|
||||
'name': line.name,
|
||||
'partner_id': line.partner_id.id,
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"version": "1.1",
|
||||
"author" : "OpenERP SA",
|
||||
"website" : "http://www.openerp.com",
|
||||
"category" : "Finance",
|
||||
"category" : "Accounting & Finance",
|
||||
"depends" : ["base", "decimal_precision"],
|
||||
"description": """
|
||||
Module for defining analytic accounting object.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Human Resources',
|
||||
'version': '1.0',
|
||||
'category': 'Generic Modules/Others',
|
||||
'category': 'Others',
|
||||
'description': """
|
||||
This module allows you to define what is the default function of a specific user on a given account.
|
||||
====================================================================================================
|
||||
|
|
|
@ -239,7 +239,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
|
|||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char(size='64', string='File Name'),
|
||||
'name': fields.char(size=64, string='File Name'),
|
||||
'summary': fields.function(_get_summary, type='text', string='Summary'),
|
||||
'file_export': fields.binary(string='Export'),
|
||||
'file_import': fields.binary(string='Import'),
|
||||
|
|
|
@ -22,9 +22,8 @@
|
|||
{
|
||||
'name': 'Action Rule',
|
||||
'version': '1.0',
|
||||
'category': 'Tools',
|
||||
'category': 'Base',
|
||||
'complexity': "expert",
|
||||
'category': 'Generic Modules/Others',
|
||||
'description': """
|
||||
This module allows to implement action rules for any object.
|
||||
============================================================
|
||||
|
|
|
@ -0,0 +1,502 @@
|
|||
# Danish translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-26 15:35+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14028)\n"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_user:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send an email to the responsible person."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_partner:0
|
||||
msgid "Remind Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_partner_categ_id:0
|
||||
msgid "Partner Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_watchers:0
|
||||
msgid "Mail to Watchers (CC)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_state_to:0
|
||||
msgid "Button Pressed"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,model_id:0
|
||||
msgid "Object"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_email:0
|
||||
msgid "Mail to these Emails"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_state:0
|
||||
msgid "Set State to"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_from:0
|
||||
msgid "Email From"
|
||||
msgstr "E-mail fra"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Days"
|
||||
msgstr "Dage"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,last_run:0
|
||||
msgid "Last Run"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: code:addons/base_action_rule/base_action_rule.py:313
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "Fejl!"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_reply_to:0
|
||||
msgid "Reply-To"
|
||||
msgstr "Svar til"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_cc:0
|
||||
msgid ""
|
||||
"These people will receive a copy of the future communication between partner "
|
||||
"and users by email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Minutes"
|
||||
msgstr "Minutter"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,name:0
|
||||
msgid "Rule Name"
|
||||
msgstr "Regel Navn"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_partner:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the partner."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Model Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Deadline"
|
||||
msgstr "Deadline"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_subject)s = Object subject"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Reminders"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Special Keywords to Be Used in The Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_state_from:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.actions.act_window,help:base_action_rule.base_action_rule_act
|
||||
msgid ""
|
||||
"Use automated actions to automatically trigger actions for various screens. "
|
||||
"Example: a lead created by a specific user may be automatically set to a "
|
||||
"specific sales team, or an opportunity which still has status pending after "
|
||||
"14 days might trigger an automatic reminder email."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_email:0
|
||||
msgid "Email-id of the persons whom mail is to be sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
#: model:ir.module.module,shortdesc:base_action_rule.module_meta_information
|
||||
msgid "Action Rule"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Fields to Change"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Last Action Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Hours"
|
||||
msgstr "Timer"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_id)s = Object ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Delay After Trigger Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_attach:0
|
||||
msgid "Remind with Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: constraint:ir.cron:0
|
||||
msgid "Invalid arguments"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_user_id:0
|
||||
msgid "Set Responsible to"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_to:0
|
||||
msgid ""
|
||||
"Use a python expression to specify the right field on which one than we will "
|
||||
"use for the 'To' field of the header"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user_phone)s = Responsible phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid ""
|
||||
"The rule uses the AND operator. The model must match all non-empty fields so "
|
||||
"that the rule executes the action described in the 'Actions' tab."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_range_type:0
|
||||
msgid "Delay type"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,regex_name:0
|
||||
msgid ""
|
||||
"Regular expression for matching name of the resource\n"
|
||||
"e.g.: 'urgent.*' will search for records having name starting with the "
|
||||
"string 'urgent'\n"
|
||||
"Note: This is case sensitive search."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_method:0
|
||||
msgid "Call Object Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_to:0
|
||||
msgid "Email To"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_watchers:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to mark CC(mail to any other person defined "
|
||||
"in actions)."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(partner)s = Partner name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_from:0
|
||||
msgid ""
|
||||
"Use a python expression to specify the right field on which one than we will "
|
||||
"use for the 'From' field of the header"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_range:0
|
||||
msgid "Delay after trigger date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,trg_date_range:0
|
||||
msgid ""
|
||||
"Delay After Trigger Date,specifies you can put a negative number. If you "
|
||||
"need a delay before the trigger date, like sending a reminder 15 minutes "
|
||||
"before a meeting."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,active:0
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: code:addons/base_action_rule/base_action_rule.py:314
|
||||
#, python-format
|
||||
msgid "No E-Mail ID Found for your Company address!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_user:0
|
||||
msgid "Remind Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.module.module,description:base_action_rule.module_meta_information
|
||||
msgid "This module allows to implement action rules for any object."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of rules."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Months"
|
||||
msgstr "Måneder"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,filter_id:0
|
||||
msgid "Filter"
|
||||
msgstr "Filter"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,server_action_id:0
|
||||
msgid ""
|
||||
"Describes the action name.\n"
|
||||
"eg:on which object which action to be taken on basis of which condition"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.model,name:base_action_rule.model_ir_cron
|
||||
msgid "ir.cron"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_description)s = Object description"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: constraint:base.action.rule:0
|
||||
msgid "Error: The mail is not well formated"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.model,name:base_action_rule.model_base_action_rule
|
||||
msgid "Action Rules"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_body:0
|
||||
msgid "Content of mail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(partner_email)s = Partner Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_date)s = Creation date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user_email)s = Responsible Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_body:0
|
||||
msgid "Mail body"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_user:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the user."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Server Action to be Triggered"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_user:0
|
||||
msgid "Mail to Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_cc:0
|
||||
msgid "Add Watchers (Cc)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Model Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.actions.act_window,name:base_action_rule.base_action_rule_act
|
||||
#: model:ir.ui.menu,name:base_action_rule.menu_base_action_rule_form
|
||||
msgid "Automated Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,server_action_id:0
|
||||
msgid "Server Action"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,regex_name:0
|
||||
msgid "Regex on Resource Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_attach:0
|
||||
msgid ""
|
||||
"Check this if you want that all documents attached to the object be attached "
|
||||
"to the reminder email sent."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Timing"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,active:0
|
||||
msgid ""
|
||||
"If the active field is set to False, it will allow you to hide the rule "
|
||||
"without removing it."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user)s = Responsible name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on States"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_type:0
|
||||
msgid "Trigger Date"
|
||||
msgstr ""
|
|
@ -0,0 +1,502 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 12:38+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_user:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send an email to the responsible person."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_partner:0
|
||||
msgid "Remind Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_partner_categ_id:0
|
||||
msgid "Partner Category"
|
||||
msgstr "伙伴分類"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_watchers:0
|
||||
msgid "Mail to Watchers (CC)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_state_to:0
|
||||
msgid "Button Pressed"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,model_id:0
|
||||
msgid "Object"
|
||||
msgstr "物件"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_email:0
|
||||
msgid "Mail to these Emails"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_state:0
|
||||
msgid "Set State to"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_from:0
|
||||
msgid "Email From"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Days"
|
||||
msgstr "日"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,last_run:0
|
||||
msgid "Last Run"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: code:addons/base_action_rule/base_action_rule.py:313
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_reply_to:0
|
||||
msgid "Reply-To"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_cc:0
|
||||
msgid ""
|
||||
"These people will receive a copy of the future communication between partner "
|
||||
"and users by email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Minutes"
|
||||
msgstr "分鐘"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,name:0
|
||||
msgid "Rule Name"
|
||||
msgstr "規則名稱"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_partner:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the partner."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Model Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Deadline"
|
||||
msgstr "最後限期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "伙伴"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_subject)s = Object subject"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Reminders"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Special Keywords to Be Used in The Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_state_from:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.actions.act_window,help:base_action_rule.base_action_rule_act
|
||||
msgid ""
|
||||
"Use automated actions to automatically trigger actions for various screens. "
|
||||
"Example: a lead created by a specific user may be automatically set to a "
|
||||
"specific sales team, or an opportunity which still has status pending after "
|
||||
"14 days might trigger an automatic reminder email."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_email:0
|
||||
msgid "Email-id of the persons whom mail is to be sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
#: model:ir.module.module,shortdesc:base_action_rule.module_meta_information
|
||||
msgid "Action Rule"
|
||||
msgstr "動作規則"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Fields to Change"
|
||||
msgstr "要變更欄位"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Creation Date"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Last Action Date"
|
||||
msgstr "最後動作日期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Hours"
|
||||
msgstr "小時"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_id)s = Object ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Delay After Trigger Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_attach:0
|
||||
msgid "Remind with Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: constraint:ir.cron:0
|
||||
msgid "Invalid arguments"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_user_id:0
|
||||
msgid "Set Responsible to"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "None"
|
||||
msgstr "無"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_to:0
|
||||
msgid ""
|
||||
"Use a python expression to specify the right field on which one than we will "
|
||||
"use for the 'To' field of the header"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user_phone)s = Responsible phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid ""
|
||||
"The rule uses the AND operator. The model must match all non-empty fields so "
|
||||
"that the rule executes the action described in the 'Actions' tab."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_range_type:0
|
||||
msgid "Delay type"
|
||||
msgstr "延遲類型"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,regex_name:0
|
||||
msgid ""
|
||||
"Regular expression for matching name of the resource\n"
|
||||
"e.g.: 'urgent.*' will search for records having name starting with the "
|
||||
"string 'urgent'\n"
|
||||
"Note: This is case sensitive search."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_method:0
|
||||
msgid "Call Object Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_to:0
|
||||
msgid "Email To"
|
||||
msgstr "電郵至"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_to_watchers:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to mark CC(mail to any other person defined "
|
||||
"in actions)."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(partner)s = Partner name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Note"
|
||||
msgstr "備註"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_email_from:0
|
||||
msgid ""
|
||||
"Use a python expression to specify the right field on which one than we will "
|
||||
"use for the 'From' field of the header"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_range:0
|
||||
msgid "Delay after trigger date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions"
|
||||
msgstr "條件"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,trg_date_range:0
|
||||
msgid ""
|
||||
"Delay After Trigger Date,specifies you can put a negative number. If you "
|
||||
"need a delay before the trigger date, like sending a reminder 15 minutes "
|
||||
"before a meeting."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,active:0
|
||||
msgid "Active"
|
||||
msgstr "活躍"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: code:addons/base_action_rule/base_action_rule.py:314
|
||||
#, python-format
|
||||
msgid "No E-Mail ID Found for your Company address!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_remind_user:0
|
||||
msgid "Remind Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.module.module,description:base_action_rule.module_meta_information
|
||||
msgid "This module allows to implement action rules for any object."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of rules."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_range_type:0
|
||||
msgid "Months"
|
||||
msgstr "月"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,filter_id:0
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: selection:base.action.rule,trg_date_type:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,server_action_id:0
|
||||
msgid ""
|
||||
"Describes the action name.\n"
|
||||
"eg:on which object which action to be taken on basis of which condition"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.model,name:base_action_rule.model_ir_cron
|
||||
msgid "ir.cron"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_description)s = Object description"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: constraint:base.action.rule:0
|
||||
msgid "Error: The mail is not well formated"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Actions"
|
||||
msgstr "電郵動作"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Email Information"
|
||||
msgstr "電郵資料"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.model,name:base_action_rule.model_base_action_rule
|
||||
msgid "Action Rules"
|
||||
msgstr "動作規則"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_mail_body:0
|
||||
msgid "Content of mail"
|
||||
msgstr "郵件內容"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(partner_email)s = Partner Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_date)s = Creation date"
|
||||
msgstr "%(object_date)s = 建立日期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user_email)s = Responsible Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_body:0
|
||||
msgid "Mail body"
|
||||
msgstr "郵件內文"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_user:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the user."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Server Action to be Triggered"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_mail_to_user:0
|
||||
msgid "Mail to Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,act_email_cc:0
|
||||
msgid "Add Watchers (Cc)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Model Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: model:ir.actions.act_window,name:base_action_rule.base_action_rule_act
|
||||
#: model:ir.ui.menu,name:base_action_rule.menu_base_action_rule_form
|
||||
msgid "Automated Actions"
|
||||
msgstr "自動化動作"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,server_action_id:0
|
||||
msgid "Server Action"
|
||||
msgstr "伺服器動作"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,regex_name:0
|
||||
msgid "Regex on Resource Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,act_remind_attach:0
|
||||
msgid ""
|
||||
"Check this if you want that all documents attached to the object be attached "
|
||||
"to the reminder email sent."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on Timing"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Actions"
|
||||
msgstr "動作"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: help:base.action.rule,active:0
|
||||
msgid ""
|
||||
"If the active field is set to False, it will allow you to hide the rule "
|
||||
"without removing it."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "%(object_user)s = Responsible name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: base_action_rule
|
||||
#: view:base.action.rule:0
|
||||
msgid "Conditions on States"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_action_rule
|
||||
#: field:base.action.rule,trg_date_type:0
|
||||
msgid "Trigger Date"
|
||||
msgstr ""
|
|
@ -0,0 +1,71 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 13:07+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_crypt
|
||||
#: sql_constraint:res.users:0
|
||||
msgid "You can not have two users with the same login !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_crypt
|
||||
#: model:ir.model,name:base_crypt.model_res_users
|
||||
msgid "res.users"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_crypt
|
||||
#: constraint:res.users:0
|
||||
msgid "The chosen company is not in the allowed companies for this user"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_crypt
|
||||
#: code:addons/base_crypt/crypt.py:132
|
||||
#, python-format
|
||||
msgid "Please specify the password !"
|
||||
msgstr "請指定密碼 !"
|
||||
|
||||
#. module: base_crypt
|
||||
#: model:ir.module.module,shortdesc:base_crypt.module_meta_information
|
||||
msgid "Base - Password Encryption"
|
||||
msgstr "基礎 - 密碼加密"
|
||||
|
||||
#. module: base_crypt
|
||||
#: code:addons/base_crypt/crypt.py:132
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_crypt
|
||||
#: model:ir.module.module,description:base_crypt.module_meta_information
|
||||
msgid ""
|
||||
"This module replaces the cleartext password in the database with a password "
|
||||
"hash,\n"
|
||||
"preventing anyone from reading the original password.\n"
|
||||
"For your existing user base, the removal of the cleartext passwords occurs "
|
||||
"the first time\n"
|
||||
"a user logs into the database, after installing base_crypt.\n"
|
||||
"After installing this module it won't be possible to recover a forgotten "
|
||||
"password for your\n"
|
||||
"users, the only solution is for an admin to set a new password.\n"
|
||||
"\n"
|
||||
"Note: installing this module does not mean you can ignore basic security "
|
||||
"measures,\n"
|
||||
"as the password is still transmitted unencrypted on the network (by the "
|
||||
"client),\n"
|
||||
"unless you are using a secure protocol such as XML-RPCS.\n"
|
||||
" "
|
||||
msgstr ""
|
|
@ -21,7 +21,7 @@
|
|||
{
|
||||
'name': 'Create IBAN bank accounts',
|
||||
'version': '1.0',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
This module installs the base for IBAN (International Bank Account Number) bank accounts and checks for its validity.
|
||||
|
|
|
@ -8,14 +8,15 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-01-12 20:19+0000\n"
|
||||
"Last-Translator: Quentin THEURET <Unknown>\n"
|
||||
"PO-Revision-Date: 2011-09-26 12:09+0000\n"
|
||||
"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) "
|
||||
"<maxime.chambreuil@savoirfairelinux.com>\n"
|
||||
"Language-Team: French <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-05 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14028)\n"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: code:addons/base_module_quality/object_test/object_test.py:187
|
||||
|
@ -390,7 +391,7 @@ msgstr "Erreur ! Le module n'est pas correctement chargé/installé."
|
|||
#: code:addons/base_module_quality/speed_test/speed_test.py:116
|
||||
#, python-format
|
||||
msgid "Error in Read method: %s"
|
||||
msgstr ""
|
||||
msgstr "Erreur dans la méthode Read : %s"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: code:addons/base_module_quality/speed_test/speed_test.py:138
|
||||
|
|
|
@ -0,0 +1,518 @@
|
|||
# Chinese (Hong Kong) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 13:44+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: help:base_report_creator.report.filter,expression:0
|
||||
msgid ""
|
||||
"Provide an expression for the field based on which you want to filter the "
|
||||
"records.\n"
|
||||
" e.g. res_partner.id=3"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_report_menu_create
|
||||
msgid "Menu Create"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_type:0
|
||||
msgid "Graph Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Used View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Filter Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Graph Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: code:addons/base_report_creator/base_report_creator.py:310
|
||||
#, python-format
|
||||
msgid ""
|
||||
"These is/are model(s) (%s) in selection which is/are not related to any "
|
||||
"other model"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Legend"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Graph View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,expression:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_set_filter_fields
|
||||
msgid "Set Filter Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_filter
|
||||
msgid "Report Filters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,sql_query:0
|
||||
msgid "SQL Query"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: view:report.menu.create:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Minimum"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,operator:0
|
||||
msgid "Operator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "OR"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.act_window,name:base_report_creator.base_report_creator_action
|
||||
msgid "Custom Reports"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: code:addons/base_report_creator/base_report_creator.py:310
|
||||
#, python-format
|
||||
msgid "No Related Models!!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:report.menu.create:0
|
||||
msgid "Menu Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Sum"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:base_report_creator.report:0
|
||||
msgid "You must have to give calendar view's color,start date and delay."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,model_ids:0
|
||||
msgid "Reported Objects"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Field List"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,type:0
|
||||
msgid "Report Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Add filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.act_window,name:base_report_creator.action_report_menu_create
|
||||
msgid "Create Menu for Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report.fields,report_id:0
|
||||
#: field:base_report_creator.report.filter,report_id:0
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_result
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Starting Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Filters on Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,group_ids:0
|
||||
msgid "Authorized Groups"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Graph Orientation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Authorized Groups (empty for all)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Security"
|
||||
msgstr "保安"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:report.menu.create,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "AND"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:base_report_creator.report:0
|
||||
msgid "You can not display field which are not stored in Database."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Calendar Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_fields
|
||||
msgid "Display Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Y Axis"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Graph"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,field_id:0
|
||||
msgid "Field Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Set Filter Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Vertical"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,type:0
|
||||
msgid "Rows And Columns Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "General Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: help:base_report_creator.report.fields,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of fields."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,init:0
|
||||
msgid "Select Field to filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Horizontal"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouping Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,condition:0
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "X Axis"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:report.menu.create,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,set_value:0
|
||||
msgid "Confirm Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,name:0
|
||||
msgid "Filter Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Open Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouped"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: model:ir.module.module,shortdesc:base_report_creator.module_meta_information
|
||||
msgid "Report Creator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,end:0
|
||||
#: view:report.menu.create:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:base_report_creator.report:0
|
||||
msgid "You can apply aggregate function to the non calculated field."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,menu_id:0
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type1:0
|
||||
msgid "First View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,field_id:0
|
||||
msgid "Field"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Unique Colors"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: help:base_report_creator.report,active:0
|
||||
msgid ""
|
||||
"If the active field is set to False, it will allow you to hide the report "
|
||||
"without removing it."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Pie Chart"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type3:0
|
||||
msgid "Third View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,name:0
|
||||
msgid "Report Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Average"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Use %(uid)s to filter by the connected user"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Maximum"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,set_value_select_field:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,value:0
|
||||
msgid "Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Bar Chart"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type2:0
|
||||
msgid "Second View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:report.menu.create:0
|
||||
msgid "Create Menu For This Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "View parameters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,init,field_id:0
|
||||
msgid "Filter Field"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,field_ids:0
|
||||
msgid "Fields to Display"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,filter_ids:0
|
||||
msgid "Filters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.module.module,description:base_report_creator.module_meta_information
|
||||
msgid ""
|
||||
"This module allows you to create any statistic\n"
|
||||
"report on several objects. It's a SQL query builder and browser\n"
|
||||
"for and users.\n"
|
||||
"\n"
|
||||
"After installing the module, it adds a menu to define custom report in\n"
|
||||
"the \"Dashboard\" menu.\n"
|
||||
msgstr ""
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2009-01-30 12:44+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2011-09-27 14:38+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\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: 2011-09-05 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.model,name:base_report_designer.model_base_report_sxw
|
||||
|
@ -24,12 +24,12 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "OpenERP Report Designer Configuration"
|
||||
msgstr ""
|
||||
msgstr "OpenERP 報表設計師配置"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.module.module,shortdesc:base_report_designer.module_meta_information
|
||||
msgid "Report designer interface module"
|
||||
msgstr ""
|
||||
msgstr "報表設計師介面模組"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
|
@ -41,7 +41,7 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: view:base.report.file.sxw:0
|
||||
msgid "Upload the modified report"
|
||||
msgstr ""
|
||||
msgstr "上載已修改報表"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.module.module,description:base_report_designer.module_meta_information
|
||||
|
@ -59,7 +59,7 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: view:base.report.file.sxw:0
|
||||
msgid "The .SXW report"
|
||||
msgstr ""
|
||||
msgstr ".SXW 報表"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.model,name:base_report_designer.model_base_report_designer_installer
|
||||
|
@ -69,33 +69,33 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: field:base_report_designer.installer,description:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "說明"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "_Close"
|
||||
msgstr ""
|
||||
msgstr "關閉(_C)"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.rml.save:0
|
||||
msgid "The RML report"
|
||||
msgstr ""
|
||||
msgstr "RML 報表"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
msgstr "配置"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "標題"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base.report.file.sxw,report_id:0
|
||||
#: field:base.report.sxw,report_id:0
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
msgstr "報表"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.model,name:base_report_designer.model_base_report_rml_save
|
||||
|
@ -105,62 +105,62 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: model:ir.ui.menu,name:base_report_designer.menu_action_report_designer_wizard
|
||||
msgid "Report Designer"
|
||||
msgstr ""
|
||||
msgstr "報表設計師"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base_report_designer.installer,name:0
|
||||
msgid "File name"
|
||||
msgstr ""
|
||||
msgstr "檔案名稱"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.file.sxw:0
|
||||
#: view:base.report.sxw:0
|
||||
msgid "Get a report"
|
||||
msgstr ""
|
||||
msgstr "取得報表"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_wizard
|
||||
msgid "OpenERP Report Designer"
|
||||
msgstr ""
|
||||
msgstr "OpenERP 報表設計師"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.sxw:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "繼續"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base.report.rml.save,file_rml:0
|
||||
msgid "Save As"
|
||||
msgstr ""
|
||||
msgstr "另存為..."
|
||||
|
||||
#. module: base_report_designer
|
||||
#: help:base_report_designer.installer,plugin_file:0
|
||||
msgid ""
|
||||
"OpenObject Report Designer plug-in file. Save as this file and install this "
|
||||
"plug-in in OpenOffice."
|
||||
msgstr ""
|
||||
msgstr "OpenObject 報表設計師插件檔。儲存此檔並於 OpenOffice 安裝此插件。"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.rml.save:0
|
||||
msgid "Save RML FIle"
|
||||
msgstr ""
|
||||
msgstr "儲存 RML 檔案"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base.report.file.sxw,file_sxw:0
|
||||
#: field:base.report.file.sxw,file_sxw_upload:0
|
||||
msgid "Your .SXW file"
|
||||
msgstr ""
|
||||
msgstr "您的 .SXW 檔案"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "Installation and Configuration Steps"
|
||||
msgstr ""
|
||||
msgstr "安裝及配置步驟"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base_report_designer.installer,progress:0
|
||||
msgid "Configuration Progress"
|
||||
msgstr ""
|
||||
msgstr "配置進度"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.file.sxw:0
|
||||
|
@ -174,17 +174,17 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: view:base_report_designer.installer:0
|
||||
msgid "Skip"
|
||||
msgstr ""
|
||||
msgstr "略過"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: field:base_report_designer.installer,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr ""
|
||||
msgstr "圖像"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.actions.act_window,name:base_report_designer.action_view_base_report_sxw
|
||||
msgid "Base Report sxw"
|
||||
msgstr ""
|
||||
msgstr "基礎報表 sxw"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.model,name:base_report_designer.model_base_report_file_sxw
|
||||
|
@ -194,19 +194,19 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: field:base_report_designer.installer,plugin_file:0
|
||||
msgid "OpenObject Report Designer Plug-in"
|
||||
msgstr ""
|
||||
msgstr "OpenObject 報表設計師插件"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_installer
|
||||
msgid "OpenERP Report Designer Installation"
|
||||
msgstr ""
|
||||
msgstr "OpenERP 報表設計師安裝"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: view:base.report.file.sxw:0
|
||||
#: view:base.report.rml.save:0
|
||||
#: view:base.report.sxw:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.model,name:base_report_designer.model_ir_actions_report_xml
|
||||
|
@ -216,4 +216,4 @@ msgstr ""
|
|||
#. module: base_report_designer
|
||||
#: view:base.report.sxw:0
|
||||
msgid "Select your report"
|
||||
msgstr ""
|
||||
msgstr "選取您的報表"
|
||||
|
|
|
@ -62,6 +62,7 @@ class base_setup_installer2(osv.osv_memory):
|
|||
'type' : 'boolean',
|
||||
'string' : category.name,
|
||||
'name' : category_name,
|
||||
'help' : category.description,
|
||||
}
|
||||
|
||||
module_proxy = self.pool.get('ir.module.module')
|
||||
|
@ -101,7 +102,7 @@ class base_setup_installer2(osv.osv_memory):
|
|||
result = super(base_setup_installer2, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu)
|
||||
|
||||
module_category_proxy = self.pool.get('ir.module.category')
|
||||
module_category_ids = module_category_proxy.search(cr, uid, [('name', '!=', 'Base')], context=context, order='name asc')
|
||||
module_category_ids = module_category_proxy.search(cr, uid, [], context=context, order='name asc')
|
||||
arch = ['<form string="Automatic Base Setup">']
|
||||
arch.append('<separator string="Categories" colspan="4" />')
|
||||
for module_category in module_category_proxy.browse(cr, uid, module_category_ids, context=context):
|
||||
|
@ -116,18 +117,18 @@ class base_setup_installer2(osv.osv_memory):
|
|||
arch.append('<field name="category_%d" />' % (module_category.id,))
|
||||
|
||||
|
||||
for module_category in module_category_proxy.browse(cr, uid, module_category_ids, context=context):
|
||||
if not module_category.module_ids:
|
||||
continue
|
||||
#for module_category in module_category_proxy.browse(cr, uid, module_category_ids, context=context):
|
||||
# if not module_category.module_ids:
|
||||
# continue
|
||||
|
||||
modifiers = {
|
||||
'invisible' : [('category_%d' % (module_category.id), '=', False)],
|
||||
'readonly' : module.state == 'installed',
|
||||
}
|
||||
modifiers = simplejson.dumps(modifiers)
|
||||
arch.append("""<separator string="%s" colspan="4" modifiers='%s'/>""" % (cgi.escape(module_category.name), modifiers))
|
||||
for module in module_category.module_ids:
|
||||
arch.append("""<field name="module_%s" modifiers='%s' />""" % (module.name, modifiers))
|
||||
# modifiers = {
|
||||
# 'invisible' : [('category_%d' % (module_category.id), '=', False)],
|
||||
# 'readonly' : module.state == 'installed',
|
||||
# }
|
||||
# modifiers = simplejson.dumps(modifiers)
|
||||
# arch.append("""<separator string="%s" colspan="4" modifiers='%s'/>""" % (cgi.escape(module_category.name), modifiers))
|
||||
# for module in module_category.module_ids:
|
||||
# arch.append("""<field name="module_%s" modifiers='%s' />""" % (module.name, modifiers))
|
||||
|
||||
arch.append(
|
||||
'<separator colspan="4" />'
|
||||
|
@ -628,7 +629,7 @@ class specify_partner_terminology(osv.osv_memory):
|
|||
field_ref = f_id.model_id.model + ',' + f_id.name
|
||||
self.make_translations(cr, uid, ids, field_ref, 'field', f_id.field_description, _case_insensitive_replace(f_id.field_description,'Customer',o.partner), context=context)
|
||||
#translate help tooltip of field
|
||||
for obj in self.pool.obj_pool.values():
|
||||
for obj in self.pool.models.values():
|
||||
for field_name, field_rec in obj._columns.items():
|
||||
if field_rec.help.lower().count('customer'):
|
||||
field_ref = obj._name + ',' + field_name
|
||||
|
|
|
@ -0,0 +1,289 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 14:38+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.actions.act_window,name:base_synchro.action_view_base_synchro
|
||||
msgid "Base Synchronization"
|
||||
msgstr "基礎同步化"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,server_db:0
|
||||
msgid "Server Database"
|
||||
msgstr "伺服器資料庫"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.server:0
|
||||
#: model:ir.model,name:base_synchro.model_base_synchro_server
|
||||
msgid "Synchronized server"
|
||||
msgstr "同步化伺服器"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj.avoid,name:0
|
||||
msgid "Field Name"
|
||||
msgstr "欄位名稱"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,synchronize_date:0
|
||||
msgid "Latest Synchronization"
|
||||
msgstr "最新同步化"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro,user_id:0
|
||||
msgid "Send Result To"
|
||||
msgstr "將結果發送至"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.model,name:base_synchro.model_base_synchro_obj_avoid
|
||||
msgid "Fields to not synchronize"
|
||||
msgstr "不同步化之欄位"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid "_Close"
|
||||
msgstr "關閉(_C)"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid "Transfer Data To Server"
|
||||
msgstr "將資料轉至伺服器"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.model,name:base_synchro.model_base_synchro_obj
|
||||
msgid "Register Class"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
#: model:ir.actions.act_window,name:base_synchro.action_transfer_tree
|
||||
#: model:ir.ui.menu,name:base_synchro.transfer_menu_id
|
||||
msgid "Synchronized objects"
|
||||
msgstr "同步化物件"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,obj_ids:0
|
||||
msgid "Models"
|
||||
msgstr "模型"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj.avoid,obj_id:0
|
||||
#: view:base.synchro.obj.line:0
|
||||
#: field:base.synchro.obj.line,obj_id:0
|
||||
msgid "Object"
|
||||
msgstr "物件"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,login:0
|
||||
msgid "User Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
#: view:base.synchro.obj.line:0
|
||||
msgid "Group By"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: selection:base.synchro.obj,action:0
|
||||
msgid "Upload"
|
||||
msgstr "上載"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
msgid "Latest synchronization"
|
||||
msgstr "最新同步化"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.module.module,description:base_synchro.module_meta_information
|
||||
msgid "Synchronization with all objects."
|
||||
msgstr "與所有物件同步化。"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj.line:0
|
||||
#: field:base.synchro.obj.line,name:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,password:0
|
||||
msgid "Password"
|
||||
msgstr "密碼"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,avoid_ids:0
|
||||
msgid "Fields Not Sync."
|
||||
msgstr "無同步化欄位"
|
||||
|
||||
#. module: base_synchro
|
||||
#: selection:base.synchro.obj,action:0
|
||||
msgid "Both"
|
||||
msgstr "兩者"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,name:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
msgid "Fields"
|
||||
msgstr "欄位"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj.line:0
|
||||
msgid "Transfered Ids Details"
|
||||
msgstr "已傳送 Ids 詳情"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,action:0
|
||||
msgid "Synchronisation direction"
|
||||
msgstr "同步化方向"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,server_id:0
|
||||
msgid "Server"
|
||||
msgstr "伺服器"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.actions.act_window,name:base_synchro.action_base_synchro_obj_line_tree
|
||||
#: model:ir.model,name:base_synchro.model_base_synchro_obj_line
|
||||
#: model:ir.ui.menu,name:base_synchro.menu_action_base_synchro_obj_line_tree
|
||||
msgid "Synchronized instances"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,active:0
|
||||
msgid "Active"
|
||||
msgstr "作用中"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
#: field:base.synchro.obj,model_id:0
|
||||
msgid "Object to synchronize"
|
||||
msgstr "要同步化物件"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.module.module,shortdesc:base_synchro.module_meta_information
|
||||
msgid "Base Synchro"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.actions.act_window,name:base_synchro.action_base_synchro_server_tree
|
||||
#: model:ir.ui.menu,name:base_synchro.synchro_server_tree_menu_id
|
||||
msgid "Servers to be synchronized"
|
||||
msgstr "要同步化伺服器"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro.obj:0
|
||||
msgid "Transfer Details"
|
||||
msgstr "傳送詳情"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj.line,remote_id:0
|
||||
msgid "Remote Id"
|
||||
msgstr "遠端 Id"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,line_id:0
|
||||
msgid "Ids Affected"
|
||||
msgstr "受影響 Ids"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.ui.menu,name:base_synchro.next_id_63
|
||||
msgid "History"
|
||||
msgstr "歷史紀錄"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.ui.menu,name:base_synchro.next_id_62
|
||||
#: model:ir.ui.menu,name:base_synchro.synch_config
|
||||
msgid "Synchronization"
|
||||
msgstr "同步化"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,domain:0
|
||||
msgid "Domain"
|
||||
msgstr "領域"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid "_Synchronize"
|
||||
msgstr "同步化(_S)"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,name:0
|
||||
msgid "Server name"
|
||||
msgstr "伺服器名稱"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "次序"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid ""
|
||||
"The synchronisation has been started.You will receive a request when it's "
|
||||
"done."
|
||||
msgstr "同步化已開始。完成時會收到要求。"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.server,server_port:0
|
||||
msgid "Server Port"
|
||||
msgstr "伺服器連接埠"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.ui.menu,name:base_synchro.menu_action_view_base_synchro
|
||||
msgid "Synchronize objects"
|
||||
msgstr "同步化物件"
|
||||
|
||||
#. module: base_synchro
|
||||
#: view:base.synchro:0
|
||||
msgid "Synchronization Complited!"
|
||||
msgstr "同步化完成!"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.model,name:base_synchro.model_base_synchro
|
||||
msgid "base.synchro"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro.obj.line,local_id:0
|
||||
msgid "Local Id"
|
||||
msgstr "本機 Id"
|
||||
|
||||
#. module: base_synchro
|
||||
#: model:ir.actions.act_window,name:base_synchro.actions_regclass_tree
|
||||
#: model:ir.actions.act_window,name:base_synchro.actions_transfer_line_form
|
||||
msgid "Filters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_synchro
|
||||
#: selection:base.synchro.obj,action:0
|
||||
msgid "Download"
|
||||
msgstr "下載"
|
||||
|
||||
#. module: base_synchro
|
||||
#: field:base.synchro,server_url:0
|
||||
#: field:base.synchro.server,server_url:0
|
||||
msgid "Server URL"
|
||||
msgstr "伺服器 URL"
|
|
@ -0,0 +1,32 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 14:45+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: base_tools
|
||||
#: model:ir.module.module,shortdesc:base_tools.module_meta_information
|
||||
msgid "Common base for tools modules"
|
||||
msgstr "工具模組共同基礎"
|
||||
|
||||
#. module: base_tools
|
||||
#: model:ir.module.module,description:base_tools.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" "
|
|
@ -22,7 +22,7 @@
|
|||
{
|
||||
'name': 'VAT Number Validation',
|
||||
'version': '1.0',
|
||||
'category': 'Finance',
|
||||
'category': 'Accounting & Finance',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
VAT validation for Partners' VAT numbers
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
"name" : "Claim from Delivery",
|
||||
"version" : "1.0",
|
||||
"author" : "OpenERP SA",
|
||||
"category" : "Warehouse",
|
||||
"category" : "Warehouse Management",
|
||||
"depends" : ["base", "crm_claim", "stock"],
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Customer & Supplier Relationship Management',
|
||||
'version': '1.0',
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
The generic OpenERP Customer Relationship Management.
|
||||
|
|
|
@ -381,7 +381,7 @@ class crm_case(crm_base):
|
|||
default.update({ 'date_closed': False, })
|
||||
if self._columns.get('date_open'):
|
||||
default.update({ 'date_open': False })
|
||||
return super(osv.osv, self).copy(cr, uid, id, default, context=context)
|
||||
return super(crm_case, self).copy(cr, uid, id, default, context=context)
|
||||
|
||||
|
||||
def case_open(self, cr, uid, ids, *args):
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<field name="domain">['|', ('type','=','lead'), ('type','=',False)]</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_leads"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
|
||||
<field name="context">{'search_default_current':1, 'default_type': 'lead', 'search_default_section_id': section_id, 'stage_type': 'lead'}</field>
|
||||
<field name="context">{'search_default_new':1, 'default_type': 'lead', 'search_default_section_id': section_id, 'stage_type': 'lead'}</field>
|
||||
<field name="help">Leads allow you to manage and keep track of all initial contacts with a prospect or partner showing interest in your products or services. A lead is usually the first step in your sales cycle. Once qualified, a lead may be converted into a business opportunity, while creating the related partner for further detailed tracking of any linked activities. You can import a database of prospects, keep track of your business cards or integrate your website's contact form with the OpenERP Leads. Leads can be connected to the email gateway: new emails may create leads, each of them automatically gets the history of the conversation with the prospect.</field>
|
||||
</record>
|
||||
|
||||
|
@ -62,7 +62,7 @@
|
|||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form,graph,calendar,kanban</field>
|
||||
<field name="domain">[('type','=','opportunity')]</field>
|
||||
<field name="context">{'search_default_user_id':uid,'search_default_current':1, 'search_default_section_id':section_id, 'stage_type': 'opportunity', 'default_type': 'opportunity'}</field>
|
||||
<field name="context">{'search_default_user_id':uid,'search_default_new':1, 'search_default_open':1, 'search_default_section_id':section_id, 'stage_type': 'opportunity', 'default_type': 'opportunity'}</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_oppor"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
|
||||
<field name="help">With opportunities you can manage and keep track of your sales pipeline by creating specific customer- or prospect-related sales documents to follow up potential sales. Information such as expected revenue, opportunity stage, expected closing date, communication history and much more can be stored. Opportunities can be connected to the email gateway: new emails may create opportunities, each of them automatically gets the history of the conversation with the customer.
|
||||
|
|
|
@ -302,7 +302,7 @@
|
|||
<field name="state"/>
|
||||
<field name="color"/>
|
||||
<field name="priority"/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="planned_revenue" sum="Expected Revenues"/>
|
||||
<field name="user_email"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
|
@ -372,13 +372,15 @@
|
|||
<search string="Search Leads">
|
||||
<filter icon="terp-check"
|
||||
string="New"
|
||||
name="current" help="New Leads"
|
||||
name="new" help="New Leads"
|
||||
domain="[('state','=','draft')]"/>
|
||||
<filter icon="terp-camera_test"
|
||||
string="Open"
|
||||
name="open"
|
||||
domain="[('state','=','open')]"/>
|
||||
<filter icon="terp-gtk-media-pause"
|
||||
string="Pending"
|
||||
name="pending"
|
||||
domain="[('state','=','pending')]"/>
|
||||
|
||||
<separator orientation="vertical"/>
|
||||
|
@ -675,13 +677,15 @@
|
|||
<search string="Search Opportunities">
|
||||
<filter icon="terp-check"
|
||||
string="New" help="New Opportunities"
|
||||
name="current"
|
||||
name="new"
|
||||
domain="[('state','=','draft')]"/>
|
||||
<filter icon="terp-camera_test"
|
||||
string="Open" help="Open Opportunities"
|
||||
name="open"
|
||||
domain="[('state','=','open')]"/>
|
||||
<filter icon="terp-gtk-media-pause"
|
||||
string="Pending" help="Pending Opportunities"
|
||||
name="pending"
|
||||
domain="[('state','=','pending')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" string="Opportunity"/>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-01-18 16:45+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2011-09-26 12:10+0000\n"
|
||||
"Last-Translator: lholivier <olivier.lenoir@free.fr>\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: 2011-09-05 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14028)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
|
@ -2512,7 +2512,7 @@ msgstr "L'étape de l'opportunité \"%s\" a été changé à \"%s\"."
|
|||
#: code:addons/crm/crm_lead.py:282
|
||||
#, python-format
|
||||
msgid "Changed Stage to: %s"
|
||||
msgstr ""
|
||||
msgstr "Etape passée à : %s"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation.line,operator:0
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-01-27 05:08+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 07:26+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\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: 2011-09-05 05:08+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
|
@ -78,7 +78,7 @@ msgstr "今日"
|
|||
#. module: crm
|
||||
#: view:crm.merge.opportunity:0
|
||||
msgid "Select Opportunities"
|
||||
msgstr "選取機會"
|
||||
msgstr "選擇機會"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
|
@ -184,7 +184,7 @@ msgstr "搜尋機會"
|
|||
#, python-format
|
||||
msgid ""
|
||||
"Opportunity must have Partner assigned before merging with other Opportunity."
|
||||
msgstr "機會要先安排伙伴才可合併。"
|
||||
msgstr "機會要先安排伙伴才可與其他機會合併。"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/wizard/crm_merge_opportunities.py:46
|
||||
|
@ -249,7 +249,7 @@ msgstr ""
|
|||
#: view:res.partner:0
|
||||
#, python-format
|
||||
msgid "Phone Call"
|
||||
msgstr "打電話"
|
||||
msgstr "致電"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead,optout:0
|
||||
|
@ -260,7 +260,7 @@ msgstr ""
|
|||
#: code:addons/crm/crm_opportunity.py:108
|
||||
#, python-format
|
||||
msgid "The opportunity '%s' has been marked as lost."
|
||||
msgstr ""
|
||||
msgstr "「%s」機會已標為丟失。"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,help:crm.action_report_crm_lead
|
||||
|
@ -309,7 +309,7 @@ msgid ""
|
|||
"If you select Merge with existing Opportunity, the lead details(with the "
|
||||
"communication history) will be merged with existing Opportunity of Selected "
|
||||
"partner."
|
||||
msgstr ""
|
||||
msgstr "如選擇與現有機會合併,潛在客戶之詳情(包括通訊記錄)會與選取之伙伴的現有機會合併。"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.meeting,class:0
|
||||
|
@ -389,7 +389,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:process.transition,name:crm.process_transition_opportunitymeeting0
|
||||
msgid "Opportunity Meeting"
|
||||
msgstr ""
|
||||
msgstr "商機會談"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.lead.report,delay_close:0
|
||||
|
@ -400,7 +400,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:process.node,note:crm.process_node_opportunities0
|
||||
msgid "When a real project/opportunity is detected"
|
||||
msgstr ""
|
||||
msgstr "當偵測到真正專案/機會"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.installer,crm_fundraising:0
|
||||
|
@ -446,7 +446,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_lead2opportunity_action
|
||||
msgid "Convert/Merge Opportunity"
|
||||
msgstr ""
|
||||
msgstr "轉變/合併機會"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead,write_date:0
|
||||
|
@ -457,7 +457,7 @@ msgstr "更新日期"
|
|||
#: view:crm.lead2opportunity.action:0
|
||||
#: field:crm.lead2opportunity.action,name:0
|
||||
msgid "Select Action"
|
||||
msgstr ""
|
||||
msgstr "選擇動作"
|
||||
|
||||
#. module: crm
|
||||
#: field:base.action.rule,trg_categ_id:0
|
||||
|
@ -475,7 +475,7 @@ msgstr "分類"
|
|||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
msgid "#Opportunities"
|
||||
msgstr ""
|
||||
msgstr "#機會"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.resource.type,name:crm.type_oppor2
|
||||
|
@ -495,7 +495,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
msgid "Opportunity Analysis"
|
||||
msgstr ""
|
||||
msgstr "機會分析"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.meeting,location:0
|
||||
|
@ -525,7 +525,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:process.transition,note:crm.process_transition_opportunitymeeting0
|
||||
msgid "Normal or phone meeting for opportunity"
|
||||
msgstr ""
|
||||
msgstr "與機會的正常或電話會談"
|
||||
|
||||
#. module: crm
|
||||
#: model:process.node,note:crm.process_node_leads0
|
||||
|
@ -544,7 +544,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm.crm_partner2opportunity
|
||||
#, python-format
|
||||
msgid "Create Opportunity"
|
||||
msgstr ""
|
||||
msgstr "建立機會"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.installer:0
|
||||
|
@ -631,7 +631,7 @@ msgstr "滿意度調查"
|
|||
msgid ""
|
||||
"Thick this box if you want that on escalation, the responsible of this sale "
|
||||
"team automatically becomes responsible of the lead/opportunity escaladed"
|
||||
msgstr ""
|
||||
msgstr "如想提升注意級別,勾選此項;此銷售隊伍之負責人會自動成為已提升注意潛在客戶/機會之負責人"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.installer,outlook:0
|
||||
|
@ -671,7 +671,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.phonecall.report:0
|
||||
msgid "#Phone calls"
|
||||
msgstr ""
|
||||
msgstr "致電數"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,categ_id:0
|
||||
|
@ -691,7 +691,7 @@ msgid ""
|
|||
"The channels represent the different communication "
|
||||
"modes available with the customer. With each commercial opportunity, you can "
|
||||
"indicate the canall which is this opportunity source."
|
||||
msgstr ""
|
||||
msgstr "渠道代表該顧客之不同通訊模式。對於每個商機,您可指明此機會來源之管道。"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_meeting.py:93
|
||||
|
@ -720,7 +720,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:res.users:0
|
||||
msgid "Current Activity"
|
||||
msgstr "目前活動"
|
||||
msgstr "當前動態"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.meeting,exrule:0
|
||||
|
@ -835,7 +835,7 @@ msgstr "停止處理"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
msgid "Search Phonecalls"
|
||||
msgstr ""
|
||||
msgstr "搜尋致電"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead2opportunity.partner:0
|
||||
|
@ -953,7 +953,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.phonecall2opportunity:0
|
||||
msgid "Convert To Opportunity "
|
||||
msgstr ""
|
||||
msgstr "轉變為機會 "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.case.stage,sequence:0
|
||||
|
@ -1016,7 +1016,7 @@ msgstr "三月"
|
|||
#: code:addons/crm/crm_lead.py:230
|
||||
#, python-format
|
||||
msgid "The opportunity '%s' has been closed."
|
||||
msgstr ""
|
||||
msgstr "「%s」機會已結束。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead,day_open:0
|
||||
|
@ -1033,7 +1033,7 @@ msgstr "將時間顯示為"
|
|||
#: view:crm.phonecall2partner:0
|
||||
#, python-format
|
||||
msgid "Create Partner"
|
||||
msgstr ""
|
||||
msgstr "建立伙伴"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_operator:0
|
||||
|
@ -1056,7 +1056,7 @@ msgstr ""
|
|||
#, python-format
|
||||
msgid ""
|
||||
"There are no other 'Open' or 'Pending' Opportunities for the partner '%s'."
|
||||
msgstr ""
|
||||
msgstr "「%s」伙伴並無「開放」或「待處理」之機會。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
|
@ -1105,7 +1105,7 @@ msgstr ""
|
|||
#: field:crm.meeting,date_action_next:0
|
||||
#: field:crm.phonecall,date_action_next:0
|
||||
msgid "Next Action"
|
||||
msgstr ""
|
||||
msgstr "下個動作"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,end_date:0
|
||||
|
@ -1128,7 +1128,7 @@ msgstr ""
|
|||
#: code:addons/crm/wizard/crm_phonecall_to_opportunity.py:57
|
||||
#, python-format
|
||||
msgid "Closed/Cancelled Phone Call Could not convert into Opportunity"
|
||||
msgstr ""
|
||||
msgstr "已結束/已取消之致電不能轉為機會"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -1353,7 +1353,7 @@ msgstr "已處理最大伙伴ID"
|
|||
#: model:ir.actions.act_window,name:crm.action_report_crm_phonecall
|
||||
#: model:ir.ui.menu,name:crm.menu_report_crm_phonecalls_tree
|
||||
msgid "Phone Calls Analysis"
|
||||
msgstr ""
|
||||
msgstr "致電分析"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead.report,opening_date:0
|
||||
|
@ -1493,7 +1493,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.phonecall2opportunity,name:0
|
||||
msgid "Opportunity Summary"
|
||||
msgstr ""
|
||||
msgstr "機會摘要"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.phonecall.report:0
|
||||
|
@ -1584,7 +1584,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_merge_opportunity
|
||||
msgid "Merge two Opportunities"
|
||||
msgstr ""
|
||||
msgstr "合併兩個機會"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.meeting,end_type:0
|
||||
|
@ -1611,7 +1611,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_phonecall_categ_action
|
||||
msgid "Phonecall Categories"
|
||||
msgstr ""
|
||||
msgstr "致電分類"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
|
@ -1804,7 +1804,7 @@ msgstr "上級團隊"
|
|||
#. module: crm
|
||||
#: field:crm.lead,date_action:0
|
||||
msgid "Next Action Date"
|
||||
msgstr ""
|
||||
msgstr "下個動作日期"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation,state:0
|
||||
|
@ -1850,7 +1850,7 @@ msgstr ""
|
|||
#: view:crm.phonecall.report:0
|
||||
#: model:ir.actions.act_window,name:crm.act_crm_opportunity_crm_phonecall_new
|
||||
msgid "Phone calls"
|
||||
msgstr ""
|
||||
msgstr "致電"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
|
@ -2070,7 +2070,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: model:process.node,note:crm.process_node_meeting0
|
||||
msgid "Schedule a normal or phone meeting"
|
||||
msgstr ""
|
||||
msgstr "安排正常或電話會談"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm.py:375
|
||||
|
@ -2331,7 +2331,7 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:crm.menu_crm_case_phone
|
||||
#: view:res.partner:0
|
||||
msgid "Phone Calls"
|
||||
msgstr ""
|
||||
msgstr "致電"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.lead.report,delay_open:0
|
||||
|
@ -2358,7 +2358,7 @@ msgstr "活躍"
|
|||
#: code:addons/crm/crm_lead.py:306
|
||||
#, python-format
|
||||
msgid "The stage of opportunity '%s' has been changed to '%s'."
|
||||
msgstr ""
|
||||
msgstr "機會階段已由「%s」變為「%s」。"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:282
|
||||
|
@ -2414,7 +2414,7 @@ msgstr ""
|
|||
#: field:crm.lead2partner,action:0
|
||||
#: field:crm.phonecall2partner,action:0
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
msgstr "動作"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.installer,crm_claim:0
|
||||
|
@ -2544,7 +2544,7 @@ msgstr ""
|
|||
#: view:board.board:0
|
||||
#: model:ir.actions.act_window,name:crm.act_my_oppor
|
||||
msgid "My Open Opportunities"
|
||||
msgstr ""
|
||||
msgstr "我的開放機會"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.open_board_statistical_dash
|
||||
|
@ -2585,7 +2585,7 @@ msgstr "會議類型"
|
|||
#: code:addons/crm/wizard/crm_lead_to_opportunity.py:314
|
||||
#, python-format
|
||||
msgid "Merge with Existing Opportunity"
|
||||
msgstr "與既有機會合併"
|
||||
msgstr "與現有機會合併"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.lead,state:0
|
||||
|
@ -2714,7 +2714,7 @@ msgstr ""
|
|||
#: field:crm.meeting,date_action_last:0
|
||||
#: field:crm.phonecall,date_action_last:0
|
||||
msgid "Last Action"
|
||||
msgstr ""
|
||||
msgstr "最後動作"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,duration:0
|
||||
|
@ -3485,7 +3485,7 @@ msgstr "各階段機會"
|
|||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_create_partner
|
||||
msgid "Schedule Phone Call"
|
||||
msgstr ""
|
||||
msgstr "安排致電"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead.report,month:0
|
||||
|
@ -3564,7 +3564,7 @@ msgstr ""
|
|||
#: code:addons/crm/wizard/crm_merge_opportunities.py:100
|
||||
#, python-format
|
||||
msgid "Merged into Opportunity: %s"
|
||||
msgstr "合併至機會:%s"
|
||||
msgstr "已合併至機會: %s"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm.py:347
|
||||
|
@ -3584,7 +3584,7 @@ msgstr "分類化"
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_base_action_rule
|
||||
msgid "Action Rules"
|
||||
msgstr ""
|
||||
msgstr "動作規則"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,rrule_type:0
|
||||
|
@ -3594,7 +3594,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.meeting,phonecall_id:0
|
||||
msgid "Phonecall"
|
||||
msgstr ""
|
||||
msgstr "致電"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.meeting,week_list:0
|
||||
|
@ -3763,7 +3763,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: selection:crm.lead2opportunity.action,name:0
|
||||
msgid "Merge with existing Opportunity"
|
||||
msgstr ""
|
||||
msgstr "與現有機會合併"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,select1:0
|
||||
|
@ -3816,7 +3816,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:res.partner,phonecall_ids:0
|
||||
msgid "Phonecalls"
|
||||
msgstr ""
|
||||
msgstr "致電"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
|
|
|
@ -92,7 +92,6 @@
|
|||
-
|
||||
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_1}:
|
||||
action: 'exist'
|
||||
name: 'existing partner'
|
||||
-
|
||||
Then, Click on "Create Opportunity" button.
|
||||
-
|
||||
|
@ -104,7 +103,6 @@
|
|||
-
|
||||
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_2}:
|
||||
action: 'nothing'
|
||||
name: 'Do not link to a partner'
|
||||
-
|
||||
Then, Click on "Create Opportunity" button.
|
||||
-
|
||||
|
|
|
@ -37,7 +37,7 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
|||
('nothing', 'Do not link to a partner')], \
|
||||
'Action', required=True),
|
||||
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
|
||||
'opportunity_ids': fields.many2many('crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id', 'Opportunities', domain=[('type', '=', 'opportunity')]),
|
||||
'opportunity_ids': fields.many2many('crm.lead', string='Opportunities', domain=[('type', '=', 'opportunity')]),
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
|
@ -236,7 +236,7 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory):
|
|||
|
||||
|
||||
_columns = {
|
||||
'user_ids': fields.many2many('res.users', 'mass_convert_rel', 'user_id', 'wizard_id', 'Salesmans'),
|
||||
'user_ids': fields.many2many('res.users', string='Salesmans'),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@ class crm_merge_opportunity(osv.osv_memory):
|
|||
count+=1
|
||||
|
||||
for history in opp.message_ids:
|
||||
message_obj.write(cr, uid, history.id, {'res_id': first_opportunity.id, 'name' : _("From %s : %s") % (opp.name, history.name) }, context=context)
|
||||
message_obj.write(cr, uid, history.id, {'res_id': first_opportunity.id, 'subject' : _("From %s : %s") % (opp.name, history.subject) }, context=context)
|
||||
|
||||
#Notification about loss of information
|
||||
details = []
|
||||
|
|
|
@ -24,8 +24,7 @@
|
|||
{
|
||||
'name': 'Extended Module to Add CalDav feature on Meeting',
|
||||
'version': '1.1',
|
||||
'category': 'Sales',
|
||||
'category': 'Generic Modules/CRM & SRM',
|
||||
'category': 'Customer Relationship Management',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
Caldav features in Meeting.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Customer & Supplier Claims Management',
|
||||
'version': '1.0',
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
This modules allows you to track your customers/suppliers claims and grievances.
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
{
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'name': 'CRM Fundraising',
|
||||
'version': '1.0',
|
||||
'complexity': "easy",
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
{
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'name': 'CRM Helpdesk',
|
||||
'version': '1.0',
|
||||
'complexity': "easy",
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Partner Geo-Localization',
|
||||
'version': '1.0',
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
This is the module used by OpenERP SA to redirect customers to its partners, based on geolocalization.
|
||||
|
|
|
@ -108,6 +108,7 @@
|
|||
'email_to': 'info@axelor.com',
|
||||
'email_from': 'Administrator <admin@openerp.com>',
|
||||
'reply_to': 'sales_openerp@openerp.com',
|
||||
'state': 'draft',
|
||||
'history': 'latest',
|
||||
}
|
||||
ids = self.create(cr, uid, vals, context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'})
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
</group>
|
||||
<separator string="" colspan="4" />
|
||||
<group col="6" colspan="4">
|
||||
<field name="smtp_server_id" widget="selection" colspan="4"/>
|
||||
<field name="email_from" colspan="4" required="1"/>
|
||||
<field name="email_to" colspan="4" required="1"/>
|
||||
<field name="email_cc" colspan="4"/>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'CRM Profiling Management - To Perform Segmentation within Partners',
|
||||
'version': '1.3',
|
||||
'category': 'Sales',
|
||||
'category': 'Customer Relationship Management',
|
||||
'complexity': "easy",
|
||||
'description': """
|
||||
This module allows users to perform segmentation within partners.
|
||||
|
|
|
@ -264,7 +264,7 @@ class crm_segmentation(osv.osv):
|
|||
}
|
||||
|
||||
_constraints = [
|
||||
(orm.orm._check_recursion, 'Error ! You can not create recursive profiles.', ['parent_id'])
|
||||
(osv.osv._check_recursion, 'Error ! You can not create recursive profiles.', ['parent_id'])
|
||||
]
|
||||
|
||||
def process_continue(self, cr, uid, ids, start=False):
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 08:06+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: field:decimal.precision,digits:0
|
||||
msgid "Digits"
|
||||
msgstr "數字"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: view:decimal.precision:0
|
||||
msgid "Decimal Precision"
|
||||
msgstr "小數精確度"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
|
||||
#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
|
||||
msgid "Decimal Accuracy Definitions"
|
||||
msgstr ""
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.module.module,description:decimal_precision.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
"This module allows to configure the price accuracy you need for different "
|
||||
"kind\n"
|
||||
"of usage: accounting, sales, purchases, ...\n"
|
||||
"\n"
|
||||
"The decimal precision is configured per company.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"此模組讓您為會計、銷售、採購...等不同用途設定價錢準確度。\n"
|
||||
"\n"
|
||||
"每間公司之小數精確度可以不同。\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: field:decimal.precision,name:0
|
||||
msgid "Usage"
|
||||
msgstr "用途"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: sql_constraint:decimal.precision:0
|
||||
msgid "Only one value can be defined for each given usage!"
|
||||
msgstr "每種用途只可定義一個值!"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.module.module,shortdesc:decimal_precision.module_meta_information
|
||||
msgid "Decimal Precision Configuration"
|
||||
msgstr "小數精確度設定"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.model,name:decimal_precision.model_decimal_precision
|
||||
msgid "decimal.precision"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Decimal Accuracy"
|
||||
#~ msgstr "小數準確度"
|
|
@ -23,7 +23,7 @@
|
|||
{
|
||||
'name': 'Carriers and Deliveries',
|
||||
'version': '1.0',
|
||||
'category': 'Warehouse',
|
||||
'category': 'Warehouse Management',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
Allows you to add delivery methods in sale orders and picking.
|
||||
|
|
|
@ -7,19 +7,19 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-01-28 03:29+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 10:27+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\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: 2011-09-05 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2011-09-28 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14049)\n"
|
||||
|
||||
#. module: delivery
|
||||
#: report:sale.shipping:0
|
||||
msgid "Order Ref."
|
||||
msgstr "單號參照"
|
||||
msgstr "訂單參考"
|
||||
|
||||
#. module: delivery
|
||||
#: model:product.template,name:delivery.delivery_product_product_template
|
||||
|
@ -67,7 +67,7 @@ msgstr "體積"
|
|||
#. module: delivery
|
||||
#: sql_constraint:sale.order:0
|
||||
msgid "Order Reference must be unique !"
|
||||
msgstr "交貨參照不能重覆!"
|
||||
msgstr "訂單參考不能重覆!"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,line_ids:0
|
||||
|
@ -82,17 +82,17 @@ msgstr "交貨單"
|
|||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
msgid "Deliveries Properties"
|
||||
msgstr ""
|
||||
msgstr "交貨性質"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_picking_tree4
|
||||
msgid "Picking to be invoiced"
|
||||
msgstr ""
|
||||
msgstr "要開立發票的提貨"
|
||||
|
||||
#. module: delivery
|
||||
#: help:delivery.grid,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of delivery grid."
|
||||
msgstr ""
|
||||
msgstr "提供顯示交貨格線清單的次序。"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
|
@ -103,12 +103,12 @@ msgstr "國家"
|
|||
#. module: delivery
|
||||
#: report:sale.shipping:0
|
||||
msgid "Delivery Order :"
|
||||
msgstr "交貨單:"
|
||||
msgstr "交貨單 :"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,variable_factor:0
|
||||
msgid "Variable Factor"
|
||||
msgstr ""
|
||||
msgstr "可變因子"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,help:delivery.action_delivery_grid_form
|
||||
|
@ -132,7 +132,7 @@ msgstr "固定"
|
|||
#: field:res.partner,property_delivery_carrier:0
|
||||
#: field:sale.order,carrier_id:0
|
||||
msgid "Delivery Method"
|
||||
msgstr "交貨方式"
|
||||
msgstr "交貨方法"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_stock_move
|
||||
|
@ -143,12 +143,12 @@ msgstr "庫存調動"
|
|||
#: code:addons/delivery/delivery.py:141
|
||||
#, python-format
|
||||
msgid "No line matched this order in the choosed delivery grids !"
|
||||
msgstr ""
|
||||
msgstr "選擇的交貨格無一行符合此訂單 !"
|
||||
|
||||
#. module: delivery
|
||||
#: field:stock.picking,carrier_tracking_ref:0
|
||||
msgid "Carrier Tracking Ref"
|
||||
msgstr "運輸公司追蹤編號"
|
||||
msgstr "運輸公司追蹤參考"
|
||||
|
||||
#. module: delivery
|
||||
#: field:stock.picking,weight_net:0
|
||||
|
@ -172,7 +172,7 @@ msgstr "警告"
|
|||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
msgid "Grid definition"
|
||||
msgstr ""
|
||||
msgstr "格線定義"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.sale.order:0
|
||||
|
@ -197,12 +197,12 @@ msgstr "銷貨單"
|
|||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid
|
||||
msgid "Delivery Grid"
|
||||
msgstr ""
|
||||
msgstr "交貨格線"
|
||||
|
||||
#. module: delivery
|
||||
#: report:sale.shipping:0
|
||||
msgid "Invoiced to"
|
||||
msgstr "發票交至"
|
||||
msgstr "發票開立對象:"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_stock_picking
|
||||
|
@ -212,7 +212,7 @@ msgstr "提貨清單"
|
|||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_sale_order
|
||||
msgid "Make Delievery"
|
||||
msgstr ""
|
||||
msgstr "進行交貨"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.module.module,description:delivery.module_meta_information
|
||||
|
@ -228,12 +228,12 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: view:delivery.grid.line:0
|
||||
msgid "Grid Lines"
|
||||
msgstr ""
|
||||
msgstr "格線"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,grid_id:0
|
||||
msgid "Grid"
|
||||
msgstr ""
|
||||
msgstr "網格"
|
||||
|
||||
#. module: delivery
|
||||
#: help:delivery.grid,active:0
|
||||
|
@ -245,17 +245,17 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: field:delivery.grid,zip_to:0
|
||||
msgid "To Zip"
|
||||
msgstr ""
|
||||
msgstr "至郵遞區號"
|
||||
|
||||
#. module: delivery
|
||||
#: report:sale.shipping:0
|
||||
msgid "Order Date"
|
||||
msgstr "單子日期"
|
||||
msgstr "訂單日期"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,name:0
|
||||
msgid "Grid Name"
|
||||
msgstr ""
|
||||
msgstr "網格名稱"
|
||||
|
||||
#. module: delivery
|
||||
#: view:stock.move:0
|
||||
|
@ -287,7 +287,7 @@ msgstr ""
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:95
|
||||
#, python-format
|
||||
msgid "No grid available !"
|
||||
msgstr ""
|
||||
msgstr "無可用網格 !"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,operator:0
|
||||
|
@ -299,7 +299,7 @@ msgstr ""
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:98
|
||||
#, python-format
|
||||
msgid "Order not in draft state !"
|
||||
msgstr ""
|
||||
msgstr "訂單不在草稿階段 !"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:res.partner:0
|
||||
|
@ -314,7 +314,7 @@ msgstr "批次"
|
|||
#. module: delivery
|
||||
#: constraint:stock.move:0
|
||||
msgid "You try to assign a lot which is not from the same product"
|
||||
msgstr ""
|
||||
msgstr "指定了不同產品的批次"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,active:0
|
||||
|
@ -325,7 +325,7 @@ msgstr "活躍"
|
|||
#. module: delivery
|
||||
#: report:sale.shipping:0
|
||||
msgid "Shipping Date"
|
||||
msgstr ""
|
||||
msgstr "貨運日期"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,product_id:0
|
||||
|
@ -382,7 +382,7 @@ msgstr "運輸公司伙伴"
|
|||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
msgid "Sales & Purchases"
|
||||
msgstr "銷售&採購"
|
||||
msgstr "銷售 及 購貨"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,operator:0
|
||||
|
@ -392,12 +392,12 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: constraint:stock.move:0
|
||||
msgid "You must assign a production lot for this product"
|
||||
msgstr "須為此產品分配生產批次"
|
||||
msgstr "須為此產品指定生產批次"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.sale.order:0
|
||||
msgid "Create Deliveries"
|
||||
msgstr ""
|
||||
msgstr "進行交貨"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_delivery_cost
|
||||
|
@ -481,7 +481,7 @@ msgstr ""
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:98
|
||||
#, python-format
|
||||
msgid "The order state have to be draft to add delivery lines."
|
||||
msgstr ""
|
||||
msgstr "訂單狀態要是草稿才能添加交貨明細。"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.module.module,shortdesc:delivery.module_meta_information
|
||||
|
@ -491,12 +491,12 @@ msgstr "運輸公司與交貨"
|
|||
#. module: delivery
|
||||
#: field:delivery.carrier,grids_id:0
|
||||
msgid "Delivery Grids"
|
||||
msgstr ""
|
||||
msgstr "交貨網格"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "次序"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,list_price:0
|
||||
|
@ -507,7 +507,7 @@ msgstr "銷售價"
|
|||
#: view:delivery.grid:0
|
||||
#: field:delivery.grid,state_ids:0
|
||||
msgid "States"
|
||||
msgstr ""
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,price_type:0
|
||||
|
|
|
@ -23,8 +23,7 @@
|
|||
{
|
||||
'name': 'Integrated Document Management System',
|
||||
'version': '2.1',
|
||||
'category': 'Tools',
|
||||
'category': 'Generic Modules/Others',
|
||||
'category': 'Knowledge Management',
|
||||
'complexity': "normal",
|
||||
'description': """
|
||||
This is a complete document management system.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue