[IMP] better useability

bzr revid: fp@tinyerp.com-20101012215940-yvnh0sog8voxiz85
This commit is contained in:
Fabien Pinckaers 2010-10-12 23:59:40 +02:00
parent a2bd94fb41
commit b3a6611ee0
27 changed files with 144 additions and 442 deletions

View File

@ -45,7 +45,7 @@
<field name="account_type"/> <field name="account_type"/>
<field name="currency_id" widget="selection" groups="base.group_extended"/> <field name="currency_id" widget="selection" groups="base.group_extended"/>
</form> </form>
<tree editable="bottom" string=""> <tree editable="bottom" string="Your bank and cash accounts">
<field name="acc_name"/> <field name="acc_name"/>
<field name="account_type"/> <field name="account_type"/>
<field name="currency_id" widget="selection" groups="base.group_extended"/> <field name="currency_id" widget="selection" groups="base.group_extended"/>

View File

@ -187,7 +187,7 @@ class account_analytic_account(osv.osv):
'credit': fields.function(_credit_calc, method=True, type='float', string='Credit'), 'credit': fields.function(_credit_calc, method=True, type='float', string='Credit'),
'quantity': fields.function(_quantity_calc, method=True, type='float', string='Quantity'), 'quantity': fields.function(_quantity_calc, method=True, type='float', string='Quantity'),
'quantity_max': fields.float('Maximum Quantity', help='Sets the higher limit of quantity of hours.'), 'quantity_max': fields.float('Maximum Quantity', help='Sets the higher limit of quantity of hours.'),
'partner_id': fields.many2one('res.partner', 'Associated Partner'), 'partner_id': fields.many2one('res.partner', 'Partner'),
'contact_id': fields.many2one('res.partner.address', 'Contact'), 'contact_id': fields.many2one('res.partner.address', 'Contact'),
'user_id': fields.many2one('res.users', 'Account Manager'), 'user_id': fields.many2one('res.users', 'Account Manager'),
'date_start': fields.date('Date Start'), 'date_start': fields.date('Date Start'),

View File

@ -7,7 +7,7 @@
name="Human Resources" name="Human Resources"
parent="base.dashboard"/> parent="base.dashboard"/>
<!-- This board view will be complete by other hr_* modules--> <!-- This board view will be complete by other hr_* modules-->
<record id="board_hr_form" model="ir.ui.view"> <record id="board_hr_form" model="ir.ui.view">
<field name="name">board.hr.form</field> <field name="name">board.hr.form</field>
<field name="model">board.board</field> <field name="model">board.board</field>

View File

@ -97,7 +97,7 @@ class hr_job(osv.osv):
'requirements': fields.text('Requirements'), 'requirements': fields.text('Requirements'),
'department_id': fields.many2one('hr.department', 'Department'), 'department_id': fields.many2one('hr.department', 'Department'),
'company_id': fields.many2one('res.company', 'Company'), 'company_id': fields.many2one('res.company', 'Company'),
'state': fields.selection([('open', 'Open'),('old', 'Old'),('recruit', 'In Recruitement')], 'State', readonly=True, required=True), 'state': fields.selection([('open', 'In Position'),('old', 'Old'),('recruit', 'In Recruitement')], 'State', readonly=True, required=True),
} }
_defaults = { _defaults = {
'expected_employees': 1, 'expected_employees': 1,

View File

@ -340,10 +340,10 @@
</page> </page>
</notebook> </notebook>
<group col="6" colspan="4"> <group col="6" colspan="4">
<field name="state"/> <field name="state"/>
<button name="job_recruitement" string="In Recruitement" states="open" type="object" icon="gtk-go-forward"/> <button name="job_recruitement" string="In Recruitement" states="open" type="object" icon="gtk-go-forward"/>
<button name="job_open" string="Open" states="old,recruit" type="object" icon="terp-camera_test"/> <button name="job_open" string="In Position" states="old,recruit" type="object" icon="terp-camera_test"/>
<button name="job_old" string="Old" states="open,recruit" type="object" icon="gtk-cancel"/> <button name="job_old" string="Mark as Old" states="open,recruit" type="object" icon="gtk-cancel"/>
</group> </group>
</form> </form>
</field> </field>

View File

@ -48,10 +48,6 @@ class hr_installer(osv.osv_memory):
'hr_payroll_account': fields.boolean('Payroll Accounting', 'hr_payroll_account': fields.boolean('Payroll Accounting',
help="Generic Payroll system Integrated with Accountings."), help="Generic Payroll system Integrated with Accountings."),
} }
_defaults = {
'hr_holidays': True,
'hr_expense': True,
}
hr_installer() hr_installer()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -52,11 +52,11 @@
<search string="Hr Attendance Search"> <search string="Hr Attendance Search">
<filter icon="terp-stock_align_left_24" string="My Attendances" domain="[('employee_id.user_id.id', '=', uid)]" /> <filter icon="terp-stock_align_left_24" string="My Attendances" domain="[('employee_id.user_id.id', '=', uid)]" />
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter icon="terp-go-today" string="Today" domain="[('name::date','=',current_date)]" /> <filter icon="terp-go-today" string="Today" name="today" domain="[('name::date','=',current_date)]" />
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="employee_id" /> <field name="employee_id"/>
<field name="name" /> <field name="name"/>
<field name="action" /> <field name="action"/>
<newline/> <newline/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter name="employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/> <filter name="employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
@ -72,7 +72,7 @@
<field name="res_model">hr.attendance</field> <field name="res_model">hr.attendance</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="context">{"search_default_employee":1}</field> <field name="context">{"search_default_today":1}</field>
<field name="search_view_id" ref="view_hr_attendance_filter" /> <field name="search_view_id" ref="view_hr_attendance_filter" />
<field name="help">Time Tracking functionality aims to manage employee's attendances on the basis of the actions (Sign in/Sign out) performed by them. You can also link this to an attendance machine using OpenERP's webservices features.</field> <field name="help">Time Tracking functionality aims to manage employee's attendances on the basis of the actions (Sign in/Sign out) performed by them. You can also link this to an attendance machine using OpenERP's webservices features.</field>
</record> </record>
@ -81,7 +81,7 @@
<menuitem id="menu_hr_attendance" name="Attendances" parent="hr.menu_hr_root" sequence="4"/> <menuitem id="menu_hr_attendance" name="Attendances" parent="hr.menu_hr_root" sequence="4"/>
<menuitem action="open_view_attendance" id="menu_open_view_attendance" parent="menu_hr_attendance" sequence="3"/> <menuitem action="open_view_attendance" id="menu_open_view_attendance" parent="menu_hr_attendance" sequence="20"/>
<record id="edit_attendance_reason" model="ir.ui.view"> <record id="edit_attendance_reason" model="ir.ui.view">
<field name="name">hr.action.reason.form</field> <field name="name">hr.action.reason.form</field>
@ -116,7 +116,9 @@
<field name="view_id" ref="view_attendance_reason"/> <field name="view_id" ref="view_attendance_reason"/>
</record> </record>
<menuitem sequence="2" id="hr.menu_open_view_attendance_reason_new_config" parent="hr.menu_hr_configuration" name="Attendances" /> <menuitem
sequence="2" id="hr.menu_open_view_attendance_reason_new_config" parent="hr.menu_hr_configuration" name="Attendances"
groups="base.group_extended"/>
<menuitem action="open_view_attendance_reason" id="menu_open_view_attendance_reason" parent="hr.menu_open_view_attendance_reason_new_config"/> <menuitem action="open_view_attendance_reason" id="menu_open_view_attendance_reason" parent="hr.menu_open_view_attendance_reason_new_config"/>
<record id="hr_attendance_employee" model="ir.ui.view"> <record id="hr_attendance_employee" model="ir.ui.view">

