[MERGE] from trunk
bzr revid: chm@openerp.com-20140502095132-kfx40xou73mukr2y
This commit is contained in:
commit
ee16b014b1
|
@ -49,7 +49,7 @@ for a particular financial year and for preparation of vouchers there is a modul
|
||||||
""",
|
""",
|
||||||
'website': 'http://www.openerp.com',
|
'website': 'http://www.openerp.com',
|
||||||
'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'],
|
'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'],
|
||||||
'depends' : ['base_setup', 'product', 'analytic', 'process', 'board', 'edi', 'report'],
|
'depends' : ['base_setup', 'product', 'analytic', 'board', 'edi', 'report'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/account_security.xml',
|
'security/account_security.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
@ -114,17 +114,12 @@ for a particular financial year and for preparation of vouchers there is a modul
|
||||||
'partner_view.xml',
|
'partner_view.xml',
|
||||||
'product_view.xml',
|
'product_view.xml',
|
||||||
'account_assert_test.xml',
|
'account_assert_test.xml',
|
||||||
'process/statement_process.xml',
|
|
||||||
'process/customer_invoice_process.xml',
|
|
||||||
'process/supplier_invoice_process.xml',
|
|
||||||
'ir_sequence_view.xml',
|
'ir_sequence_view.xml',
|
||||||
'company_view.xml',
|
'company_view.xml',
|
||||||
'board_account_view.xml',
|
|
||||||
'edi/invoice_action_data.xml',
|
'edi/invoice_action_data.xml',
|
||||||
'account_bank_view.xml',
|
'account_bank_view.xml',
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
'account_pre_install.yml',
|
'account_pre_install.yml',
|
||||||
|
|
||||||
'views/report_vat.xml',
|
'views/report_vat.xml',
|
||||||
'views/report_invoice.xml',
|
'views/report_invoice.xml',
|
||||||
'views/report_trialbalance.xml',
|
'views/report_trialbalance.xml',
|
||||||
|
@ -144,20 +139,12 @@ for a particular financial year and for preparation of vouchers there is a modul
|
||||||
'project/views/report_analyticcostledgerquantity.xml',
|
'project/views/report_analyticcostledgerquantity.xml',
|
||||||
'project/views/report_analyticcostledger.xml',
|
'project/views/report_analyticcostledger.xml',
|
||||||
'project/views/report_invertedanalyticbalance.xml',
|
'project/views/report_invertedanalyticbalance.xml',
|
||||||
],
|
'views/account.xml',
|
||||||
'js': [
|
|
||||||
'static/src/js/account_move_reconciliation.js',
|
|
||||||
'static/src/js/account_move_line_quickadd.js',
|
|
||||||
],
|
],
|
||||||
'qweb' : [
|
'qweb' : [
|
||||||
"static/src/xml/account_move_reconciliation.xml",
|
"static/src/xml/account_move_reconciliation.xml",
|
||||||
"static/src/xml/account_move_line_quickadd.xml",
|
"static/src/xml/account_move_line_quickadd.xml",
|
||||||
],
|
],
|
||||||
'css':[
|
|
||||||
'static/src/css/account_move_reconciliation.css',
|
|
||||||
'static/src/css/account_move_line_quickadd.css',
|
|
||||||
'static/src/css/account_bank_and_cash.css',
|
|
||||||
],
|
|
||||||
'demo': [
|
'demo': [
|
||||||
'demo/account_demo.xml',
|
'demo/account_demo.xml',
|
||||||
'project/project_demo.xml',
|
'project/project_demo.xml',
|
||||||
|
|
|
@ -1944,15 +1944,17 @@ class account_tax(osv.osv):
|
||||||
return super(account_tax, self).write(cr, uid, ids, vals, context=context)
|
return super(account_tax, self).write(cr, uid, ids, vals, context=context)
|
||||||
|
|
||||||
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
|
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
journal_pool = self.pool.get('account.journal')
|
journal_pool = self.pool.get('account.journal')
|
||||||
|
|
||||||
if context and context.has_key('type'):
|
if context.get('type'):
|
||||||
if context.get('type') in ('out_invoice','out_refund'):
|
if context.get('type') in ('out_invoice','out_refund'):
|
||||||
args += [('type_tax_use','in',['sale','all'])]
|
args += [('type_tax_use','in',['sale','all'])]
|
||||||
elif context.get('type') in ('in_invoice','in_refund'):
|
elif context.get('type') in ('in_invoice','in_refund'):
|
||||||
args += [('type_tax_use','in',['purchase','all'])]
|
args += [('type_tax_use','in',['purchase','all'])]
|
||||||
|
|
||||||
if context and context.has_key('journal_id'):
|
if context.get('journal_id'):
|
||||||
journal = journal_pool.browse(cr, uid, context.get('journal_id'))
|
journal = journal_pool.browse(cr, uid, context.get('journal_id'))
|
||||||
if journal.type in ('sale', 'purchase'):
|
if journal.type in ('sale', 'purchase'):
|
||||||
args += [('type_tax_use','in',[journal.type,'all'])]
|
args += [('type_tax_use','in',[journal.type,'all'])]
|
||||||
|
|
|
@ -409,9 +409,7 @@ class account_invoice(osv.osv):
|
||||||
'''
|
'''
|
||||||
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
|
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
|
||||||
self.write(cr, uid, ids, {'sent': True}, context=context)
|
self.write(cr, uid, ids, {'sent': True}, context=context)
|
||||||
context2 = context.copy()
|
return self.pool['report'].get_action(cr, uid, [], 'account.report_invoice', context=context)
|
||||||
context2['active_ids'] = ids
|
|
||||||
return self.pool['report'].get_action(cr, uid, [], 'account.report_invoice', context=context2)
|
|
||||||
|
|
||||||
def action_invoice_sent(self, cr, uid, ids, context=None):
|
def action_invoice_sent(self, cr, uid, ids, context=None):
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -457,7 +457,7 @@
|
||||||
<filter name="invoices" string="Invoices" domain="[('state','not in',['draft','cancel'])]" help="Proforma/Open/Paid Invoices"/>
|
<filter name="invoices" string="Invoices" domain="[('state','not in',['draft','cancel'])]" help="Proforma/Open/Paid Invoices"/>
|
||||||
<filter name="unpaid" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/>
|
<filter name="unpaid" string="Unpaid" domain="[('state','=','open')]" help="Unpaid Invoices"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
|
<field name="partner_id" operator="child_of"/>
|
||||||
<field name="user_id" string="Salesperson"/>
|
<field name="user_id" string="Salesperson"/>
|
||||||
<field name="period_id" string="Period"/>
|
<field name="period_id" string="Period"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
|
@ -642,7 +642,7 @@ class account_move_line(osv.osv):
|
||||||
(_check_date, 'The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal.', ['date']),
|
(_check_date, 'The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal.', ['date']),
|
||||||
(_check_currency, 'The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal.', ['currency_id']),
|
(_check_currency, 'The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal.', ['currency_id']),
|
||||||
(_check_currency_and_amount, "You cannot create journal items with a secondary currency without recording both 'currency' and 'amount currency' field.", ['currency_id','amount_currency']),
|
(_check_currency_and_amount, "You cannot create journal items with a secondary currency without recording both 'currency' and 'amount currency' field.", ['currency_id','amount_currency']),
|
||||||
(_check_currency_amount, 'The amount expressed in the secondary currency must be positive when the journal item is a debit and negative when if it is a credit.', ['amount_currency']),
|
(_check_currency_amount, 'The amount expressed in the secondary currency must be positive when account is debited and negative when account is credited.', ['amount_currency']),
|
||||||
(_check_currency_company, "You cannot provide a secondary currency if it is the same than the company one." , ['currency_id']),
|
(_check_currency_company, "You cannot provide a secondary currency if it is the same than the company one." , ['currency_id']),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1034,10 +1034,14 @@ class account_move_line(osv.osv):
|
||||||
part_rec_ids = [rec['reconcile_partial_id'][0] for rec in part_recs]
|
part_rec_ids = [rec['reconcile_partial_id'][0] for rec in part_recs]
|
||||||
unlink_ids += rec_ids
|
unlink_ids += rec_ids
|
||||||
unlink_ids += part_rec_ids
|
unlink_ids += part_rec_ids
|
||||||
|
all_moves = obj_move_line.search(cr, uid, ['|',('reconcile_id', 'in', unlink_ids),('reconcile_partial_id', 'in', unlink_ids)])
|
||||||
|
all_moves = list(set(all_moves) - set(move_ids))
|
||||||
if unlink_ids:
|
if unlink_ids:
|
||||||
if opening_reconciliation:
|
if opening_reconciliation:
|
||||||
obj_move_rec.write(cr, uid, unlink_ids, {'opening_reconciliation': False})
|
obj_move_rec.write(cr, uid, unlink_ids, {'opening_reconciliation': False})
|
||||||
obj_move_rec.unlink(cr, uid, unlink_ids)
|
obj_move_rec.unlink(cr, uid, unlink_ids)
|
||||||
|
if all_moves:
|
||||||
|
obj_move_line.reconcile_partial(cr, uid, all_moves, 'auto',context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def unlink(self, cr, uid, ids, context=None, check=True):
|
def unlink(self, cr, uid, ids, context=None, check=True):
|
||||||
|
|
|
@ -384,6 +384,7 @@
|
||||||
<group expand="0" string="Group By...">
|
<group expand="0" string="Group By...">
|
||||||
<filter string="User" context="{'group_by':'user_id'}" icon="terp-personal"/>
|
<filter string="User" context="{'group_by':'user_id'}" icon="terp-personal"/>
|
||||||
<filter string="Type" context="{'group_by':'type'}" icon="terp-stock_symbol-selection"/>
|
<filter string="Type" context="{'group_by':'type'}" icon="terp-stock_symbol-selection"/>
|
||||||
|
<filter string="Company" context="{'group_by':'company_id'}" icon="terp-go-home" groups="base.group_multi_company"/>
|
||||||
</group>
|
</group>
|
||||||
</search>
|
</search>
|
||||||
</field>
|
</field>
|
||||||
|
@ -881,6 +882,7 @@
|
||||||
<field name="price_include"/>
|
<field name="price_include"/>
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||||
|
<field name="type_tax_use" invisible="1"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -891,6 +893,12 @@
|
||||||
<search string="Search Taxes">
|
<search string="Search Taxes">
|
||||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('description','ilike',self)]" string="Tax"/>
|
<field name="name" filter_domain="['|', ('name','ilike',self), ('description','ilike',self)]" string="Tax"/>
|
||||||
<field name="company_id" groups="base.group_multi_company"/>
|
<field name="company_id" groups="base.group_multi_company"/>
|
||||||
|
<filter string="Sale" domain="[('type_tax_use','=','sale')]" />
|
||||||
|
<filter string="Purchase" domain="[('type_tax_use','=','purchase')]" />
|
||||||
|
<group string="Group By...">
|
||||||
|
<filter string="Company" domain="[]" context="{'group_by':'company_id'}"/>
|
||||||
|
<filter string="Tax Application" domain="[]" context="{'group_by':'type_tax_use'}"/>
|
||||||
|
</group>
|
||||||
</search>
|
</search>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<record id="action_company_analysis_tree" model="ir.actions.act_window">
|
|
||||||
<field name="name">Company Analysis</field>
|
|
||||||
<field name="res_model">account.entries.report</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,graph</field>
|
|
||||||
<field name="context">{'group_by':['user_type'], 'group_by_no_leaf':1}</field>
|
|
||||||
<field name="view_id" ref="account.view_account_entries_report_tree"/>
|
|
||||||
<field name="domain">[('year','=',time.strftime('%Y'))]</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="board_account_form" model="ir.ui.view">
|
|
||||||
<field name="name">board.account.form</field>
|
|
||||||
<field name="model">board.board</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Account Board" version="7.0">
|
|
||||||
<board style="2-1">
|
|
||||||
<column>
|
|
||||||
<action name="%(action_company_analysis_tree)d" string="Company Analysis"/>
|
|
||||||
</column>
|
|
||||||
</board>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="open_board_account" model="ir.actions.act_window">
|
|
||||||
<field name="name">Accounting</field>
|
|
||||||
<field name="res_model">board.board</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">form</field>
|
|
||||||
<field name="usage">menu</field>
|
|
||||||
<field name="view_id" ref="board_account_form"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem id="menu_board_account"
|
|
||||||
action="open_board_account"
|
|
||||||
icon="terp-graph"
|
|
||||||
parent="base.menu_reporting_dashboard"
|
|
||||||
groups="group_account_user,group_account_manager"
|
|
||||||
sequence="45"/>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -65,7 +65,8 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//div[@name='buttons']" position="inside">
|
<xpath expr="//div[@name='buttons']" position="inside">
|
||||||
<button type="action" string="Invoices"
|
<button type="action" string="Invoices"
|
||||||
name="%(account.action_invoice_tree)d"
|
name="%(account.action_invoice_tree1)d"
|
||||||
|
attrs="{'invisible': [('customer', '=', False)]}"
|
||||||
context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
|
context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
|
||||||
<button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
|
<button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
|
||||||
<button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
|
<button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
|
||||||
|
@ -97,7 +98,7 @@
|
||||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<page name="sales_purchases" position="after" version="7.0">
|
<page name="sales_purchases" position="after" version="7.0">
|
||||||
<page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
|
<page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}" groups="account.group_account_invoice">
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="property_account_position" widget="selection"/>
|
<field name="property_account_position" widget="selection"/>
|
||||||
|
@ -127,7 +128,7 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
<page string="Accounting" name="accounting_disabled" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}">
|
<page string="Accounting" name="accounting_disabled" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}" groups="account.group_account_invoice">
|
||||||
<div>
|
<div>
|
||||||
<p>Accounting-related settings are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
|
<p>Accounting-related settings are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,199 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_process_invoiceprocess0" model="process.process">
|
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""Customer Invoice"""" name="name"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Node
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_node_analytic0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.account_analytic_def_account"/>
|
|
||||||
<field name="model_id" ref="analytic.model_account_analytic_account"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Analytic Costs"""" name="name"/>
|
|
||||||
<field eval=""""Analytic costs to invoice"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'close')"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_draftinvoices0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Draft Invoice"""" name="name"/>
|
|
||||||
<field eval=""""Draft state of an invoice"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_invoiceinvoice0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_finance_receivables"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Create Invoice"""" name="name"/>
|
|
||||||
<field eval=""""Invoice's state is Open"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_accountingentries0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_move_journal_line_form"/>
|
|
||||||
<field name="model_id" ref="account.model_account_move"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Accounting"""" name="name"/>
|
|
||||||
<field eval=""""Accounting entries."""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_bankstatement0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""subflow"""" name="kind"/>
|
|
||||||
<field eval=""""Bank Statement"""" name="name"/>
|
|
||||||
<field eval=""""Registered payment"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field name="subflow_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_paymententries0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_move_journal_line_form"/>
|
|
||||||
<field name="model_id" ref="account.model_account_move_line"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Payment"""" name="name"/>
|
|
||||||
<field eval=""""Payment entries"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'valid')"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_reconciliation0" model="process.node">
|
|
||||||
<field name="model_id" ref="account.model_account_move_reconcile"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Reconciliation"""" name="name"/>
|
|
||||||
<field eval=""""Comparison between accounting and payment entries"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='valid'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_paidinvoice0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Paid invoice"""" name="name"/>
|
|
||||||
<field eval=""""Invoice's state is Done"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_invoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_accountingstatemententries0" model="process.node">
|
|
||||||
<field name="model_id" ref="account.model_account_move_line"/>
|
|
||||||
<field eval=""""subflow"""" name="kind"/>
|
|
||||||
<field eval=""""Bank Statement"""" name="name"/>
|
|
||||||
<field eval=""""Bank statement"""" name="note"/>
|
|
||||||
<field name="subflow_id" ref="account.process_process_invoiceprocess0"/>
|
|
||||||
<field name="process_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'valid')"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Transition
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_transition_confirmstatementfromdraft0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Confirm statement"""" name="name"/>
|
|
||||||
<field eval=""""The accountant confirms the statement."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_accountingstatemententries0"/>
|
|
||||||
<field name="source_node_id" ref="account.process_node_draftstatement0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_analyticinvoice0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""From analytic accounts"""" name="name"/>
|
|
||||||
<field eval=""""Analytic costs (timesheets, some purchased products, ...) come from analytic accounts. These generate draft invoices."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_draftinvoices0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_analytic0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_customerinvoice0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Draft invoices are checked, validated and printed."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_invoiceinvoice0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_draftinvoices0"/>
|
|
||||||
<field eval="[(6,0,[ref('account.pro2_to_open')])]" name="transition_ids"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_validentries0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Accountant validates the accounting entries coming from the invoice."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_accountingentries0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_invoiceinvoice0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_entriesreconcile0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Accounting entries"""" name="name"/>
|
|
||||||
<field eval=""""Accounting entries are the first input of the reconciliation."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_reconciliation0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_accountingentries0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_statemententries0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Manual or automatic creation of payment entries according to the statements"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_paymententries0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_bankstatement0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_paymentreconcile0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Payment entries"""" name="name"/>
|
|
||||||
<field eval=""""Payment entries are the second input of the reconciliation."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_reconciliation0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_paymententries0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_reconcilepaid0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Payment"""" name="name"/>
|
|
||||||
<field eval=""""As soon as the reconciliation is done, the invoice can be paid."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_paidinvoice0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_reconciliation0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Action
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_transition_action_createentries0" model="process.transition.action">
|
|
||||||
<field eval=""""action_move_create"""" name="action"/>
|
|
||||||
<field eval=""""object"""" name="state"/>
|
|
||||||
<field eval=""""Create entry"""" name="name"/>
|
|
||||||
<field name="transition_id" ref="process_transition_customerinvoice0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,93 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_process_statementprocess0" model="process.process">
|
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""Statement"""" name="name"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Node
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_node_electronicfile0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Electronic File"""" name="name"/>
|
|
||||||
<field eval=""""Automatic entry"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_manually0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Manually"""" name="name"/>
|
|
||||||
<field eval=""""Manual entry"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_importinvoice0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Import from invoice"""" name="name"/>
|
|
||||||
<field eval=""""Statement from invoice or payment"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_draftstatement0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Draft statement"""" name="name"/>
|
|
||||||
<field eval=""""State is draft"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Transition
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_transition_filestatement0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Automatic import of the bank statement"""" name="name"/>
|
|
||||||
<field eval=""""Import of the statement in the system from an electronic file"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_draftstatement0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_electronicfile0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_invoicemanually0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Manual entry"""" name="name"/>
|
|
||||||
<field eval=""""A statement with manual entries becomes a draft statement."""" name="note"/>
|
|
||||||
|
|
||||||
<field name="target_node_id" ref="process_node_draftstatement0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_manually0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_invoiceimport0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Import from invoice or payment"""" name="name"/>
|
|
||||||
<field eval=""""Import of the statement in the system from a supplier or customer invoice"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_draftstatement0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_importinvoice0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,168 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_process_supplierinvoiceprocess0" model="process.process">
|
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""Supplier Invoice"""" name="name"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Node
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_node_analyticcost0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.account_analytic_def_account"/>
|
|
||||||
<field name="model_id" ref="analytic.model_account_analytic_account"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Analytic Costs"""" name="name"/>
|
|
||||||
<field eval=""""Analytic costs to invoice"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'close')"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierdraftinvoices0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_invoice_tree2"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Draft Invoices"""" name="name"/>
|
|
||||||
<field eval=""""Draft state of an invoice"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierinvoiceinvoice0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_finance_payables"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Create Invoice"""" name="name"/>
|
|
||||||
<field eval=""""Invoice's state is Open"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierbankstatement0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
|
||||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
|
||||||
<field eval=""""subflow"""" name="kind"/>
|
|
||||||
<field eval=""""Bank Statement"""" name="name"/>
|
|
||||||
<field eval=""""Manually or automatically entered in the system"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field name="subflow_id" ref="process_process_statementprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplieraccountingentries0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_move_journal_line_form"/>
|
|
||||||
<field name="model_id" ref="account.model_account_move"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Accounting"""" name="name"/>
|
|
||||||
<field eval=""""Accounting entries."""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='posted'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierpaymentorder0" model="process.node">
|
|
||||||
<field name="model_id" ref="account.model_account_move_line"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Payment Order"""" name="name"/>
|
|
||||||
<field eval=""""Payment of invoices"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierreconciliation0" model="process.node">
|
|
||||||
<field name="model_id" ref="account.model_account_move_reconcile"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Reconciliation"""" name="name"/>
|
|
||||||
<field eval=""""Comparison between accounting and payment entries"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='valid'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_supplierpaidinvoice0" model="process.node">
|
|
||||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
|
||||||
<field name="model_id" ref="account.model_account_invoice"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Paid invoice"""" name="name"/>
|
|
||||||
<field eval=""""Invoice's state is Done."""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
|
||||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Transition
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_transition_supplieranalyticcost0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""From analytic accounts"""" name="name"/>
|
|
||||||
<field eval=""""Analytic costs (timesheets, some purchased products, ...) come from analytic accounts. These generate draft supplier invoices."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierdraftinvoices0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_analyticcost0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_suppliercustomerinvoice0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Draft invoices are validated. """" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierinvoiceinvoice0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplierdraftinvoices0"/>
|
|
||||||
<field eval="[(6,0,[ref('account.pro2_to_open')])]" name="transition_ids"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_suppliervalidentries0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Accountant validates the accounting entries coming from the invoice. """" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplieraccountingentries0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplierinvoiceinvoice0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_supplierentriesreconcile0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Accounting entries"""" name="name"/>
|
|
||||||
<field eval=""""Accounting entries are an input of the reconciliation."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierreconciliation0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplieraccountingentries0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_paymentorderbank0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Payment entries"""" name="name"/>
|
|
||||||
<field eval=""""The payment order is sent to the bank."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierbankstatement0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplierpaymentorder0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_paymentorderreconcilation0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Validation"""" name="name"/>
|
|
||||||
<field eval=""""Bank statements are entered in the system."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierreconciliation0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplierbankstatement0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_supplierreconcilepaid0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""System payment"""" name="name"/>
|
|
||||||
<field eval=""""As soon as the reconciliation is done, the invoice's state turns to “done” (i.e. paid) in the system."""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_supplierpaidinvoice0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_supplierreconciliation0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -31,7 +31,7 @@
|
||||||
<search string="Analytic Account">
|
<search string="Analytic Account">
|
||||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Analytic Account"/>
|
<field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Analytic Account"/>
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" operator="child_of"/>
|
||||||
<field name="manager_id"/>
|
<field name="manager_id"/>
|
||||||
<field name="parent_id"/>
|
<field name="parent_id"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
|
|
@ -259,6 +259,12 @@ class account_config_settings(osv.osv_memory):
|
||||||
def onchange_tax_rate(self, cr, uid, ids, rate, context=None):
|
def onchange_tax_rate(self, cr, uid, ids, rate, context=None):
|
||||||
return {'value': {'purchase_tax_rate': rate or False}}
|
return {'value': {'purchase_tax_rate': rate or False}}
|
||||||
|
|
||||||
|
def onchange_multi_currency(self, cr, uid, ids, group_multi_currency, context=None):
|
||||||
|
res = {}
|
||||||
|
if not group_multi_currency:
|
||||||
|
res['value'] = {'income_currency_exchange_account_id': False, 'expense_currency_exchange_account_id': False}
|
||||||
|
return res
|
||||||
|
|
||||||
def onchange_start_date(self, cr, uid, id, start_date):
|
def onchange_start_date(self, cr, uid, id, start_date):
|
||||||
if start_date:
|
if start_date:
|
||||||
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
|
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
<label for="id" string="Features"/>
|
<label for="id" string="Features"/>
|
||||||
<div>
|
<div>
|
||||||
<div name="group_multi_currency">
|
<div name="group_multi_currency">
|
||||||
<field name="group_multi_currency" class="oe_inline"/>
|
<field name="group_multi_currency" class="oe_inline" on_change="onchange_multi_currency(group_multi_currency)"/>
|
||||||
<label for="group_multi_currency"/>
|
<label for="group_multi_currency"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -158,19 +158,6 @@ OpenERP supports multiple currencies, multiple users with different access right
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="oe_container">
|
<section class="oe_container">
|
||||||
<div class="oe_row">
|
|
||||||
<h2 class="oe_slogan">Dashboard & KPIs</h2>
|
|
||||||
<div class="oe_span6">
|
|
||||||
<img class="oe_picture oe_screenshot" src="account_sc_06.png">
|
|
||||||
</div>
|
|
||||||
<div class="oe_span6">
|
|
||||||
<p class='oe_mt32'>
|
|
||||||
Get direct access to key information with dynamic and customizable dashboards. Analyse your financial activities with the drill-up, drill-down, drill-across and filter features.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section class="oe_container oe_dark">
|
|
||||||
<div class="oe_row">
|
<div class="oe_row">
|
||||||
<div class="oe_span12">
|
<div class="oe_span12">
|
||||||
<h2 class="oe_slogan">Many companies already enjoy it</h2>
|
<h2 class="oe_slogan">Many companies already enjoy it</h2>
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="account assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/account/static/src/css/account_move_reconciliation.css"/>
|
||||||
|
<link rel="stylesheet" href="/account/static/src/css/account_move_line_quickadd.css"/>
|
||||||
|
<link rel="stylesheet" href="/account/static/src/css/account_bank_and_cash.css"/>
|
||||||
|
<script type="text/javascript" src="/account/static/src/js/account_move_reconciliation.js"></script>
|
||||||
|
<script type="text/javascript" src="/account/static/src/js/account_move_line_quickadd.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -40,9 +40,7 @@ Adds menu to show relevant information to each manager.You can also view the rep
|
||||||
'account_analytic_analysis_view.xml',
|
'account_analytic_analysis_view.xml',
|
||||||
'account_analytic_analysis_cron.xml',
|
'account_analytic_analysis_cron.xml',
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
],
|
'views/account_analytic_analysis.xml',
|
||||||
'css': [
|
|
||||||
'static/src/css/analytic.css'
|
|
||||||
],
|
],
|
||||||
'demo': ['analytic_account_demo.xml'],
|
'demo': ['analytic_account_demo.xml'],
|
||||||
'test': ['test/account_analytic_analysis.yml'],
|
'test': ['test/account_analytic_analysis.yml'],
|
||||||
|
|
|
@ -22,6 +22,7 @@ from dateutil.relativedelta import relativedelta
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
from openerp.osv.orm import intersect, except_orm
|
from openerp.osv.orm import intersect, except_orm
|
||||||
|
@ -72,9 +73,7 @@ class account_analytic_invoice_line(osv.osv):
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
res = self.pool.get('product.product').browse(cr, uid, product, context=context)
|
res = self.pool.get('product.product').browse(cr, uid, product, context=context)
|
||||||
result.update({'name':res.partner_ref or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': res.list_price or 0.0})
|
result.update({'name': name or res.description or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': price_unit or res.list_price or 0.0})
|
||||||
if res.description:
|
|
||||||
result['name'] += '\n'+res.description
|
|
||||||
|
|
||||||
res_final = {'value':result}
|
res_final = {'value':result}
|
||||||
if result['uom_id'] != res.uom_id.id:
|
if result['uom_id'] != res.uom_id.id:
|
||||||
|
@ -721,12 +720,21 @@ class account_analytic_account(osv.osv):
|
||||||
inv_obj.button_compute(cr, uid, [invoice_id], context=context)
|
inv_obj.button_compute(cr, uid, [invoice_id], context=context)
|
||||||
return invoice_id
|
return invoice_id
|
||||||
|
|
||||||
def recurring_create_invoice(self, cr, uid, automatic=False, context=None):
|
def recurring_create_invoice(self, cr, uid, ids, context=None):
|
||||||
|
return self._recurring_create_invoice(cr, uid, ids, context=context)
|
||||||
|
|
||||||
|
def _cron_recurring_create_invoice(self, cr, uid, context=None):
|
||||||
|
return self._recurring_create_invoice(cr, uid, [], automatic=True, context=context)
|
||||||
|
|
||||||
|
def _recurring_create_invoice(self, cr, uid, ids, automatic=False, context=None):
|
||||||
context = context or {}
|
context = context or {}
|
||||||
current_date = time.strftime('%Y-%m-%d')
|
current_date = time.strftime('%Y-%m-%d')
|
||||||
|
if ids:
|
||||||
contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True)])
|
contract_ids = ids
|
||||||
|
else:
|
||||||
|
contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True), ('type', '=', 'contract')])
|
||||||
for contract in self.browse(cr, uid, contract_ids, context=context):
|
for contract in self.browse(cr, uid, contract_ids, context=context):
|
||||||
|
try:
|
||||||
invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
|
invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
|
||||||
|
|
||||||
next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
|
next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
|
||||||
|
@ -738,6 +746,14 @@ class account_analytic_account(osv.osv):
|
||||||
else:
|
else:
|
||||||
new_date = next_date+relativedelta(months=+interval)
|
new_date = next_date+relativedelta(months=+interval)
|
||||||
self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
|
self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
|
||||||
|
if automatic:
|
||||||
|
cr.commit()
|
||||||
|
except Exception:
|
||||||
|
if automatic:
|
||||||
|
cr.rollback()
|
||||||
|
_logger.error(traceback.format_exc())
|
||||||
|
else:
|
||||||
|
raise
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class account_analytic_account_summary_user(osv.osv):
|
class account_analytic_account_summary_user(osv.osv):
|
||||||
|
|
|
@ -93,7 +93,7 @@ OpenERP Automatic Email
|
||||||
<field name="interval_type">days</field>
|
<field name="interval_type">days</field>
|
||||||
<field name="numbercall">-1</field>
|
<field name="numbercall">-1</field>
|
||||||
<field name="model" eval="'account.analytic.account'"/>
|
<field name="model" eval="'account.analytic.account'"/>
|
||||||
<field name="function" eval="'recurring_create_invoice'"/>
|
<field name="function" eval="'_cron_recurring_create_invoice'"/>
|
||||||
<field name="args" eval="'()'"/>
|
<field name="args" eval="'()'"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -151,8 +151,10 @@
|
||||||
</group>
|
</group>
|
||||||
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
|
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
|
||||||
<div>
|
<div>
|
||||||
|
<div attrs="{'invisible': [('type','!=', 'contract'), ('recurring_invoices', '=', False)]}">
|
||||||
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline" />
|
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline" />
|
||||||
<label for="recurring_invoices" />
|
<label for="recurring_invoices" />
|
||||||
|
</div>
|
||||||
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string="⇒ create invoices" type="object" groups="base.group_no_one"/>
|
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string="⇒ create invoices" type="object" groups="base.group_no_one"/>
|
||||||
</div>
|
</div>
|
||||||
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
!record {model: account.analytic.account, id: contract_main}:
|
!record {model: account.analytic.account, id: contract_main}:
|
||||||
partner_id: base.main_partner
|
partner_id: base.main_partner
|
||||||
template_id: account_analytic_analysis.contract_template
|
template_id: account_analytic_analysis.contract_template
|
||||||
|
type: contract
|
||||||
-
|
-
|
||||||
I check that the contract inherited from data of the template
|
I check that the contract inherited from data of the template
|
||||||
-
|
-
|
||||||
|
@ -32,7 +33,7 @@
|
||||||
I generate all invoices from contracts having recurring invoicing
|
I generate all invoices from contracts having recurring invoicing
|
||||||
-
|
-
|
||||||
!python {model: account.analytic.account}: |
|
!python {model: account.analytic.account}: |
|
||||||
self.recurring_create_invoice(cr, uid)
|
self.recurring_create_invoice(cr, uid, [])
|
||||||
-
|
-
|
||||||
I test the generated invoice
|
I test the generated invoice
|
||||||
-
|
-
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="account_analytic_analysis assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/account_analytic_analysis/static/src/css/analytic.css"/>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -454,15 +454,10 @@ class account_bank_statement(osv.osv):
|
||||||
_inherit = "account.bank.statement"
|
_inherit = "account.bank.statement"
|
||||||
_name = "account.bank.statement"
|
_name = "account.bank.statement"
|
||||||
|
|
||||||
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, st_line_number, context=None):
|
def _prepare_bank_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id, context=None):
|
||||||
account_move_line_pool = self.pool.get('account.move.line')
|
result = super(account_bank_statement,self)._prepare_bank_move_line(cr, uid, st_line,
|
||||||
account_bank_statement_line_pool = self.pool.get('account.bank.statement.line')
|
move_id, amount, company_currency_id, context=context)
|
||||||
st_line = account_bank_statement_line_pool.browse(cr, uid, st_line_id, context=context)
|
result['analytics_id'] = st_line.analytics_id.id
|
||||||
result = super(account_bank_statement,self).create_move_from_st_line(cr, uid, st_line_id, company_currency_id, st_line_number, context=context)
|
|
||||||
move = st_line.move_ids and st_line.move_ids[0] or False
|
|
||||||
if move:
|
|
||||||
for line in move.line_id:
|
|
||||||
account_move_line_pool.write(cr, uid, [line.id], {'analytics_id':st_line.analytics_id.id}, context=context)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def button_confirm_bank(self, cr, uid, ids, context=None):
|
def button_confirm_bank(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Slovak translation for openobject-addons
|
||||||
|
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2014-04-26 16:04+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Slovak <sk@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: 2014-04-27 05:58+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16985)\n"
|
||||||
|
|
||||||
|
#. module: account_anglo_saxon
|
||||||
|
#: model:ir.model,name:account_anglo_saxon.model_product_category
|
||||||
|
msgid "Product 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
|
||||||
|
#: 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
|
||||||
|
#: 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 ""
|
|
@ -123,6 +123,8 @@ class account_invoice_line(osv.osv):
|
||||||
if a == line['account_id'] and i_line.product_id.id == line['product_id']:
|
if a == line['account_id'] and i_line.product_id.id == line['product_id']:
|
||||||
uom = i_line.product_id.uos_id or i_line.product_id.uom_id
|
uom = i_line.product_id.uos_id or i_line.product_id.uom_id
|
||||||
valuation_price_unit = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id)
|
valuation_price_unit = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id)
|
||||||
|
if inv.currency_id.id != company_currency:
|
||||||
|
standard_price = self.pool.get('res.currency').compute(cr, uid, company_currency, inv.currency_id.id, standard_price, context={'date': inv.date_invoice})
|
||||||
if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id:
|
if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id:
|
||||||
#for average/fifo/lifo costing method, fetch real cost price from incomming moves
|
#for average/fifo/lifo costing method, fetch real cost price from incomming moves
|
||||||
stock_move_obj = self.pool.get('stock.move')
|
stock_move_obj = self.pool.get('stock.move')
|
||||||
|
|
|
@ -189,7 +189,7 @@ class account_voucher(osv.osv):
|
||||||
if not ids:
|
if not ids:
|
||||||
return []
|
return []
|
||||||
if context is None: context = {}
|
if context is None: context = {}
|
||||||
return [(r['id'], (str("%.2f" % r['amount']) or '')) for r in self.read(cr, uid, ids, ['amount'], context, load='_classic_write')]
|
return [(r['id'], (r['number'] or _('Voucher'))) for r in self.read(cr, uid, ids, ['number'], context, load='_classic_write')]
|
||||||
|
|
||||||
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
|
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
|
||||||
mod_obj = self.pool.get('ir.model.data')
|
mod_obj = self.pool.get('ir.model.data')
|
||||||
|
@ -783,6 +783,7 @@ class account_voucher(osv.osv):
|
||||||
total_credit += line.credit and line.amount_currency or 0.0
|
total_credit += line.credit and line.amount_currency or 0.0
|
||||||
total_debit += line.debit and line.amount_currency or 0.0
|
total_debit += line.debit and line.amount_currency or 0.0
|
||||||
|
|
||||||
|
remaining_amount = price
|
||||||
#voucher line creation
|
#voucher line creation
|
||||||
for line in account_move_lines:
|
for line in account_move_lines:
|
||||||
|
|
||||||
|
@ -803,13 +804,13 @@ class account_voucher(osv.osv):
|
||||||
'move_line_id':line.id,
|
'move_line_id':line.id,
|
||||||
'account_id':line.account_id.id,
|
'account_id':line.account_id.id,
|
||||||
'amount_original': amount_original,
|
'amount_original': amount_original,
|
||||||
'amount': (line.id in move_lines_found) and min(abs(price), amount_unreconciled) or 0.0,
|
'amount': (line.id in move_lines_found) and min(abs(remaining_amount), amount_unreconciled) or 0.0,
|
||||||
'date_original':line.date,
|
'date_original':line.date,
|
||||||
'date_due':line.date_maturity,
|
'date_due':line.date_maturity,
|
||||||
'amount_unreconciled': amount_unreconciled,
|
'amount_unreconciled': amount_unreconciled,
|
||||||
'currency_id': line_currency_id,
|
'currency_id': line_currency_id,
|
||||||
}
|
}
|
||||||
price -= rs['amount']
|
remaining_amount -= rs['amount']
|
||||||
#in case a corresponding move_line hasn't been found, we now try to assign the voucher amount
|
#in case a corresponding move_line hasn't been found, we now try to assign the voucher amount
|
||||||
#on existing invoices: we split voucher amount by most old first, but only for lines in the same currency
|
#on existing invoices: we split voucher amount by most old first, but only for lines in the same currency
|
||||||
if not move_lines_found:
|
if not move_lines_found:
|
||||||
|
@ -937,19 +938,17 @@ class account_voucher(osv.osv):
|
||||||
def cancel_voucher(self, cr, uid, ids, context=None):
|
def cancel_voucher(self, cr, uid, ids, context=None):
|
||||||
reconcile_pool = self.pool.get('account.move.reconcile')
|
reconcile_pool = self.pool.get('account.move.reconcile')
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
|
move_line_pool = self.pool.get('account.move.line')
|
||||||
for voucher in self.browse(cr, uid, ids, context=context):
|
for voucher in self.browse(cr, uid, ids, context=context):
|
||||||
# refresh to make sure you don't unlink an already removed move
|
# refresh to make sure you don't unlink an already removed move
|
||||||
voucher.refresh()
|
voucher.refresh()
|
||||||
recs = []
|
|
||||||
for line in voucher.move_ids:
|
for line in voucher.move_ids:
|
||||||
if line.reconcile_id:
|
if line.reconcile_id:
|
||||||
recs += [line.reconcile_id.id]
|
move_lines = [move_line.id for move_line in line.reconcile_id.line_id]
|
||||||
if line.reconcile_partial_id:
|
move_lines.remove(line.id)
|
||||||
recs += [line.reconcile_partial_id.id]
|
reconcile_pool.unlink(cr, uid, [line.reconcile_id.id])
|
||||||
|
if len(move_lines) >= 2:
|
||||||
reconcile_pool.unlink(cr, uid, recs)
|
move_line_pool.reconcile_partial(cr, uid, move_lines, 'auto',context=context)
|
||||||
|
|
||||||
if voucher.move_id:
|
if voucher.move_id:
|
||||||
move_pool.button_cancel(cr, uid, [voucher.move_id.id])
|
move_pool.button_cancel(cr, uid, [voucher.move_id.id])
|
||||||
move_pool.unlink(cr, uid, [voucher.move_id.id])
|
move_pool.unlink(cr, uid, [voucher.move_id.id])
|
||||||
|
|
|
@ -44,6 +44,8 @@
|
||||||
!python {model: account.voucher}: |
|
!python {model: account.voucher}: |
|
||||||
vals = {}
|
vals = {}
|
||||||
journal_id = self.default_get(cr, uid, ['journal_id']).get('journal_id',None)
|
journal_id = self.default_get(cr, uid, ['journal_id']).get('journal_id',None)
|
||||||
|
voucher = self.recompute_voucher_lines(cr, uid, [], ref("base.res_partner_19"), journal_id, 450.0, ref('base.EUR'), 'receipt', False)
|
||||||
|
assert (voucher['value'].get('writeoff_amount') == 0.0), "Writeoff amount calculated by recompute_voucher_lines() is not 0.0"
|
||||||
res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_19"), journal_id, 0.0, 1, ttype='receipt', date=False)
|
res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_19"), journal_id, 0.0, 1, ttype='receipt', date=False)
|
||||||
vals = {
|
vals = {
|
||||||
'account_id': ref('account.cash'),
|
'account_id': ref('account.cash'),
|
||||||
|
@ -64,6 +66,7 @@
|
||||||
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
|
||||||
id = self.create(cr, uid, vals)
|
id = self.create(cr, uid, vals)
|
||||||
voucher_id = self.browse(cr, uid, id)
|
voucher_id = self.browse(cr, uid, id)
|
||||||
|
assert (voucher_id.writeoff_amount == 0.0), "Writeoff amount is not 0.0"
|
||||||
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
|
||||||
self.signal_proforma_voucher(cr, uid, [voucher_id.id])
|
self.signal_proforma_voucher(cr, uid, [voucher_id.id])
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,6 @@ This module is for modifying account analytic view to show some data related to
|
||||||
'depends': ['hr_expense','account_analytic_analysis'],
|
'depends': ['hr_expense','account_analytic_analysis'],
|
||||||
'data': ['analytic_contract_hr_expense_view.xml'],
|
'data': ['analytic_contract_hr_expense_view.xml'],
|
||||||
'demo': [],
|
'demo': [],
|
||||||
'css' : [],
|
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': True,
|
'auto_install': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
# Slovak translation for openobject-addons
|
||||||
|
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||||
|
#
|
||||||
|
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: 2014-04-26 16:22+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Slovak <sk@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: 2014-04-27 05:58+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16985)\n"
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,wiki:0
|
||||||
|
msgid "Wiki"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid "Event Management"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,project_gtd:0
|
||||||
|
msgid "Getting Things Done"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: model:ir.module.module,description:association.module_meta_information
|
||||||
|
msgid "This module is to create Profile for Associates"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,progress:0
|
||||||
|
msgid "Configuration Progress"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid ""
|
||||||
|
"Here are specific applications related to the Association Profile you "
|
||||||
|
"selected."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: help:profile.association.config.install_modules_wizard,event_project:0
|
||||||
|
msgid "Helps you to manage and organize your events."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,config_logo:0
|
||||||
|
msgid "Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: help:profile.association.config.install_modules_wizard,hr_expense:0
|
||||||
|
msgid ""
|
||||||
|
"Tracks and manages employee expenses, and can automatically re-invoice "
|
||||||
|
"clients if the expenses are project-related."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: help:profile.association.config.install_modules_wizard,project_gtd:0
|
||||||
|
msgid ""
|
||||||
|
"GTD is a methodology to efficiently organise yourself and your tasks. This "
|
||||||
|
"module fully integrates GTD principle with OpenERP's project management."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid "Resources Management"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: model:ir.module.module,shortdesc:association.module_meta_information
|
||||||
|
msgid "Association profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,hr_expense:0
|
||||||
|
msgid "Expenses Tracking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: model:ir.actions.act_window,name:association.action_config_install_module
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid "Association Application Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: help:profile.association.config.install_modules_wizard,wiki:0
|
||||||
|
msgid ""
|
||||||
|
"Lets you create wiki pages and page groups in order to keep track of "
|
||||||
|
"business knowledge and share it with and between your employees."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: help:profile.association.config.install_modules_wizard,project:0
|
||||||
|
msgid ""
|
||||||
|
"Helps you manage your projects and tasks by tracking them, generating "
|
||||||
|
"plannings, etc..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: model:ir.model,name:association.model_profile_association_config_install_modules_wizard
|
||||||
|
msgid "profile.association.config.install_modules_wizard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: field:profile.association.config.install_modules_wizard,event_project:0
|
||||||
|
msgid "Events"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
#: field:profile.association.config.install_modules_wizard,project:0
|
||||||
|
msgid "Project Management"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: association
|
||||||
|
#: view:profile.association.config.install_modules_wizard:0
|
||||||
|
msgid "Configure"
|
||||||
|
msgstr ""
|
|
@ -1,25 +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/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import audittrail
|
|
||||||
import wizard
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
|
@ -1,47 +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/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
'name': 'Audit Trail',
|
|
||||||
'version': '1.0',
|
|
||||||
'category': 'Tools',
|
|
||||||
'description': """
|
|
||||||
This module lets administrator track every user operation on all the objects of the system.
|
|
||||||
===========================================================================================
|
|
||||||
|
|
||||||
The administrator can subscribe to rules for read, write and delete on objects
|
|
||||||
and can check logs.
|
|
||||||
""",
|
|
||||||
'author': 'OpenERP SA',
|
|
||||||
'website': 'http://www.openerp.com',
|
|
||||||
'depends': ['base'],
|
|
||||||
'data': [
|
|
||||||
'wizard/audittrail_view_log_view.xml',
|
|
||||||
'audittrail_view.xml',
|
|
||||||
'security/ir.model.access.csv',
|
|
||||||
],
|
|
||||||
'demo': ['audittrail_demo.xml'],
|
|
||||||
'installable': True,
|
|
||||||
'auto_install': False,
|
|
||||||
'images': ['images/audittrail1.jpeg','images/audittrail2.jpeg','images/audittrail3.jpeg'],
|
|
||||||
}
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,538 +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/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import openerp
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
import openerp.service.model
|
|
||||||
from openerp.tools.translate import _
|
|
||||||
import time
|
|
||||||
from openerp import tools
|
|
||||||
from openerp import SUPERUSER_ID
|
|
||||||
|
|
||||||
class audittrail_rule(osv.osv):
|
|
||||||
"""
|
|
||||||
For Auddittrail Rule
|
|
||||||
"""
|
|
||||||
_name = 'audittrail.rule'
|
|
||||||
_description = "Audittrail Rule"
|
|
||||||
_columns = {
|
|
||||||
"name": fields.char("Rule Name", size=32, required=True),
|
|
||||||
"object_id": fields.many2one('ir.model', 'Object', required=True, help="Select object for which you want to generate log."),
|
|
||||||
"user_id": fields.many2many('res.users', 'audittail_rules_users',
|
|
||||||
'user_id', 'rule_id', 'Users', help="if User is not added then it will applicable for all users"),
|
|
||||||
"log_read": fields.boolean("Log Reads", help="Select this if you want to keep track of read/open on any record of the object of this rule"),
|
|
||||||
"log_write": fields.boolean("Log Writes", help="Select this if you want to keep track of modification on any record of the object of this rule"),
|
|
||||||
"log_unlink": fields.boolean("Log Deletes", help="Select this if you want to keep track of deletion on any record of the object of this rule"),
|
|
||||||
"log_create": fields.boolean("Log Creates",help="Select this if you want to keep track of creation on any record of the object of this rule"),
|
|
||||||
"log_action": fields.boolean("Log Action",help="Select this if you want to keep track of actions on the object of this rule"),
|
|
||||||
"log_workflow": fields.boolean("Log Workflow",help="Select this if you want to keep track of workflow on any record of the object of this rule"),
|
|
||||||
"state": fields.selection((("draft", "Draft"), ("subscribed", "Subscribed")), "Status", required=True),
|
|
||||||
"action_id": fields.many2one('ir.actions.act_window', "Action ID"),
|
|
||||||
}
|
|
||||||
_defaults = {
|
|
||||||
'state': 'draft',
|
|
||||||
'log_create': 1,
|
|
||||||
'log_unlink': 1,
|
|
||||||
'log_write': 1,
|
|
||||||
}
|
|
||||||
_sql_constraints = [
|
|
||||||
('model_uniq', 'unique (object_id)', """There is already a rule defined on this object\n You cannot define another: please edit the existing one.""")
|
|
||||||
]
|
|
||||||
__functions = {}
|
|
||||||
|
|
||||||
def subscribe(self, cr, uid, ids, *args):
|
|
||||||
"""
|
|
||||||
Subscribe Rule for auditing changes on object and apply shortcut for logs on that object.
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param ids: List of Auddittrail Rule’s IDs.
|
|
||||||
@return: True
|
|
||||||
"""
|
|
||||||
obj_action = self.pool.get('ir.actions.act_window')
|
|
||||||
obj_model = self.pool.get('ir.model.data')
|
|
||||||
#start Loop
|
|
||||||
for thisrule in self.browse(cr, uid, ids):
|
|
||||||
if thisrule.object_id.model not in self.pool:
|
|
||||||
raise osv.except_osv(
|
|
||||||
_('WARNING: audittrail is not part of the pool'),
|
|
||||||
_('Change audittrail depends -- Setting rule as DRAFT'))
|
|
||||||
self.write(cr, uid, [thisrule.id], {"state": "draft"})
|
|
||||||
val = {
|
|
||||||
"name": 'View Log',
|
|
||||||
"res_model": 'audittrail.log',
|
|
||||||
"src_model": thisrule.object_id.model,
|
|
||||||
"domain": "[('object_id','=', " + str(thisrule.object_id.id) + "), ('res_id', '=', active_id)]"
|
|
||||||
|
|
||||||
}
|
|
||||||
action_id = obj_action.create(cr, SUPERUSER_ID, val)
|
|
||||||
self.write(cr, uid, [thisrule.id], {"state": "subscribed", "action_id": action_id})
|
|
||||||
keyword = 'client_action_relate'
|
|
||||||
value = 'ir.actions.act_window,' + str(action_id)
|
|
||||||
res = obj_model.ir_set(cr, SUPERUSER_ID, 'action', keyword, 'View_log_' + thisrule.object_id.model, [thisrule.object_id.model], value, replace=True, isobject=True, xml_id=False)
|
|
||||||
#End Loop
|
|
||||||
return True
|
|
||||||
|
|
||||||
def unsubscribe(self, cr, uid, ids, *args):
|
|
||||||
"""
|
|
||||||
Unsubscribe Auditing Rule on object
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param ids: List of Auddittrail Rule’s IDs.
|
|
||||||
@return: True
|
|
||||||
"""
|
|
||||||
obj_action = self.pool.get('ir.actions.act_window')
|
|
||||||
ir_values_obj = self.pool.get('ir.values')
|
|
||||||
value=''
|
|
||||||
#start Loop
|
|
||||||
for thisrule in self.browse(cr, uid, ids):
|
|
||||||
if thisrule.id in self.__functions:
|
|
||||||
for function in self.__functions[thisrule.id]:
|
|
||||||
setattr(function[0], function[1], function[2])
|
|
||||||
w_id = obj_action.search(cr, uid, [('name', '=', 'View Log'), ('res_model', '=', 'audittrail.log'), ('src_model', '=', thisrule.object_id.model)])
|
|
||||||
if w_id:
|
|
||||||
obj_action.unlink(cr, SUPERUSER_ID, w_id)
|
|
||||||
value = "ir.actions.act_window" + ',' + str(w_id[0])
|
|
||||||
val_id = ir_values_obj.search(cr, uid, [('model', '=', thisrule.object_id.model), ('value', '=', value)])
|
|
||||||
if val_id:
|
|
||||||
res = ir_values_obj.unlink(cr, uid, [val_id[0]])
|
|
||||||
self.write(cr, uid, [thisrule.id], {"state": "draft"})
|
|
||||||
#End Loop
|
|
||||||
return True
|
|
||||||
|
|
||||||
class audittrail_log(osv.osv):
|
|
||||||
"""
|
|
||||||
For Audittrail Log
|
|
||||||
"""
|
|
||||||
_name = 'audittrail.log'
|
|
||||||
_description = "Audittrail Log"
|
|
||||||
|
|
||||||
def _name_get_resname(self, cr, uid, ids, *args):
|
|
||||||
data = {}
|
|
||||||
for resname in self.browse(cr, uid, ids,[]):
|
|
||||||
model_object = resname.object_id
|
|
||||||
res_id = resname.res_id
|
|
||||||
if model_object and res_id:
|
|
||||||
model_pool = self.pool[model_object.model]
|
|
||||||
res = model_pool.read(cr, uid, res_id, ['name'])
|
|
||||||
data[resname.id] = res['name']
|
|
||||||
else:
|
|
||||||
data[resname.id] = False
|
|
||||||
return data
|
|
||||||
|
|
||||||
_columns = {
|
|
||||||
"name": fields.char("Resource Name",size=64),
|
|
||||||
"object_id": fields.many2one('ir.model', 'Object'),
|
|
||||||
"user_id": fields.many2one('res.users', 'User'),
|
|
||||||
"method": fields.char("Method", size=64),
|
|
||||||
"timestamp": fields.datetime("Date"),
|
|
||||||
"res_id": fields.integer('Resource Id'),
|
|
||||||
"line_ids": fields.one2many('audittrail.log.line', 'log_id', 'Log lines'),
|
|
||||||
}
|
|
||||||
|
|
||||||
_defaults = {
|
|
||||||
"timestamp": lambda *a: time.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
}
|
|
||||||
_order = "timestamp desc"
|
|
||||||
|
|
||||||
class audittrail_log_line(osv.osv):
|
|
||||||
"""
|
|
||||||
Audittrail Log Line.
|
|
||||||
"""
|
|
||||||
_name = 'audittrail.log.line'
|
|
||||||
_description = "Log Line"
|
|
||||||
_columns = {
|
|
||||||
'field_id': fields.many2one('ir.model.fields', 'Fields', required=True),
|
|
||||||
'log_id': fields.many2one('audittrail.log', 'Log'),
|
|
||||||
'log': fields.integer("Log ID"),
|
|
||||||
'old_value': fields.text("Old Value"),
|
|
||||||
'new_value': fields.text("New Value"),
|
|
||||||
'old_value_text': fields.text('Old value Text'),
|
|
||||||
'new_value_text': fields.text('New value Text'),
|
|
||||||
'field_description': fields.char('Field Description', size=64),
|
|
||||||
}
|
|
||||||
|
|
||||||
# Monkeypatch the model RPC endpoint for auditing changes.
|
|
||||||
|
|
||||||
def get_value_text(cr, uid, pool, resource_pool, method, field, value):
|
|
||||||
"""
|
|
||||||
Gets textual values for the fields.
|
|
||||||
If the field is a many2one, it returns the name.
|
|
||||||
If it's a one2many or a many2many, it returns a list of name.
|
|
||||||
In other cases, it just returns the value.
|
|
||||||
:param cr: the current row, from the database cursor,
|
|
||||||
:param uid: the current user’s ID for security checks,
|
|
||||||
:param pool: current db's pooler object.
|
|
||||||
:param resource_pool: pooler object of the model which values are being changed.
|
|
||||||
:param field: for which the text value is to be returned.
|
|
||||||
:param value: value of the field.
|
|
||||||
:param recursive: True or False, True will repeat the process recursively
|
|
||||||
:return: string value or a list of values(for O2M/M2M)
|
|
||||||
"""
|
|
||||||
|
|
||||||
field_obj = (resource_pool._all_columns.get(field)).column
|
|
||||||
if field_obj._type in ('one2many','many2many'):
|
|
||||||
data = pool[field_obj._obj].name_get(cr, uid, value)
|
|
||||||
#return the modifications on x2many fields as a list of names
|
|
||||||
res = map(lambda x:x[1], data)
|
|
||||||
elif field_obj._type == 'many2one':
|
|
||||||
#return the modifications on a many2one field as its value returned by name_get()
|
|
||||||
res = value and value[1] or value
|
|
||||||
else:
|
|
||||||
res = value
|
|
||||||
return res
|
|
||||||
|
|
||||||
def create_log_line(cr, uid, log_id, model, lines=None):
|
|
||||||
"""
|
|
||||||
Creates lines for changed fields with its old and new values
|
|
||||||
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param model: Object which values are being changed
|
|
||||||
@param lines: List of values for line is to be created
|
|
||||||
"""
|
|
||||||
if lines is None:
|
|
||||||
lines = []
|
|
||||||
pool = openerp.registry(cr.dbname)
|
|
||||||
obj_pool = pool[model.model]
|
|
||||||
model_pool = pool.get('ir.model')
|
|
||||||
field_pool = pool.get('ir.model.fields')
|
|
||||||
log_line_pool = pool.get('audittrail.log.line')
|
|
||||||
for line in lines:
|
|
||||||
field_obj = obj_pool._all_columns.get(line['name'])
|
|
||||||
assert field_obj, _("'%s' field does not exist in '%s' model" %(line['name'], model.model))
|
|
||||||
field_obj = field_obj.column
|
|
||||||
old_value = line.get('old_value', '')
|
|
||||||
new_value = line.get('new_value', '')
|
|
||||||
search_models = [model.id]
|
|
||||||
if obj_pool._inherits:
|
|
||||||
search_models += model_pool.search(cr, uid, [('model', 'in', obj_pool._inherits.keys())])
|
|
||||||
field_id = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', search_models)])
|
|
||||||
if field_obj._type == 'many2one':
|
|
||||||
old_value = old_value and old_value[0] or old_value
|
|
||||||
new_value = new_value and new_value[0] or new_value
|
|
||||||
vals = {
|
|
||||||
"log_id": log_id,
|
|
||||||
"field_id": field_id and field_id[0] or False,
|
|
||||||
"old_value": old_value,
|
|
||||||
"new_value": new_value,
|
|
||||||
"old_value_text": line.get('old_value_text', ''),
|
|
||||||
"new_value_text": line.get('new_value_text', ''),
|
|
||||||
"field_description": field_obj.string
|
|
||||||
}
|
|
||||||
line_id = log_line_pool.create(cr, uid, vals)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def log_fct(cr, uid_orig, model, method, fct_src, *args, **kw):
|
|
||||||
"""
|
|
||||||
Logging function: This function is performing the logging operation
|
|
||||||
@param model: Object whose values are being changed
|
|
||||||
@param method: method to log: create, read, write, unlink, action or workflow action
|
|
||||||
@param fct_src: execute method of Object proxy
|
|
||||||
|
|
||||||
@return: Returns result as per method of Object proxy
|
|
||||||
"""
|
|
||||||
pool = openerp.registry(cr.dbname)
|
|
||||||
resource_pool = pool[model]
|
|
||||||
model_pool = pool.get('ir.model')
|
|
||||||
model_ids = model_pool.search(cr, SUPERUSER_ID, [('model', '=', model)])
|
|
||||||
model_id = model_ids and model_ids[0] or False
|
|
||||||
assert model_id, _("'%s' Model does not exist..." %(model))
|
|
||||||
model = model_pool.browse(cr, SUPERUSER_ID, model_id)
|
|
||||||
|
|
||||||
# fields to log. currently only used by log on read()
|
|
||||||
field_list = []
|
|
||||||
old_values = new_values = {}
|
|
||||||
|
|
||||||
if method == 'create':
|
|
||||||
res = fct_src(cr, uid_orig, model.model, method, *args, **kw)
|
|
||||||
if res:
|
|
||||||
res_ids = [res]
|
|
||||||
new_values = get_data(cr, uid_orig, pool, res_ids, model, method)
|
|
||||||
elif method == 'read':
|
|
||||||
res = fct_src(cr, uid_orig, model.model, method, *args, **kw)
|
|
||||||
if isinstance(res, dict):
|
|
||||||
records = [res]
|
|
||||||
else:
|
|
||||||
records = res
|
|
||||||
# build the res_ids and the old_values dict. Here we don't use get_data() to
|
|
||||||
# avoid performing an additional read()
|
|
||||||
res_ids = []
|
|
||||||
for record in records:
|
|
||||||
res_ids.append(record['id'])
|
|
||||||
old_values[(model.id, record['id'])] = {'value': record, 'text': record}
|
|
||||||
# log only the fields read
|
|
||||||
field_list = args[1]
|
|
||||||
elif method == 'unlink':
|
|
||||||
res_ids = args[0]
|
|
||||||
old_values = get_data(cr, uid_orig, pool, res_ids, model, method)
|
|
||||||
# process_data first as fct_src will unlink the record
|
|
||||||
self.process_data(cr, uid_orig, pool, res_ids, model, method, old_values, new_values, field_list)
|
|
||||||
return fct_src(cr, uid_orig, model.model, method, *args, **kw)
|
|
||||||
else: # method is write, action or workflow action
|
|
||||||
res_ids = []
|
|
||||||
if args:
|
|
||||||
res_ids = args[0]
|
|
||||||
if isinstance(res_ids, (long, int)):
|
|
||||||
res_ids = [res_ids]
|
|
||||||
if res_ids:
|
|
||||||
# store the old values into a dictionary
|
|
||||||
old_values = get_data(cr, uid_orig, pool, res_ids, model, method)
|
|
||||||
# process the original function, workflow trigger...
|
|
||||||
res = fct_src(cr, uid_orig, model.model, method, *args, **kw)
|
|
||||||
if method == 'copy':
|
|
||||||
res_ids = [res]
|
|
||||||
if res_ids:
|
|
||||||
# check the new values and store them into a dictionary
|
|
||||||
new_values = get_data(cr, uid_orig, pool, res_ids, model, method)
|
|
||||||
# compare the old and new values and create audittrail log if needed
|
|
||||||
process_data(cr, uid_orig, pool, res_ids, model, method, old_values, new_values, field_list)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def get_data(cr, uid, pool, res_ids, model, method):
|
|
||||||
"""
|
|
||||||
This function simply read all the fields of the given res_ids, and also recurisvely on
|
|
||||||
all records of a x2m fields read that need to be logged. Then it returns the result in
|
|
||||||
convenient structure that will be used as comparison basis.
|
|
||||||
|
|
||||||
:param cr: the current row, from the database cursor,
|
|
||||||
:param uid: the current user’s ID. This parameter is currently not used as every
|
|
||||||
operation to get data is made as super admin. Though, it could be usefull later.
|
|
||||||
:param pool: current db's pooler object.
|
|
||||||
:param res_ids: Id's of resource to be logged/compared.
|
|
||||||
:param model: Object whose values are being changed
|
|
||||||
:param method: method to log: create, read, unlink, write, actions, workflow actions
|
|
||||||
:return: dict mapping a tuple (model_id, resource_id) with its value and textual value
|
|
||||||
{ (model_id, resource_id): { 'value': ...
|
|
||||||
'textual_value': ...
|
|
||||||
},
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
data = {}
|
|
||||||
resource_pool = pool[model.model]
|
|
||||||
# read all the fields of the given resources in super admin mode
|
|
||||||
for resource in resource_pool.read(cr, SUPERUSER_ID, res_ids, resource_pool._all_columns):
|
|
||||||
values = {}
|
|
||||||
values_text = {}
|
|
||||||
resource_id = resource['id']
|
|
||||||
# loop on each field on the res_ids we just have read
|
|
||||||
for field in resource:
|
|
||||||
if field in ('__last_update', 'id'):
|
|
||||||
continue
|
|
||||||
values[field] = resource[field]
|
|
||||||
# get the textual value of that field for this record
|
|
||||||
values_text[field] = get_value_text(cr, SUPERUSER_ID, pool, resource_pool, method, field, resource[field])
|
|
||||||
|
|
||||||
field_obj = resource_pool._all_columns.get(field).column
|
|
||||||
if field_obj._type in ('one2many','many2many'):
|
|
||||||
# check if an audittrail rule apply in super admin mode
|
|
||||||
if check_rules(cr, SUPERUSER_ID, field_obj._obj, method):
|
|
||||||
# check if the model associated to a *2m field exists, in super admin mode
|
|
||||||
x2m_model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', field_obj._obj)])
|
|
||||||
x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False
|
|
||||||
assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj))
|
|
||||||
x2m_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, x2m_model_id)
|
|
||||||
field_resource_ids = list(set(resource[field]))
|
|
||||||
if model.model == x2m_model.model:
|
|
||||||
# we need to remove current resource_id from the many2many to prevent an infinit loop
|
|
||||||
if resource_id in field_resource_ids:
|
|
||||||
field_resource_ids.remove(resource_id)
|
|
||||||
data.update(get_data(cr, SUPERUSER_ID, pool, field_resource_ids, x2m_model, method))
|
|
||||||
|
|
||||||
data[(model.id, resource_id)] = {'text':values_text, 'value': values}
|
|
||||||
return data
|
|
||||||
|
|
||||||
def prepare_audittrail_log_line(cr, uid, pool, model, resource_id, method, old_values, new_values, field_list=None):
|
|
||||||
"""
|
|
||||||
This function compares the old data (i.e before the method was executed) and the new data
|
|
||||||
(after the method was executed) and returns a structure with all the needed information to
|
|
||||||
log those differences.
|
|
||||||
|
|
||||||
:param cr: the current row, from the database cursor,
|
|
||||||
:param uid: the current user’s ID. This parameter is currently not used as every
|
|
||||||
operation to get data is made as super admin. Though, it could be usefull later.
|
|
||||||
:param pool: current db's pooler object.
|
|
||||||
:param model: model object which values are being changed
|
|
||||||
:param resource_id: ID of record to which values are being changed
|
|
||||||
:param method: method to log: create, read, unlink, write, actions, workflow actions
|
|
||||||
:param old_values: dict of values read before execution of the method
|
|
||||||
:param new_values: dict of values read after execution of the method
|
|
||||||
:param field_list: optional argument containing the list of fields to log. Currently only
|
|
||||||
used when performing a read, it could be usefull later on if we want to log the write
|
|
||||||
on specific fields only.
|
|
||||||
|
|
||||||
:return: dictionary with
|
|
||||||
* keys: tuples build as ID of model object to log and ID of resource to log
|
|
||||||
* values: list of all the changes in field values for this couple (model, resource)
|
|
||||||
return {
|
|
||||||
(model.id, resource_id): []
|
|
||||||
}
|
|
||||||
|
|
||||||
The reason why the structure returned is build as above is because when modifying an existing
|
|
||||||
record, we may have to log a change done in a x2many field of that object
|
|
||||||
"""
|
|
||||||
if field_list is None:
|
|
||||||
field_list = []
|
|
||||||
key = (model.id, resource_id)
|
|
||||||
lines = {
|
|
||||||
key: []
|
|
||||||
}
|
|
||||||
# loop on all the fields
|
|
||||||
for field_name, field_definition in pool[model.model]._all_columns.items():
|
|
||||||
if field_name in ('__last_update', 'id'):
|
|
||||||
continue
|
|
||||||
#if the field_list param is given, skip all the fields not in that list
|
|
||||||
if field_list and field_name not in field_list:
|
|
||||||
continue
|
|
||||||
field_obj = field_definition.column
|
|
||||||
if field_obj._type in ('one2many','many2many'):
|
|
||||||
# checking if an audittrail rule apply in super admin mode
|
|
||||||
if check_rules(cr, SUPERUSER_ID, field_obj._obj, method):
|
|
||||||
# checking if the model associated to a *2m field exists, in super admin mode
|
|
||||||
x2m_model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', field_obj._obj)])
|
|
||||||
x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False
|
|
||||||
assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj))
|
|
||||||
x2m_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, x2m_model_id)
|
|
||||||
# the resource_ids that need to be checked are the sum of both old and previous values (because we
|
|
||||||
# need to log also creation or deletion in those lists).
|
|
||||||
x2m_old_values_ids = old_values.get(key, {'value': {}})['value'].get(field_name, [])
|
|
||||||
x2m_new_values_ids = new_values.get(key, {'value': {}})['value'].get(field_name, [])
|
|
||||||
# We use list(set(...)) to remove duplicates.
|
|
||||||
res_ids = list(set(x2m_old_values_ids + x2m_new_values_ids))
|
|
||||||
if model.model == x2m_model.model:
|
|
||||||
# we need to remove current resource_id from the many2many to prevent an infinit loop
|
|
||||||
if resource_id in res_ids:
|
|
||||||
res_ids.remove(resource_id)
|
|
||||||
for res_id in res_ids:
|
|
||||||
lines.update(prepare_audittrail_log_line(cr, SUPERUSER_ID, pool, x2m_model, res_id, method, old_values, new_values, field_list))
|
|
||||||
# if the value value is different than the old value: record the change
|
|
||||||
if key not in old_values or key not in new_values or old_values[key]['value'][field_name] != new_values[key]['value'][field_name]:
|
|
||||||
data = {
|
|
||||||
'name': field_name,
|
|
||||||
'new_value': key in new_values and new_values[key]['value'].get(field_name),
|
|
||||||
'old_value': key in old_values and old_values[key]['value'].get(field_name),
|
|
||||||
'new_value_text': key in new_values and new_values[key]['text'].get(field_name),
|
|
||||||
'old_value_text': key in old_values and old_values[key]['text'].get(field_name)
|
|
||||||
}
|
|
||||||
lines[key].append(data)
|
|
||||||
return lines
|
|
||||||
|
|
||||||
def process_data(cr, uid, pool, res_ids, model, method, old_values=None, new_values=None, field_list=None):
|
|
||||||
"""
|
|
||||||
This function processes and iterates recursively to log the difference between the old
|
|
||||||
data (i.e before the method was executed) and the new data and creates audittrail log
|
|
||||||
accordingly.
|
|
||||||
|
|
||||||
:param cr: the current row, from the database cursor,
|
|
||||||
:param uid: the current user’s ID,
|
|
||||||
:param pool: current db's pooler object.
|
|
||||||
:param res_ids: Id's of resource to be logged/compared.
|
|
||||||
:param model: model object which values are being changed
|
|
||||||
:param method: method to log: create, read, unlink, write, actions, workflow actions
|
|
||||||
:param old_values: dict of values read before execution of the method
|
|
||||||
:param new_values: dict of values read after execution of the method
|
|
||||||
:param field_list: optional argument containing the list of fields to log. Currently only
|
|
||||||
used when performing a read, it could be usefull later on if we want to log the write
|
|
||||||
on specific fields only.
|
|
||||||
:return: True
|
|
||||||
"""
|
|
||||||
if field_list is None:
|
|
||||||
field_list = []
|
|
||||||
# loop on all the given ids
|
|
||||||
for res_id in res_ids:
|
|
||||||
# compare old and new values and get audittrail log lines accordingly
|
|
||||||
lines = prepare_audittrail_log_line(cr, uid, pool, model, res_id, method, old_values, new_values, field_list)
|
|
||||||
|
|
||||||
# if at least one modification has been found
|
|
||||||
for model_id, resource_id in lines:
|
|
||||||
line_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, model_id).model
|
|
||||||
|
|
||||||
vals = {
|
|
||||||
'method': method,
|
|
||||||
'object_id': model_id,
|
|
||||||
'user_id': uid,
|
|
||||||
'res_id': resource_id,
|
|
||||||
}
|
|
||||||
if (model_id, resource_id) not in old_values and method not in ('copy', 'read'):
|
|
||||||
# the resource was not existing so we are forcing the method to 'create'
|
|
||||||
# (because it could also come with the value 'write' if we are creating
|
|
||||||
# new record through a one2many field)
|
|
||||||
vals.update({'method': 'create'})
|
|
||||||
if (model_id, resource_id) not in new_values and method not in ('copy', 'read'):
|
|
||||||
# the resource is not existing anymore so we are forcing the method to 'unlink'
|
|
||||||
# (because it could also come with the value 'write' if we are deleting the
|
|
||||||
# record through a one2many field)
|
|
||||||
name = old_values[(model_id, resource_id)]['value'].get('name',False)
|
|
||||||
vals.update({'method': 'unlink'})
|
|
||||||
else :
|
|
||||||
name = pool[line_model].name_get(cr, uid, [resource_id])[0][1]
|
|
||||||
vals.update({'name': name})
|
|
||||||
# create the audittrail log in super admin mode, only if a change has been detected
|
|
||||||
if lines[(model_id, resource_id)]:
|
|
||||||
log_id = pool.get('audittrail.log').create(cr, SUPERUSER_ID, vals)
|
|
||||||
model = pool.get('ir.model').browse(cr, uid, model_id)
|
|
||||||
create_log_line(cr, SUPERUSER_ID, log_id, model, lines[(model_id, resource_id)])
|
|
||||||
return True
|
|
||||||
|
|
||||||
def check_rules(cr, uid, model, method):
|
|
||||||
"""
|
|
||||||
Checks if auditrails is installed for that db and then if one rule match
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID,
|
|
||||||
@param model: value of _name of the object which values are being changed
|
|
||||||
@param method: method to log: create, read, unlink,write,actions,workflow actions
|
|
||||||
@return: True or False
|
|
||||||
"""
|
|
||||||
pool = openerp.registry(cr.dbname)
|
|
||||||
if 'audittrail.rule' in pool.models:
|
|
||||||
model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', model)])
|
|
||||||
model_id = model_ids and model_ids[0] or False
|
|
||||||
if model_id:
|
|
||||||
rule_ids = pool.get('audittrail.rule').search(cr, SUPERUSER_ID, [('object_id', '=', model_id), ('state', '=', 'subscribed')])
|
|
||||||
for rule in pool.get('audittrail.rule').read(cr, SUPERUSER_ID, rule_ids, ['user_id','log_read','log_write','log_create','log_unlink','log_action','log_workflow']):
|
|
||||||
if len(rule['user_id']) == 0 or uid in rule['user_id']:
|
|
||||||
if rule.get('log_'+method,0):
|
|
||||||
return True
|
|
||||||
elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create', 'read_group', 'import_data'):
|
|
||||||
if rule['log_action']:
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Replace the openerp.service.model functions.
|
|
||||||
|
|
||||||
original_execute_cr = openerp.service.model.execute_cr
|
|
||||||
original_exec_workflow_cr = openerp.service.model.exec_workflow_cr
|
|
||||||
|
|
||||||
def execute_cr(cr, uid, model, method, *args, **kw):
|
|
||||||
fct_src = original_execute_cr
|
|
||||||
if check_rules(cr,uid,model,method):
|
|
||||||
return log_fct(cr, uid, model, method, fct_src, *args, **kw)
|
|
||||||
return fct_src(cr, uid, model, method, *args, **kw)
|
|
||||||
|
|
||||||
def exec_workflow_cr(cr, uid, model, method, *args, **kw):
|
|
||||||
fct_src = original_exec_workflow_cr
|
|
||||||
if check_rules(cr,uid,model,'workflow'):
|
|
||||||
return log_fct(cr, uid, model, method, fct_src, *args, **kw)
|
|
||||||
return fct_src(cr, uid, model, method, *args, **kw)
|
|
||||||
|
|
||||||
openerp.service.model.execute_cr = execute_cr
|
|
||||||
openerp.service.model.exec_workflow_cr = exec_workflow_cr
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data noupdate="1">
|
|
||||||
<record model="audittrail.rule" id="demo_audittrail_rule">
|
|
||||||
<field name="name">Audit on Partners</field>
|
|
||||||
<field name="object_id" search="[('model','=','res.partner')]"/>
|
|
||||||
<field name="user_id" search="[]"/>
|
|
||||||
</record>
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,185 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<menuitem id="menu_audit" name="Audit" parent="base.menu_reporting" sequence="50" groups="base.group_system"/>
|
|
||||||
|
|
||||||
<!-- Audittrail Rule -->
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_audittrail_rule_form">
|
|
||||||
<field name="name">audittrail.rule.form</field>
|
|
||||||
<field name="model">audittrail.rule</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="AuditTrail Rule" version="7.0">
|
|
||||||
<header>
|
|
||||||
<button string="_Subscribe" name="subscribe" icon="gtk-ok"
|
|
||||||
type="object" states="draft"/>
|
|
||||||
<button string="UnSubscribe" name="unsubscribe" icon="gtk-cancel"
|
|
||||||
type="object" states="subscribed"/>
|
|
||||||
<field name="state" widget="statusbar"/>
|
|
||||||
</header>
|
|
||||||
<sheet>
|
|
||||||
<group col="4">
|
|
||||||
<field name="name" required="1"/>
|
|
||||||
<field name="object_id"/>
|
|
||||||
<field name="log_read"/>
|
|
||||||
<field name="log_write"/>
|
|
||||||
<field name="log_unlink"/>
|
|
||||||
<field name="log_create"/>
|
|
||||||
<field name="log_action"/>
|
|
||||||
<field name="log_workflow"/>
|
|
||||||
<separator string="Users (if User is not added then it will applicable for all users)" colspan="4"/>
|
|
||||||
<field name="user_id" colspan="4" nolabel="1"/>
|
|
||||||
<field name="action_id" colspan="4" readonly="1" groups="base.group_no_one"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_audittrail_rule_tree">
|
|
||||||
<field name="name">audittrail.rule.tree</field>
|
|
||||||
<field name="model">audittrail.rule</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<tree colors="blue:state == 'draft';black:state == 'subscribed'" string="AuditTrail Rules">
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="object_id"/>
|
|
||||||
<field name="log_read"/>
|
|
||||||
<field name="log_write"/>
|
|
||||||
<field name="log_unlink"/>
|
|
||||||
<field name="log_create"/>
|
|
||||||
<field name="log_action"/>
|
|
||||||
<field name="log_workflow"/>
|
|
||||||
<field name="state"/>
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_audittrail_rule_search" model="ir.ui.view">
|
|
||||||
<field name="name">audittrail.rule.search</field>
|
|
||||||
<field name="model">audittrail.rule</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<search string="Search Audittrail Rule">
|
|
||||||
<field name="name" string="Audittrail Rule"/>
|
|
||||||
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Rule"/>
|
|
||||||
<filter icon="terp-camera_test" string="Subscribed" domain="[('state','=','subscribed')]" help="Subscribed Rule"/>
|
|
||||||
<field name="object_id" string="Model"/>
|
|
||||||
<group expand="0" string="Group By...">
|
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
|
||||||
</group>
|
|
||||||
</search>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="action_audittrail_rule_tree">
|
|
||||||
<field name="name">Audit Rules</field>
|
|
||||||
<field name="res_model">audittrail.rule</field>
|
|
||||||
<field name="type">ir.actions.act_window</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
|
||||||
<field name="context">{'search_default_draft': 1}</field>
|
|
||||||
<field name="search_view_id" ref="view_audittrail_rule_search"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem id="menu_action_audittrail_rule_tree" parent="menu_audit" action="action_audittrail_rule_tree"/>
|
|
||||||
|
|
||||||
<!-- AuditTrail Log -->
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_audittrail_log_form">
|
|
||||||
<field name="name">audittrail.log.form</field>
|
|
||||||
<field name="model">audittrail.log</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="AuditTrail Logs" version="7.0">
|
|
||||||
<sheet>
|
|
||||||
<group col="4">
|
|
||||||
<field name="timestamp" required="1" readonly="1"/>
|
|
||||||
<field name="user_id" readonly="1"/>
|
|
||||||
<field name="method" readonly="1"/>
|
|
||||||
<field name="name" readonly="1"/>
|
|
||||||
<field name="res_id" readonly="1"/>
|
|
||||||
<field name="object_id" readonly="1"/>
|
|
||||||
</group>
|
|
||||||
<field name="line_ids" mode="tree"
|
|
||||||
widget="one2many_list" readonly="1">
|
|
||||||
<form string="Log Lines" version="7.0">
|
|
||||||
<group col="4">
|
|
||||||
<field name="field_id" colspan="4"
|
|
||||||
readonly="1"/>
|
|
||||||
<newline/>
|
|
||||||
<field name="field_description" colspan="4"
|
|
||||||
readonly="1"/>
|
|
||||||
<newline/>
|
|
||||||
<separator string="Old Value : "
|
|
||||||
colspan="2"/>
|
|
||||||
<separator string="New Value : "
|
|
||||||
colspan="2"/>
|
|
||||||
<newline/>
|
|
||||||
<field name="old_value" nolabel="1"
|
|
||||||
colspan="2" readonly="1"/>
|
|
||||||
<field name="new_value" nolabel="1"
|
|
||||||
colspan="2" readonly="1"/>
|
|
||||||
<newline/>
|
|
||||||
<separator string="Old Value Text : "
|
|
||||||
colspan="2"/>
|
|
||||||
<separator string="New Value Text: "
|
|
||||||
colspan="2"/>
|
|
||||||
<newline/>
|
|
||||||
<field name="old_value_text" nolabel="1"
|
|
||||||
colspan="2" readonly="1"/>
|
|
||||||
<field name="new_value_text" nolabel="1"
|
|
||||||
colspan="2" readonly="1"/>
|
|
||||||
</group>
|
|
||||||
</form>
|
|
||||||
<tree string="Log Lines">
|
|
||||||
<field name="field_description"/>
|
|
||||||
<field name="old_value_text"/>
|
|
||||||
<field name="new_value_text"/>
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_audittrail_log_tree">
|
|
||||||
<field name="name">audittrail.log.tree</field>
|
|
||||||
<field name="model">audittrail.log</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<tree string="AuditTrail Logs" create="false">
|
|
||||||
<field name="timestamp"/>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="object_id"/>
|
|
||||||
<field name="method"/>
|
|
||||||
<field name="user_id"/>
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_audittrail_log_search" model="ir.ui.view">
|
|
||||||
<field name="name">audittrail.log.search</field>
|
|
||||||
<field name="model">audittrail.log</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<search string="Search Audittrail Log">
|
|
||||||
<field name="name" string="Audittrail Log"/>
|
|
||||||
<field name="object_id" string="Model"/>
|
|
||||||
<field name="user_id"/>
|
|
||||||
<group expand="0" string="Group By...">
|
|
||||||
<filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
|
||||||
<filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'object_id'}"/>
|
|
||||||
<filter string="Audit Month" icon="terp-go-month" domain="[]" context="{'group_by':'timestamp'}" help="Audit Date by Month"/>
|
|
||||||
</group>
|
|
||||||
</search>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="action_audittrail_log_tree">
|
|
||||||
<field name="name">Audit Logs</field>
|
|
||||||
<field name="res_model">audittrail.log</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="search_view_id" ref="view_audittrail_log_search"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem id="menu_audit_logs" name="Audit Logs" parent="menu_audit" action="action_audittrail_log_tree"/>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,5 +0,0 @@
|
||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
|
||||||
access_audittrail_rule_all_users,audittrail rule all,model_audittrail_rule,base.group_system,1,1,1,0
|
|
||||||
access_audittrail_rule_all_access,audittrail rule all,model_audittrail_rule,base.group_erp_manager,1,1,1,0
|
|
||||||
access_audittrail_log_all_users,audittrail log all,model_audittrail_log,base.group_user,1,0,1,0
|
|
||||||
access_audittrail_log_line_all_users,audittrail log line all,model_audittrail_log_line,base.group_user,1,0,1,0
|
|
|
|
@ -1,24 +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/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import audittrail_view_log
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
|
@ -1,65 +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 openerp.osv import fields, osv
|
|
||||||
import time
|
|
||||||
|
|
||||||
class audittrail_view_log(osv.osv_memory):
|
|
||||||
|
|
||||||
_name = "audittrail.view.log"
|
|
||||||
_description = "View Log"
|
|
||||||
_columns = {
|
|
||||||
'from':fields.datetime('Log From'),
|
|
||||||
'to':fields.datetime('Log To', required = True)
|
|
||||||
}
|
|
||||||
_defaults = {
|
|
||||||
'to': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
|
|
||||||
}
|
|
||||||
|
|
||||||
def log_open_window(self, cr, uid, ids, context=None):
|
|
||||||
"""
|
|
||||||
Open Log form from given date range..
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param ids: List of audittrail view log’s IDs.
|
|
||||||
@return: Dictionary of audittrail log form on given date range.
|
|
||||||
"""
|
|
||||||
|
|
||||||
mod_obj = self.pool.get('ir.model.data')
|
|
||||||
act_obj = self.pool.get('ir.actions.act_window')
|
|
||||||
result = mod_obj._get_id(cr, uid, 'audittrail', 'action_audittrail_log_tree')
|
|
||||||
id = mod_obj.read(cr, uid, [result], ['res_id'], context=context)[0]['res_id']
|
|
||||||
result = act_obj.read(cr, uid, [id], context=context)[0]
|
|
||||||
|
|
||||||
#start Loop
|
|
||||||
for datas in self.read(cr, uid, ids, context=context):
|
|
||||||
if not datas.get('from', None):
|
|
||||||
if datas.get('to') <> time.strftime("%Y-%m-%d %H:%M:%S"):
|
|
||||||
result['domain'] = str([('timestamp', '<', datas.get('to'))])
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
result['domain'] = str([('timestamp', '>', datas.get('from', None)), ('timestamp', '<', datas.get('to'))])
|
|
||||||
#End Loop
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,37 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<!-- Audittrail View Log wizard-->
|
|
||||||
|
|
||||||
<record id="view_audittrail_view_log" model="ir.ui.view">
|
|
||||||
<field name="name">audittrail.view.log.form</field>
|
|
||||||
<field name="model">audittrail.view.log</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Audit Logs" version="7.0">
|
|
||||||
<group col="4">
|
|
||||||
<field name="from"/>
|
|
||||||
<field name="to"/>
|
|
||||||
</group>
|
|
||||||
<footer>
|
|
||||||
<button string="Open Logs" name="log_open_window" type="object" class="oe_highlight"/>
|
|
||||||
or
|
|
||||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
|
||||||
</footer>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- action for audittrail view log wizard -->
|
|
||||||
|
|
||||||
<record id="action_audittrail_view_log" model="ir.actions.act_window">
|
|
||||||
<field name="name">View log</field>
|
|
||||||
<field name="res_model">audittrail.view.log</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
|
||||||
<field name="view_id" ref="view_audittrail_view_log"/>
|
|
||||||
<field name="target">new</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Arabic translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-11-26 18:16+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Arabic <ar@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "المستخدمين"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Czech translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2014-02-03 16:54+0000\n"
|
|
||||||
"Last-Translator: Jakub Drozd <Unknown>\n"
|
|
||||||
"Language-Team: Czech <cs@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Uživatelé"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Danish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-09-15 20:08+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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Bruger"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# German translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-27 22:22+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: German <de@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Benutzer"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# English (United Kingdom) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-06 14:33+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: English (United Kingdom) <en_GB@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Users"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Spanish translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-27 11:38+0000\n"
|
|
||||||
"Last-Translator: Pedro Manuel Baeza <pedro.baeza@gmail.com>\n"
|
|
||||||
"Language-Team: Spanish <es@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Usuarios"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Estonian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-10-09 14:34+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Estonian <et@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Kasutajad"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# French translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-29 16:08+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Utilisateurs"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Galician translation for openobject-addons
|
|
||||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2014-02-05 16:37+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Galician <gl@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Usuarios"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Croatian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-24 12:30+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Croatian <hr@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Korisnici"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Hungarian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-03-19 18:13+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Hungarian <hu@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Felhasználók"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Italian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-27 09:12+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Italian <it@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Utenti"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Lithuanian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-04-24 18:21+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Lithuanian <lt@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Naudotojai"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Macedonian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-28 14:54+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Macedonian <mk@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Корисници"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Mongolian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-06 07:44+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Mongolian <mn@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Хэрэглэгчид"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Dutch translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-27 09:12+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Dutch <nl@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Gebruikers"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Dutch (Belgium) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-04-15 16:01+0000\n"
|
|
||||||
"Last-Translator: Els Van Vossel (Foxy) <Unknown>\n"
|
|
||||||
"Language-Team: Dutch (Belgium) <nl_BE@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Gebruikers"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Polish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-11-14 12:00+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Polish <pl@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Użytkownicy"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Portuguese translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-08 17:56+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Portuguese <pt@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Utilizadores"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Brazilian Portuguese translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-02 11:56+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Brazilian Portuguese <pt_BR@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Usuários"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Romanian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-14 19:07+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Romanian <ro@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Utilizatori"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Russian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-13 09:46+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Russian <ru@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Пользователи"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Slovenian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-30 09:36+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Slovenian <sl@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Uporabniki"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Swedish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-17 23:47+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Swedish <sv@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Användare"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Turkish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-03 12:07+0000\n"
|
|
||||||
"Last-Translator: Ahmet Altınışık <Unknown>\n"
|
|
||||||
"Language-Team: Turkish <tr@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Kullanıcılar"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Vietnamese translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-06-27 06:49+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Vietnamese <vi@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "Người dùng"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Chinese (Simplified) translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-02 10:59+0000\n"
|
|
||||||
"Last-Translator: Oliver Yuan <Unknown>\n"
|
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "用户"
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Chinese (Traditional) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-30 13:18+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: 2014-04-22 07:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: auth_oauth_signup
|
|
||||||
#: model:ir.model,name:auth_oauth_signup.model_res_users
|
|
||||||
msgid "Users"
|
|
||||||
msgstr "使用者"
|
|
|
@ -32,9 +32,10 @@ Allow users to login through OpenID.
|
||||||
'maintainer': 'OpenERP s.a.',
|
'maintainer': 'OpenERP s.a.',
|
||||||
'website': 'http://www.openerp.com',
|
'website': 'http://www.openerp.com',
|
||||||
'depends': ['base', 'web'],
|
'depends': ['base', 'web'],
|
||||||
'data': ['res_users.xml'],
|
'data': [
|
||||||
'js': ['static/src/js/auth_openid.js'],
|
'res_users.xml',
|
||||||
'css': ['static/src/css/openid.css'],
|
'views/auth_openid.xml',
|
||||||
|
],
|
||||||
'qweb': ['static/src/xml/auth_openid.xml'],
|
'qweb': ['static/src/xml/auth_openid.xml'],
|
||||||
'external_dependencies': {
|
'external_dependencies': {
|
||||||
'python' : ['openid'],
|
'python' : ['openid'],
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="auth_openid assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/auth_openid/static/src/css/openid.css"/>
|
||||||
|
<script type="text/javascript" src="/auth_openid/static/src/js/auth_openid.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -42,6 +42,5 @@ Allow users to sign up and reset their password
|
||||||
'res_users_view.xml',
|
'res_users_view.xml',
|
||||||
'views/auth_signup_login.xml',
|
'views/auth_signup_login.xml',
|
||||||
],
|
],
|
||||||
'js': [],
|
|
||||||
'bootstrap': True,
|
'bootstrap': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
<data>
|
<data>
|
||||||
<template id="auth_signup.login" inherit_id="web.login" name="Sign up - Reset Password">
|
<template id="auth_signup.login" inherit_id="web.login" name="Sign up - Reset Password">
|
||||||
<xpath expr="//button[@type='submit']" position="before">
|
<xpath expr="//button[@type='submit']" position="before">
|
||||||
<a t-if="signup_enabled" t-attf-href="/web/signup?redirect=/web%3f{{ quote_plus(keep_query()) }}" class="btn btn-link pull-right">Sign up</a>
|
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}" class="btn btn-link pull-right">Sign up</a>
|
||||||
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?redirect=/web/login%3f{{ quote_plus(keep_query()) }}" class="btn btn-link pull-right">Reset Password</a>
|
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}" class="btn btn-link pull-right">Reset Password</a>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -22,12 +22,13 @@
|
||||||
<div class="form-group field-name">
|
<div class="form-group field-name">
|
||||||
<label for="name" class="control-label">Your Name</label>
|
<label for="name" class="control-label">Your Name</label>
|
||||||
<input type="text" name="name" t-att-value="name" id="name" class="form-control" placeholder="e.g. John Doe"
|
<input type="text" name="name" t-att-value="name" id="name" class="form-control" placeholder="e.g. John Doe"
|
||||||
required="required" t-att-readonly="'readonly' if only_passwords else None"/>
|
required="required" t-att-readonly="'readonly' if only_passwords else None"
|
||||||
|
t-att-autofocus="'autofocus' if login and not only_passwords else None" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group field-password">
|
<div class="form-group field-password">
|
||||||
<label for="password" class="control-label">Password</label>
|
<label for="password" class="control-label">Password</label>
|
||||||
<input type="password" name="password" autofocus="autofocus" id="password" class="form-control"
|
<input type="password" name="password" id="password" class="form-control"
|
||||||
required="required" t-att-autofocus="'autofocus' if only_passwords else None"/>
|
required="required" t-att-autofocus="'autofocus' if only_passwords else None"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -39,7 +40,7 @@
|
||||||
|
|
||||||
<template id="auth_signup.signup" name="Sign up login">
|
<template id="auth_signup.signup" name="Sign up login">
|
||||||
<t t-call="web.login_layout">
|
<t t-call="web.login_layout">
|
||||||
<form class="oe_signup_form" role="form" t-attf-action="/web/signup{{ '?debug' if debug else '' }}" method="post" t-if="not message">
|
<form class="oe_signup_form" role="form" method="post" t-if="not message">
|
||||||
|
|
||||||
<t t-call="auth_signup.fields"/>
|
<t t-call="auth_signup.fields"/>
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@
|
||||||
<input type="hidden" name="redirect" t-att-value="redirect"/>
|
<input type="hidden" name="redirect" t-att-value="redirect"/>
|
||||||
<input type="hidden" name="token" t-att-value="token"/>
|
<input type="hidden" name="token" t-att-value="token"/>
|
||||||
<div class="clearfix oe_login_buttons">
|
<div class="clearfix oe_login_buttons">
|
||||||
<a href="/web/login" class="btn btn-link pull-right">Back to Login</a>
|
<a t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right">Back to Login</a>
|
||||||
<button type="submit" class="btn btn-primary pull-left">Sign up</button>
|
<button type="submit" class="btn btn-primary pull-left">Sign up</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@
|
||||||
<a href="/web/login" class="btn btn-link pull-right">Back to Login</a>
|
<a href="/web/login" class="btn btn-link pull-right">Back to Login</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="oe_reset_password_form" role="form" t-attf-action="/web/reset_password{{ '?debug' if debug else '' }}" method="post" t-if="not message">
|
<form class="oe_reset_password_form" role="form" method="post" t-if="not message">
|
||||||
|
|
||||||
<t t-if="token">
|
<t t-if="token">
|
||||||
<t t-call="auth_signup.fields">
|
<t t-call="auth_signup.fields">
|
||||||
|
@ -88,7 +89,7 @@
|
||||||
<input type="hidden" name="redirect" t-att-value="redirect"/>
|
<input type="hidden" name="redirect" t-att-value="redirect"/>
|
||||||
<input type="hidden" name="token" t-att-value="token"/>
|
<input type="hidden" name="token" t-att-value="token"/>
|
||||||
<div class="clearfix oe_login_buttons">
|
<div class="clearfix oe_login_buttons">
|
||||||
<a href="/web/login" class="btn btn-link pull-right">Back to Login</a>
|
<a t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right">Back to Login</a>
|
||||||
<button type="submit" class="btn btn-primary pull-left">Reset password</button>
|
<button type="submit" class="btn btn-primary pull-left">Reset password</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//notebook[last()]" position="inside">
|
<xpath expr="//notebook[last()]" position="inside">
|
||||||
<page string="Geo Localization" name="geo_localization" groups="base.group_no_one">
|
<page string="Geo Localization" name="geo_localization">
|
||||||
<group colspan="2" col="2">
|
<group colspan="2" col="2">
|
||||||
<separator string="Geo Localization" colspan="2"/>
|
<separator string="Geo Localization" colspan="2"/>
|
||||||
<button
|
<button
|
||||||
|
|
|
@ -29,14 +29,7 @@ Re-implement openerp's file import system:
|
||||||
'auto_install': True,
|
'auto_install': True,
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
],
|
'views/base_import.xml',
|
||||||
'css': [
|
|
||||||
'static/src/css/import.css',
|
|
||||||
],
|
|
||||||
'js': [
|
|
||||||
'static/lib/javascript-state-machine/state-machine.js',
|
|
||||||
'static/src/js/import.js',
|
|
||||||
],
|
],
|
||||||
'qweb': ['static/src/xml/import.xml'],
|
'qweb': ['static/src/xml/import.xml'],
|
||||||
'test': ['static/test/states.js'],
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
$(document).ready(function () {
|
|
||||||
module('foo');
|
|
||||||
test('dummy', function () {
|
|
||||||
ok(42);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="base_import assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/base_import/static/src/css/import.css"/>
|
||||||
|
<script type="text/javascript" src="/base_import/static/lib/javascript-state-machine/state-machine.js"></script>
|
||||||
|
<script type="text/javascript" src="/base_import/static/src/js/import.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -14,8 +14,6 @@ for customization purpose.
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'data': [],
|
'data': [],
|
||||||
'css': [],
|
|
||||||
'js': [],
|
|
||||||
'qweb': [],
|
'qweb': [],
|
||||||
'test': [],
|
'test': [],
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,11 @@ Shows you a list of applications features to install from.
|
||||||
'base_setup_views.xml',
|
'base_setup_views.xml',
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
'res_partner_view.xml',
|
'res_partner_view.xml',
|
||||||
|
'views/base_setup.xml',
|
||||||
],
|
],
|
||||||
'demo': [],
|
'demo': [],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'images': ['images/base_setup1.jpeg','images/base_setup2.jpeg','images/base_setup3.jpeg','images/base_setup4.jpeg',],
|
'images': ['images/base_setup1.jpeg','images/base_setup2.jpeg','images/base_setup3.jpeg','images/base_setup4.jpeg',],
|
||||||
'css': ['static/src/css/base_setup.css'],
|
|
||||||
}
|
}
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="base_setup assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/base_setup/static/src/css/base_setup.css"/>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -35,10 +35,9 @@ Allows users to create custom dashboard.
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'board_view.xml',
|
'board_view.xml',
|
||||||
'board_mydashboard_view.xml'
|
'board_mydashboard_view.xml',
|
||||||
|
'views/board.xml',
|
||||||
],
|
],
|
||||||
'js': ['static/src/js/dashboard.js'],
|
|
||||||
'css': ['static/src/css/dashboard.css'],
|
|
||||||
'qweb': ['static/src/xml/*.xml'],
|
'qweb': ['static/src/xml/*.xml'],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
|
|
@ -91,10 +91,10 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({
|
||||||
var $dialog = new instance.web.Dialog(this, {
|
var $dialog = new instance.web.Dialog(this, {
|
||||||
title: _t("Edit Layout"),
|
title: _t("Edit Layout"),
|
||||||
}, QWeb.render('DashBoard.layouts', qdict)).open();
|
}, QWeb.render('DashBoard.layouts', qdict)).open();
|
||||||
$dialog.find('li').click(function() {
|
$dialog.$el.find('li').click(function() {
|
||||||
var layout = $(this).attr('data-layout');
|
var layout = $(this).attr('data-layout');
|
||||||
$dialog.modal('hide');
|
|
||||||
self.do_change_layout(layout);
|
self.do_change_layout(layout);
|
||||||
|
$dialog.$dialog_box.modal('hide');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
do_change_layout: function(new_layout) {
|
do_change_layout: function(new_layout) {
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="board assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/board/static/src/css/dashboard.css"/>
|
||||||
|
<script type="text/javascript" src="/board/static/src/js/dashboard.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -44,14 +44,9 @@ If you need to manage your meetings, you should install the CRM module.
|
||||||
'calendar_view.xml',
|
'calendar_view.xml',
|
||||||
'contacts_view.xml',
|
'contacts_view.xml',
|
||||||
'calendar_data.xml',
|
'calendar_data.xml',
|
||||||
],
|
'views/calendar.xml',
|
||||||
'js': [
|
|
||||||
'static/src/js/*.js'
|
|
||||||
],
|
],
|
||||||
'qweb': ['static/src/xml/*.xml'],
|
'qweb': ['static/src/xml/*.xml'],
|
||||||
'css': [
|
|
||||||
'static/src/css/calendar.css'
|
|
||||||
],
|
|
||||||
'test' : [
|
'test' : [
|
||||||
'test/calendar_test.yml',
|
'test/calendar_test.yml',
|
||||||
'test/test_calendar_recurrent_event_case2.yml'
|
'test/test_calendar_recurrent_event_case2.yml'
|
||||||
|
|
|
@ -994,7 +994,6 @@ class calendar_event(osv.Model):
|
||||||
sort_fields[ord] = '%s-%s' % (browse_event[ord], r_date.strftime("%Y%m%d%H%M%S"))
|
sort_fields[ord] = '%s-%s' % (browse_event[ord], r_date.strftime("%Y%m%d%H%M%S"))
|
||||||
else:
|
else:
|
||||||
sort_fields[ord] = browse_event[ord]
|
sort_fields[ord] = browse_event[ord]
|
||||||
'If we sort on FK, we obtain a browse_record, so we need to sort on name_get'
|
|
||||||
if type(browse_event[ord]) is openerp.osv.orm.browse_record:
|
if type(browse_event[ord]) is openerp.osv.orm.browse_record:
|
||||||
name_get = browse_event[ord].name_get()
|
name_get = browse_event[ord].name_get()
|
||||||
if len(name_get) and len(name_get[0]) >= 2:
|
if len(name_get) and len(name_get[0]) >= 2:
|
||||||
|
@ -1397,6 +1396,14 @@ class calendar_event(osv.Model):
|
||||||
'flags': {'form': {'action_buttons': True, 'options': {'mode': 'edit'}}}
|
'flags': {'form': {'action_buttons': True, 'options': {'mode': 'edit'}}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
|
||||||
|
for arg in args:
|
||||||
|
if arg[0] == 'id':
|
||||||
|
for n, calendar_id in enumerate(arg[2]):
|
||||||
|
if isinstance(calendar_id, str):
|
||||||
|
arg[2][n] = calendar_id.split('-')[0]
|
||||||
|
return super(calendar_event, self)._name_search(cr, user, name=name, args=args, operator=operator, context=context, limit=limit, name_get_uid=name_get_uid)
|
||||||
|
|
||||||
def write(self, cr, uid, ids, values, context=None):
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
def _only_changes_to_apply_on_real_ids(field_names):
|
def _only_changes_to_apply_on_real_ids(field_names):
|
||||||
''' return True if changes are only to be made on the real ids'''
|
''' return True if changes are only to be made on the real ids'''
|
||||||
|
|
|
@ -39,8 +39,9 @@ class meeting_invitation(http.Controller):
|
||||||
|
|
||||||
if attendee:
|
if attendee:
|
||||||
attendee_data['current_attendee'] = attendee[0]
|
attendee_data['current_attendee'] = attendee[0]
|
||||||
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in webmain.manifest_list('js', db=db))
|
|
||||||
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in webmain.manifest_list('css', db=db))
|
css = '<link rel="stylesheet" href="/web/css/web.assets_backend"/>'
|
||||||
|
js = '<script type="text/javascript" src="/web/js/web.assets_backend"></script>'
|
||||||
|
|
||||||
return webmain.html_template % {
|
return webmain.html_template % {
|
||||||
'js': js,
|
'js': js,
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="calendar assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/calendar/static/src/css/calendar.css"/>
|
||||||
|
<script type="text/javascript" src="/calendar/static/src/js/base_calendar.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -51,7 +51,6 @@ Dashboard for CRM will include:
|
||||||
'depends': [
|
'depends': [
|
||||||
'base_action_rule',
|
'base_action_rule',
|
||||||
'base_setup',
|
'base_setup',
|
||||||
'process',
|
|
||||||
'mail',
|
'mail',
|
||||||
'email_template',
|
'email_template',
|
||||||
'calendar',
|
'calendar',
|
||||||
|
@ -87,15 +86,13 @@ Dashboard for CRM will include:
|
||||||
'report/crm_lead_report_view.xml',
|
'report/crm_lead_report_view.xml',
|
||||||
'report/crm_phonecall_report_view.xml',
|
'report/crm_phonecall_report_view.xml',
|
||||||
|
|
||||||
'process/crm_configuration_process.xml',
|
|
||||||
|
|
||||||
'res_partner_view.xml',
|
'res_partner_view.xml',
|
||||||
'board_crm_view.xml',
|
|
||||||
|
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
'base_partner_merge_view.xml',
|
'base_partner_merge_view.xml',
|
||||||
|
|
||||||
'crm_case_section_view.xml',
|
'crm_case_section_view.xml',
|
||||||
|
'views/crm.xml',
|
||||||
],
|
],
|
||||||
'demo': [
|
'demo': [
|
||||||
'crm_demo.xml',
|
'crm_demo.xml',
|
||||||
|
@ -117,17 +114,10 @@ Dashboard for CRM will include:
|
||||||
'test/crm_lead_unlink.yml',
|
'test/crm_lead_unlink.yml',
|
||||||
'test/crm_lead_find_stage.yml',
|
'test/crm_lead_find_stage.yml',
|
||||||
],
|
],
|
||||||
'css': [
|
|
||||||
'static/src/css/crm.css'
|
|
||||||
],
|
|
||||||
'js': [
|
|
||||||
'static/src/js/crm_case_section.js',
|
|
||||||
],
|
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'application': True,
|
'application': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'images': [
|
'images': [
|
||||||
'images/crm_dashboard.png',
|
|
||||||
'images/customers.png',
|
'images/customers.png',
|
||||||
'images/leads.png',
|
'images/leads.png',
|
||||||
'images/opportunities_kanban.png',
|
'images/opportunities_kanban.png',
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
<!-- CRM dashboard -->
|
|
||||||
<record model="ir.ui.view" id="view_crm_opportunity_stage_graph">
|
|
||||||
<field name="name">Opportunities By Stage - Graph</field>
|
|
||||||
<field name="model">crm.lead.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<graph string="Opportunities By Stage" type="bar">
|
|
||||||
<field name="stage_id" type="row"/>
|
|
||||||
</graph>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="act_opportunity_stage">
|
|
||||||
<field name="name">Opportunities By Stage</field>
|
|
||||||
<field name="res_model">crm.lead.report</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">graph,tree,form</field>
|
|
||||||
<field name="view_id" ref="view_crm_opportunity_stage_graph"/>
|
|
||||||
<!-- avoid done / cancelled -->
|
|
||||||
<field name="domain">['&', ('stage_id.fold', '=', False), ('type', '=', 'opportunity')]</field>
|
|
||||||
<field name="context">{'search_default_Stage':1}</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--Planned Revenue By User line graph-->
|
|
||||||
<record model="ir.ui.view" id="view_crm_opportunity_user_stage_graph">
|
|
||||||
<field name="name">Opportunities By Stage Per User - Graph</field>
|
|
||||||
<field name="model">crm.lead.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<graph string="Opportunities By Stage" stacked="True">
|
|
||||||
<field name="stage_id" type="row"/>
|
|
||||||
<field name="user_id" type="row"/>
|
|
||||||
<field name="planned_revenue" type="measure"/>
|
|
||||||
</graph>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--Planned Revenue By User line graph action-->
|
|
||||||
<record model="ir.actions.act_window" id="act_oppor_stage_user">
|
|
||||||
<field name="name">Planned Revenue By User and Stage</field>
|
|
||||||
<field name="res_model">crm.lead.report</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">graph,tree,form</field>
|
|
||||||
<field name="view_id" ref="view_crm_opportunity_user_stage_graph"/>
|
|
||||||
<!-- avoid cancelled -->
|
|
||||||
<field name="domain">['|', ('stage_id.fold', '=', False), ('stage_id.probability', '=', 100)]</field>
|
|
||||||
<field name="context">{'search_default_user': 1, 'search_default_Stage': 1}</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="board_crm_statistical_form">
|
|
||||||
<field name="name">CRM - Statistical Dashboard Form</field>
|
|
||||||
<field name="model">board.board</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Statistics Dashboard" version="7.0">
|
|
||||||
<board style="1-1">
|
|
||||||
<column>
|
|
||||||
<action string="Planned Revenue by Stage and User" name="%(act_oppor_stage_user)d"/>
|
|
||||||
</column>
|
|
||||||
<column>
|
|
||||||
<action string="Opportunities by Stage" name="%(act_opportunity_stage)d"/>
|
|
||||||
</column>
|
|
||||||
</board>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="open_board_statistical_dash">
|
|
||||||
<field name="name">CRM</field>
|
|
||||||
<field name="res_model">board.board</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">form</field>
|
|
||||||
<field name="usage">menu</field>
|
|
||||||
<field name="view_id" ref="board_crm_statistical_form"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem
|
|
||||||
id="menu_board_statistics_dash"
|
|
||||||
parent="base.menu_reporting_dashboard"
|
|
||||||
action="open_board_statistical_dash"
|
|
||||||
sequence="10"
|
|
||||||
groups="base.group_sale_manager"/>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -978,7 +978,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
if obj.type == 'opportunity':
|
if obj.type == 'opportunity':
|
||||||
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||||
else:
|
else:
|
||||||
view_id = super(crm_lead, self).get_formview_id(cr, uid, id, model=model, context=context)
|
view_id = super(crm_lead, self).get_formview_id(cr, uid, id, model='crm.lead', context=context)
|
||||||
return view_id
|
return view_id
|
||||||
|
|
||||||
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
|
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -327,7 +327,7 @@
|
||||||
<field name="categ_ids" string="Tag" filter_domain="[('categ_ids', 'ilike', self)]"/>
|
<field name="categ_ids" string="Tag" filter_domain="[('categ_ids', 'ilike', self)]"/>
|
||||||
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" operator="child_of"/>
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="country_id" context="{'invisible_country': False}"/>
|
<field name="country_id" context="{'invisible_country': False}"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
@ -547,7 +547,7 @@
|
||||||
<field name="categ_ids" string="Tag" filter_domain="[('categ_ids', 'ilike', self)]"/>
|
<field name="categ_ids" string="Tag" filter_domain="[('categ_ids', 'ilike', self)]"/>
|
||||||
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" operator="child_of"/>
|
||||||
<field name="stage_id" domain="[]"/>
|
<field name="stage_id" domain="[]"/>
|
||||||
<field name="probability"/>
|
<field name="probability"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
|
@ -176,7 +176,7 @@
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="Phone Calls Assigned to Me or My Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('user_id', '=', uid)]"
|
<filter string="Phone Calls Assigned to Me or My Team(s)" icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('user_id', '=', uid)]"
|
||||||
help="Phone Calls Assigned to the current user or with a team having the current user as team leader"/>
|
help="Phone Calls Assigned to the current user or with a team having the current user as team leader"/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" operator="child_of"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="opportunity_id"/>
|
<field name="opportunity_id"/>
|
||||||
<field name="section_id" string="Sales Team"
|
<field name="section_id" string="Sales Team"
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_process_contractprocess0" model="process.process">
|
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field eval=""""Contract"""" name="name"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Node
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_node_leads0" model="process.node">
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Leads"""" name="name"/>
|
|
||||||
<field eval=""""Very first contact with new prospect"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_contractprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'done', 'cancel')"""" name="model_states"/>
|
|
||||||
<field eval="1" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_partner0" model="process.node">
|
|
||||||
<field name="menu_id" ref="base.menu_partner_form"/>
|
|
||||||
<field name="model_id" ref="base.model_res_partner"/>
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Partner"""" name="name"/>
|
|
||||||
<field eval=""""Convert to prospect to business partner"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_contractprocess0"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_opportunities0" model="process.node">
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Opportunities"""" name="name"/>
|
|
||||||
<field eval=""""When a real project/opportunity is detected"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_contractprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'done', 'cancel')"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_node_meeting0" model="process.node">
|
|
||||||
<field eval=""""state"""" name="kind"/>
|
|
||||||
<field eval=""""Meeting"""" name="name"/>
|
|
||||||
<field eval=""""Schedule a normal or phone meeting"""" name="note"/>
|
|
||||||
<field name="process_id" ref="process_process_contractprocess0"/>
|
|
||||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'done', 'cancel')"""" name="model_states"/>
|
|
||||||
<field eval="0" name="flow_start"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Process Transition
|
|
||||||
-->
|
|
||||||
|
|
||||||
<record id="process_transition_leadopportunity0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Prospect Opportunity"""" name="name"/>
|
|
||||||
<field eval=""""Creating business opportunities from Leads"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_opportunities0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_leads0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_leadpartner0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Prospect Partner"""" name="name"/>
|
|
||||||
<field eval=""""Prospect is converting to business partner"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_partner0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_leads0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="process_transition_opportunitymeeting0" model="process.transition">
|
|
||||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
|
||||||
<field eval=""""Opportunity Meeting"""" name="name"/>
|
|
||||||
<field eval=""""Normal or phone meeting for opportunity"""" name="note"/>
|
|
||||||
<field name="target_node_id" ref="process_node_meeting0"/>
|
|
||||||
<field name="source_node_id" ref="process_node_opportunities0"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -10,7 +10,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<graph string="Leads Analysis" type="pivot" stacked="True">
|
<graph string="Leads Analysis" type="pivot" stacked="True">
|
||||||
<field name="user_id" type="row"/>
|
<field name="user_id" type="row"/>
|
||||||
<field name="create_date" interval="week" type="col"/>
|
<field name="create_date" interval="year" type="col"/>
|
||||||
</graph>
|
</graph>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<graph string="Leads Analysis" type="pivot" stacked="True">
|
<graph string="Leads Analysis" type="pivot" stacked="True">
|
||||||
<field name="date_deadline" type="row"/>
|
<field name="date_deadline" type="row"/>
|
||||||
<field name="user_id" type="col"/>
|
<field name="stage_id" type="col"/>
|
||||||
<field name="planned_revenue" type="measure"/>
|
<field name="planned_revenue" type="measure"/>
|
||||||
</graph>
|
</graph>
|
||||||
</field>
|
</field>
|
||||||
|
@ -45,6 +45,9 @@
|
||||||
<field name="model">crm.lead.report</field>
|
<field name="model">crm.lead.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Leads Analysis">
|
<search string="Leads Analysis">
|
||||||
|
<filter name="lead" string="Lead" domain="[('type','=', 'lead')]" help="Show only lead"/>
|
||||||
|
<filter name="opportunity" string="Opportunity" domain="[('type','=','opportunity')]" help="Show only opportunity"/>
|
||||||
|
<separator/>
|
||||||
<filter string="New" name="new"
|
<filter string="New" name="new"
|
||||||
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
|
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
|
||||||
<filter string="Won" name="won"
|
<filter string="Won" name="won"
|
||||||
|
@ -77,29 +80,23 @@
|
||||||
<field name="date_closed"/>
|
<field name="date_closed"/>
|
||||||
</group>
|
</group>
|
||||||
<group expand="1" string="Group By...">
|
<group expand="1" string="Group By...">
|
||||||
<filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />
|
<filter string="Salesperson" domain="[]" context="{'group_by':'user_id'}" />
|
||||||
<filter string="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" />
|
<filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" />
|
||||||
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" />
|
<filter string="Partner" context="{'group_by':'partner_id'}" />
|
||||||
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" />
|
<filter string="Country" context="{'group_by':'country_id'}" />
|
||||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
<filter string="Company" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
<filter string="Type" domain="[]" context="{'group_by':'type'}"/>
|
||||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
<filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl"
|
<filter string="Priority" domain="[]" context="{'group_by':'priority'}" />
|
||||||
domain="[]" context="{'group_by':'type_id'}" />
|
<filter string="Campaign" domain="[]" context="{'group_by':'type_id'}" />
|
||||||
<filter string="Channel" icon="terp-call-start"
|
<filter string="Channel" domain="[]" context="{'group_by':'channel_id'}" />
|
||||||
domain="[]" context="{'group_by':'channel_id'}" />
|
|
||||||
<separator orientation="vertical" />
|
<separator orientation="vertical" />
|
||||||
<filter string="Creation date (day)" icon="terp-go-year"
|
<filter string="Creation date (day)" domain="[]" context="{'group_by':'create_date:day'}"/>
|
||||||
domain="[]" context="{'group_by':'create_date:day'}"/>
|
<filter string="Creation date (week)" domain="[]" context="{'group_by':'create_date:week'}"/>
|
||||||
<filter string="Creation date (week)" icon="terp-go-year"
|
<filter string="Creation date (month)" domain="[]" context="{'group_by':'create_date:month'}" name="month"/>
|
||||||
domain="[]" context="{'group_by':'create_date:week'}"/>
|
<filter string="Creation date (year)" domain="[]" context="{'group_by':'create_date:year'}"/>
|
||||||
<filter string="Creation date (month)" icon="terp-go-year"
|
|
||||||
domain="[]" context="{'group_by':'create_date:month'}" name="month"/>
|
|
||||||
<filter string="Creation date (year)" icon="terp-go-year"
|
|
||||||
domain="[]" context="{'group_by':'create_date:year'}"/>
|
|
||||||
<separator orientation="vertical" />
|
<separator orientation="vertical" />
|
||||||
<filter string="Exp. Closing" icon="terp-go-month"
|
<filter string="Exp. Closing" domain="[]" context="{'group_by':'date_deadline'}"/>
|
||||||
domain="[]" context="{'group_by':'date_deadline'}"/>
|
|
||||||
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" />
|
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" />
|
||||||
</group>
|
</group>
|
||||||
</search>
|
</search>
|
||||||
|
@ -107,13 +104,13 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Leads by user and section Action -->
|
<!-- Leads by user and section Action -->
|
||||||
|
|
||||||
<record id="action_report_crm_lead" model="ir.actions.act_window">
|
<record id="action_report_crm_lead" model="ir.actions.act_window">
|
||||||
<field name="name">Leads Analysis</field>
|
<field name="name">Leads Analysis</field>
|
||||||
<field name="res_model">crm.lead.report</field>
|
<field name="res_model">crm.lead.report</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">graph</field>
|
<field name="view_mode">graph</field>
|
||||||
<field name="domain">[('type','=', 'lead')]</field>
|
<field name="context">{'search_default_lead': 1}</field>
|
||||||
|
<field name="domain">[]</field>
|
||||||
<field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
|
<field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_graph">
|
<record model="ir.actions.act_window.view" id="action_report_crm_lead_graph">
|
||||||
|
@ -122,27 +119,25 @@
|
||||||
<field name="view_id" ref="view_report_crm_lead_graph"/>
|
<field name="view_id" ref="view_report_crm_lead_graph"/>
|
||||||
<field name="act_window_id" ref="action_report_crm_lead"/>
|
<field name="act_window_id" ref="action_report_crm_lead"/>
|
||||||
</record>
|
</record>
|
||||||
|
<menuitem name="Leads Analysis" id="menu_report_crm_leads_tree"
|
||||||
|
groups="base.group_sale_manager"
|
||||||
|
parent="base.next_id_64" action="action_report_crm_lead" sequence="1"/>
|
||||||
|
|
||||||
<record id="action_report_crm_opportunity" model="ir.actions.act_window">
|
<record id="action_report_crm_opportunity" model="ir.actions.act_window">
|
||||||
<field name="name">Opportunities Analysis</field>
|
<field name="name">Opportunities Analysis</field>
|
||||||
<field name="res_model">crm.lead.report</field>
|
<field name="res_model">crm.lead.report</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">graph</field>
|
<field name="view_mode">graph</field>
|
||||||
<field name="domain">[('type','=', 'opportunity')]</field>
|
<field name="context">{'search_default_opportunity': 1}</field>
|
||||||
|
<field name="domain">[]</field>
|
||||||
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
|
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.actions.act_window.view" id="action_report_crm_opportunity_graph">
|
<record model="ir.actions.act_window.view" id="action_report_crm_opportunity_graph">
|
||||||
<field name="sequence" eval="2"/>
|
<field name="sequence" eval="2"/>
|
||||||
<field name="view_mode">graph</field>
|
<field name="view_mode">graph</field>
|
||||||
<field name="view_id" ref="view_report_crm_opportunity_graph"/>
|
<field name="view_id" ref="view_report_crm_opportunity_graph"/>
|
||||||
<field name="act_window_id" ref="action_report_crm_opportunity"/>
|
<field name="act_window_id" ref="action_report_crm_opportunity"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<menuitem name="Leads Analysis" id="menu_report_crm_leads_tree"
|
|
||||||
groups="base.group_sale_manager"
|
|
||||||
parent="base.next_id_64" action="action_report_crm_lead" sequence="1"/>
|
|
||||||
|
|
||||||
<menuitem name="Opportunities Analysis" id="menu_report_crm_opportunities_tree"
|
<menuitem name="Opportunities Analysis" id="menu_report_crm_opportunities_tree"
|
||||||
parent="base.next_id_64" action="action_report_crm_opportunity" sequence="5"/>
|
parent="base.next_id_64" action="action_report_crm_opportunity" sequence="5"/>
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 83 KiB |
|
@ -164,24 +164,7 @@ Customize your sales cycle by configuring sales stages that perfectly fit your s
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="oe_container oe_dark">
|
<section class="oe_container oe_dark">
|
||||||
<div class="oe_spaced oe_row">
|
<div class="oe_row oe_spaced">
|
||||||
<h2 class="oe_slogan">Reporting and Dashboards</h2>
|
|
||||||
<h3 class="oe_slogan">Get access to the right information to take smart decisions</h3>
|
|
||||||
<div class="oe_span6">
|
|
||||||
<div class="oe_row_img oe_centered">
|
|
||||||
<img class="oe_picture oe_screenshot" src="crm_sc_05.png">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="oe_span6">
|
|
||||||
<p class="oe_mt32">
|
|
||||||
Get the insights you need to make smarter decisions. Design custom dashboards to get a picture of your business at a glance. Dig deeper with real-time reports that anyone can create and share.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="oe_spaced oe_container">
|
|
||||||
<div class="oe_row">
|
|
||||||
<h2 class="oe_slogan">Drive Engagement with Gamification</h2>
|
<h2 class="oe_slogan">Drive Engagement with Gamification</h2>
|
||||||
<h3 class="oe_slogan">Leverage sales' natural desire for competition</h3>
|
<h3 class="oe_slogan">Leverage sales' natural desire for competition</h3>
|
||||||
<p class="oe_mt32">
|
<p class="oe_mt32">
|
||||||
|
@ -217,7 +200,7 @@ Get the insights you need to make smarter decisions. Design custom dashboards to
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="oe_container oe_dark">
|
<section class="oe_container">
|
||||||
<div class="oe_row">
|
<div class="oe_row">
|
||||||
<div class="oe_span12">
|
<div class="oe_span12">
|
||||||
<h2 class="oe_slogan">Many companies already enjoy it</h2>
|
<h2 class="oe_slogan">Many companies already enjoy it</h2>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- vim:fdn=3:
|
||||||
|
-->
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<template id="assets_backend" name="crm assets" inherit_id="web.assets_backend">
|
||||||
|
<xpath expr="." position="inside">
|
||||||
|
<link rel="stylesheet" href="/crm/static/src/css/crm.css"/>
|
||||||
|
<script type="text/javascript" src="/crm/static/src/js/crm_case_section.js"></script>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -52,7 +52,7 @@
|
||||||
</group>
|
</group>
|
||||||
<group string="Categorization">
|
<group string="Categorization">
|
||||||
<field name="priority"/>
|
<field name="priority"/>
|
||||||
<field name="categ_id" domain="[('object_id.model', '=', 'crm.helpdesk')]"/>
|
<field name="categ_id" domain="[('object_id.model', '=', 'crm.helpdesk')]" context="{'object_name': 'crm.helpdesk'}"/>
|
||||||
<field name="channel_id"/>
|
<field name="channel_id"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
|
|
@ -51,9 +51,6 @@ to an appropriate local partner, based on the distance and the weight that was a
|
||||||
'res_partner_demo.xml',
|
'res_partner_demo.xml',
|
||||||
'crm_lead_demo.xml'
|
'crm_lead_demo.xml'
|
||||||
],
|
],
|
||||||
'js': [
|
|
||||||
'static/src/js/next.js',
|
|
||||||
],
|
|
||||||
'test': ['test/partner_assign.yml'],
|
'test': ['test/partner_assign.yml'],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
# Arabic translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-01 18:05+0000\n"
|
|
||||||
"Last-Translator: gehad shaat <gehad.shaath@gmail.com>\n"
|
|
||||||
"Language-Team: Arabic <ar@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: 2014-04-22 07:47+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_project_task
|
|
||||||
msgid "Task"
|
|
||||||
msgstr "مهمة"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Timebox"
|
|
||||||
msgstr "الوقت الزمني"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Lead"
|
|
||||||
msgstr "العروض"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For cancelling the task"
|
|
||||||
msgstr "لإغاء المهمة"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Next"
|
|
||||||
msgstr "التالي"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
|
||||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
|
||||||
msgid "My Tasks"
|
|
||||||
msgstr "مهامي"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
#: field:crm.lead,task_ids:0
|
|
||||||
msgid "Tasks"
|
|
||||||
msgstr "المهام"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Done"
|
|
||||||
msgstr "تمّ"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr "إلغاء"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
|
||||||
msgid "Lead/Opportunity"
|
|
||||||
msgstr "عرض/فرصة"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: field:project.task,lead_id:0
|
|
||||||
msgid "Lead / Opportunity"
|
|
||||||
msgstr "فرصة"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For changing to done state"
|
|
||||||
msgstr "التحويل لحالة الإنتهاء"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Previous"
|
|
||||||
msgstr "السابق"
|
|
||||||
|
|
||||||
#~ msgid "Error ! You cannot create recursive tasks."
|
|
||||||
#~ msgstr "خطأ ! لا يمكنك انشاء مهام متداخلة."
|
|
||||||
|
|
||||||
#~ msgid "crm.lead"
|
|
||||||
#~ msgstr "crm.lead"
|
|
||||||
|
|
||||||
#~ msgid "Error ! Task end-date must be greater then task start-date"
|
|
||||||
#~ msgstr "خطأ ! يجب ان يكون تاريخ نهاية المهمة اكبر من تاريخ البداية"
|
|
||||||
|
|
||||||
#~ msgid "Extra Info"
|
|
||||||
#~ msgstr "معلومات إضافية"
|
|
|
@ -1,85 +0,0 @@
|
||||||
# Bosnian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-10-26 09:15+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Bosnian <bs@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: 2014-04-22 07:47+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_project_task
|
|
||||||
msgid "Task"
|
|
||||||
msgstr "Zadatak"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Timebox"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Lead"
|
|
||||||
msgstr "Potencijal"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For cancelling the task"
|
|
||||||
msgstr "Za otkazivanje zadatka"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Next"
|
|
||||||
msgstr "Slijedeće"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
|
||||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
|
||||||
msgid "My Tasks"
|
|
||||||
msgstr "Moji zadaci"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
#: field:crm.lead,task_ids:0
|
|
||||||
msgid "Tasks"
|
|
||||||
msgstr "Zadaci"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Done"
|
|
||||||
msgstr "Gotovo"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr "Otkaži"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
|
||||||
msgid "Lead/Opportunity"
|
|
||||||
msgstr "Potencijal/Prilika"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: field:project.task,lead_id:0
|
|
||||||
msgid "Lead / Opportunity"
|
|
||||||
msgstr "Potencijal / Prilika"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For changing to done state"
|
|
||||||
msgstr "Za promjenu u status: Gotovo"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Previous"
|
|
||||||
msgstr "Prethodno"
|
|
|
@ -1,85 +0,0 @@
|
||||||
# Czech translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-03-30 12:42+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Czech <cs@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: 2014-04-22 07:47+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_project_task
|
|
||||||
msgid "Task"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Timebox"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Lead"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For cancelling the task"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Next"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
|
||||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
|
||||||
msgid "My Tasks"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
#: field:crm.lead,task_ids:0
|
|
||||||
msgid "Tasks"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Done"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
|
||||||
msgid "Lead/Opportunity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: field:project.task,lead_id:0
|
|
||||||
msgid "Lead / Opportunity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For changing to done state"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Previous"
|
|
||||||
msgstr ""
|
|
|
@ -1,85 +0,0 @@
|
||||||
# Danish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-06-19 17:34+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: 2014-04-22 07:47+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16985)\n"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_project_task
|
|
||||||
msgid "Task"
|
|
||||||
msgstr "Opgave"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Timebox"
|
|
||||||
msgstr "Timeboks"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Lead"
|
|
||||||
msgstr "Emne"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For cancelling the task"
|
|
||||||
msgstr "Afbryd opgave"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Next"
|
|
||||||
msgstr "Næste"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
|
||||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
|
||||||
msgid "My Tasks"
|
|
||||||
msgstr "Mine opgaver"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
#: field:crm.lead,task_ids:0
|
|
||||||
msgid "Tasks"
|
|
||||||
msgstr "Opgaver"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Done"
|
|
||||||
msgstr "Udført"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr "Annuller"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
|
||||||
msgid "Lead/Opportunity"
|
|
||||||
msgstr "Emne/Forventning"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: field:project.task,lead_id:0
|
|
||||||
msgid "Lead / Opportunity"
|
|
||||||
msgstr "Emne / Forventning"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "For changing to done state"
|
|
||||||
msgstr "Ændre til afsluttet"
|
|
||||||
|
|
||||||
#. module: crm_todo
|
|
||||||
#: view:crm.lead:0
|
|
||||||
msgid "Previous"
|
|
||||||
msgstr "Forrige"
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue