[MERGE] trunk

bzr revid: qdp-launchpad@openerp.com-20121206164228-kjptr95apsinx7yd
This commit is contained in:
Quentin (OpenERP)
2012-12-06 17:42:28 +01:00
24 changed files with 991 additions and 175 deletions
@@ -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>
+2
View File
@@ -0,0 +1,2 @@
import account_test
import report
+47
View File
@@ -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:
+65
View File
@@ -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()
+172
View File
@@ -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>
+85
View File
@@ -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>
+3
View File
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_accounting_assert_test accounting.assert.test model_accounting_assert_test base.group_system 1 0 0 1
3 access_accounting_assert_test_manager accounting.assert.test model_accounting_assert_test account.group_account_manager 1 0 0 0
+6 -7
View File
@@ -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):
+1 -1
View File
@@ -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>
+1 -1
View File
@@ -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
View File
@@ -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',
}
+7 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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>
+109
View File
@@ -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>
+22 -12
View File
@@ -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.
+1 -1
View File
@@ -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"/>