hr_efficiency_views.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <odoo>
  3. <data>
  4. <!-- Tree View -->
  5. <record id="view_hr_efficiency_tree" model="ir.ui.view">
  6. <field name="name">hr.efficiency.tree</field>
  7. <field name="model">hr.efficiency</field>
  8. <field name="arch" type="xml">
  9. <list string="Employee Efficiency">
  10. <field name="month_year"/>
  11. <field name="employee_id"/>
  12. <field name="company_id" groups="base.group_multi_company"/>
  13. <field name="calculation_date"/>
  14. <field name="available_hours" sum="Total Available"/>
  15. <field name="planned_hours" sum="Total Planned"/>
  16. <field name="planned_billable_hours" sum="Total Planned Billable"/>
  17. <field name="planned_non_billable_hours" sum="Total Planned Non-Billable"/>
  18. <field name="actual_billable_hours" sum="Total Actual Billable"/>
  19. <field name="actual_non_billable_hours" sum="Total Actual Non-Billable"/>
  20. <field name="total_actual_hours" sum="Total Actual"/>
  21. <field name="expected_hours_to_date" sum="Total Expected"/>
  22. <field name="overall_efficiency_display" widget="badge"
  23. decoration-danger="overall_efficiency_display == '0.00' or overall_efficiency &lt; 80"
  24. decoration-success="overall_efficiency >= 90"
  25. decoration-warning="overall_efficiency >= 80 and overall_efficiency &lt; 90"/>
  26. </list>
  27. </field>
  28. </record>
  29. <!-- Form View -->
  30. <record id="view_hr_efficiency_form" model="ir.ui.view">
  31. <field name="name">hr.efficiency.form</field>
  32. <field name="model">hr.efficiency</field>
  33. <field name="arch" type="xml">
  34. <form string="Employee Efficiency">
  35. <sheet>
  36. <div class="oe_title">
  37. <h1>
  38. <field name="display_name" readonly="1"/>
  39. </h1>
  40. </div>
  41. <group>
  42. <group>
  43. <field name="month_year"/>
  44. <field name="employee_id"/>
  45. <field name="company_id" groups="base.group_multi_company"/>
  46. <field name="calculation_date"/>
  47. </group>
  48. <group>
  49. <!-- Dynamic indicator fields will be added here -->
  50. <field name="overall_efficiency" widget="badge"
  51. decoration-danger="overall_efficiency_display == '0.00' or overall_efficiency &lt; 80"
  52. decoration-success="overall_efficiency >= 90"
  53. decoration-warning="overall_efficiency >= 80 and overall_efficiency &lt; 90"/>
  54. </group>
  55. </group>
  56. <notebook>
  57. <page string="Available Hours" name="available">
  58. <group>
  59. <field name="available_hours" widget="float_time"/>
  60. </group>
  61. </page>
  62. <page string="Planned Hours" name="planned">
  63. <group>
  64. <field name="planned_hours" widget="float_time"/>
  65. <field name="planned_billable_hours" widget="float_time"/>
  66. <field name="planned_non_billable_hours" widget="float_time"/>
  67. </group>
  68. </page>
  69. <page string="Actual Hours" name="actual">
  70. <group>
  71. <field name="actual_billable_hours" widget="float_time"/>
  72. <field name="actual_non_billable_hours" widget="float_time"/>
  73. <field name="total_actual_hours" widget="float_time"/>
  74. <field name="expected_hours_to_date" widget="float_time"/>
  75. </group>
  76. </page>
  77. </notebook>
  78. </sheet>
  79. </form>
  80. </field>
  81. </record>
  82. <!-- Search View -->
  83. <record id="view_hr_efficiency_search" model="ir.ui.view">
  84. <field name="name">hr.efficiency.search</field>
  85. <field name="model">hr.efficiency</field>
  86. <field name="arch" type="xml">
  87. <search string="Search Efficiency">
  88. <field name="employee_id"/>
  89. <field name="month_year"/>
  90. <field name="company_id" groups="base.group_multi_company"/>
  91. <!-- Filtros de indicadores -->
  92. <filter string="High Overall Efficiency" name="high_overall_efficiency" domain="[('overall_efficiency', '>=', 90)]"/>
  93. <!-- Filtros de tipo de proyecto -->
  94. <separator/>
  95. <filter string="Proyectos Facturables" name="billable_projects" domain="[('planned_billable_hours', '>', 0)]"/>
  96. <filter string="Proyectos No Facturables" name="non_billable_projects" domain="[('planned_non_billable_hours', '>', 0)]"/>
  97. <!-- Filtros de fecha dinámicos -->
  98. <separator/>
  99. <filter string="2 Meses Atrás" name="two_months_ago" domain="[('month_year', '=', (context_today() - relativedelta(months=2)).strftime('%Y-%m'))]"/>
  100. <filter string="Mes Anterior" name="last_month" domain="[('month_year', '=', (context_today() - relativedelta(months=1)).strftime('%Y-%m'))]"/>
  101. <filter string="Mes Actual" name="current_month" domain="[('month_year', '=', context_today().strftime('%Y-%m'))]"/>
  102. <filter string="Próximo Mes" name="next_month" domain="[('month_year', '=', (context_today() + relativedelta(months=1)).strftime('%Y-%m'))]"/>
  103. <filter string="2 Meses Adelante" name="two_months_ahead" domain="[('month_year', '=', (context_today() + relativedelta(months=2)).strftime('%Y-%m'))]"/>
  104. <!-- Filtros de trimestres dinámicos -->
  105. <separator/>
  106. <filter string="Trimestre Actual" name="current_quarter" domain="[('month_year', 'in', [(context_today() + relativedelta(month=((context_today().month-1)//3)*3+1, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(month=((context_today().month-1)//3)*3+2, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(month=((context_today().month-1)//3)*3+3, day=1)).strftime('%Y-%m')])]"/>
  107. <filter string="Trimestre Anterior" name="last_quarter" domain="[('month_year', 'in', [(context_today() + relativedelta(months=-3, month=((context_today().month-1)//3)*3+1, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(months=-3, month=((context_today().month-1)//3)*3+2, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(months=-3, month=((context_today().month-1)//3)*3+3, day=1)).strftime('%Y-%m')])]"/>
  108. <filter string="Próximo Trimestre" name="next_quarter" domain="[('month_year', 'in', [(context_today() + relativedelta(months=3, month=((context_today().month-1)//3)*3+1, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(months=3, month=((context_today().month-1)//3)*3+2, day=1)).strftime('%Y-%m'), (context_today() + relativedelta(months=3, month=((context_today().month-1)//3)*3+3, day=1)).strftime('%Y-%m')])]"/>
  109. <!-- Filtros de años dinámicos -->
  110. <separator/>
  111. <filter string="Año Anterior" name="last_year" domain="[('month_year', 'like', (context_today() - relativedelta(years=1)).strftime('%Y-'))]"/>
  112. <filter string="Año Actual" name="current_year" domain="[('month_year', 'like', context_today().strftime('%Y-'))]"/>
  113. <filter string="Próximo Año" name="next_year" domain="[('month_year', 'like', (context_today() + relativedelta(years=1)).strftime('%Y-'))]"/>
  114. <!-- Filtro de archivado -->
  115. <separator/>
  116. <filter string="Archivado" name="archived" domain="[('active', '=', False)]"/>
  117. <filter string="No Archivado" name="not_archived" domain="[('active', '=', True)]"/>
  118. <group expand="0" string="Group By">
  119. <filter string="Employee" name="group_employee" context="{'group_by': 'employee_id'}"/>
  120. <filter string="Month" name="group_month" context="{'group_by': 'month_year'}"/>
  121. <filter string="Company" name="group_company" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
  122. </group>
  123. </search>
  124. </field>
  125. </record>
  126. <!-- Action -->
  127. <record id="action_hr_efficiency" model="ir.actions.act_window">
  128. <field name="name">Employee Efficiency</field>
  129. <field name="res_model">hr.efficiency</field>
  130. <field name="view_mode">list,form</field>
  131. <field name="view_id" ref="view_hr_efficiency_list_inherited"/>
  132. <field name="search_view_id" ref="view_hr_efficiency_search"/>
  133. <field name="context">{'search_default_current_month': 1}</field>
  134. <field name="help" type="html">
  135. <p class="o_view_nocontent_empty_folder">
  136. No efficiency records found!
  137. </p><p>
  138. Create efficiency records by running the calculation wizard or wait for the automatic weekly calculation.
  139. </p>
  140. </field>
  141. </record>
  142. <!-- Menu - REMOVED: Now only in Planning -->
  143. <!-- <menuitem id="menu_hr_efficiency"
  144. name="Efficiency"
  145. parent="hr.menu_hr_root"
  146. action="action_hr_efficiency"
  147. sequence="50"
  148. groups="hr.group_hr_user"/> -->
  149. </data>
  150. </odoo>