View File

@ -14,19 +14,14 @@
<record id="board_hr_evaluation_form" model="ir.ui.view"> <record id="board_hr_evaluation_form" model="ir.ui.view">
<field name="name">board.hr.evaluation.form</field> <field name="name">board.hr.evaluation.form</field>
<field name="model">board.board</field> <field name="model">board.board</field>
<field name="inherit_id" ref="hr.board_hr_form"/> <field name="inherit_id" ref="hr.board_hr_form"/>
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="/form/hpaned/child1" position="inside"> <xpath expr="/form/hpaned/child1" position="inside">
<action colspan="4" height="220" name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining" width="510"/> <action colspan="4" height="220" name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining" width="510"/>
</xpath> </xpath>
</field> </field>
</record> </record>
<menuitem
action="hr.open_board_hr"
icon="terp-graph"
id="base.menu_hr_project"
parent="base.menu_hr_dasboard"
sequence="4"/>
</data> </data>
</openerp> </openerp>

View File

@ -20,12 +20,12 @@
<record id="board_hr_expense_form" model="ir.ui.view"> <record id="board_hr_expense_form" model="ir.ui.view">
<field name="name">board.hr.expense.form</field> <field name="name">board.hr.expense.form</field>
<field name="model">board.board</field> <field name="model">board.board</field>
<field name="inherit_id" ref="hr.board_hr_form"/> <field name="inherit_id" ref="hr.board_hr_form"/>
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="/form/hpaned/child1" position="inside"> <xpath expr="/form/hpaned/child1" position="inside">
<action colspan="4" height="220" name="%(action_my_expense)d" string="My Expenses" /> <action colspan="4" height="220" name="%(action_my_expense)d" string="My Expenses" />
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@ -168,7 +168,7 @@
<field name="name">Expenses</field> <field name="name">Expenses</field>
<field name="res_model">hr.expense.expense</field> <field name="res_model">hr.expense.expense</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="context">{"search_default_user_id":uid,"search_default_department_id": department_id,"search_default_this":1}</field> <field name="context">{"search_default_user_id":uid}</field>
<field name="search_view_id" ref="view_hr_expense_filter"/> <field name="search_view_id" ref="view_hr_expense_filter"/>
<field name="help">The OpenERP expenses management module allows you to track the full flow. Every month, the employees record their expenses. At the end of the month, their managers validates the expenses sheets which creates costs on projects/analytic accounts. The accountant validates the proposed entries and the employee can be reimbursed. You can also reinvoice the customer at the end of the flow.</field> <field name="help">The OpenERP expenses management module allows you to track the full flow. Every month, the employees record their expenses. At the end of the month, their managers validates the expenses sheets which creates costs on projects/analytic accounts. The accountant validates the proposed entries and the employee can be reimbursed. You can also reinvoice the customer at the end of the flow.</field>
</record> </record>

View File

@ -56,6 +56,7 @@
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'hr_holidays_workflow.xml', 'hr_holidays_workflow.xml',
'hr_holidays_view.xml', 'hr_holidays_view.xml',
'hr_holidays_data.xml',
'hr_holidays_wizard.xml', 'hr_holidays_wizard.xml',
'hr_holidays_report.xml', 'hr_holidays_report.xml',
'report/hr_holidays_report_view.xml', 'report/hr_holidays_report_view.xml',

