[IMP] better useability
bzr revid: fp@tinyerp.com-20101012215940-yvnh0sog8voxiz85
This commit is contained in:
parent
a2bd94fb41
commit
b3a6611ee0
|
@ -45,7 +45,7 @@
|
|||
<field name="account_type"/>
|
||||
<field name="currency_id" widget="selection" groups="base.group_extended"/>
|
||||
</form>
|
||||
<tree editable="bottom" string="">
|
||||
<tree editable="bottom" string="Your bank and cash accounts">
|
||||
<field name="acc_name"/>
|
||||
<field name="account_type"/>
|
||||
<field name="currency_id" widget="selection" groups="base.group_extended"/>
|
||||
|
|
|
@ -187,7 +187,7 @@ class account_analytic_account(osv.osv):
|
|||
'credit': fields.function(_credit_calc, method=True, type='float', string='Credit'),
|
||||
'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.'),
|
||||
'partner_id': fields.many2one('res.partner', 'Associated Partner'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'contact_id': fields.many2one('res.partner.address', 'Contact'),
|
||||
'user_id': fields.many2one('res.users', 'Account Manager'),
|
||||
'date_start': fields.date('Date Start'),
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
name="Human Resources"
|
||||
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">
|
||||
<field name="name">board.hr.form</field>
|
||||
<field name="model">board.board</field>
|
||||
|
|
|
@ -97,7 +97,7 @@ class hr_job(osv.osv):
|
|||
'requirements': fields.text('Requirements'),
|
||||
'department_id': fields.many2one('hr.department', 'Department'),
|
||||
'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 = {
|
||||
'expected_employees': 1,
|
||||
|
|
|
@ -340,10 +340,10 @@
|
|||
</page>
|
||||
</notebook>
|
||||
<group col="6" colspan="4">
|
||||
<field name="state"/>
|
||||
<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_old" string="Old" states="open,recruit" type="object" icon="gtk-cancel"/>
|
||||
<field name="state"/>
|
||||
<button name="job_recruitement" string="In Recruitement" states="open" type="object" icon="gtk-go-forward"/>
|
||||
<button name="job_open" string="In Position" states="old,recruit" type="object" icon="terp-camera_test"/>
|
||||
<button name="job_old" string="Mark as Old" states="open,recruit" type="object" icon="gtk-cancel"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
@ -48,10 +48,6 @@ class hr_installer(osv.osv_memory):
|
|||
'hr_payroll_account': fields.boolean('Payroll Accounting',
|
||||
help="Generic Payroll system Integrated with Accountings."),
|
||||
}
|
||||
_defaults = {
|
||||
'hr_holidays': True,
|
||||
'hr_expense': True,
|
||||
}
|
||||
hr_installer()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -52,11 +52,11 @@
|
|||
<search string="Hr Attendance Search">
|
||||
<filter icon="terp-stock_align_left_24" string="My Attendances" domain="[('employee_id.user_id.id', '=', uid)]" />
|
||||
<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"/>
|
||||
<field name="employee_id" />
|
||||
<field name="name" />
|
||||
<field name="action" />
|
||||
<field name="employee_id"/>
|
||||
<field name="name"/>
|
||||
<field name="action"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<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="view_type">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="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>
|
||||
|
@ -81,7 +81,7 @@
|
|||
|
||||
<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">
|
||||
<field name="name">hr.action.reason.form</field>
|
||||
|
@ -116,7 +116,9 @@
|
|||
<field name="view_id" ref="view_attendance_reason"/>
|
||||
</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"/>
|
||||
|
||||
<record id="hr_attendance_employee" model="ir.ui.view">
|
||||
|
|
|
@ -14,19 +14,14 @@
|
|||
<record id="board_hr_evaluation_form" model="ir.ui.view">
|
||||
<field name="name">board.hr.evaluation.form</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="arch" type="xml">
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining" width="510"/>
|
||||
</xpath>
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining" width="510"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem
|
||||
action="hr.open_board_hr"
|
||||
icon="terp-graph"
|
||||
id="base.menu_hr_project"
|
||||
parent="base.menu_hr_dasboard"
|
||||
sequence="4"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -20,12 +20,12 @@
|
|||
<record id="board_hr_expense_form" model="ir.ui.view">
|
||||
<field name="name">board.hr.expense.form</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="arch" type="xml">
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_my_expense)d" string="My Expenses" />
|
||||
</xpath>
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_my_expense)d" string="My Expenses" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -168,7 +168,7 @@
|
|||
<field name="name">Expenses</field>
|
||||
<field name="res_model">hr.expense.expense</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="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>
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
'security/ir.model.access.csv',
|
||||
'hr_holidays_workflow.xml',
|
||||
'hr_holidays_view.xml',
|
||||
'hr_holidays_data.xml',
|
||||
'hr_holidays_wizard.xml',
|
||||
'hr_holidays_report.xml',
|
||||
'report/hr_holidays_report_view.xml',
|
||||
|
|
|
@ -22,36 +22,36 @@
|
|||
<record id="board_hr_holidays_form" model="ir.ui.view">
|
||||
<field name="name">board.hr.holidays.form</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="arch" type="xml">
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_view_holiday_status_board)d" string="My Leaves"/>
|
||||
</xpath>
|
||||
<xpath expr="/form/hpaned/child1" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_view_holiday_status_board)d" string="My Leaves"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</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">
|
||||
<field name="name">Leaves by Month</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">available.holidays.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain">[('user_id','=',uid)]</field>
|
||||
<record id="action_hr_holidays_leaves_by_month" model="ir.actions.act_window">
|
||||
<field name="name">Leaves by Month</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">available.holidays.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="domain">[('user_id','=',uid)]</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"/>
|
||||
</record>
|
||||
<record id="board_hr_holidays_leave_by_month_form" model="ir.ui.view">
|
||||
<field name="view_id" ref="hr_holidays.view_hr_available_holidays_report_graph"/>
|
||||
</record>
|
||||
<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="model">board.board</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="hr.board_hr_form"/>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="hr.board_hr_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/hpaned/child2" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_hr_holidays_leaves_by_month)d" string="Leaves by Month" />
|
||||
</xpath>
|
||||
<xpath expr="/form/hpaned/child2" position="inside">
|
||||
<action colspan="4" height="220" name="%(action_hr_holidays_leaves_by_month)d" string="Leaves by Month" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
|
|
|
@ -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
|
||||
_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.'),
|
||||
'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.'),
|
||||
'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'),
|
||||
|
@ -162,7 +162,7 @@ class hr_holidays(osv.osv):
|
|||
'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),
|
||||
'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)')
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -2,13 +2,6 @@
|
|||
<openerp>
|
||||
<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">
|
||||
<field name="name">Casual Leave for Fabien Pinckaers</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_cl"/>
|
||||
|
@ -27,13 +20,6 @@
|
|||
<field name="employee_id" ref="hr.employee1"/>
|
||||
</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">
|
||||
<field name="name">Doctor Appointment</field>
|
||||
<field name="holiday_status_id" ref="holiday_status_sl"/>
|
||||
|
|
|
@ -15,10 +15,15 @@
|
|||
<filter icon="terp-check" domain="[('state','=','draft')]" string="To Confirm"/>
|
||||
<filter icon="terp-camera_test" domain="[('state','=','confirm')]" string="To Approve"/>
|
||||
<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','<=', time.strftime('%%Y-%%m-%%d')), ('date_from','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/>
|
||||
<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">
|
||||
<filter icon="terp-personal+" help="My Department Holidays"
|
||||
domain="[('department_id.manager_id','=',uid)]" />
|
||||
|
@ -32,14 +37,14 @@
|
|||
</group>
|
||||
<newline />
|
||||
<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="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id','set_visible':True}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}"
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="group_type" string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}"
|
||||
default="context.get('report', False)"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -89,7 +94,7 @@
|
|||
<field name="notes" nolabel="1" colspan="4"/>
|
||||
<newline/>
|
||||
<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="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"/>
|
||||
|
@ -112,7 +117,7 @@
|
|||
<form string="Allocation Request">
|
||||
<group col="8" colspan="4">
|
||||
<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')]}">
|
||||
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')]}"/>
|
||||
</group>
|
||||
|
@ -269,7 +274,7 @@
|
|||
<field name="res_model">hr.holidays</field>
|
||||
<field name="view_type">form</field>
|
||||
<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="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>
|
||||
|
@ -303,7 +308,7 @@
|
|||
<field name="name">Allocation Requests</field>
|
||||
<field name="res_model">hr.holidays</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="view_id" ref="allocation_leave_new"/>
|
||||
<field name="search_view_id" ref="view_hr_holidays_filter"/>
|
||||
|
@ -331,7 +336,7 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<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"/>
|
||||
</record>
|
||||
|
||||
|
@ -349,12 +354,15 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leave Type">
|
||||
<field colspan="4" name="name" />
|
||||
<field name="limit"/>
|
||||
<field name="active"/>
|
||||
<field name="categ_id" widget="selection"/>
|
||||
<field name="color_name"/>
|
||||
<field name="double_validation" />
|
||||
<group colspan="4" col="6">
|
||||
<field name="name" />
|
||||
<field name="color_name"/>
|
||||
<field name="categ_id" widget="selection" groups="base.group_extended"/>
|
||||
<newline/>
|
||||
<field name="limit"/>
|
||||
<field name="double_validation"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -63,7 +63,8 @@ class account_analytic_account(osv.osv):
|
|||
|
||||
_inherit = "account.analytic.account"
|
||||
_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_invoiced': fields.function(_invoiced_calc, method=True, string='Invoiced Amount',
|
||||
help="Total invoiced"),
|
||||
|
|
|
@ -35,31 +35,14 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
|||
_name = 'hr.timesheet.invoice.create'
|
||||
_description = 'Create invoice from timesheet'
|
||||
_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'),
|
||||
'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'),
|
||||
'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.'),
|
||||
}
|
||||
|
||||
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 = {
|
||||
'accounts': _get_accounts,
|
||||
'date': 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')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||
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):
|
||||
partner = account.partner_id
|
||||
if (not partner) or not (account.pricelist_id):
|
||||
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:
|
||||
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)
|
||||
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')
|
||||
act_obj = self.pool.get('ir.actions.act_window')
|
||||
|
|
|
@ -10,21 +10,17 @@
|
|||
<form string="Invoice analytic lines">
|
||||
<notebook colspan="4">
|
||||
<page string="Billing Data">
|
||||
<group col="4" colspan="4">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
</group>
|
||||
<group col="2" colspan="4" groups="base.group_extended">
|
||||
<separator string="Force to use a specific product" colspan="4" />
|
||||
<field name="product"/>
|
||||
</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"/>
|
||||
<group col="4" colspan="4">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group col="2" colspan="4" groups="base.group_extended">
|
||||
<separator string="Force to use a specific product" colspan="4" />
|
||||
<field name="product"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
<separator colspan="4"/>
|
||||
|
|
|
@ -53,7 +53,6 @@ The validation can be configured in the company:
|
|||
'hr_timesheet_sheet_view.xml',
|
||||
'hr_timesheet_workflow.xml',
|
||||
'process/hr_timesheet_sheet_process.xml',
|
||||
'report/timesheet_report_view.xml',
|
||||
'board_hr_timesheet_view.xml',
|
||||
'report/hr_timesheet_report_view.xml',
|
||||
'wizard/hr_timesheet_current_view.xml',
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<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
|
||||
action="hr.open_board_hr"
|
||||
icon="terp-graph"
|
||||
|
@ -9,16 +11,6 @@
|
|||
parent="base.menu_hr_dasboard"
|
||||
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">
|
||||
<field name="name">Timesheets</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"/>
|
||||
</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">
|
||||
<field name="name">hr.timesheet.sheet.tree.simplified.board</field>
|
||||
<field name="model">hr_timesheet_sheet.sheet</field>
|
||||
|
|
|
@ -19,7 +19,5 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import timesheet_report
|
||||
import hr_timesheet_report
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -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()
|
|
@ -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','<=', time.strftime('%%Y-%%m-%%d')),('date_current','>',(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','<=', time.strftime('%%Y-%%m-%%d')), ('date_current','>',(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','<=', (datetime.date (int(time.strftime('%%Y')), datetime.date.today().month, 1) - datetime.timedelta (days = 1)).strftime('%%Y-%%m-%%d')),('date_current','>',(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>
|
|
@ -88,16 +88,10 @@
|
|||
<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_delegate_task_tree)d" string="My Delegated Tasks" width="510"/>
|
||||
</child1>
|
||||
</child1>
|
||||
<child2>
|
||||
<vpaned>
|
||||
<child1>
|
||||
<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>
|
||||
<action colspan="4" height="100" name="%(project.action_project_vs_planned_total_hours_graph)d" string="My Projects: Planned vs Total Hours" />
|
||||
<action colspan="4" height="100" name="%(project.action_project_vs_remaining_hours_graph)d" string="My Remaining Hours by Project" />
|
||||
</child2>
|
||||
</hpaned>
|
||||
</form>
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Administration">
|
||||
<group col="2" colspan="2">
|
||||
<group col="2" colspan="2" groups="base.group_extended">
|
||||
<separator colspan="2" string="Scheduling"/>
|
||||
<field name="priority"/>
|
||||
<field name="active"/>
|
||||
|
@ -67,16 +67,18 @@
|
|||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page groups="base.group_extended" string="Accounting">
|
||||
<field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1"/>
|
||||
<page string="Billing" groups="account.group_account_invoice">
|
||||
<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 name="warn_customer"/>
|
||||
<newline/>
|
||||
<separator colspan="2" string="Mail Header"/>
|
||||
<separator colspan="2" string="Mail Footer"/>
|
||||
<field name="warn_header" nolabel="1" colspan="2"/>
|
||||
<field name="warn_footer" nolabel="1" colspan="2"/>
|
||||
<group col="3" colspan="4">
|
||||
<group colspan="4" col="4" groups="base.group_extended">
|
||||
<separator colspan="2" string="Mail Header"/>
|
||||
<separator colspan="2" string="Mail Footer"/>
|
||||
<field name="warn_header" nolabel="1" colspan="2"/>
|
||||
<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"/>
|
||||
<label string="Task: %%(name)s"/>
|
||||
<label string="User: %%(user_id)s"/>
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
<group colspan="4" col="4">
|
||||
<separator colspan="4" string="Invoicing Data"/>
|
||||
<field name="pricelist_id" domain="[('type','=','sale')]" widget="selection"/>
|
||||
<field name="to_invoice" widget="selection"/>
|
||||
<field name="amount_max"/>
|
||||
<field name="amount_invoiced"/>
|
||||
<field name="to_invoice" widget="selection" string="Invoice Task Work"/>
|
||||
<field name="amount_max" groups="base.group_extended"/>
|
||||
<field name="amount_invoiced" groups="base.group_extended"/>
|
||||
</group>
|
||||
</field>
|
||||
</field>
|
||||
|
|
Loading…
Reference in New Issue