[MERGE] trunk
bzr revid: qdp-launchpad@openerp.com-20121206164228-kjptr95apsinx7yd
This commit is contained in:
@@ -30,6 +30,7 @@ Module for the Check Writing and Check Printing.
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends' : ['account_voucher'],
|
||||
'data': [
|
||||
'wizard/account_check_batch_printing_view.xml',
|
||||
'account_check_writing_report.xml',
|
||||
'account_view.xml',
|
||||
'account_voucher_view.xml',
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# -*- 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 account_check_batch_printing
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,87 @@
|
||||
# -*- 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 tools.translate import _
|
||||
|
||||
from osv import fields, osv
|
||||
|
||||
class account_check_write(osv.osv_memory):
|
||||
_name = 'account.check.write'
|
||||
_description = 'Prin Check in Batch'
|
||||
|
||||
_columns = {
|
||||
'check_number': fields.integer('Next Check Number', required=True, help="The number of the next check number to be printed."),
|
||||
}
|
||||
|
||||
def _get_next_number(self, cr, uid, context=None):
|
||||
dummy, sequence_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_check_writing', 'sequence_check_number')
|
||||
return self.pool.get('ir.sequence').read(cr, uid, sequence_id, ['number_next'])['number_next']
|
||||
|
||||
_defaults = {
|
||||
'check_number': _get_next_number,
|
||||
}
|
||||
|
||||
def print_check_write(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
voucher_obj = self.pool.get('account.voucher')
|
||||
ir_sequence_obj = self.pool.get('ir.sequence')
|
||||
|
||||
#update the sequence to number the checks from the value encoded in the wizard
|
||||
dummy, sequence_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_check_writing', 'sequence_check_number')
|
||||
increment = ir_sequence_obj.read(cr, uid, sequence_id, ['number_increment'])['number_increment']
|
||||
new_value = self.browse(cr, uid, ids[0], context=context).check_number
|
||||
ir_sequence_obj.write(cr, uid, sequence_id, {'number_next': new_value})
|
||||
|
||||
#validate the checks so that they get a number
|
||||
voucher_ids = context.get('active_ids', [])
|
||||
for check in voucher_obj.browse(cr, uid, voucher_ids, context=context):
|
||||
new_value += increment
|
||||
if check.number:
|
||||
raise osv.except_osv(_('Error!'),_("One of the printed check already got a number."))
|
||||
voucher_obj.proforma_voucher(cr, uid, voucher_ids, context=context)
|
||||
|
||||
#update the sequence again (because the assignation using next_val was made during the same transaction of
|
||||
#the first update of sequence)
|
||||
ir_sequence_obj.write(cr, uid, sequence_id, {'number_next': new_value})
|
||||
|
||||
#print the checks
|
||||
check_layout_report = {
|
||||
'top' : 'account.print.check.top',
|
||||
'middle' : 'account.print.check.middle',
|
||||
'bottom' : 'account.print.check.bottom',
|
||||
}
|
||||
check_layout = voucher_obj.browse(cr, uid, voucher_ids[0], context=context).company_id.check_layout
|
||||
if not check_layout:
|
||||
check_layout = 'top'
|
||||
return {
|
||||
'type': 'ir.actions.report.xml',
|
||||
'report_name':check_layout_report[check_layout],
|
||||
'datas': {
|
||||
'model':'account.voucher',
|
||||
'ids': voucher_ids,
|
||||
'report_type': 'pdf'
|
||||
},
|
||||
'nodestroy': True
|
||||
}
|
||||
|
||||
account_check_write()
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="0">
|
||||
|
||||
<record id="view_account_check_write" model="ir.ui.view">
|
||||
<field name="name">account.check.form</field>
|
||||
<field name="model">account.check.write</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Check" version="7.0">
|
||||
<group col="4">
|
||||
<field name="check_number"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="print_check_write" string="Print Check" type="object" class="oe_highlight"/> or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window id="action_account_check_write"
|
||||
multi="True"
|
||||
name="Print Check in Batch"
|
||||
res_model="account.check.write" src_model="account.voucher"
|
||||
view_mode="form" target="new" view_type="form" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,2 @@
|
||||
import account_test
|
||||
import report
|
||||
@@ -0,0 +1,47 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (c) 2011 CCI Connect asbl (http://www.cciconnect.be) All Rights Reserved.
|
||||
# Philmer <philmer@cciconnect.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' : 'Accounting Consistency Tests',
|
||||
'version' : '1.0',
|
||||
'author' : 'OpenERP',
|
||||
'category' : 'Accounting & Finance',
|
||||
'website': 'http://www.openerp.com',
|
||||
'description': """
|
||||
Asserts on accounting.
|
||||
======================
|
||||
With this module you can manually check consistencies and inconsistencies of accounting module from menu Reporting/Accounting/Accounting Tests.
|
||||
|
||||
You can write a query in order to create Consistency Test and you will get the result of the test
|
||||
in PDF format which can be accessed by Menu Reporting -> Accounting Tests, then select the test
|
||||
and print the report from Print button in header area.
|
||||
""",
|
||||
'depends' : ['account'],
|
||||
'data' : [
|
||||
'security/ir.model.access.csv',
|
||||
'account_test_view.xml',
|
||||
'account_test_report.xml',
|
||||
'account_test_data.xml',
|
||||
],
|
||||
'active': False,
|
||||
'installable': True
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,65 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2005-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
#
|
||||
# $Id: product_expiry.py 4304 2006-10-25 09:54:51Z ged $
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields,osv
|
||||
import pooler
|
||||
import netsvc
|
||||
import time
|
||||
from xml import dom
|
||||
|
||||
|
||||
CODE_EXEC_DEFAULT = '''\
|
||||
res = []
|
||||
cr.execute("select id, code from account_journal")
|
||||
for record in cr.dictfetchall():
|
||||
res.append(record['code'])
|
||||
result = res
|
||||
'''
|
||||
|
||||
class accounting_assert_test(osv.osv):
|
||||
_name = "accounting.assert.test"
|
||||
_order = "sequence"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Test Name', size=256, required=True, select=True, translate=True),
|
||||
'desc': fields.text('Test Description', select=True, translate=True),
|
||||
'code_exec': fields.text('Python code', required=True),
|
||||
'active': fields.boolean('Active'),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'code_exec': CODE_EXEC_DEFAULT,
|
||||
'active': True,
|
||||
'sequence': 10,
|
||||
}
|
||||
|
||||
accounting_assert_test()
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_01">
|
||||
<field name="sequence">1</field>
|
||||
<field name="name">Test 1: General balance</field>
|
||||
<field name="desc">Check the balance: Debit sum = Credit sum</field>
|
||||
<field name="code_exec"><![CDATA[sql="""SELECT
|
||||
sum(debit)-sum(credit) as balance
|
||||
FROM account_move_line
|
||||
"""
|
||||
cr.execute(sql)
|
||||
result=[]
|
||||
res= cr.dictfetchall()
|
||||
if res[0]['balance']!=0.0 and res[0]['balance'] is not None:
|
||||
result.append(_('* The difference of the balance is: '))
|
||||
result.append(res)
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_02">
|
||||
<field name="sequence">2</field>
|
||||
<field name="name">Test 2: Opening a fiscal year</field>
|
||||
<field name="desc">Check if the balance of the new opened fiscal year matches with last year's balance</field>
|
||||
<field name="code_exec"><![CDATA[result = []
|
||||
cr.execute("select coalesce(sum(debit),0) as debit_new_fyear,coalesce(sum(credit),0) as credit_new_fyear from account_move_line where period_id in (select id from account_period where state='draft' and special order by id desc limit 1);")
|
||||
rec = cr.dictfetchall()
|
||||
cr.execute("select coalesce(sum(debit),0) as debit_last_fyear,coalesce(sum(credit),0) as credit_last_fyear from account_move_line where period_id in (select period_id from account_fiscalyear where state='done' order by id desc limit 1);")
|
||||
rec2= cr.dictfetchall()
|
||||
if (rec2[0]['credit_last_fyear']-rec[0]['credit_new_fyear']!=0) or (rec2[0]['debit_last_fyear']-rec[0]['debit_new_fyear']!=0) :
|
||||
result.append(_('* New fiscalyear debit and credit are:'))
|
||||
result.append(rec[0])
|
||||
result.append(_('* Last year debit and credit are:'))
|
||||
result.append(rec2[0])
|
||||
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_03">
|
||||
<field name="sequence">3</field>
|
||||
<field name="name">Test 3: Movement lines</field>
|
||||
<field name="desc">Check if movement lines are balanced and have the same date and period</field>
|
||||
<field name="code_exec"><![CDATA[order_columns=['am_date','ml_date','am.period_id','ml.period_id','am.id']
|
||||
sql="""SELECT
|
||||
am.id as move_id,
|
||||
sum(debit)-sum(credit) as balance,
|
||||
am.period_id,
|
||||
ml.period_id,
|
||||
am.date as am_date,
|
||||
ml.date as ml_date
|
||||
FROM account_move am, account_move_line ml
|
||||
WHERE
|
||||
ml.move_id = am.id
|
||||
GROUP BY am.name, am.id, am.state, am.period_id, ml.period_id,am.period_id, ml.period_id,am.date, ml.date
|
||||
HAVING abs(sum(ml.debit-ml.credit)) <> 0 or am.period_id!=ml.period_id or (am.date!=ml.date)
|
||||
"""
|
||||
cr.execute(sql)
|
||||
res = cr.dictfetchall()
|
||||
if res:
|
||||
res.insert(0,_('* The test failed for these movement lines:'))
|
||||
result = res
|
||||
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_04">
|
||||
<field name="sequence">4</field>
|
||||
<field name="name">Test 4: Totally reconciled mouvements</field>
|
||||
<field name="desc">Check if the totally reconciled movements are balanced</field>
|
||||
<field name="code_exec"><![CDATA[res = []
|
||||
cr.execute("SELECT distinct reconcile_id from account_move_line where reconcile_id is not null")
|
||||
rec_ids = cr.dictfetchall()
|
||||
for record in rec_ids :
|
||||
cr.execute("SELECT distinct r.name,r.id from account_journal j,account_period p, account_move_reconcile r,account_move m, account_move_line ml where m.journal_id=j.id and m.period_id=p.id and ml.reconcile_id=%s and ml.move_id=m.id and ml.reconcile_id=r.id group by r.id,r.name having sum(ml.debit)-sum(ml.credit)<>0", (record['reconcile_id'],))
|
||||
reconcile_ids=cr.dictfetchall()
|
||||
if reconcile_ids:
|
||||
res.append(', '.join(["Reconcile name: %(name)s, id=%(id)s " % r for r in reconcile_ids]))
|
||||
result = res
|
||||
if result:
|
||||
result.insert(0,_('* The test failed for these reconciled items(id/name):'))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_05">
|
||||
<field name="sequence">5</field>
|
||||
<field name="name">Test 5.1 : Payable and Receivable accountant lines of reconciled invoices</field>
|
||||
<field name="desc">Check that reconciled invoice for Sales/Purchases has reconciled entries for Payable and Receivable Accounts</field>
|
||||
<field name="code_exec"><![CDATA[res = []
|
||||
cr.execute("SELECT distinct inv.number,inv.id from account_invoice inv, account_move m, account_move_line ml, account_account a where m.id=ml.move_id and ml.account_id=a.id and a.type in ('receivable','payable') and inv.move_id=m.id and ml.reconcile_id is not null;")
|
||||
records= cr.dictfetchall()
|
||||
rec = [r['id'] for r in records]
|
||||
res = reconciled_inv()
|
||||
invoices = set(rec).difference(set(res))
|
||||
result = [rec for rec in records if rec['id'] in invoices]
|
||||
if result:
|
||||
result.insert(0,_('* Invoices that need to be checked: '))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_05_2">
|
||||
<field name="sequence">6</field>
|
||||
<field name="name">Test 5.2 : Reconcilied invoices and Payable/Receivable accounts</field>
|
||||
<field name="desc">Check that reconciled account moves, that define Payable and Receivable accounts, are belonging to reconciled invoices</field>
|
||||
<field name="code_exec"><![CDATA[res = reconciled_inv()
|
||||
result=[]
|
||||
if res:
|
||||
cr.execute("SELECT distinct inv.number,inv.id from account_invoice inv, account_move_line ml, account_account a, account_move m where m.id=ml.move_id and inv.move_id=m.id and inv.id=inv.move_id and ml.reconcile_id is null and a.type in ('receivable','payable') and ml.account_id=a.id and inv.id in %s",(tuple(res),))
|
||||
records = cr.dictfetchall()
|
||||
result = [rec for rec in records]
|
||||
if result:
|
||||
result.insert(0,_('* Invoices that need to be checked: '))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_06">
|
||||
<field name="sequence">7</field>
|
||||
<field name="name">Test 6 : Invoices status</field>
|
||||
<field name="desc">Check that paid/reconciled invoices are not in 'Open' state</field>
|
||||
<field name="code_exec"><![CDATA[
|
||||
res = []
|
||||
column_order = ['number','id','name','state']
|
||||
if reconciled_inv():
|
||||
cr.execute("select inv.name,inv.state,inv.id,inv.number from account_invoice inv where inv.state!='paid' and id in %s", (tuple(reconciled_inv()),))
|
||||
res = cr.dictfetchall()
|
||||
result = res
|
||||
if result:
|
||||
result.insert(0,_('* Invoices that need to be checked: '))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_06_1">
|
||||
<field name="sequence">8</field>
|
||||
<field name="name">Test 7: « View » account type</field>
|
||||
<field name="desc">Check that there's no move for any account with « View » account type</field>
|
||||
<field name="code_exec"><![CDATA[column_order=['name','ref','id','date']
|
||||
sql = "select id, name, ref, date from account_move_line where account_id in (select id from account_account where type = 'view')"
|
||||
cr.execute(sql)
|
||||
result = cr.dictfetchall()
|
||||
if result:
|
||||
result.insert(0,_('* Movement lines that need to be checked: '))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_07">
|
||||
<field name="sequence">9</field>
|
||||
<field name="name">Test 8 : Closing balance on bank statements</field>
|
||||
<field name="desc">Check on bank statement that the Closing Balance = Starting Balance + sum of statement lines</field>
|
||||
<field name="code_exec"><![CDATA[column_order = ['name','difference']
|
||||
cr.execute("SELECT s.balance_start+sum(m.amount)-s.balance_end_real as difference, s.name from account_bank_statement s inner join account_bank_statement_line m on m.statement_id=s.id group by s.id, s.balance_start, s.balance_end_real,s.name having abs(s.balance_start+sum(m.amount)-s.balance_end_real) > 0.000000001;")
|
||||
result = cr.dictfetchall()
|
||||
if result:
|
||||
result.insert(0,_('* Unbalanced bank statement that need to be checked: '))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record model="accounting.assert.test" id="account_test_08">
|
||||
<field name="sequence">10</field>
|
||||
<field name="name">Test 9 : Accounts and partners on account moves</field>
|
||||
<field name="desc">Check that general accounts and partners on account moves are active</field>
|
||||
<field name="code_exec"><![CDATA[column_order=['partner_name','partner_active','account_name','move_line_id','period']
|
||||
res = []
|
||||
cr.execute("SELECT l.id as move_line_id,a.name as account_name,a.code as account_code,r.name as partner_name,r.active as partner_active,p.name as period from account_period p,res_partner r, account_account a,account_move_line l where l.account_id=a.id and l.partner_id=r.id and (not r.active or not a.active) and l.period_id=p.id")
|
||||
res = cr.dictfetchall()
|
||||
result = res
|
||||
if result:
|
||||
result.insert(0,_('* Here is the list of inactive partners and movement lines that are not correct: '))
|
||||
]]></field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<report
|
||||
id="account_assert_test_report"
|
||||
model="accounting.assert.test"
|
||||
name="account.test.assert.print"
|
||||
rml="account_test/report/account_test.rml"
|
||||
header="False"
|
||||
string="Accounting Tests"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="account_assert_tree">
|
||||
<field name="name">Tests</field>
|
||||
<field name="model">accounting.assert.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Tests">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="desc"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="account_assert_form">
|
||||
<field name="name">Tests</field>
|
||||
<field name="model">accounting.assert.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Tests" version="7.0">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Description">
|
||||
<field name="desc" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Expression">
|
||||
<group string="Python Code">
|
||||
<field colspan="4" name="code_exec" nolabel="1"/>
|
||||
</group>
|
||||
<group string="Code Help">
|
||||
<pre>
|
||||
Code should always set a variable named `result` with the result of your test, that can be a list or
|
||||
a dictionary. If `result` is an empty list, it means that the test was succesful. Otherwise it will
|
||||
try to translate and print what is inside `result`.
|
||||
|
||||
If the result of your test is a dictionary, you can set a variable named `column_order` to choose in
|
||||
what order you want to print `result`'s content.
|
||||
|
||||
Should you need them, you can also use the following variables into your code:
|
||||
* cr: cursor to the database
|
||||
* uid: ID of the current user
|
||||
|
||||
In any ways, the code must be legal python statements with correct indentation (if needed).
|
||||
|
||||
Example:
|
||||
sql = '''SELECT id, name, ref, date
|
||||
FROM account_move_line
|
||||
WHERE account_id IN (SELECT id FROM account_account WHERE type = 'view')
|
||||
'''
|
||||
cr.execute(sql)
|
||||
result = cr.dictfetchall()
|
||||
</pre>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_accounting_assert">
|
||||
<field name="name">Accounting Tests</field>
|
||||
<field name="res_model">accounting.assert.test</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create Accounting Test.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Accounting Tests" parent="account.menu_finance_reporting" id="menu_action_license" action="action_accounting_assert"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,3 @@
|
||||
import account_test_report
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="57.0" y1="57.0" width="481" height="728"/>
|
||||
</pageTemplate>
|
||||
</template>
|
||||
<stylesheet>
|
||||
<blockTableStyle id="Standard_Outline">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Tableau1">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table1">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,1" stop="1,1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#000000" start="0,1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#000000" start="1,1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEAFTER" colorName="#000000" start="1,0" stop="1,-1"/>
|
||||
<lineStyle kind="LINEAFTER" colorName="#000000" start="1,1" stop="1,-1"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
</initialize>
|
||||
<paraStyle name="Standard" fontName="Times-Roman"/>
|
||||
<paraStyle name="Heading" fontName="Times-Roman" fontSize="16.0" leading="20" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P10" fontName="Times-Roman" fontSize="16.0" leading="20" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Caption" fontName="Times-Roman" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Index" fontName="Times-Roman"/>
|
||||
<paraStyle name="Table Contents" fontName="Times-Roman"/>
|
||||
<images/>
|
||||
</stylesheet>
|
||||
<story>
|
||||
<para style="Heading">Accouting tests on [[ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") ]]</para>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<section>
|
||||
<para style="Standard">[[repeatIn(objects,'o')]]</para>
|
||||
<blockTable colWidths="482.0" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="Table Contents">[[ o.name ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<para style="Table Contents"><i>[[ o.desc or '' ]]</i></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="482.0" style="Tableau1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="Table Contents">[[ repeatIn(execute_code(o.code_exec), 'test_result') ]]</para>
|
||||
<para style="Table Contents">[[ test_result ]] </para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
</story>
|
||||
</document>
|
||||
@@ -0,0 +1,87 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import datetime
|
||||
import time
|
||||
from report import report_sxw
|
||||
from tools.translate import _
|
||||
#
|
||||
# Use period and Journal for selection or resources
|
||||
#
|
||||
class report_assert_account(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(report_assert_account, self).__init__(cr, uid, name, context=context)
|
||||
self.localcontext.update( {
|
||||
'time': time,
|
||||
'datetime': datetime,
|
||||
'execute_code': self.execute_code,
|
||||
})
|
||||
|
||||
def execute_code(self, code_exec):
|
||||
def reconciled_inv():
|
||||
"""
|
||||
returns the list of invoices that are set as reconciled = True
|
||||
"""
|
||||
return self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
|
||||
|
||||
def order_columns(item, cols=None):
|
||||
"""
|
||||
This function is used to display a dictionary as a string, with its columns in the order chosen.
|
||||
|
||||
:param item: dict
|
||||
:param cols: list of field names
|
||||
:returns: a list of tuples (fieldname: value) in a similar way that would dict.items() do except that the
|
||||
returned values are following the order given by cols
|
||||
:rtype: [(key, value)]
|
||||
"""
|
||||
if cols is None:
|
||||
cols = item.keys()
|
||||
return [(col, item.get(col)) for col in cols if col in item.keys()]
|
||||
|
||||
localdict = {
|
||||
'cr': self.cr,
|
||||
'uid': self.uid,
|
||||
'reconciled_inv': reconciled_inv, #specific function used in different tests
|
||||
'result': None, #used to store the result of the test
|
||||
'column_order': None, #used to choose the display order of columns (in case you are returning a list of dict)
|
||||
}
|
||||
exec code_exec in localdict
|
||||
result = localdict['result']
|
||||
column_order = localdict.get('column_order', None)
|
||||
|
||||
if not isinstance(result, (tuple, list, set)):
|
||||
result = [result]
|
||||
if not result:
|
||||
result = [_('The test was passed successfully')]
|
||||
else:
|
||||
def _format(item):
|
||||
if isinstance(item, dict):
|
||||
return ', '.join(["%s: %s" % (tup[0], tup[1]) for tup in order_columns(item, column_order)])
|
||||
else:
|
||||
return item
|
||||
result = [_(_format(rec)) for rec in result]
|
||||
|
||||
return result
|
||||
|
||||
report_sxw.report_sxw('report.account.test.assert.print', 'accounting.assert.test', 'addons/account_test/report/account_test.rml', parser=report_assert_account, header=False)
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,3 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",base.group_system,1,0,0,1
|
||||
"access_accounting_assert_test_manager","accounting.assert.test","model_accounting_assert_test",account.group_account_manager,1,0,0,0
|
||||
|
@@ -57,18 +57,17 @@ class Controller(openerp.addons.web.http.Controller):
|
||||
def signup(self, req, dbname, token, name, login, password):
|
||||
""" sign up a user (new or existing)"""
|
||||
values = {'name': name, 'login': login, 'password': password}
|
||||
return self._signup_with_values(req, dbname, token, values)
|
||||
try:
|
||||
self._signup_with_values(req, dbname, token, values)
|
||||
except SignupError, e:
|
||||
return {'error': openerp.tools.exception_to_unicode(e)}
|
||||
return {}
|
||||
|
||||
def _signup_with_values(self, req, dbname, token, values):
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
res_users = registry.get('res.users')
|
||||
try:
|
||||
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||
except SignupError, e:
|
||||
return {'error': openerp.tools.exception_to_unicode(e)}
|
||||
cr.commit()
|
||||
return {}
|
||||
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||
|
||||
@openerp.addons.web.http.httprequest
|
||||
def reset_password(self, req, dbname, login):
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
<act_window
|
||||
context="{'search_default_server_id': active_id, 'default_fetchmail_server_id': active_id}"
|
||||
id="act_server_history" name="Messages" domain="[('email_from', '!=', False), ('fetchmail_server_id', '=', active_id)]"
|
||||
res_model="mail.message" src_model="fetchmail.server"/>
|
||||
res_model="mail.mail" src_model="fetchmail.server"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -52,7 +52,7 @@ Main Features
|
||||
'fleet_data.xml',
|
||||
'fleet_board_view.xml',
|
||||
],
|
||||
'update_xml' : ['security/ir.model.access.csv'],
|
||||
'update_xml' : ['security/fleet_security.xml','security/ir.model.access.csv'],
|
||||
|
||||
'demo': ['fleet_cars.xml','fleet_demo.xml'],
|
||||
|
||||
|
||||
+29
-29
@@ -66,8 +66,8 @@ class fleet_vehicle_cost(osv.Model):
|
||||
res = {}
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
name = record.vehicle_id.name
|
||||
if record.cost_subtype.name:
|
||||
name += ' / '+ record.cost_subtype.name
|
||||
if record.cost_subtype_id.name:
|
||||
name += ' / '+ record.cost_subtype_id.name
|
||||
if record.date:
|
||||
name += ' / '+ record.date
|
||||
res[record.id] = name
|
||||
@@ -76,7 +76,7 @@ class fleet_vehicle_cost(osv.Model):
|
||||
_columns = {
|
||||
'name': fields.function(_cost_name_get_fnc, type="char", string='Name', store=True),
|
||||
'vehicle_id': fields.many2one('fleet.vehicle', 'Vehicle', required=True, help='Vehicle concerned by this log'),
|
||||
'cost_subtype': fields.many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost'),
|
||||
'cost_subtype_id': fields.many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost'),
|
||||
'amount': fields.float('Total Price'),
|
||||
'cost_type': fields.selection([('contract', 'Contract'), ('services','Services'), ('fuel','Fuel'), ('other','Other')], 'Category of the cost', help='For internal purpose only', required=True),
|
||||
'parent_id': fields.many2one('fleet.vehicle.cost', 'Parent', help='Parent cost to this current cost'),
|
||||
@@ -104,7 +104,7 @@ class fleet_vehicle_cost(osv.Model):
|
||||
if 'contract_id' in data and data['contract_id']:
|
||||
contract = self.pool.get('fleet.vehicle.log.contract').browse(cr, uid, data['contract_id'], context=context)
|
||||
data['vehicle_id'] = contract.vehicle_id.id
|
||||
data['cost_subtype'] = contract.cost_subtype.id
|
||||
data['cost_subtype_id'] = contract.cost_subtype_id.id
|
||||
data['cost_type'] = contract.cost_type
|
||||
if 'odometer' in data and not data['odometer']:
|
||||
#if received value for odometer is 0, then remove it from the data as it would result to the creation of a
|
||||
@@ -135,8 +135,8 @@ class fleet_vehicle_model(osv.Model):
|
||||
res = {}
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
name = record.modelname
|
||||
if record.brand.name:
|
||||
name = record.brand.name + ' / ' + name
|
||||
if record.brand_id.name:
|
||||
name = record.brand_id.name + ' / ' + name
|
||||
res[record.id] = name
|
||||
return res
|
||||
|
||||
@@ -157,11 +157,11 @@ class fleet_vehicle_model(osv.Model):
|
||||
_columns = {
|
||||
'name': fields.function(_model_name_get_fnc, type="char", string='Name', store=True),
|
||||
'modelname': fields.char('Model name', size=32, required=True),
|
||||
'brand': fields.many2one('fleet.vehicle.model.brand', 'Model Brand', required=True, help='Brand of the vehicle'),
|
||||
'brand_id': fields.many2one('fleet.vehicle.model.brand', 'Model Brand', required=True, help='Brand of the vehicle'),
|
||||
'vendors': fields.many2many('res.partner', 'fleet_vehicle_model_vendors', 'model_id', 'partner_id', string='Vendors'),
|
||||
'image': fields.related('brand', 'image', type="binary", string="Logo"),
|
||||
'image_medium': fields.related('brand', 'image_medium', type="binary", string="Logo"),
|
||||
'image_small': fields.related('brand', 'image_small', type="binary", string="Logo"),
|
||||
'image': fields.related('brand_id', 'image', type="binary", string="Logo"),
|
||||
'image_medium': fields.related('brand_id', 'image_medium', type="binary", string="Logo"),
|
||||
'image_small': fields.related('brand_id', 'image_small', type="binary", string="Logo"),
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ class fleet_vehicle(osv.Model):
|
||||
def _vehicle_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None):
|
||||
res = {}
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
res[record.id] = record.model_id.brand.name + '/' + record.model_id.modelname + ' / ' + record.license_plate
|
||||
res[record.id] = record.model_id.brand_id.name + '/' + record.model_id.modelname + ' / ' + record.license_plate
|
||||
return res
|
||||
|
||||
def return_action_to_open(self, cr, uid, ids, context=None):
|
||||
@@ -308,7 +308,7 @@ class fleet_vehicle(osv.Model):
|
||||
ids = self.pool.get('fleet.vehicle.log.contract').search(cr,uid,[('vehicle_id', '=', record.id), ('state', 'in', ('open', 'toclose'))], limit=1, order='expiration_date asc')
|
||||
if len(ids) > 0:
|
||||
#we display only the name of the oldest overdue/due soon contract
|
||||
name=(self.pool.get('fleet.vehicle.log.contract').browse(cr, uid, ids[0], context=context).cost_subtype.name)
|
||||
name=(self.pool.get('fleet.vehicle.log.contract').browse(cr, uid, ids[0], context=context).cost_subtype_id.name)
|
||||
|
||||
res[record.id] = {
|
||||
'contract_renewal_overdue': overdue,
|
||||
@@ -333,14 +333,14 @@ class fleet_vehicle(osv.Model):
|
||||
'company_id': fields.many2one('res.company', 'Company'),
|
||||
'license_plate': fields.char('License Plate', size=32, required=True, help='License plate number of the vehicle (ie: plate number for a car)'),
|
||||
'vin_sn': fields.char('Chassis Number', size=32, help='Unique number written on the vehicle motor (VIN/SN number)'),
|
||||
'driver': fields.many2one('res.partner', 'Driver', help='Driver of the vehicle'),
|
||||
'model_id': fields.many2one('fleet.vehicle.model', 'Model', required=True, help='Model of the vehicle'),
|
||||
'log_fuel': fields.one2many('fleet.vehicle.log.fuel', 'vehicle_id', 'Fuel Logs'),
|
||||
'driver_id': fields.many2one('res.partner', 'Driver', _idhelp='Driver of the vehicle'),
|
||||
'model_id': fields.many2one('fleet.vehicle.model', 'Model', requ_idired=True, help='Model of the vehicle'),
|
||||
'log_fuel': fields.one2many('fleet.vehicle.log.f_iduel', 'vehicle_id', 'Fuel Logs'),
|
||||
'log_services': fields.one2many('fleet.vehicle.log.services', 'vehicle_id', 'Services Logs'),
|
||||
'log_contracts': fields.one2many('fleet.vehicle.log.contract', 'vehicle_id', 'Contracts'),
|
||||
'acquisition_date': fields.date('Acquisition Date', required=False, help='Date when the vehicle has been bought'),
|
||||
'color': fields.char('Color', size=32, help='Color of the vehicle'),
|
||||
'state': fields.many2one('fleet.vehicle.state', 'State', help='Current state of the vehicle', ondelete="set null"),
|
||||
'state_id': fields.many2one('fleet.vehicle.state', 'State', help='Current state of the vehicle', ondelete="set null"),
|
||||
'location': fields.char('Location', size=128, help='Location of the vehicle (garage, ...)'),
|
||||
'seats': fields.integer('Seats Number', help='Number of seats of the vehicle'),
|
||||
'doors': fields.integer('Doors Number', help='Number of doors of the vehicle'),
|
||||
@@ -366,7 +366,7 @@ class fleet_vehicle(osv.Model):
|
||||
_defaults = {
|
||||
'doors': 5,
|
||||
'odometer_unit': 'kilometers',
|
||||
'state': _get_default_state,
|
||||
'state_id': _get_default_state,
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
@@ -408,13 +408,13 @@ class fleet_vehicle(osv.Model):
|
||||
value = self.pool.get('fleet.vehicle.model').browse(cr,uid,vals['model_id'],context=context).name
|
||||
oldmodel = vehicle.model_id.name or _('None')
|
||||
changes.append(_("Model: from '%s' to '%s'") %(oldmodel, value))
|
||||
if 'driver' in vals and vehicle.driver.id != vals['driver']:
|
||||
value = self.pool.get('res.partner').browse(cr,uid,vals['driver'],context=context).name
|
||||
olddriver = (vehicle.driver.name) or _('None')
|
||||
if 'driver_id' in vals and vehicle.driver_id.id != vals['driver_id']:
|
||||
value = self.pool.get('res.partner').browse(cr,uid,vals['driver_id'],context=context).name
|
||||
olddriver = (vehicle.driver_id.name) or _('None')
|
||||
changes.append(_("Driver: from '%s' to '%s'") %(olddriver, value))
|
||||
if 'state' in vals and vehicle.state.id != vals['state']:
|
||||
value = self.pool.get('fleet.vehicle.state').browse(cr,uid,vals['state'],context=context).name
|
||||
oldstate = vehicle.state.name or _('None')
|
||||
if 'state_id' in vals and vehicle.state_id.id != vals['state_id']:
|
||||
value = self.pool.get('fleet.vehicle.state').browse(cr,uid,vals['state_id'],context=context).name
|
||||
oldstate = vehicle.state_id.name or _('None')
|
||||
changes.append(_("State: from '%s' to '%s'") %(oldstate, value))
|
||||
if 'license_plate' in vals and vehicle.license_plate != vals['license_plate']:
|
||||
old_license_plate = vehicle.license_plate or _('None')
|
||||
@@ -548,7 +548,7 @@ class fleet_vehicle_log_fuel(osv.Model):
|
||||
_defaults = {
|
||||
'purchaser_id': lambda self, cr, uid, ctx: uid,
|
||||
'date': fields.date.context_today,
|
||||
'cost_subtype': _get_default_service_type,
|
||||
'cost_subtype_id': _get_default_service_type,
|
||||
'cost_type': 'fuel',
|
||||
}
|
||||
|
||||
@@ -585,7 +585,7 @@ class fleet_vehicle_log_services(osv.Model):
|
||||
_defaults = {
|
||||
'purchaser_id': lambda self, cr, uid, ctx: uid,
|
||||
'date': fields.date.context_today,
|
||||
'cost_subtype': _get_default_service_type,
|
||||
'cost_subtype_id': _get_default_service_type,
|
||||
'cost_type': 'services'
|
||||
}
|
||||
|
||||
@@ -630,7 +630,7 @@ class fleet_vehicle_log_contract(osv.Model):
|
||||
'amount': contract.cost_generated,
|
||||
'date': startdate.strftime(tools.DEFAULT_SERVER_DATE_FORMAT),
|
||||
'vehicle_id': contract.vehicle_id.id,
|
||||
'cost_subtype': contract.cost_subtype.id,
|
||||
'cost_subtype_id': contract.cost_subtype_id.id,
|
||||
'contract_id': contract.id,
|
||||
'auto_generated': True
|
||||
}
|
||||
@@ -664,8 +664,8 @@ class fleet_vehicle_log_contract(osv.Model):
|
||||
res = {}
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
name = record.vehicle_id.name
|
||||
if record.cost_subtype.name:
|
||||
name += ' / '+ record.cost_subtype.name
|
||||
if record.cost_subtype_id.name:
|
||||
name += ' / '+ record.cost_subtype_id.name
|
||||
if record.date:
|
||||
name += ' / '+ record.date
|
||||
res[record.id] = name
|
||||
@@ -789,7 +789,7 @@ class fleet_vehicle_log_contract(osv.Model):
|
||||
'state':'open',
|
||||
'expiration_date': lambda self, cr, uid, ctx: self.compute_next_year_date(fields.date.context_today(self, cr, uid, context=ctx)),
|
||||
'cost_frequency': 'no',
|
||||
'cost_subtype': _get_default_contract_type,
|
||||
'cost_subtype_id': _get_default_contract_type,
|
||||
'cost_type': 'contract',
|
||||
}
|
||||
|
||||
|
||||
@@ -135,17 +135,20 @@
|
||||
<menuitem id="menu_fleet_dashboard"
|
||||
parent="base.menu_reporting_dashboard"
|
||||
action="open_board_fleet"
|
||||
sequence="50"/>
|
||||
sequence="50"
|
||||
groups="group_fleet_user"/>
|
||||
|
||||
<menuitem name="Fleet" parent="base.menu_reporting" id="menu_fleet_reporting" sequence="50" />
|
||||
<menuitem name="Fleet" parent="base.menu_reporting" id="menu_fleet_reporting" sequence="50" groups="group_fleet_manager"/>
|
||||
|
||||
<menuitem id="menu_fleet_reporting_costs"
|
||||
parent="menu_fleet_reporting"
|
||||
action="action_fleet_reporting_costs"
|
||||
sequence="1"/>
|
||||
sequence="1"
|
||||
groups="group_fleet_manager"/>
|
||||
<menuitem id="menu_fleet_reporting_indicative_costs"
|
||||
parent="menu_fleet_reporting"
|
||||
action="action_fleet_reporting_costs_non_effective"
|
||||
sequence="2"/>
|
||||
sequence="2"
|
||||
groups="group_fleet_manager"/>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
+82
-82
@@ -3,227 +3,227 @@
|
||||
<data>
|
||||
<record id="model_corsa" model="fleet.vehicle.model">
|
||||
<field name="modelname">Corsa</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_astra" model="fleet.vehicle.model">
|
||||
<field name="modelname">Astra</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_agila" model="fleet.vehicle.model">
|
||||
<field name="modelname">Agila</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_combotour" model="fleet.vehicle.model">
|
||||
<field name="modelname">Combo Tour</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_meriva" model="fleet.vehicle.model">
|
||||
<field name="modelname">Meriva</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_astragtc" model="fleet.vehicle.model">
|
||||
<field name="modelname">AstraGTC</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_zafira" model="fleet.vehicle.model">
|
||||
<field name="modelname">Zafira</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_zafiratourer" model="fleet.vehicle.model">
|
||||
<field name="modelname">Zafira Tourer</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_insignia" model="fleet.vehicle.model">
|
||||
<field name="modelname">Insignia</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_mokka" model="fleet.vehicle.model">
|
||||
<field name="modelname">Mokka</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_antara" model="fleet.vehicle.model">
|
||||
<field name="modelname">Antara</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_ampera" model="fleet.vehicle.model">
|
||||
<field name="modelname">Ampera</field>
|
||||
<field name="brand" ref="brand_opel" />
|
||||
<field name="brand_id" ref="brand_opel" />
|
||||
</record>
|
||||
|
||||
<record id="model_a1" model="fleet.vehicle.model">
|
||||
<field name="modelname">A1</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a3" model="fleet.vehicle.model">
|
||||
<field name="modelname">A3</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a4" model="fleet.vehicle.model">
|
||||
<field name="modelname">A4</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a5" model="fleet.vehicle.model">
|
||||
<field name="modelname">A5</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a6" model="fleet.vehicle.model">
|
||||
<field name="modelname">A6</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a7" model="fleet.vehicle.model">
|
||||
<field name="modelname">A7</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_a8" model="fleet.vehicle.model">
|
||||
<field name="modelname">A8</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_q3" model="fleet.vehicle.model">
|
||||
<field name="modelname">Q3</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_q5" model="fleet.vehicle.model">
|
||||
<field name="modelname">Q5</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_q7" model="fleet.vehicle.model">
|
||||
<field name="modelname">Q7</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_tt" model="fleet.vehicle.model">
|
||||
<field name="modelname">TT</field>
|
||||
<field name="brand" ref="brand_audi" />
|
||||
<field name="brand_id" ref="brand_audi" />
|
||||
</record>
|
||||
|
||||
<record id="model_serie1" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie 1</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_serie3" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie 3</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_serie5" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie 5</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_serie6" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie 6</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_serie7" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie 7</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_seriex" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie X</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_seriez4" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie Z4</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_seriem" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie M</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_seriehybrid" model="fleet.vehicle.model">
|
||||
<field name="modelname">Serie Hybrid</field>
|
||||
<field name="brand" ref="brand_bmw" />
|
||||
<field name="brand_id" ref="brand_bmw" />
|
||||
</record>
|
||||
|
||||
<record id="model_classa" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class A</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classb" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class B</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classc" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class C</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classcl" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class CL</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classcls" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class CLS</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classe" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class E</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classm" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class M</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classgl" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class GL</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classglk" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class GLK</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classr" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class R</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classs" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class S</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classslk" model="fleet.vehicle.model">
|
||||
<field name="modelname">Class SLK</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="model_classsls" model="fleet.vehicle.model">
|
||||
<field name="modelname">SLS</field>
|
||||
<field name="brand" ref="brand_mercedes" />
|
||||
<field name="brand_id" ref="brand_mercedes" />
|
||||
</record>
|
||||
|
||||
<record id="vehicle_state_inshop" model="fleet.vehicle.state">
|
||||
@@ -253,7 +253,7 @@
|
||||
<field name="color">Black</field>
|
||||
<field name="location">Grand-Rosiere</field>
|
||||
<field name="doors">5</field>
|
||||
<field name="driver" ref="base.res_partner_address_18" />
|
||||
<field name="driver_id" ref="base.res_partner_address_18" />
|
||||
<field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
|
||||
<field name="state" ref="vehicle_state_active"/>
|
||||
<field name="odometer_unit">kilometers</field>
|
||||
@@ -268,7 +268,7 @@
|
||||
<field name="color">Red</field>
|
||||
<field name="location">Grand-Rosiere</field>
|
||||
<field name="doors">5</field>
|
||||
<field name="driver" ref="base.res_partner_address_19" />
|
||||
<field name="driver_id" ref="base.res_partner_address_19" />
|
||||
<field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
|
||||
<field name="state" ref="vehicle_state_inactive"/>
|
||||
<field name="odometer_unit">kilometers</field>
|
||||
@@ -283,7 +283,7 @@
|
||||
<field name="color">Titanium Grey</field>
|
||||
<field name="location">Grand-Rosiere</field>
|
||||
<field name="doors">3</field>
|
||||
<field name="driver" ref="base.res_partner_address_17" />
|
||||
<field name="driver_id" ref="base.res_partner_address_17" />
|
||||
<field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
|
||||
<field name="state" ref="vehicle_state_active"/>
|
||||
<field name="odometer_unit">kilometers</field>
|
||||
@@ -298,7 +298,7 @@
|
||||
<field name="color">White</field>
|
||||
<field name="location">Grand-Rosiere</field>
|
||||
<field name="doors">3</field>
|
||||
<field name="driver" ref="base.res_partner_address_16" />
|
||||
<field name="driver_id" ref="base.res_partner_address_16" />
|
||||
<field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
|
||||
<field name="state" ref="vehicle_state_active"/>
|
||||
<field name="odometer_unit">kilometers</field>
|
||||
@@ -313,7 +313,7 @@
|
||||
<field name="color">Brown</field>
|
||||
<field name="location">Grand-Rosiere</field>
|
||||
<field name="doors">5</field>
|
||||
<field name="driver" ref="base.res_partner_address_15" />
|
||||
<field name="driver_id" ref="base.res_partner_address_15" />
|
||||
<field name="acquisition_date" eval="time.strftime('%Y-%m-%d 2:00:00')" />
|
||||
<field name="state" ref="vehicle_state_active"/>
|
||||
<field name="odometer_unit">kilometers</field>
|
||||
@@ -862,7 +862,7 @@
|
||||
<record id="log_service_1" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">650</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-09-02</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">4586</field>
|
||||
@@ -873,7 +873,7 @@
|
||||
<record id="services_cost_11" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_7"/>
|
||||
<field name="cost_subtype_id" ref="type_service_7"/>
|
||||
<field name="date">2012-09-02</field>
|
||||
<field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -881,7 +881,7 @@
|
||||
<record id="services_cost_12" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_8"/>
|
||||
<field name="date">2012-09-02</field>
|
||||
<field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -889,7 +889,7 @@
|
||||
<record id="services_cost_13" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_service_9"/>
|
||||
<field name="cost_subtype_id" ref="type_service_9"/>
|
||||
<field name="date">2012-09-02</field>
|
||||
<field name="parent_id" ref="log_service_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -897,7 +897,7 @@
|
||||
<record id="log_service_2" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">350</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-11-02</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">4814</field>
|
||||
@@ -908,7 +908,7 @@
|
||||
<record id="services_cost_21" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_service_10"/>
|
||||
<field name="cost_subtype_id" ref="type_service_10"/>
|
||||
<field name="date">2012-11-02</field>
|
||||
<field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -916,7 +916,7 @@
|
||||
<record id="services_cost_22" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">150</field>
|
||||
<field name="cost_subtype" ref="type_service_11"/>
|
||||
<field name="cost_subtype_id" ref="type_service_11"/>
|
||||
<field name="date">2012-11-02</field>
|
||||
<field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -924,7 +924,7 @@
|
||||
<record id="services_cost_23" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_service_12"/>
|
||||
<field name="cost_subtype_id" ref="type_service_12"/>
|
||||
<field name="date">2012-11-02</field>
|
||||
<field name="parent_id" ref="log_service_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -932,7 +932,7 @@
|
||||
<record id="log_service_3" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_1" />
|
||||
<field name="amount">513</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-10-15</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">124</field>
|
||||
@@ -943,7 +943,7 @@
|
||||
<record id="log_service_4" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_3" />
|
||||
<field name="amount">412</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-10-08</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">20984</field>
|
||||
@@ -954,7 +954,7 @@
|
||||
<record id="log_service_5" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_4" />
|
||||
<field name="amount">275</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-09-25</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">241</field>
|
||||
@@ -965,7 +965,7 @@
|
||||
<record id="log_service_6" model="fleet.vehicle.log.services" >
|
||||
<field name="vehicle_id" ref="vehicle_5" />
|
||||
<field name="amount">302</field>
|
||||
<field name="cost_subtype" ref="type_service_service_8"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_8"/>
|
||||
<field name="date">2012-09-15</field>
|
||||
<field name="purchaser_id" ref="base.res_partner_address_18" />
|
||||
<field name="inv_ref">22513</field>
|
||||
@@ -978,7 +978,7 @@
|
||||
<field name="amount">0</field>
|
||||
<field name="cost_generated">20</field>
|
||||
<field name="cost_frequency">daily</field>
|
||||
<field name="cost_subtype" ref="type_contract_leasing"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_leasing"/>
|
||||
<field name="date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="expiration_date" eval="(DateTime.now() + timedelta(5)).strftime('%Y-%m-%d')" />
|
||||
@@ -990,7 +990,7 @@
|
||||
<record id="contract_cost_11" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_service_2"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_2"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -998,7 +998,7 @@
|
||||
<record id="contract_cost_12" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_service_3"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_3"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1006,7 +1006,7 @@
|
||||
<record id="contract_cost_13" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_2" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_contract_omnium"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_omnium"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_1_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1016,7 +1016,7 @@
|
||||
<field name="amount">0</field>
|
||||
<field name="cost_generated">150</field>
|
||||
<field name="cost_frequency">weekly</field>
|
||||
<field name="cost_subtype" ref="type_contract_leasing"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_leasing"/>
|
||||
<field name="date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="expiration_date" eval="(DateTime.now() + timedelta(-1)).strftime('%Y-%m-%d')" />
|
||||
@@ -1028,7 +1028,7 @@
|
||||
<record id="contract_cost_21" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_1" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_service_2"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_2"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1036,7 +1036,7 @@
|
||||
<record id="contract_cost_22" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_1" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_service_3"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_3"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1044,7 +1044,7 @@
|
||||
<record id="contract_cost_23" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_1" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_contract_omnium"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_omnium"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_2_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1054,7 +1054,7 @@
|
||||
<field name="amount">0</field>
|
||||
<field name="cost_generated">400</field>
|
||||
<field name="cost_frequency">monthly</field>
|
||||
<field name="cost_subtype" ref="type_contract_leasing"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_leasing"/>
|
||||
<field name="date" eval="time.strftime('%Y-01-01')"/>
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="expiration_date" eval="time.strftime('%Y-12-31')" />
|
||||
@@ -1066,7 +1066,7 @@
|
||||
<record id="contract_cost_31" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_3" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_service_2"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_2"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1074,7 +1074,7 @@
|
||||
<record id="contract_cost_32" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_3" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_service_3"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_3"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1082,7 +1082,7 @@
|
||||
<record id="contract_cost_33" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_3" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_contract_omnium"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_omnium"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_3_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1092,7 +1092,7 @@
|
||||
<field name="amount">0</field>
|
||||
<field name="cost_generated">4000</field>
|
||||
<field name="cost_frequency">yearly</field>
|
||||
<field name="cost_subtype" ref="type_contract_leasing"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_leasing"/>
|
||||
<field name="date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')" />
|
||||
<field name="expiration_date" eval="time.strftime('%Y-12-31')" />
|
||||
@@ -1104,7 +1104,7 @@
|
||||
<record id="contract_cost_41" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_4" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_service_2"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_2"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1112,7 +1112,7 @@
|
||||
<record id="contract_cost_42" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_4" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_service_3"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_3"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1120,7 +1120,7 @@
|
||||
<record id="contract_cost_43" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_4" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_contract_omnium"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_omnium"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_4_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1130,7 +1130,7 @@
|
||||
<field name="amount">17000</field>
|
||||
<field name="cost_generated">0</field>
|
||||
<field name="cost_frequency">no</field>
|
||||
<field name="cost_subtype" ref="type_contract_leasing"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_leasing"/>
|
||||
<field name="date" eval="time.strftime('2012-01-01')" />
|
||||
<field name="start_date" eval="time.strftime('2012-01-01')" />
|
||||
<field name="expiration_date" eval="time.strftime('2016-12-31')" />
|
||||
@@ -1142,7 +1142,7 @@
|
||||
<record id="contract_cost_51" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_5" />
|
||||
<field name="amount">50</field>
|
||||
<field name="cost_subtype" ref="type_service_service_2"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_2"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1150,7 +1150,7 @@
|
||||
<record id="contract_cost_52" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_5" />
|
||||
<field name="amount">25</field>
|
||||
<field name="cost_subtype" ref="type_service_service_3"/>
|
||||
<field name="cost_subtype_id" ref="type_service_service_3"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
|
||||
</record>
|
||||
@@ -1158,7 +1158,7 @@
|
||||
<record id="contract_cost_53" model="fleet.vehicle.cost" >
|
||||
<field name="vehicle_id" ref="vehicle_5" />
|
||||
<field name="amount">100</field>
|
||||
<field name="cost_subtype" ref="type_contract_omnium"/>
|
||||
<field name="cost_subtype_id" ref="type_contract_omnium"/>
|
||||
<field name="date">2012-01-01</field>
|
||||
<field name="parent_id" ref="log_contract_5_fleet_vehicle_cost" />
|
||||
</record>
|
||||
|
||||
+37
-38
@@ -10,7 +10,7 @@
|
||||
<field name="image_medium" widget='image' class="oe_left oe_avatar"/>
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="brand" on_change="on_change_brand(brand)"/>
|
||||
<field name="brand_id" on_change="on_change_brand(brand_id)"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="modelname" />
|
||||
@@ -30,7 +30,7 @@
|
||||
<field name="model">fleet.vehicle.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Models" version="7.0">
|
||||
<field name="brand" />
|
||||
<field name="brand_id" />
|
||||
<field name="modelname" />
|
||||
</tree>
|
||||
</field>
|
||||
@@ -135,7 +135,7 @@
|
||||
</record>
|
||||
|
||||
<record model='ir.actions.act_window' id='fleet_vehicle_state_act'>
|
||||
<field name="name">States of Vehicle</field>
|
||||
<field name="name">Vehicle Status</field>
|
||||
<field name="res_model">fleet.vehicle.state</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
@@ -149,11 +149,11 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Fleet" id="menu_root" sequence="110" />
|
||||
<menuitem name="Configuration" parent="menu_root" id="fleet_configuration" sequence="3" />
|
||||
<menuitem name="Fleet" id="menu_root" sequence="110" groups="group_fleet_user"/>
|
||||
<menuitem name="Configuration" parent="menu_root" id="fleet_configuration" sequence="3" groups="group_fleet_manager"/>
|
||||
<menuitem action="fleet_vehicle_model_act" parent="fleet_configuration" id="fleet_vehicle_model_menu" groups="base.group_no_one"/>
|
||||
<menuitem action="fleet_vehicle_model_brand_act" parent="fleet_configuration" id="fleet_vehicle_model_brand_menu" groups="base.group_no_one"/>
|
||||
<menuitem action="fleet_vehicle_state_act" parent="fleet_configuration" id="fleet_vehicle_state_menu" />
|
||||
<menuitem action="fleet_vehicle_state_act" parent="fleet_configuration" id="fleet_vehicle_state_menu" groups="group_fleet_manager"/>
|
||||
|
||||
<record model='ir.ui.view' id='fleet_vehicle_form'>
|
||||
<field name="name">fleet.vehicle.form</field>
|
||||
@@ -161,7 +161,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Vehicle" version="7.0">
|
||||
<header>
|
||||
<field name="state" widget="statusbar" clickable="True" />
|
||||
<field name="state_id" widget="statusbar" clickable="True" />
|
||||
</header>
|
||||
<sheet>
|
||||
<field name="image_medium" widget='image' class="oe_left oe_avatar"/>
|
||||
@@ -179,14 +179,14 @@
|
||||
</div>
|
||||
<div class="oe_right oe_button_box">
|
||||
<button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_contract_act'}" string="Contracts" help="show the contract for this vehicle" />
|
||||
<button name="act_show_log_cost" type="object" string="Costs" help="show all the costs for this vehicle" />
|
||||
<button name="act_show_log_cost" type="object" string="Costs" help="show all the costs for this vehicle" groups="fleet.group_fleet_manager"/>
|
||||
<button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_services_act'}" string="Services" help="show the services logs for this vehicle" />
|
||||
<button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_fuel_act'}" string="Fuel Logs" help="show the fuel logs for this vehicle" />
|
||||
<button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_odometer_act'}" string="Odometer Logs" help="show the odometer logs for this vehicle" />
|
||||
</div>
|
||||
<group col="2" string="General Properties">
|
||||
<group >
|
||||
<field name="driver" />
|
||||
<field name="driver_id" />
|
||||
<field name="location" />
|
||||
<field name="vin_sn" />
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
@@ -231,10 +231,10 @@
|
||||
<tree string="Vehicle" version="7.0" colors="orange:contract_renewal_due_soon and not contract_renewal_overdue;red:contract_renewal_overdue">
|
||||
<field name="license_plate" />
|
||||
<field name="model_id" />
|
||||
<field name="driver" />
|
||||
<field name="driver_id" />
|
||||
<field name="vin_sn" />
|
||||
<field name="acquisition_date" />
|
||||
<field name="state"/>
|
||||
<field name="state_id"/>
|
||||
<field name="odometer" />
|
||||
<field name="odometer_unit" />
|
||||
<field name="contract_renewal_due_soon" invisible="1"/>
|
||||
@@ -250,11 +250,10 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="All vehicles">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('license_plate','ilike',self)]" string="Vehicle"/>
|
||||
<field name="driver"/>
|
||||
<field name="driver_id"/>
|
||||
<field name="tag_ids"/>
|
||||
<field name="location"/>
|
||||
<field name="state" />
|
||||
<field name="state" />
|
||||
<field name="state_id" />
|
||||
<filter name="alert_true" domain="['|',('contract_renewal_due_soon','=',True),('contract_renewal_overdue','=',True)]" string="Has Alert(s)"/>
|
||||
</search>
|
||||
</field>
|
||||
@@ -268,9 +267,9 @@
|
||||
<kanban>
|
||||
<field name="license_plate" />
|
||||
<field name="model_id" />
|
||||
<field name="driver" />
|
||||
<field name="driver_id" />
|
||||
<field name="location" />
|
||||
<field name="state" />
|
||||
<field name="state_id" />
|
||||
|
||||
<field name="image" />
|
||||
<field name="tag_ids" />
|
||||
@@ -310,7 +309,7 @@
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<t t-if="record.driver.raw_value"><field name="driver"/></t>
|
||||
<t t-if="record.driver_id.raw_value"><field name="driver_id"/></t>
|
||||
</li>
|
||||
<li>
|
||||
<t t-if="record.location.raw_value"><field name="location"/></t>
|
||||
@@ -347,8 +346,8 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Vehicles" parent="menu_root" id="fleet_vehicles" sequence="2" />
|
||||
<menuitem action="fleet_vehicle_act" parent="fleet_vehicles" id="fleet_vehicle_menu" />
|
||||
<menuitem name="Vehicles" parent="menu_root" id="fleet_vehicles" sequence="2" groups="group_fleet_user"/>
|
||||
<menuitem action="fleet_vehicle_act" parent="fleet_vehicles" id="fleet_vehicle_menu" groups="group_fleet_user"/>
|
||||
|
||||
|
||||
|
||||
@@ -358,17 +357,17 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contract logs" version="7.0">
|
||||
<header>
|
||||
<button modifiers="{'invisible': [['state', '=', 'closed']]}" name="contract_close" states="open" type="object" class="oe_highlight" string="Terminate Contract"/>
|
||||
<button modifiers="{'invisible': [['state', '=', 'closed']]}" name="contract_close" states="toclose" type="object" class="oe_highlight" string="Terminate Contract"/>
|
||||
<button modifiers="{'invisible': [['state', 'not in', ['closed']]]}" name="contract_open" states="closed" type="object" class="oe_highlight" string="Set Contract In Progress"/>
|
||||
<button class="oe_highlight" name="act_renew_contract" type="object" string="Renew Contract" help="Create a new contract automatically with all the same informations except for the date that will start at the end of current contract" />
|
||||
<button modifiers="{'invisible': [['state', '=', 'closed']]}" name="contract_close" states="open" type="object" class="oe_highlight" string="Terminate Contract" groups="fleet.group_fleet_manager"/>
|
||||
<button modifiers="{'invisible': [['state', '=', 'closed']]}" name="contract_close" states="toclose" type="object" class="oe_highlight" string="Terminate Contract" groups="fleet.group_fleet_manager"/>
|
||||
<button modifiers="{'invisible': [['state', 'not in', ['closed']]]}" name="contract_open" states="closed" type="object" class="oe_highlight" string="Set Contract In Progress" groups="fleet.group_fleet_manager"/>
|
||||
<button class="oe_highlight" name="act_renew_contract" type="object" string="Renew Contract" help="Create a new contract automatically with all the same informations except for the date that will start at the end of current contract" groups="fleet.group_fleet_manager"/>
|
||||
<field name="state" widget="statusbar" />
|
||||
</header>
|
||||
<sheet>
|
||||
<group col="2">
|
||||
<group string="Contract details">
|
||||
<field name="vehicle_id" on_change="on_change_vehicle(vehicle_id)"/>
|
||||
<field name="cost_subtype" required="1" domain="['|',('category','=','contract'),('category','=','both')]"/>
|
||||
<field name="cost_subtype_id" required="1" domain="['|',('category','=','contract'),('category','=','both')]"/>
|
||||
<field name="amount" string="Activation Cost"/>
|
||||
<label for="cost_generated"/>
|
||||
<div>
|
||||
@@ -401,7 +400,7 @@
|
||||
<group>
|
||||
<field name="cost_ids" context="{'vehicle_id': vehicle_id}" nolabel="1" on_change="on_change_indic_cost(cost_ids)">
|
||||
<tree version="7.0" editable="bottom">
|
||||
<field name="cost_subtype" string="Service" domain="[('category','=','service')]"/>
|
||||
<field name="cost_subtype_id" string="Service" domain="[('category','=','service')]"/>
|
||||
<field name="amount" sum="Price" string="Indicative Cost" />
|
||||
</tree>
|
||||
</field>
|
||||
@@ -449,7 +448,7 @@
|
||||
<field name="expiration_date" />
|
||||
<field name="days_left" invisible="1"/>
|
||||
<field name="vehicle_id" />
|
||||
<field name="cost_subtype"/>
|
||||
<field name="cost_subtype_id"/>
|
||||
<field name="insurer_id" />
|
||||
<field name="amount" string="Activation Cost"/>
|
||||
<field name="cost_generated"/>
|
||||
@@ -491,7 +490,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="fleet_vehicle_log_contract_act" parent="fleet_vehicles" id="fleet_vehicle_log_contract_menu" />
|
||||
<menuitem action="fleet_vehicle_log_contract_act" parent="fleet_vehicles" id="fleet_vehicle_log_contract_menu" groups="group_fleet_user"/>
|
||||
|
||||
<record model='ir.ui.view' id='fleet_vehicle_odometer_form'>
|
||||
<field name="name">fleet.vehicle.odometer.form</field>
|
||||
@@ -568,7 +567,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="fleet_vehicle_odometer_act" parent="fleet_vehicles" id="fleet_vehicle_odometer_menu" />
|
||||
<menuitem action="fleet_vehicle_odometer_act" parent="fleet_vehicles" id="fleet_vehicle_odometer_menu" groups="group_fleet_user"/>
|
||||
|
||||
<record model='ir.ui.view' id='fleet_vehicle_log_fuel_form'>
|
||||
<field name="name">fleet.vehicle.log.fuel.form</field>
|
||||
@@ -657,7 +656,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="fleet_vehicle_log_fuel_act" parent="fleet_vehicles" id="fleet_vehicle_log_fuel_menu" />
|
||||
<menuitem action="fleet_vehicle_log_fuel_act" parent="fleet_vehicles" id="fleet_vehicle_log_fuel_menu" groups="group_fleet_user"/>
|
||||
|
||||
|
||||
<record model='ir.ui.view' id='fleet_vehicle_log_services_form'>
|
||||
@@ -669,7 +668,7 @@
|
||||
<group col="2">
|
||||
<group string="Services Details">
|
||||
<field name="vehicle_id" on_change="on_change_vehicle(vehicle_id)"/>
|
||||
<field name="cost_subtype" string="Service Type" domain="['|',('category','=','service'),('category','=','both')]" required="1"/>
|
||||
<field name="cost_subtype_id" string="Service Type" domain="['|',('category','=','service'),('category','=','both')]" required="1"/>
|
||||
<field name="amount" string="Price"/>
|
||||
</group>
|
||||
<group string="Odometer Details">
|
||||
@@ -691,7 +690,7 @@
|
||||
<group string="Included Services">
|
||||
<field name="cost_ids" nolabel="1">
|
||||
<tree string="Included Services" version="7.0" editable="bottom">
|
||||
<field name="cost_subtype" string="Service" domain="[('category','=','service')]"/>
|
||||
<field name="cost_subtype_id" string="Service" domain="[('category','=','service')]"/>
|
||||
<field name="amount" sum="Price" string="Cost"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -711,7 +710,7 @@
|
||||
<tree string="Services Logs">
|
||||
<field name="date" />
|
||||
<field name="vehicle_id" />
|
||||
<field name="cost_subtype"/>
|
||||
<field name="cost_subtype_id"/>
|
||||
<field name="purchaser_id"/>
|
||||
<field name="vendor_id" />
|
||||
<field name="inv_ref" />
|
||||
@@ -749,7 +748,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="fleet_vehicle_log_services_act" parent="fleet_vehicles" id="fleet_vehicle_log_services_menu" />
|
||||
<menuitem action="fleet_vehicle_log_services_act" parent="fleet_vehicles" id="fleet_vehicle_log_services_menu" groups="group_fleet_user"/>
|
||||
|
||||
<record model='ir.ui.view' id='fleet_vehicle_service_types_tree'>
|
||||
<field name="name">fleet.service.type.tree</field>
|
||||
@@ -787,7 +786,7 @@
|
||||
<field name="date"/>
|
||||
<field name="vehicle_id" />
|
||||
<field name="cost_type"/>
|
||||
<field name="cost_subtype"/>
|
||||
<field name="cost_subtype_id"/>
|
||||
<field name="amount" sum="Total Cost"/>
|
||||
<field name="parent_id" invisible="1" />
|
||||
<field name="year" invisible="1"/>
|
||||
@@ -801,7 +800,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Vehicles costs" >
|
||||
<field name="vehicle_id" />
|
||||
<field name="cost_subtype"/>
|
||||
<field name="cost_subtype_id"/>
|
||||
<field name="year"/>
|
||||
<field name="date"/>
|
||||
<field name="parent_id"/>
|
||||
@@ -811,7 +810,7 @@
|
||||
<filter name="groupby_year" context="{'group_by' : 'year'}" string="Year"/>
|
||||
<filter name="groupby_date" context="{'group_by' : 'date'}" string="Date"/>
|
||||
<filter name="groupby_cost_type" context="{'group_by' : 'cost_type'}" string="Cost Type"/>
|
||||
<filter name="groupby_cost_subtype" context="{'group_by' : 'cost_subtype'}" string="Cost Subtype"/>
|
||||
<filter name="groupby_cost_subtype_id" context="{'group_by' : 'cost_subtype_id'}" string="Cost Subtype"/>
|
||||
<filter name="groupby_vehicle_id" context="{'group_by' : 'vehicle_id'}" string="Vehicle"/>
|
||||
<filter name="groupby_parent_id" context="{'group_by' : 'parent_id'}" string="Parent"/>
|
||||
</group>
|
||||
@@ -828,7 +827,7 @@
|
||||
<group col="2" string="Cost Details">
|
||||
<group>
|
||||
<field name="vehicle_id" />
|
||||
<field name="cost_subtype"/>
|
||||
<field name="cost_subtype_id"/>
|
||||
<field name="amount"/>
|
||||
</group>
|
||||
<group>
|
||||
@@ -870,7 +869,7 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="fleet_vehicle_costs_act" parent="fleet_vehicles" id="fleet_vehicle_costs_menu" />
|
||||
<menuitem action="fleet_vehicle_costs_act" parent="fleet_vehicles" id="fleet_vehicle_costs_menu" groups="group_fleet_manager"/>
|
||||
<!--
|
||||
<record model='ir.ui.view' id='fleet_hr_employee_form'>
|
||||
<field name="name">fleet.hr.employee.form</field>
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.module.category" id="module_fleet_category">
|
||||
<field name="name">Fleet</field>
|
||||
<field name="sequence">17</field>
|
||||
</record>
|
||||
<record id="group_fleet_user" model="res.groups">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="module_fleet_category"/>
|
||||
</record>
|
||||
<record id="group_fleet_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="implied_ids" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="category_id" ref="module_fleet_category"/>
|
||||
</record>
|
||||
<record id="fleet_user_contract_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her contracts</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_contract"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
<field name="domain_force">[('cost_id.vehicle_id.driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_cost_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her costs</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_cost"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
<field name="domain_force">[('vehicle_id.driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_service_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her vehicle's services</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_services"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
<field name="domain_force">[('cost_id.vehicle_id.driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_odometer_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her vehicle's odometer</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_odometer"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="True"/>
|
||||
<field name="domain_force">[('vehicle_id.driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_fuel_log_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her vehicle's fuel log</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_fuel"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="True"/>
|
||||
<field name="domain_force">[('cost_id.vehicle_id.driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_vehicle_visibility" model="ir.rule">
|
||||
<field name="name">User can only see his/her vehicle</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
<field name="domain_force">[('driver_id','=',user.partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="fleet_user_contract_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle's contracts</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_contract"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
<record id="fleet_user_cost_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle's costs</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_cost"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
<record id="fleet_user_service_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle's services</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_services"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
<record id="fleet_user_odometer_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle's vehicle's odometer</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_odometer"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
<record id="fleet_user_fuel_log_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle's fuel log</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle_log_fuel"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
<record id="fleet_user_vehicle_visibility_manager" model="ir.rule">
|
||||
<field name="name">Manager has all rights on vehicle</field>
|
||||
<field name="model_id" ref="model_fleet_vehicle"/>
|
||||
<field name="groups" eval="[(4, ref('group_fleet_manager'))]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -1,13 +1,23 @@
|
||||
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||
fleet_vehicle_model_access_right,fleet_vehicle_model_access_right,model_fleet_vehicle_model,,1,1,1,1
|
||||
fleet_vehicle_tag_access_right,fleet_vehicle_tag_access_right,model_fleet_vehicle_tag,,1,1,1,1
|
||||
fleet_vehicle_state_access_right,fleet_vehicle_state_access_right,model_fleet_vehicle_state,,1,1,1,1
|
||||
fleet_vehicle_odometer_access_right,fleet_vehicle_odometer_access_right,model_fleet_vehicle_odometer,,1,1,1,1
|
||||
fleet_vehicle_model_brand_access_right,fleet_vehicle_model_brand_access_right,model_fleet_vehicle_model_brand,,1,1,1,1
|
||||
fleet_vehicle_access_right,fleet_vehicle_access_right,model_fleet_vehicle,,1,1,1,1
|
||||
fleet_vehicle_log_fuel_access_right,fleet_vehicle_log_fuel_access_right,model_fleet_vehicle_log_fuel,,1,1,1,1
|
||||
fleet_vehicle_log_services_access_right,fleet_vehicle_log_services_access_right,model_fleet_vehicle_log_services,,1,1,1,1
|
||||
fleet_vehicle_log_contract_access_right,fleet_vehicle_log_contract_access_right,model_fleet_vehicle_log_contract,,1,1,1,1
|
||||
fleet_service_type_access_right,fleet_service_type_access_right,model_fleet_service_type,,1,1,1,1
|
||||
access_fleet_vehicle_cost,access_fleet_vehicle_cost,model_fleet_vehicle_cost,,1,1,1,1
|
||||
access_fleet_contract_state,access_fleet_contract_state,model_fleet_contract_state,,1,1,1,1
|
||||
fleet_vehicle_model_access_right_user,fleet_vehicle_model_access_right,model_fleet_vehicle_model,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_tag_access_right_user,fleet_vehicle_tag_access_right,model_fleet_vehicle_tag,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_state_access_right_user,fleet_vehicle_state_access_right,model_fleet_vehicle_state,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_model_brand_access_right_user,fleet_vehicle_model_brand_access_right,model_fleet_vehicle_model_brand,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_access_right_user,fleet_vehicle_access_right",model_fleet_vehicle,group_fleet_user,1,1,0,0
|
||||
fleet_vehicle_log_services_access_right_user,fleet_vehicle_log_services_access_right,model_fleet_vehicle_log_services,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_log_contract_access_right_user,fleet_vehicle_log_contract_access_right,model_fleet_vehicle_log_contract,group_fleet_user,1,0,0,0
|
||||
fleet_service_type_access_right_user,fleet_service_type_access_right,model_fleet_service_type,group_fleet_user,1,0,0,0
|
||||
access_fleet_vehicle_cost_user,access_fleet_vehicle_cost,model_fleet_vehicle_cost,group_fleet_user,1,1,1,0
|
||||
access_fleet_contract_state_user,access_fleet_contract_state,model_fleet_contract_state,group_fleet_user,1,0,0,0
|
||||
fleet_vehicle_model_access_right,fleet_vehicle_model_access_right,model_fleet_vehicle_model,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_tag_access_right,fleet_vehicle_tag_access_right,model_fleet_vehicle_tag,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_state_access_right,fleet_vehicle_state_access_right,model_fleet_vehicle_state,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_odometer_access_right,fleet_vehicle_odometer_access_right,model_fleet_vehicle_odometer,group_fleet_user,1,1,1,1
|
||||
fleet_vehicle_model_brand_access_right,fleet_vehicle_model_brand_access_right,model_fleet_vehicle_model_brand,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_access_right,fleet_vehicle_access_right,model_fleet_vehicle,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_log_fuel_access_right,fleet_vehicle_log_fuel_access_right,model_fleet_vehicle_log_fuel,group_fleet_user,1,1,1,1
|
||||
fleet_vehicle_log_services_access_right,fleet_vehicle_log_services_access_right,model_fleet_vehicle_log_services,group_fleet_manager,1,1,1,1
|
||||
fleet_vehicle_log_contract_access_right,fleet_vehicle_log_contract_access_right,model_fleet_vehicle_log_contract,group_fleet_manager,1,1,1,1
|
||||
fleet_service_type_access_right,fleet_service_type_access_right,model_fleet_service_type,group_fleet_manager,1,1,1,1
|
||||
access_fleet_vehicle_cost,access_fleet_vehicle_cost,model_fleet_vehicle_cost,group_fleet_manager,1,1,1,1
|
||||
access_fleet_contract_state,access_fleet_contract_state,model_fleet_contract_state,group_fleet_manager,1,1,1,1
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 59.
|
@@ -200,12 +200,12 @@
|
||||
<filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-" />
|
||||
<field name="user_id"/>
|
||||
<field name="project_id"/>
|
||||
<field name="categ_ids"/>
|
||||
<group expand="0" string="Group By..." >
|
||||
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Contact" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
|
||||
<filter string="Version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}"/>
|
||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}"/>
|
||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}"/>
|
||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Creation Month"/>
|
||||
|
||||
Reference in New Issue
Block a user