View File

@ -22,36 +22,36 @@
<record id="board_hr_holidays_form" model="ir.ui.view"> <record id="board_hr_holidays_form" model="ir.ui.view">
<field name="name">board.hr.holidays.form</field> <field name="name">board.hr.holidays.form</field>
<field name="model">board.board</field> <field name="model">board.board</field>
<field name="inherit_id" ref="hr.board_hr_form"/> <field name="inherit_id" ref="hr.board_hr_form"/>
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="/form/hpaned/child1" position="inside"> <xpath expr="/form/hpaned/child1" position="inside">
<action colspan="4" height="220" name="%(action_view_holiday_status_board)d" string="My Leaves"/> <action colspan="4" height="220" name="%(action_view_holiday_status_board)d" string="My Leaves"/>
</xpath> </xpath>
</field> </field>
</record> </record>
<!-- Need to merge in above view --> <!-- Need to merge in above view -->
<record id="action_hr_holidays_leaves_by_month" model="ir.actions.act_window"> <record id="action_hr_holidays_leaves_by_month" model="ir.actions.act_window">
<field name="name">Leaves by Month</field> <field name="name">Leaves by Month</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">available.holidays.report</field> <field name="res_model">available.holidays.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph,tree</field> <field name="view_mode">graph,tree</field>
<field name="domain">[('user_id','=',uid)]</field> <field name="domain">[('user_id','=',uid)]</field>
<field name="context">{'group_by_no_leaf':1,'group_by':['month']}</field> <field name="context">{'group_by_no_leaf':1,'group_by':['month']}</field>
<field name="view_id" ref="hr_holidays.view_hr_available_holidays_report_graph"/> <field name="view_id" ref="hr_holidays.view_hr_available_holidays_report_graph"/>
</record> </record>
<record id="board_hr_holidays_leave_by_month_form" model="ir.ui.view"> <record id="board_hr_holidays_leave_by_month_form" model="ir.ui.view">
<field name="name">board.hr.holidays.leave.month.form</field> <field name="name">board.hr.holidays.leave.month.form</field>
<field name="model">board.board</field> <field name="model">board.board</field>
<field name="type">form</field> <field name="type">form</field>
<field name="inherit_id" ref="hr.board_hr_form"/> <field name="inherit_id" ref="hr.board_hr_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="/form/hpaned/child2" position="inside"> <xpath expr="/form/hpaned/child2" position="inside">
<action colspan="4" height="220" name="%(action_hr_holidays_leaves_by_month)d" string="Leaves by Month" /> <action colspan="4" height="220" name="%(action_hr_holidays_leaves_by_month)d" string="Leaves by Month" />
</xpath> </xpath>
</field> </field>
</record> </record>
</data> </data>

View File

@ -110,9 +110,9 @@ class hr_holidays_status(osv.osv):
# To do: we can add remaining_leaves_category field to display remaining leaves for particular type # To do: we can add remaining_leaves_category field to display remaining leaves for particular type
_columns = { _columns = {
'name': fields.char('Name', size=64, required=True, translate=True), 'name': fields.char('Leave Type', size=64, required=True, translate=True),
'categ_id': fields.many2one('crm.case.categ', 'Meeting Category', domain="[('object_id.model', '=', 'crm.meeting')]", help='If you link this type of leave with a category in the CRM, it will synchronize each leave asked with a case in this category, to display it in the company shared calendar for example.'), 'categ_id': fields.many2one('crm.case.categ', 'Meeting Category', domain="[('object_id.model', '=', 'crm.meeting')]", help='If you link this type of leave with a category in the CRM, it will synchronize each leave asked with a case in this category, to display it in the company shared calendar for example.'),
'color_name': fields.selection([('red', 'Red'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Departement'), 'color_name': fields.selection([('red', 'Red'),('blue','Blue'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Departement'),
'limit': fields.boolean('Allow to Override Limit', help='If you tick this checkbox, the system will allow, for this section, the employees to take more leaves than the available ones.'), 'limit': fields.boolean('Allow to Override Limit', help='If you tick this checkbox, the system will allow, for this section, the employees to take more leaves than the available ones.'),
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."), 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."),
'max_leaves': fields.function(_user_left_days, method=True, string='Maximum Leaves Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'), 'max_leaves': fields.function(_user_left_days, method=True, string='Maximum Leaves Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'),
@ -162,7 +162,7 @@ class hr_holidays(osv.osv):
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',), 'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True), 'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True),
'category_id': fields.many2one('hr.employee.category', "Category", help='Category Of employee'), 'category_id': fields.many2one('hr.employee.category', "Category", help='Category Of employee'),
'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Type', help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category'), 'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Type', help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True),
'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)') 'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)')
} }

View File

@ -0,0 +1,26 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- Casual leave -->
<record model="hr.holidays.status" id="holiday_status_cl">
<field name="name">Casual Leave</field>
<field name="double_validation">True</field>
<field name="color_name">black</field>
</record>
<!-- Legal Holidays -->
<record model="hr.holidays.status" id="holiday_status_sl">
<field name="name">Legal Holidays</field>
<field name="color_name">blue</field>
</record>
<!-- Sick leave -->
<record model="hr.holidays.status" id="holiday_status_sl">
<field name="name">Sick Leave</field>
<field name="limit">True</field>
<field name="color_name">red</field>
</record>
</data>
</openerp>

View File

