helpdesk_workflow_template_views.xml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <odoo>
  3. <!-- List View -->
  4. <record id="helpdesk_workflow_template_view_tree" model="ir.ui.view">
  5. <field name="name">helpdesk.workflow.template.tree</field>
  6. <field name="model">helpdesk.workflow.template</field>
  7. <field name="arch" type="xml">
  8. <list string="Workflow Templates" decoration-muted="active == False">
  9. <field name="sequence" widget="handle" invisible="1"/>
  10. <field name="name"/>
  11. <field name="stage_count" string="Stages" sum="Total Stages"/>
  12. <field name="sla_count" string="SLA Policies" sum="Total SLAs"/>
  13. <field name="team_count" string="Teams Using"/>
  14. <field name="active" widget="boolean_toggle"/>
  15. </list>
  16. </field>
  17. </record>
  18. <!-- Kanban View -->
  19. <record id="helpdesk_workflow_template_view_kanban" model="ir.ui.view">
  20. <field name="name">helpdesk.workflow.template.kanban</field>
  21. <field name="model">helpdesk.workflow.template</field>
  22. <field name="arch" type="xml">
  23. <kanban default_order="name" class="o_kanban_small_column" sample="1">
  24. <field name="name"/>
  25. <field name="active"/>
  26. <field name="stage_count"/>
  27. <field name="sla_count"/>
  28. <field name="team_count"/>
  29. <templates>
  30. <t t-name="card">
  31. <div class="oe_kanban_card oe_kanban_global_click">
  32. <div class="o_kanban_card_header">
  33. <div class="o_kanban_card_header_title">
  34. <div class="o_primary">
  35. <field name="name" class="fw-bold fs-5"/>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="o_kanban_card_content">
  40. <div class="row mb-2">
  41. <div class="col-6">
  42. <div class="text-muted small">Stages</div>
  43. <div class="fw-bold"><field name="stage_count"/></div>
  44. </div>
  45. <div class="col-6">
  46. <div class="text-muted small">SLA Policies</div>
  47. <div class="fw-bold"><field name="sla_count"/></div>
  48. </div>
  49. </div>
  50. <div t-if="record.team_count.raw_value > 0" class="mt-2">
  51. <span class="badge bg-info">
  52. <i class="fa fa-users me-1"/>
  53. <field name="team_count"/>
  54. </span>
  55. </div>
  56. </div>
  57. </div>
  58. </t>
  59. </templates>
  60. </kanban>
  61. </field>
  62. </record>
  63. <!-- Form View -->
  64. <record id="helpdesk_workflow_template_view_form" model="ir.ui.view">
  65. <field name="name">helpdesk.workflow.template.form</field>
  66. <field name="model">helpdesk.workflow.template</field>
  67. <field name="arch" type="xml">
  68. <form string="Workflow Template">
  69. <header>
  70. <button name="action_view_teams" string="Teams Using This Template" type="object" class="oe_stat_button" icon="fa-users" invisible="team_count == 0">
  71. <field name="team_count" widget="statinfo" string="Teams"/>
  72. </button>
  73. <field name="active" widget="boolean_toggle" options="{'invisible': [('id', '=', False)]}"/>
  74. </header>
  75. <sheet>
  76. <group>
  77. <group>
  78. <field name="name" placeholder="e.g., Basic Support, Premium Support"/>
  79. <field name="description" placeholder="Describe this workflow template..."/>
  80. </group>
  81. </group>
  82. <notebook>
  83. <page string="Stages" name="stages">
  84. <field name="stage_template_ids" nolabel="1">
  85. <list string="Stages" editable="bottom" default_order="sequence">
  86. <field name="sequence" widget="handle"/>
  87. <field name="name" required="1"/>
  88. <field name="fold" widget="boolean_toggle"/>
  89. <field name="requires_customer_approval" widget="boolean_toggle" string="Requires Approval"/>
  90. <field name="description"/>
  91. </list>
  92. </field>
  93. </page>
  94. <page string="SLA Policies" name="slas">
  95. <field name="sla_template_ids" nolabel="1">
  96. <list string="SLA Policies" editable="bottom" default_order="sequence">
  97. <field name="sequence" widget="handle"/>
  98. <field name="name" required="1"/>
  99. <field name="stage_template_id" required="1" domain="[('template_id', '=', parent.id)]"/>
  100. <field name="time" widget="float_time" required="1"/>
  101. <field name="priority" widget="priority"/>
  102. <field name="exclude_stage_template_ids" widget="many2many_tags"
  103. domain="[('template_id', '=', parent.id), ('id', '!=', stage_template_id)]"
  104. string="Excluded Stages"/>
  105. <field name="tag_ids" widget="many2many_tags" optional="hide"/>
  106. </list>
  107. <form string="SLA Policy">
  108. <sheet>
  109. <group>
  110. <group>
  111. <field name="name"/>
  112. <field name="sequence"/>
  113. <field name="stage_template_id" domain="[('template_id', '=', template_id)]"/>
  114. <field name="time" widget="float_time"/>
  115. <field name="priority" widget="priority"/>
  116. </group>
  117. <group>
  118. <field name="description"/>
  119. <field name="exclude_stage_template_ids" widget="many2many_tags"
  120. domain="[('template_id', '=', template_id), ('id', '!=', stage_template_id)]"
  121. help="Stages where time spent will NOT count towards the SLA deadline. Useful for 'On Hold' or 'Waiting for Customer' stages."/>
  122. <field name="tag_ids" widget="many2many_tags"/>
  123. </group>
  124. </group>
  125. </sheet>
  126. </form>
  127. </field>
  128. </page>
  129. <page string="Form Fields" name="form_fields">
  130. <field name="field_ids" nolabel="1">
  131. <list string="Form Fields" editable="bottom" default_order="sequence">
  132. <field name="sequence" widget="handle"/>
  133. <field name="field_id"
  134. domain="[('model', '=', 'helpdesk.ticket'), ('website_form_blacklisted', '=', False)]"
  135. options="{'no_create': True, 'no_open': True}"
  136. required="1"/>
  137. <field name="field_name" readonly="1"/>
  138. <field name="field_type" readonly="1"/>
  139. <field name="required"/>
  140. <field name="model_required" invisible="1"/>
  141. <field name="label_custom" placeholder="Custom label (optional)"/>
  142. <field name="placeholder" placeholder="Placeholder text"/>
  143. <field name="default_value" placeholder="Default value"/>
  144. <field name="help_text" widget="html" placeholder="Help text (HTML)"/>
  145. <field name="rows"
  146. string="Height (Rows)"
  147. invisible="field_type not in ['text', 'html']"/>
  148. <field name="input_type"
  149. string="Input Type"
  150. invisible="field_type != 'char'"/>
  151. <field name="selection_type"
  152. string="Selection Type"
  153. invisible="field_type not in ['selection', 'many2one']"/>
  154. <field name="widget"
  155. column_invisible="1"
  156. invisible="field_type not in ['one2many', 'many2many']"/>
  157. <field name="selection_options"
  158. widget="text"
  159. column_invisible="1"
  160. placeholder='[["value1", "Label 1"], ["value2", "Label 2"]]'
  161. invisible="field_type != 'selection' or field_id.relation"/>
  162. <field name="visibility_dependency"
  163. domain="[('model', '=', 'helpdesk.ticket'), ('website_form_blacklisted', '=', False)]"
  164. options="{'no_create': True, 'no_open': True}"
  165. placeholder="Select field for visibility condition"/>
  166. <field name="visibility_comparator"
  167. placeholder="Select comparator"/>
  168. <field name="visibility_condition"
  169. placeholder="Enter value to compare"
  170. invisible="visibility_dependency_type in ['many2one', 'selection']"/>
  171. <field name="visibility_condition_m2o_id"
  172. widget="dynamic_many2one"
  173. placeholder="Select value"
  174. invisible="visibility_dependency_type != 'many2one'"
  175. options="{'no_create': True, 'no_open': True}"/>
  176. <field name="visibility_condition_selection"
  177. placeholder="Select value"
  178. invisible="visibility_dependency_type != 'selection'"/>
  179. <field name="visibility_between"
  180. placeholder="End value for range (date/datetime)"
  181. invisible="visibility_comparator not in ['between', '!between']"/>
  182. <field name="visibility_dependency_type" invisible="1"/>
  183. <field name="visibility_condition_m2o_model" invisible="1"/>
  184. </list>
  185. <form string="Form Field">
  186. <sheet>
  187. <group>
  188. <group string="Field Configuration">
  189. <field name="field_id" required="1"/>
  190. <field name="sequence"/>
  191. <field name="label_custom"/>
  192. <field name="required"/>
  193. <field name="model_required" readonly="1"/>
  194. </group>
  195. <group string="Display Options">
  196. <field name="placeholder"/>
  197. <field name="default_value"/>
  198. <field name="selection_type"/>
  199. <field name="rows"/>
  200. <field name="input_type"/>
  201. <field name="help_text" widget="html"/>
  202. </group>
  203. </group>
  204. <group string="Visibility Conditions" col="4">
  205. <field name="visibility_dependency"/>
  206. <field name="visibility_comparator"
  207. invisible="not visibility_dependency"/>
  208. <field name="visibility_condition"
  209. invisible="not visibility_dependency"/>
  210. <field name="visibility_between"
  211. invisible="visibility_comparator not in ['between', '!between']"/>
  212. </group>
  213. </sheet>
  214. </form>
  215. </field>
  216. </page>
  217. <page string="Documentation" name="documentation">
  218. <field name="documentation_html" readonly="1" nolabel="1"/>
  219. </page>
  220. </notebook>
  221. </sheet>
  222. </form>
  223. </field>
  224. </record>
  225. <!-- Search View -->
  226. <record id="helpdesk_workflow_template_view_search" model="ir.ui.view">
  227. <field name="name">helpdesk.workflow.template.search</field>
  228. <field name="model">helpdesk.workflow.template</field>
  229. <field name="arch" type="xml">
  230. <search string="Workflow Templates">
  231. <field name="name" string="Template Name"/>
  232. <filter string="Active" name="active" domain="[('active', '=', True)]"/>
  233. <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
  234. <separator/>
  235. <filter string="Has Stages" name="has_stages" domain="[('stage_template_ids', '!=', False)]"/>
  236. <filter string="Has SLAs" name="has_slas" domain="[('sla_template_ids', '!=', False)]"/>
  237. <group expand="0" string="Group By">
  238. <filter string="Active" name="group_active" context="{'group_by': 'active'}"/>
  239. </group>
  240. </search>
  241. </field>
  242. </record>
  243. <!-- Action -->
  244. <record id="helpdesk_workflow_template_action" model="ir.actions.act_window">
  245. <field name="name">Workflow Templates</field>
  246. <field name="res_model">helpdesk.workflow.template</field>
  247. <field name="view_mode">kanban,list,form</field>
  248. <field name="context">{'search_default_active': 1}</field>
  249. <field name="help" type="html">
  250. <p class="o_view_nocontent_smiling_face">
  251. Create your first workflow template!
  252. </p>
  253. <p>
  254. Workflow templates allow you to quickly set up stages and SLA policies for helpdesk teams.
  255. Create a template with predefined stages and SLAs, then apply it to any team with one click.
  256. </p>
  257. </field>
  258. </record>
  259. <!-- Menu -->
  260. <menuitem id="menu_helpdesk_workflow_template"
  261. name="Workflow Templates"
  262. parent="helpdesk.helpdesk_menu_config"
  263. action="helpdesk_workflow_template_action"
  264. sequence="30"/>
  265. </odoo>