@ -2,13 +2,6 @@
<openerp> <openerp>
<data noupdate="1"> <data noupdate="1">
<!-- Casual leave -->
<record model="hr.holidays.status" id="holiday_status_cl">
<field name="name">Casual Leave</field>
<field name="double_validation">True</field>
<field name="color_name">black</field>
</record>
<record model="hr.holidays" id="hr_holidays_employee1_allocation_cl"> <record model="hr.holidays" id="hr_holidays_employee1_allocation_cl">
<field name="name">Casual Leave for Fabien Pinckaers</field> <field name="name">Casual Leave for Fabien Pinckaers</field>
<field name="holiday_status_id" ref="holiday_status_cl"/> <field name="holiday_status_id" ref="holiday_status_cl"/>
@ -27,13 +20,6 @@
<field name="employee_id" ref="hr.employee1"/> <field name="employee_id" ref="hr.employee1"/>
</record> </record>
<!-- Sick leave -->
<record model="hr.holidays.status" id="holiday_status_sl">
<field name="name">Sick Leave</field>
<field name="limit">True</field>
<field name="color_name">red</field>
</record>
<record model="hr.holidays" id="hr_holidays_employee1_sl"> <record model="hr.holidays" id="hr_holidays_employee1_sl">
<field name="name">Doctor Appointment</field> <field name="name">Doctor Appointment</field>
<field name="holiday_status_id" ref="holiday_status_sl"/> <field name="holiday_status_id" ref="holiday_status_sl"/>

View File

@ -15,10 +15,15 @@
<filter icon="terp-check" domain="[('state','=','draft')]" string="To Confirm"/> <filter icon="terp-check" domain="[('state','=','draft')]" string="To Confirm"/>
<filter icon="terp-camera_test" domain="[('state','=','confirm')]" string="To Approve"/> <filter icon="terp-camera_test" domain="[('state','=','confirm')]" string="To Approve"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="This Month" icon="terp-go-month" name="This Month" <filter string="This Month" icon="terp-go-month" name="This Month"
domain="[('date_from','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date_from','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/> domain="[('date_from','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date_from','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="employee_id"/> <field name="employee_id">
<filter icon="terp-personal"
name="my_leaves"
domain="[('employee_id.user_id','=', uid)]"
help="My Leaves" />
</field>
<field name="department_id" widget="selection"> <field name="department_id" widget="selection">
<filter icon="terp-personal+" help="My Department Holidays" <filter icon="terp-personal+" help="My Department Holidays"
domain="[('department_id.manager_id','=',uid)]" /> domain="[('department_id.manager_id','=',uid)]" />
@ -32,14 +37,14 @@
</group> </group>
<newline /> <newline />
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/> <filter name="group_employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<filter string="Manager" icon="terp-personal" domain="[]" context="{'group_by':'manager_id'}"/> <filter string="Manager" icon="terp-personal" domain="[]" context="{'group_by':'manager_id'}"/>
<filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id','set_visible':True}"/> <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id','set_visible':True}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}" <filter name="group_type" string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}"
default="context.get('report', False)"/> default="context.get('report', False)"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -89,7 +94,7 @@
<field name="notes" nolabel="1" colspan="4"/> <field name="notes" nolabel="1" colspan="4"/>
<newline/> <newline/>
<field name="state" colspan="2"/> <field name="state" colspan="2"/>
<group colspan="2"> <group colspan="2" col="6">
<button string="Cancel" name="cancel" states="validate,refuse" type="workflow" icon="gtk-cancel" groups="base.group_hr_manager"/> <button string="Cancel" name="cancel" states="validate,refuse" type="workflow" icon="gtk-cancel" groups="base.group_hr_manager"/>
<button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" icon="gtk-no" groups="base.group_hr_manager"/> <button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" icon="gtk-no" groups="base.group_hr_manager"/>
<button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes" groups="base.group_hr_user,base.group_hr_manager"/> <button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes" groups="base.group_hr_user,base.group_hr_manager"/>
@ -112,7 +117,7 @@
<form string="Allocation Request"> <form string="Allocation Request">
<group col="8" colspan="4"> <group col="8" colspan="4">
<field name="name" /> <field name="name" />
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" string="Allocation Type"/> <field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" string="Allocation Type" groups="base.group_extended"/>
<group attrs="{'invisible':[('holiday_type','=','category')]}"> <group attrs="{'invisible':[('holiday_type','=','category')]}">
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')]}"/> <field name="employee_id" attrs="{'required':[('holiday_type','=','employee')]}"/>
</group> </group>
@ -269,7 +274,7 @@
<field name="res_model">hr.holidays</field> <field name="res_model">hr.holidays</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_id" ref="edit_holiday_new"/> <field name="view_id" ref="edit_holiday_new"/>
<field name="context">{"search_default_department_id": department_id}</field> <field name="context">{"search_default_department_id": department_id, "search_default_my_leaves": 1}</field>
<field name="domain">[('type','=','remove')]</field> <field name="domain">[('type','=','remove')]</field>
<field name="search_view_id" ref="view_hr_holidays_filter"/> <field name="search_view_id" ref="view_hr_holidays_filter"/>
<field name="help">Leaves requests can be recorded by employees and validated by their managers. Once a leave request is validated it appears automatically in the agenda of the employee. You can define several allowance types (paid holidays, sickness, etc) and manage allowances per type.</field> <field name="help">Leaves requests can be recorded by employees and validated by their managers. Once a leave request is validated it appears automatically in the agenda of the employee. You can define several allowance types (paid holidays, sickness, etc) and manage allowances per type.</field>
@ -303,7 +308,7 @@
<field name="name">Allocation Requests</field> <field name="name">Allocation Requests</field>
<field name="res_model">hr.holidays</field> <field name="res_model">hr.holidays</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="context">{'search_default_user_id':uid,'type':'add',"search_default_department_id": department_id}</field> <field name="context">{"search_default_my_leaves": 1,'type':'add',"search_default_department_id": department_id}</field>
<field name="domain">[('type','=','add')]</field> <field name="domain">[('type','=','add')]</field>
<field name="view_id" ref="allocation_leave_new"/> <field name="view_id" ref="allocation_leave_new"/>
<field name="search_view_id" ref="view_hr_holidays_filter"/> <field name="search_view_id" ref="view_hr_holidays_filter"/>
@ -331,7 +336,7 @@
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="view_id" eval="view_holiday_simple"/> <field name="view_id" eval="view_holiday_simple"/>
<field name="context">{'allocation_type':'company', 'report':True,"search_default_department_id": department_id}</field> <field name="context">{'search_default_group_employee': 1, 'search_default_group_type': 1}</field>
<field name="search_view_id" ref="view_hr_holidays_filter"/> <field name="search_view_id" ref="view_hr_holidays_filter"/>
</record> </record>
@ -349,12 +354,15 @@
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Leave Type"> <form string="Leave Type">
<field colspan="4" name="name" /> <group colspan="4" col="6">
<field name="limit"/> <field name="name" />
<field name="active"/> <field name="color_name"/>
<field name="categ_id" widget="selection"/> <field name="categ_id" widget="selection" groups="base.group_extended"/>
<field name="color_name"/> <newline/>
<field name="double_validation" /> <field name="limit"/>
<field name="double_validation"/>
<field name="active"/>
</group>
</form> </form>
</field> </field>
</record> </record>

View File

@ -63,7 +63,8 @@ class account_analytic_account(osv.osv):
_inherit = "account.analytic.account" _inherit = "account.analytic.account"
_columns = { _columns = {
'pricelist_id' : fields.many2one('product.pricelist', 'Sale Pricelist'), 'pricelist_id' : fields.many2one('product.pricelist', 'Sale Pricelist',
help="The product to invoice is defined on the employee form, the price will be deduced by this pricelist on the product."),
'amount_max': fields.float('Max. Invoice Price'), 'amount_max': fields.float('Max. Invoice Price'),
'amount_invoiced': fields.function(_invoiced_calc, method=True, string='Invoiced Amount', 'amount_invoiced': fields.function(_invoiced_calc, method=True, string='Invoiced Amount',
help="Total invoiced"), help="Total invoiced"),

View File

@ -35,31 +35,14 @@ class hr_timesheet_invoice_create(osv.osv_memory):
_name = 'hr.timesheet.invoice.create' _name = 'hr.timesheet.invoice.create'
_description = 'Create invoice from timesheet' _description = 'Create invoice from timesheet'
_columns = { _columns = {
'accounts': fields.many2many('account.analytic.account', 'invoice_id', 'account_id', 'Analytic Accounts', required=True),
'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'), 'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'),
'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'), 'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'),
'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'), 'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'),
'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'), 'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'),
'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'), 'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'),
} }
def _get_accounts(self, cr, uid, context=None):
if context is None:
context = {}
if not len(context['active_ids']):
return {}
#Checking whether the analytic line is invoiced or not
analytic_line_obj = self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context)
for obj_acc in analytic_line_obj:
if obj_acc.invoice_id and obj_acc.invoice_id.state !='cancel':
raise osv.except_osv(_('Warning'),_('The analytic entry "%s" is already invoiced!')%(obj_acc.name,))
cr.execute("SELECT distinct(account_id) from account_analytic_line where id IN %s",(tuple(context['active_ids']),))
account_ids = cr.fetchall()
return [x[0] for x in account_ids]
_defaults = { _defaults = {
'accounts': _get_accounts,
'date': lambda *args: 1, 'date': lambda *args: 1,
'name': lambda *args: 1 'name': lambda *args: 1
} }
@ -82,12 +65,17 @@ class hr_timesheet_invoice_create(osv.osv_memory):
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter') result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
res = mod_obj.read(cr, uid, result, ['res_id'], context=context) res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
data = self.read(cr, uid, ids, [], context=context)[0] data = self.read(cr, uid, ids, [], context=context)[0]
account_ids = data['accounts']
account_ids = {}
for line in self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context):
account_ids[line.account_id.id] = True
account_ids = account_ids.keys() #data['accounts']
for account in analytic_account_obj.browse(cr, uid, account_ids, context=context): for account in analytic_account_obj.browse(cr, uid, account_ids, context=context):
partner = account.partner_id partner = account.partner_id
if (not partner) or not (account.pricelist_id): if (not partner) or not (account.pricelist_id):
raise osv.except_osv(_('Analytic Account incomplete'), raise osv.except_osv(_('Analytic Account incomplete'),
_('Please fill in the Associate Partner and Sale Pricelist fields in the Analytic Account:\n%s') % (account.name,)) _('Please fill in the Partner or Customer and Sale Pricelist fields in the Analytic Account:\n%s') % (account.name,))
if not partner.address: if not partner.address:
raise osv.except_osv(_('Partner incomplete'), raise osv.except_osv(_('Partner incomplete'),
@ -190,7 +178,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
invoice_line_obj.create(cr, uid, curr_line, context=context) invoice_line_obj.create(cr, uid, curr_line, context=context)
cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s" ,(last_invoice, account.id, tuple(context['active_ids']))) cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s" ,(last_invoice, account.id, tuple(context['active_ids'])))
invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context) invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context)
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window') act_obj = self.pool.get('ir.actions.act_window')

View File

@ -10,21 +10,17 @@
<form string="Invoice analytic lines"> <form string="Invoice analytic lines">
<notebook colspan="4"> <notebook colspan="4">
<page string="Billing Data"> <page string="Billing Data">
<group col="4" colspan="4"> <group col="4" colspan="4">
<separator string="Do you want to show details of work in invoice ?" colspan="4"/> <separator string="Do you want to show details of work in invoice ?" colspan="4"/>
<field name="date"/> <field name="date"/>
<field name="time"/> <field name="time"/>
<field name="name"/> <field name="name"/>
<field name="price"/> <field name="price" groups="base.group_extended"/>
</group> </group>
<group col="2" colspan="4" groups="base.group_extended"> <group col="2" colspan="4" groups="base.group_extended">
<separator string="Force to use a specific product" colspan="4" /> <separator string="Force to use a specific product" colspan="4" />
<field name="product"/> <field name="product"/>
</group> </group>
</page>
<page string="Filter on Accounts" groups="base.group_extended">
<separator string="Choose accounts you want to invoice" colspan="4"/>
<field name="accounts" colspan="4" nolabel="1"/>
</page> </page>
</notebook> </notebook>
<separator colspan="4"/> <separator colspan="4"/>

View File

@ -53,7 +53,6 @@ The validation can be configured in the company:
'hr_timesheet_sheet_view.xml', 'hr_timesheet_sheet_view.xml',
'hr_timesheet_workflow.xml', 'hr_timesheet_workflow.xml',
'process/hr_timesheet_sheet_process.xml', 'process/hr_timesheet_sheet_process.xml',
'report/timesheet_report_view.xml',
'board_hr_timesheet_view.xml', 'board_hr_timesheet_view.xml',
'report/hr_timesheet_report_view.xml', 'report/hr_timesheet_report_view.xml',
'wizard/hr_timesheet_current_view.xml', 'wizard/hr_timesheet_current_view.xml',

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
<menuitem id="base.menu_hr_dasboard" name="Dashboard" parent="hr.menu_hr_reporting" sequence="0" groups="base.group_system,base.group_hr_manager,base.group_hr_user"/> <menuitem
id="base.menu_hr_dasboard" name="Dashboard" parent="hr.menu_hr_reporting"
sequence="0" groups="base.group_hr_manager"/>
<menuitem <menuitem
action="hr.open_board_hr" action="hr.open_board_hr"
icon="terp-graph" icon="terp-graph"
@ -9,16 +11,6 @@
parent="base.menu_hr_dasboard" parent="base.menu_hr_dasboard"
sequence="4"/> sequence="4"/>
<record id="action_timesheet_report_all" model="ir.actions.act_window">
<field name="name">Timesheets by Month</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">timesheet.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="domain">[('user_id','=',uid), ('month', '=' , time.strftime('%m')), ('year', '=', time.strftime('%Y'))]</field>
<field name="view_id" ref="hr_timesheet_sheet.view_timesheet_report_graph"/>
</record>
<record id="action_hr_timesheet_sheet_graph" model="ir.actions.act_window"> <record id="action_hr_timesheet_sheet_graph" model="ir.actions.act_window">
<field name="name">Timesheets</field> <field name="name">Timesheets</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
@ -28,39 +20,6 @@
<field name="view_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_graph"/> <field name="view_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_graph"/>
</record> </record>
<record id="view_employee_attendance_graph" model="ir.ui.view">
<field name="name">Employee Attendance Graph</field>
<field name="model">timesheet.report</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Employee Attendances" type="bar">
<field name="user_id" />
<field name="total_attendance" operator="+"/>
<field name="total_timesheet" operator="+"/>
</graph>
</field>
</record>
<record id="action_employee_attendance_graph" model="ir.actions.act_window">
<field name="name">Employee Attendance Graph</field>
<field name="res_model">timesheet.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_employee_attendance_graph"/>
</record>
<record id="board_hr_timesheet_form" model="ir.ui.view">
<field name="name">board.hr.timesheet.form</field>
<field name="model">board.board</field>
<field name="inherit_id" ref="hr.board_hr_manager_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/hpaned/child2" position="inside">
<action colspan="4" height="220" name="%(action_employee_attendance_graph)d" string="Employee Attendances" />
</xpath>
</field>
</record>
<record id="hr_timesheet_sheet_tree" model="ir.ui.view"> <record id="hr_timesheet_sheet_tree" model="ir.ui.view">
<field name="name">hr.timesheet.sheet.tree.simplified.board</field> <field name="name">hr.timesheet.sheet.tree.simplified.board</field>
<field name="model">hr_timesheet_sheet.sheet</field> <field name="model">hr_timesheet_sheet.sheet</field>

View File

@ -19,7 +19,5 @@
# #
############################################################################## ##############################################################################
import timesheet_report
import hr_timesheet_report import hr_timesheet_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,123 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import tools
from osv import fields,osv
class timesheet_report(osv.osv):
_name = "timesheet.report"
_description = "Timesheet"
_auto = False
_columns = {
'year': fields.char('Year',size=64,required=False, readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'name': fields.char('Description', size=64,readonly=True),
'product_id' : fields.many2one('product.product', 'Product'),
'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True),
'employee_id': fields.many2one('hr.employee', 'Employee',readonly=True),
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
'nbr': fields.integer('#Nbr',readonly=True),
'total_diff': fields.float('#Total Diff',readonly=True),
'total_timesheet': fields.float('#Total Timesheet',readonly=True),
'total_attendance': fields.float('#Total Attendance',readonly=True),
'company_id': fields.many2one('res.company', 'Company',readonly=True),
'department_id':fields.many2one('hr.department','Department',readonly=True),
'date_from': fields.date('Date from',readonly=True,),
'date_to': fields.date('Date to',readonly=True),
'date_current': fields.date('Current date', required=True),
'state' : fields.selection([
('new', 'New'),
('draft','Draft'),
('confirm','Confirmed'),
('done','Done')], 'State', readonly=True),
'quantity': fields.float('#Quantity',readonly=True),
'cost': fields.float('#Cost',readonly=True),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'timesheet_report')
cr.execute("""
create or replace view timesheet_report as (
select
min(aal.id) as id,
htss.date_current,
htss.name,
htss.date_from,
htss.date_to,
to_char(htss.date_current,'YYYY') as year,
to_char(htss.date_current,'MM') as month,
to_char(htss.date_current, 'YYYY-MM-DD') as day,
count(*) as nbr,
aal.unit_amount as quantity,
aal.amount as cost,
aal.account_id,
aal.product_id,
(SELECT sum(day.total_difference)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id
AND day.name = sheet.date_current) where sheet.id=htss.id) as total_diff,
(SELECT sum(day.total_timesheet)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id
AND day.name = sheet.date_current) where sheet.id=htss.id) as total_timesheet,
(SELECT sum(day.total_attendance)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id
AND day.name = sheet.date_current) where sheet.id=htss.id) as total_attendance,
aal.to_invoice,
aal.general_account_id,
htss.employee_id as employee_id,
htss.company_id,
htss.department_id,
htss.state
from hr_timesheet_sheet_sheet as htss
left join hr_analytic_timesheet as hat ON (hat.create_uid=htss.create_uid)
left join account_analytic_line as aal ON (hat.line_id=aal.id)
group by
to_char(htss.date_current,'YYYY'),
to_char(htss.date_current,'MM'),
to_char(htss.date_current, 'YYYY-MM-DD'),
aal.account_id,
htss.date_from,
htss.date_to,
aal.unit_amount,
aal.amount,
htss.date_current,
aal.to_invoice,
aal.product_id,
aal.general_account_id,
htss.name,
htss.company_id,
htss.state,
htss.id,
htss.department_id,
htss.employee_id
)
""")
timesheet_report()

View File

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_timesheet_report_graph" model="ir.ui.view">
<field name="name">timesheet.report.graph</field>
<field name="model">timesheet.report</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Timesheet" type="bar">
<field name="employee_id" />
<field name="quantity" operator = "+"/>
<field name="state" group = "True"/>
</graph>
</field>
</record>
<record id="view_timesheet_report_tree" model="ir.ui.view">
<field name="name">timesheet.report.tree</field>
<field name="model">timesheet.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree colors="blue:state in ('draft');black:state in ('confirm','new');gray:state in('cancel')" string="Timesheet">
<field name="date_current" invisible="1"/>
<field name="name" invisible="1"/>
<field name="employee_id" invisible="1"/>
<field name="date_from" invisible="1"/>
<field name="date_to" invisible="1"/>
<field name="state" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="to_invoice" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="account_id" invisible="1" groups="analytic.group_analytic_accounting"/>
<field name="general_account_id" invisible="1"/>
<field name="year" invisible="1"/>
<field name="day" invisible="1"/>
<field name="month" invisible="1"/>
<field name="total_attendance" sum="#Total Attendance"/>
<field name="total_timesheet" sum="#Total Timesheet"/>
<field name="total_diff" sum="#Total Diff"/>
<field name="quantity" sum="#Quantity"/>
<field name="cost" sum="#Cost"/>
</tree>
</field>
</record>
<record id="view_timesheet_report_search" model="ir.ui.view">
<field name="name">timesheet.report.search</field>
<field name="model">timesheet.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Timesheet">
<group col="10" colspan="12">
<filter icon="terp-go-year" string=" Year "
domain="[('date_current','&lt;=', time.strftime('%%Y-%%m-%%d')),('date_current','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
help="Timesheet in current year"/>
<filter icon="terp-go-month" string=" Month "
name="month"
domain="[('date_current','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date_current','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
help="Timesheet in current month"/>
<filter icon="terp-go-month"
string=" Month-1 "
domain="[('date_current','&lt;=', (datetime.date (int(time.strftime('%%Y')), datetime.date.today().month, 1) - datetime.timedelta (days = 1)).strftime('%%Y-%%m-%%d')),('date_current','&gt;',(datetime.date (int(time.strftime('%%Y')), datetime.date.today().month-1, 1)).strftime('%%Y-%%m-%%d'))]"
help="Timesheet of last month"/>
<separator orientation="vertical"/>
<filter icon="terp-document-new"
string="Draft"
domain="[('state','=','draft')]"/>
<filter icon="terp-camera_test"
string="Confirmed"
domain="[('state','=','confirm')]"/>
<filter icon="terp-dialog-close"
string="Done"
domain="[('state','=','done')]"/>
<separator orientation="vertical"/>
<field name="employee_id" />
<field name="account_id" groups="analytic.group_analytic_accounting"/>
</group>
<newline/>
<group expand="0" string="Extended Filters..." groups="base.group_extended">
<field name="general_account_id"/>
<field name="to_invoice" widget="selection"/>
<separator orientation="vertical"/>
<field name="product_id"/>
<separator orientation="vertical"/>
<field name="department_id" widget="selection"/>
<separator orientation="vertical"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<newline/>
<field name="date_to"/>
<field name="date_from"/>
</group>
<newline/>
<group expand="1" string="Group By...">
<filter string="Employee" name="Employee_id" icon="terp-personal" context="{'group_by':'employee_id'}"/>
<filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/>
<separator orientation="vertical"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<separator orientation="vertical"/>
<filter string="Type of Invoicing" icon="terp-stock_symbol-selection" context="{'group_by':'to_invoice'}"/>
<separator orientation="vertical"/>
<filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/>
<filter string="General Account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/>
<separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator orientation="vertical"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Group by day of date"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Group by month of date"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Group by year of date"/>
</group>
</search>
</field>
</record>
<record id="action_timesheet_report_stat_all" model="ir.actions.act_window">
<field name="name">Timesheet Sheet Analysis</field>
<field name="res_model">timesheet.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_month':1,'search_default_Employee_id':1,'group_by_no_leaf':1,'group_by':[]}</field>
<field name="search_view_id" ref="view_timesheet_report_search"/>
</record>
<menuitem action="action_timesheet_report_stat_all" id="menu_timesheet_report_all"
parent="hr_timesheet.menu_hr_reporting_timesheet" sequence="1" groups="base.group_hr_manager"/>
</data>
</openerp>

View File

@ -88,16 +88,10 @@
<child1> <child1>
<action colspan="4" height="100" name="%(action_view_task_tree)d" string="My Open Tasks" width="510"/> <action colspan="4" height="100" name="%(action_view_task_tree)d" string="My Open Tasks" width="510"/>
<action colspan="4" height="100" name="%(action_view_delegate_task_tree)d" string="My Delegated Tasks" width="510"/> <action colspan="4" height="100" name="%(action_view_delegate_task_tree)d" string="My Delegated Tasks" width="510"/>
</child1> </child1>
<child2> <child2>
<vpaned> <action colspan="4" height="100" name="%(project.action_project_vs_planned_total_hours_graph)d" string="My Projects: Planned vs Total Hours" />
<child1> <action colspan="4" height="100" name="%(project.action_project_vs_remaining_hours_graph)d" string="My Remaining Hours by Project" />
<action colspan="4" height="100" name="%(project.action_project_vs_planned_total_hours_graph)d" string="My Projects: Planned vs Total Hours" />
</child1>
<child2>
<action colspan="4" height="100" name="%(project.action_project_vs_remaining_hours_graph)d" string="My Remaining Hours by Project" />
</child2>
</vpaned>
</child2> </child2>
</hpaned> </hpaned>
</form> </form>

View File

@ -27,7 +27,7 @@
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Administration"> <page string="Administration">
<group col="2" colspan="2"> <group col="2" colspan="2" groups="base.group_extended">
<separator colspan="2" string="Scheduling"/> <separator colspan="2" string="Scheduling"/>
<field name="priority"/> <field name="priority"/>
<field name="active"/> <field name="active"/>
@ -67,16 +67,18 @@
</tree> </tree>
</field> </field>
</page> </page>
<page groups="base.group_extended" string="Accounting"> <page string="Billing" groups="account.group_account_invoice">
<field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1"/> <field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1" string="Customer"/>
<field domain="[('partner_id','=',partner_id)]" name="contact_id" string="Invoice Address"/> <field domain="[('partner_id','=',partner_id)]" name="contact_id" string="Invoice Address"/>
<field name="warn_customer"/> <field name="warn_customer"/>
<newline/> <newline/>
<separator colspan="2" string="Mail Header"/> <group colspan="4" col="4" groups="base.group_extended">
<separator colspan="2" string="Mail Footer"/> <separator colspan="2" string="Mail Header"/>
<field name="warn_header" nolabel="1" colspan="2"/> <separator colspan="2" string="Mail Footer"/>
<field name="warn_footer" nolabel="1" colspan="2"/> <field name="warn_header" nolabel="1" colspan="2"/>
<group col="3" colspan="4"> <field name="warn_footer" nolabel="1" colspan="2"/>
</group>
<group col="3" colspan="4" groups="base.group_extended">
<separator string="Automatic variables for headers and footer. Use exactly the same notation." colspan="4"/> <separator string="Automatic variables for headers and footer. Use exactly the same notation." colspan="4"/>
<label string="Task: %%(name)s"/> <label string="Task: %%(name)s"/>
<label string="User: %%(user_id)s"/> <label string="User: %%(user_id)s"/>

View File

@ -11,9 +11,9 @@
<group colspan="4" col="4"> <group colspan="4" col="4">
<separator colspan="4" string="Invoicing Data"/> <separator colspan="4" string="Invoicing Data"/>
<field name="pricelist_id" domain="[('type','=','sale')]" widget="selection"/> <field name="pricelist_id" domain="[('type','=','sale')]" widget="selection"/>
<field name="to_invoice" widget="selection"/> <field name="to_invoice" widget="selection" string="Invoice Task Work"/>
<field name="amount_max"/> <field name="amount_max" groups="base.group_extended"/>
<field name="amount_invoiced"/> <field name="amount_invoiced" groups="base.group_extended"/>
</group> </group>
</field> </field>
</field> </field>