diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
| commit | 1ca3b3df3421961caec3b747a364071c80f5c7da (patch) | |
| tree | 6778a1f0f3f9b4c6e26d6d87ccde16e24da6c9d6 /sh_helpdesk/views | |
| parent | b57188be371d36d96caac4b8d65a40745c0e972c (diff) | |
initial commit
Diffstat (limited to 'sh_helpdesk/views')
25 files changed, 2771 insertions, 0 deletions
diff --git a/sh_helpdesk/views/helpdesk_alarm.xml b/sh_helpdesk/views/helpdesk_alarm.xml new file mode 100644 index 0000000..7676004 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_alarm.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="sh_helpdesk_alarm_view_form" model="ir.ui.view"> + <field name="name">sh.ticket.alarm</field> + <field name="model">sh.ticket.alarm</field> + <field name="arch" type="xml"> + <form> + <sheet> + <group> + <group> + <field name="name" force_save="1"/> + <field name="sh_remind_before" /> + <field name="sh_reminder_unit" /> + </group> + <group> + <field name="type" /> + <field name="company_id" groups="base.group_multi_company" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="sh_helpdesk_alarm_tree_view" model="ir.ui.view"> + <field name="name">sh.ticket.alarm</field> + <field name="model">sh.ticket.alarm</field> + <field name="arch" type="xml"> + <tree> + <field name="name" /> + <field name="type" /> + <field name="sh_remind_before" /> + <field name="sh_reminder_unit" /> + <field name="company_id" groups="base.group_multi_company" /> + </tree> + </field> + </record> + <record id="sh_helpdesk_alarm_action" model="ir.actions.act_window"> + <field name="name">Ticket Alarm</field> + <field name="res_model">sh.ticket.alarm</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">tree,form</field> + </record> + <menuitem id="sh_helpdesk_alarm_manu" name="Helpdesk Ticket Alarm" action="sh_helpdesk_alarm_action" parent="sh_helpdesk.helpdesk_config_menu" groups="sh_helpdesk.group_helpdesk_alarm" sequence="10" /> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/helpdesk_assets.xml b/sh_helpdesk/views/helpdesk_assets.xml new file mode 100644 index 0000000..791aacf --- /dev/null +++ b/sh_helpdesk/views/helpdesk_assets.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <template id="assets_backend" name="helpdesk assets" inherit_id="web.assets_backend"> + <xpath expr="." position="inside"> + <script type="text/javascript" src="/sh_helpdesk/static/src/js/helpdesk_ticket_kanban_examples.js"></script> + <script type="text/javascript" src="/sh_helpdesk/static/src/js/helpdesk_ticket_dasboard.js"/> + </xpath> + </template> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_category_view.xml b/sh_helpdesk/views/helpdesk_category_view.xml new file mode 100644 index 0000000..e1405d5 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_category_view.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="helpdesk_category_view_form" model="ir.ui.view"> + <field name="name">helpdesk.category.view.form</field> + <field name="model">helpdesk.category</field> + <field name="arch" type="xml"> + <form> + <sheet> + <!-- <field name="image_medium" widget="image" class="oe_avatar"/> --> + <div class="oe_title"> + <label class="oe_edit_only" for="name" string="Category Name" /> + <h2><field name="name" /></h2> + </div> + </sheet> + </form> + </field> + </record> + + <record id="helpdesk_category_view_tree" model="ir.ui.view"> + <field name="name">helpdesk.category.view.tree</field> + <field name="model">helpdesk.category</field> + <field name="arch" type="xml"> + <tree> + <field name="sequence" widget="handle" /> + <field name="name" /> + </tree> + </field> + </record> + + <record id="helpdesk_category_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Categories</field> + <field name="res_model">helpdesk.category</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create new category</p> + </field> + </record> + + <record id="sequence_helpdesk_category_seq" model="ir.sequence"> + <field name="name">Helpdesk Category Sequence</field> + <field name="code">helpdesk.category</field> + <field eval="1" name="number_next" /> + <field eval="1" name="number_increment" /> + </record> + <menuitem id="helpdesk_category_menu" name="Helpdesk Categories" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_category_action" sequence="6" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_config_settings_view.xml b/sh_helpdesk/views/helpdesk_config_settings_view.xml new file mode 100644 index 0000000..b7383dd --- /dev/null +++ b/sh_helpdesk/views/helpdesk_config_settings_view.xml @@ -0,0 +1,300 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="helpdesk_config_setting_view" model="ir.ui.view"> + <field name="name">helpdesk.config.setting.view</field> + <field name="model">res.config.settings</field> + <field name="inherit_id" ref="base.res_config_settings_view_form" /> + <field name="arch" type="xml"> + <xpath expr="//div[hasclass('settings')]" position="inside"> + <div class="app_settings_block" data-string="Helpdesk Settings" string="Helpdesk" data-key="sh_helpdesk"> + <div> + <h2>Ticket Settings</h2> + <field name="company_id" invisible="1" /> + + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="category" /> + <br /> + <field name="category" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="sub_category" /> + <br /> + <field name="sub_category" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="customer_rating" /> + <br /> + <field name="customer_rating" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="auto_close_ticket" /> + <br /> + <field name="auto_close_ticket" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + <div class="row o_settings_container" attrs="{'invisible':[('auto_close_ticket','=',False)]}"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="close_days" /> + <br /> + <field name="close_days" class="oe_inline" attrs="{'required':[('auto_close_ticket','=',True)]}" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + </div> + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="sh_default_team_id" /> + <br /> + <field name="sh_default_team_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box" attrs="{'invisible':[('sh_default_team_id','=',False)]}"> + <div class="o_setting_right_pane"> + <label for="sh_default_user_id" /> + <br /> + <field name="sh_default_user_id" class="oe_inline" attrs="{'required':[('sh_default_team_id','!=',False)]}"/> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + <div> + <h2>Ticket Stage Settings</h2> + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="new_stage_id" /> + <br /> + <field name="new_stage_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="reopen_stage_id" /> + <br /> + <field name="reopen_stage_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="cancel_stage_id" /> + <br /> + <field name="cancel_stage_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="done_stage_id" /> + <br /> + <field name="done_stage_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="close_stage_id" /> + <br /> + <field name="close_stage_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + </div> + <div> + <h2>Ticket Mail Template Settings</h2> + + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="allocation_mail_template_id" /> + <br /> + <field name="allocation_mail_template_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="reply_mail_template_id" /> + <br /> + <field name="reply_mail_template_id" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="sh_receive_email_seeing_ticket" /> + <br /> + <field name="sh_receive_email_seeing_ticket" class="oe_inline" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + </div> + <div> + <h2>Ticket Dashboard Settings</h2> + + <div class="row o_settings_container"> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="dashboard_filter" /> + <br /> + <field name="dashboard_filter" class="oe_inline" widget="many2many_tags" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + <div class="col-6 o_setting_box"> + <div class="o_setting_right_pane"> + <label for="dashboard_tables" /> + <br /> + <field name="dashboard_tables" class="oe_inline" widget="many2many_tags" /> + </div> + <div class="o_setting_left_pane"></div> + </div> + </div> + </div> + <h2 id="multi_users">Multi Users in Ticket Configuration</h2> + <div class="row mt16 o_settings_container" id="multi_users_div"> + <div class="col-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_display_multi_user" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_display_multi_user" /> + <div class="text-muted"></div> + </div> + </div> + </div> + <h2 id="manage_products">Manage Products Inside Helpdesk Ticket</h2> + <div class="row mt16 o_settings_container" id="manage_products_div"> + <div class="col-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_configure_activate" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_configure_activate" /> + <div class="text-muted"></div> + </div> + </div> + </div> + <h2 id="manage_reminder">Helpdesk Ticket Reminder Configuration</h2> + <div class="row mt16 o_settings_container" id="manage_reminder_div"> + <div class="col-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_display_ticket_reminder" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_display_ticket_reminder" /> + <div class="text-muted"></div> + </div> + </div> + </div> + <h2 id="manage_whatsapp">Helpdesk Ticket Send Whatsapp Configuration</h2> + <div class="row mt16 o_settings_container"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_ticket_product_detail" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_ticket_product_detail" /> + <div class="text-muted"> + Show Ticket Product details in message + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_signature" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_signature" /> + <div class="text-muted"> + Show Signature + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_display_in_chatter" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_display_in_chatter" /> + <div class="text-muted"> + Show Message in Chatter + </div> + </div> + </div> + + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_pdf_in_message" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_pdf_in_message" /> + <div class="text-muted"> + Send Report Url in Message + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_ticket_url_in_message" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_ticket_url_in_message" /> + <div class="text-muted"> + Send Ticket Url in Message + </div> + </div> + </div> + </div> + <h2 id="manage_follower">Helpdesk Auto Add Followers Configuration</h2> + <div class="row mt16 o_settings_container" id="manage_auto_add_followers_div"> + <div class="col-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="sh_auto_add_customer_as_follower" /> + </div> + <div class="o_setting_right_pane"> + <label for="sh_auto_add_customer_as_follower" /> + <div class="text-muted"></div> + </div> + </div> + </div> + </div> + </xpath> + </field> + </record> + <record id="action_helpdesk_configuration" model="ir.actions.act_window"> + <field name="name">Helpdesk Settings</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.config.settings</field> + <field name="view_mode">form</field> + <field name="target">inline</field> + <field name="context">{'module' : 'sh_helpdesk'}</field> + </record> + <menuitem id="menu_config_helpdesk" name="Settings" parent="sh_helpdesk.helpdesk_config_menu" sequence="11" action="action_helpdesk_configuration" groups="base.group_system,sh_helpdesk.helpdesk_group_manager" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_menu.xml b/sh_helpdesk/views/helpdesk_menu.xml new file mode 100644 index 0000000..1264ed3 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_menu.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <menuitem id="helpdesk_main_menu" name="Helpdesk" web_icon="sh_helpdesk,static/description/icon.png" /> + <menuitem id="helpdesk_reporting_menu" name="Reporting" parent="helpdesk_main_menu" sequence="3" /> + <menuitem id="helpdesk_config_menu" name="Configuration" parent="helpdesk_main_menu" sequence="5" groups="sh_helpdesk.helpdesk_group_manager" /> + <!-- <record id="sh_helpdesk.new_stage" model="helpdesk.stages"> + <field name="sh_next_stage" ref="sh_helpdesk.in_progress_stage" /> + </record> + <record id="sh_helpdesk.in_progress_stage" model="helpdesk.stages"> + <field name="sh_next_stage" ref="sh_helpdesk.done_stage" /> + </record> + <record id="sh_helpdesk.done_stage" model="helpdesk.stages"> + <field name="sh_next_stage" ref="sh_helpdesk.close_stage" /> + </record> --> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_priority_view.xml b/sh_helpdesk/views/helpdesk_priority_view.xml new file mode 100644 index 0000000..119aafe --- /dev/null +++ b/sh_helpdesk/views/helpdesk_priority_view.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="helpdesk_priority_view_tree" model="ir.ui.view"> + <field name="name">helpdesk.priority.view.tree</field> + <field name="model">helpdesk.priority</field> + <field name="arch" type="xml"> + <tree editable="top"> + <field name="sequence" widget="handle" /> + <field name="name" /> + </tree> + </field> + </record> + + <record id="helpdesk_priority_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Priorities</field> + <field name="res_model">helpdesk.priority</field> + <field name="view_mode">tree</field> + <field name="help" type="html"> + <p> + No Helpdesk Tickets priorities found + </p> + </field> + </record> + + <record id="helpdesk_priority_seq" model="ir.sequence"> + <field name="name">helpdesk priority sequence</field> + <field name="code">helpdesk.priority</field> + <field eval="1" name="number_next" /> + <field eval="1" name="number_increment" /> + </record> + <menuitem id="helpdesk_priority_menu" name="Helpdesk Priorities" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_priority_action" sequence="8" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_sla_policies.xml b/sh_helpdesk/views/helpdesk_sla_policies.xml new file mode 100644 index 0000000..a284134 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_sla_policies.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="sh_helpdesk_sla_policies_form_view" model="ir.ui.view"> + <field name="name">sh.helpdesk.sla</field> + <field name="model">sh.helpdesk.sla</field> + <field name="arch" type="xml"> + <form string="Helpdesk SLA Policies"> + <sheet> + <div class="oe_button_box" name="button_box"> + <button name="action_view_tickets" type="object" class="oe_stat_button" icon="fa-ticket" attrs="{'invisible':[('sla_ticket_count','=',0)]}"> + <div class="o_stat_info"> + <field name="sla_ticket_count" class="o_stat_value" /> + <span class="o_stat_text">SLA Tickets</span> + </div> + </button> + </div> + <div class="oe_title"> + <h1> + <field name="name"/> + </h1> + </div> + <group> + <group> + <field name="sh_team_id"/> + <field name="company_id"/> + </group> + <group> + <field name="sh_ticket_type_id"/> + </group> + </group> + <group string="SLA Target"> + <group> + <field name="sh_sla_target_type" widget="radio"/> + <field name="sh_stage_id" attrs="{'required':[('sh_sla_target_type','=','reaching_stage')],'invisible':[('sh_sla_target_type','=','assign_to')]}"/> + </group> + <group> + <div class="o_td_label"> + <label for="sh_days" string="Reach In"/> + </div> + <div class="o_row"> + <field name="sh_days"/> days<br/> + <field name="sh_hours"/> hours<br/> + <field name="sh_minutes"/> minutes<br/> + </div> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="sh_helpdesk_sla_policies_tree_view" model="ir.ui.view"> + <field name="name">sh.helpdesk.sla</field> + <field name="model">sh.helpdesk.sla</field> + <field name="arch" type="xml"> + <tree string="Helpdesk SLA Policies"> + <field name="name"/> + <field name="sh_team_id"/> + <field name="sh_ticket_type_id"/> + <field name="sh_sla_target_type" widget="radio"/> + <field name="sh_stage_id"/> + </tree> + </field> + </record> + <record id="sh_sla_policies_action" model="ir.actions.act_window"> + <field name="name">Helpdesk SLA Policies</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">sh.helpdesk.sla</field> + <field name="view_mode">tree,form</field> + </record> + <menuitem id="sh_menu_helpdesk_sla" name="Helpdesk SLA Policies" parent="sh_helpdesk.helpdesk_config_menu" action="sh_sla_policies_action" sequence="9" groups="sh_helpdesk.group_helpdesk_sla_policy"/> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/helpdesk_stages_view.xml b/sh_helpdesk/views/helpdesk_stages_view.xml new file mode 100644 index 0000000..208d250 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_stages_view.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_stages_form_view" model="ir.ui.view"> + <field name="name">helpdesk.stages.form.view</field> + <field name="model">helpdesk.stages</field> + <field name="arch" type="xml"> + <form string="Stage"> + <sheet> + <group> + <group> + <field name="name" /> + <field name="mail_template_ids" widget="many2many_tags" /> + <field name="is_cancel_button_visible" /> + <field name="is_done_button_visible" /> + </group> + <group> + <field name="sh_next_stage" /> + <field name="sh_group_ids" widget="many2many_tags" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="helpdesk_stages_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.stages.tree.view</field> + <field name="model">helpdesk.stages</field> + <field name="arch" type="xml"> + <tree string="Stage"> + <field name="sequence" widget="handle" /> + <field name="name" /> + </tree> + </field> + </record> + <record id="helpdesk_stages_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Stages</field> + <field name="res_model">helpdesk.stages</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Stage</p> + </field> + </record> + <record id="sequence_helpdesk_stages_seq" model="ir.sequence"> + <field name="name">Helpdesk Stages Sequence</field> + <field name="code">helpdesk.stages</field> + <field eval="1" name="number_next" /> + <field eval="1" name="number_increment" /> + </record> + <menuitem id="helpdesk_stages_menu" name="Helpdesk Stages" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_stages_action" sequence="5" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_subcategory_view.xml b/sh_helpdesk/views/helpdesk_subcategory_view.xml new file mode 100644 index 0000000..efa92f9 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_subcategory_view.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="helpdesk_subcategory_view_form" model="ir.ui.view"> + <field name="name">helpdesk.subcategory.view.form</field> + <field name="model">helpdesk.subcategory</field> + <field name="arch" type="xml"> + <form string="Helpdesk SubCategory"> + <sheet> + <!-- <field name="image_medium" widget="image" class="oe_avatar"/> --> + <div class="oe_title"> + <label class="oe_edit_only" for="name" string="SubCategory Name" /> + <h2><field name="name" /></h2> + </div> + <group> + <group> + <field name="parent_category_id" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + + <record id="helpdesk_subcategory_view_tree" model="ir.ui.view"> + <field name="name">helpdesk.subcategory.view.tree</field> + <field name="model">helpdesk.subcategory</field> + <field name="arch" type="xml"> + <tree string="Helpdesk SubCategory"> + <field name="sequence" widget="handle" /> + <field name="parent_category_id" /> + <field name="name" /> + </tree> + </field> + </record> + + <record id="helpdesk_subcategory_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Sub Categories</field> + <field name="res_model">helpdesk.subcategory</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create new sub category</p> + </field> + </record> + + <record id="helpdesk_subcategory_seq" model="ir.sequence"> + <field name="name">Helpdesk Sub Categories Sequence</field> + <field name="code">helpdesk.subcategory</field> + <field eval="1" name="number_next" /> + <field eval="1" name="number_increment" /> + </record> + <menuitem id="helpdesk_subcategory_menu" name="Helpdesk Sub Categories" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_subcategory_action" sequence="7" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_subject_type_view.xml b/sh_helpdesk/views/helpdesk_subject_type_view.xml new file mode 100644 index 0000000..7ee645c --- /dev/null +++ b/sh_helpdesk/views/helpdesk_subject_type_view.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_subject_type_form_view" model="ir.ui.view"> + <field name="name">helpdesk.subject.type.form.view</field> + <field name="model">helpdesk.sub.type</field> + <field name="arch" type="xml"> + <form string="Subject Type"> + <sheet> + <group> + <group> + <field name="name" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="helpdesk_subject_type_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.subject.type.tree.view</field> + <field name="model">helpdesk.sub.type</field> + <field name="arch" type="xml"> + <tree string="Subject Type"> + <field name="name" /> + </tree> + </field> + </record> + <record id="helpdesk_subject_type_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Subject Type</field> + <field name="res_model">helpdesk.sub.type</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Subject Type</p> + </field> + </record> + <menuitem id="helpdesk_subject_type_menu" name="Helpdesk Subject Types" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_subject_type_action" sequence="3" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_tags_view.xml b/sh_helpdesk/views/helpdesk_tags_view.xml new file mode 100644 index 0000000..4ab418e --- /dev/null +++ b/sh_helpdesk/views/helpdesk_tags_view.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_tags_form_view" model="ir.ui.view"> + <field name="name">helpdesk.tags.form.view</field> + <field name="model">helpdesk.tags</field> + <field name="arch" type="xml"> + <form string="Tags"> + <sheet> + <group> + <group> + <field name="name" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="helpdesk_tags_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.tags.tree.view</field> + <field name="model">helpdesk.tags</field> + <field name="arch" type="xml"> + <tree string="Tags"> + <field name="name" /> + </tree> + </field> + </record> + <record id="helpdesk_tags_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Tags</field> + <field name="res_model">helpdesk.tags</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Tag</p> + </field> + </record> + <menuitem id="helpdesk_tags_menu" name="Helpdesk Tags" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_tags_action" sequence="4" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_team_view.xml b/sh_helpdesk/views/helpdesk_team_view.xml new file mode 100644 index 0000000..934b064 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_team_view.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_team_form_view" model="ir.ui.view"> + <field name="name">helpdesk.team.form.view</field> + <field name="model">helpdesk.team</field> + <field name="arch" type="xml"> + <form string="Helpdesk Team"> + <sheet> + <div class="oe_button_box" name="button_box" groups="sh_helpdesk.group_helpdesk_sla_policy"> + <button name="action_view_sla" type="object" class="oe_stat_button" icon="fa-ticket" attrs="{'invisible':[('sla_count','=',0)]}" groups="sh_helpdesk.group_helpdesk_sla_policy"> + <div class="o_stat_info"> + <field name="sla_count" class="o_stat_value" /> + <span class="o_stat_text">Helpdesk SLA</span> + </div> + </button> + </div> + <group> + <group> + <field name="name" /> + <field name="sh_resource_calendar_id"/> + </group> + <group> + <field name="team_head" /> + </group> + </group> + <notebook> + <page name="members" string="Team Members"> + <field name="team_members" widget="many2many"> + <kanban quick_create="false" create="true" delete="true"> + <field name="id" /> + <field name="name" /> + <templates> + <t t-name="kanban-box"> + <div class="oe_kanban_global_click" style="max-width: 200px;"> + <div class="o_kanban_record_top"> + <img t-att-src="kanban_image('res.users', 'image_128', record.id.raw_value)" class="oe_avatar oe_kanban_avatar_smallbox o_image_40_cover mb0" alt="Avatar" /> + <div class="o_kanban_record_headings ml8"> + <strong class="o_kanban_record_title"><field name="name" /></strong> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + <record id="helpdesk_team_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.team.tree.view</field> + <field name="model">helpdesk.team</field> + <field name="arch" type="xml"> + <tree string="Helpdesk Team"> + <field name="name" /> + <field name="team_head" /> + </tree> + </field> + </record> + <record id="helpdesk_team_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Team</field> + <field name="res_model">helpdesk.team</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Team</p> + </field> + </record> + <menuitem id="helpdesk_team_menu" name="Helpdesk Teams" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_team_action" sequence="1" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_ticket_multi_action_view.xml b/sh_helpdesk/views/helpdesk_ticket_multi_action_view.xml new file mode 100644 index 0000000..0ace7e1 --- /dev/null +++ b/sh_helpdesk/views/helpdesk_ticket_multi_action_view.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> + +<odoo> + <record id="model_helpdesk_ticket_multi_action" model="ir.actions.server"> + <field name="name">Mass Update Ticket</field> + <field name="model_id" ref="sh_helpdesk.model_helpdesk_ticket" /> + <field name="binding_model_id" ref="sh_helpdesk.model_helpdesk_ticket" /> + <field name="groups_id" eval="[(4, ref('sh_helpdesk.group_allow_multi_action'))]" /> + <field name="state">code</field> + <field name="binding_view_types">list</field> + <field name="code"> action = model.action_mass_update_wizard()</field> + </record> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/helpdesk_ticket_portal_template.xml b/sh_helpdesk/views/helpdesk_ticket_portal_template.xml new file mode 100644 index 0000000..e08ee6f --- /dev/null +++ b/sh_helpdesk/views/helpdesk_ticket_portal_template.xml @@ -0,0 +1,663 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <template id="sh_portal_assets" inherit_id="portal.assets_frontend"> + <xpath expr="." position="inside"> + <script type="text/javascript" src="/sh_helpdesk/static/src/js/portal.js" /> + <link rel="stylesheet" href="/sh_helpdesk/static/src/css/bootstrap-multiselect.min.css" type="text/css"/> + <script type="text/javascript" src="/sh_helpdesk/static/src/js/bootstrap-multiselect.min.js"></script> + </xpath> + </template> + <template id="portal_my_home_menu_ticket" name="Portal layout : ticket menu entries" inherit_id="portal.portal_breadcrumbs" priority="30"> + <xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside"> + <li t-if="page_name == 'ticket' or ticket" t-attf-class="breadcrumb-item #{'active ' if not ticket else ''}"> + <a t-if="ticket" t-attf-href="/my/tickets?{{ keep_query() }}">Tickets</a> + <t t-else="">Tickets</t> + </li> + <li t-if="ticket" class="breadcrumb-item active"> + <t t-esc="ticket.name" t-if="ticket.name" /> + <t t-else=""><em>Ticket</em></t> + </li> + </xpath> + </template> + + <template id="portal_my_home_ticket" name="Portal My Home : ticket entries" inherit_id="portal.portal_my_home" priority="30"> + <xpath expr="//div[hasclass('o_portal_docs')]" position="inside"> + <t t-call="portal.portal_docs_entry"> + <t t-set="title">Tickets</t> + <t t-set="url" t-value="'/my/tickets'" /> + <t t-set="count" t-value="ticket_count" /> + </t> + </xpath> + </template> + + <template id="portal_my_tickets" name="My Tickets"> + <t t-call="portal.portal_layout"> + <t t-set="breadcrumbs_searchbar" t-value="True" /> + + <t t-call="portal.portal_searchbar"> + <t t-set="title">Tickets</t> + <div class="form-inline ml-lg-4"> + <a id="new_request" class="btn btn-success btn-sm" name="new_request" title="Create Support Request" aria-label="Create Support Request" role="button"><i class="fa fa-plus" /> Create New</a> + </div> + </t> + <div id="createticketModal" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <!-- Modal content--> + <div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title">Create Helpdesk Ticket</h4> + <button type="button" class="close" data-dismiss="modal">&times;</button> + </div> + <div class="modal-body"> + <form action="/portal-create-ticket" id="form_id" method="POST" class="form-horizontal mt32" enctype="multipart/form-data"> + <t t-if="request.env.user.has_group('base.group_portal') and request.env.user.sh_portal_user_access or not request.env.user.has_group('base.group_portal')"> + <div class="row"> + <div class="col-6"> + <label class="control-label" for="partner">Partner:</label> + <input class="form-control" list="partner_ids" name="partner" id="partner" /> + <input type="hidden" name="partner_id" id="partner_id" /> + <datalist id="partner_ids"> </datalist> + </div> + </div> + </t> + <div class="row"> + <t t-if="request.env.user.has_group('base.group_portal') and not request.env.user.sh_portal_user_access"> + <div class="col-6"> + <div t-attf-class="form-group #{error and 'portal_contact_name' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_contact_name">Name</label> + <input type="text" class="form-control" id="portal_contact_name" name="portal_contact_name" t-att-value="request.env.user.partner_id.name" readonly="True" /> + </div> + </div> + <div class="col-6"> + <div name="portal_email_from_container" t-attf-class="form-group #{error and 'portal_email' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_email">Email</label> + <input type="email" class="form-control" id="portal_email" name="portal_email" t-att-value="request.env.user.partner_id.email" readonly="True" /> + </div> + </div> + </t> + <t t-else=""> + <div class="col-6"> + <div t-attf-class="form-group #{error and 'portal_contact_name' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_contact_name">Name</label> + <input type="text" class="form-control" id="portal_contact_name" name="portal_contact_name" required="True" /> + </div> + </div> + <div class="col-6"> + <div name="portal_email_from_container" t-attf-class="form-group #{error and 'portal_email' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_email">Email</label> + <input type="email" class="form-control" id="portal_email" name="portal_email" required="True" /> + </div> + </div> + </t> + </div> + <t t-if="request.env.user.sh_portal_user_access and request.env.user.sh_portal_user_access=='manager'"> + <div class="row"> + <t t-if="request.env.company.sh_display_multi_user"> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_team">Team</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_team" name="portal_team"> + <option value="team">Select Team</option> + <t t-foreach="request.env['helpdesk.team'].sudo().search([])" t-as="team"> + <option t-att-value="team.id"><t t-esc="team.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_user">Assign To</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_assign_user" name="portal_assign_user"> + <option value="user">Select Assign User</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_multi_user">Assign Multi Users</label> + <select class="form-control form-field o_website_form_required_custom" multiple="multiple" id="portal_assign_multi_user" name="portal_assign_multi_user"> + <option value="users">Select Multi Users</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + </t> + <t t-if="not request.env.company.sh_display_multi_user"> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_team">Team</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_team" name="portal_team"> + <option value="team">Select Team</option> + <t t-foreach="request.env['helpdesk.team'].sudo().search([])" t-as="team"> + <option t-att-value="team.id"><t t-esc="team.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_user">Assign To</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_assign_user" name="portal_assign_user"> + <option value="user">Select Assign User</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + </t> + </div> + </t> + <t t-if="request.env.user.sh_portal_user_access and request.env.user.sh_portal_user_access=='leader'"> + <div class="row"> + <t t-if="request.env.company.sh_display_multi_user"> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_team">Team</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_team" name="portal_team"> + <option value="team">Select Team</option> + <t t-foreach="request.env['helpdesk.team'].sudo().search(['|',('team_head','=',request.env.user.id),('team_members','in',[request.env.user.id])])" t-as="team"> + <option t-att-value="team.id"><t t-esc="team.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_user">Assign To</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_assign_user" name="portal_assign_user"> + <option value="user">Select Assign User</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-4"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_multi_user">Assign Multi Users</label> + <select class="form-control form-field o_website_form_required_custom" multiple="multiple" id="portal_assign_multi_user" name="portal_assign_multi_user"> + <option value="users">Select Assign User</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + </t> + <t t-if="not request.env.company.sh_display_multi_user"> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_team">Team</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_team" name="portal_team"> + <option value="team">Select Team</option> + <t t-foreach="request.env['helpdesk.team'].sudo().search(['|',('team_head','=',request.env.user.id),('team_members','in',[request.env.user.id])])" t-as="team"> + <option t-att-value="team.id"><t t-esc="team.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_assign_user">Assign To</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_assign_user" name="portal_assign_user"> + <option value="user">Select Assign User</option> + <t t-foreach="request.env['res.users'].sudo().search(['|',('share','=',False),('sh_portal_user_access','!=',False)])" t-as="user"> + <option t-att-value="user.id"><t t-esc="user.name" /></option> + </t> + </select> + </div> + </div> + </t> + </div> + </t> + <div class="row"> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_category">Category</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_category" name="portal_category"> + <option value="category">Select Category</option> + <t t-foreach="request.env['helpdesk.category'].sudo().search([])" t-as="category"> + <option t-att-value="category.id"><t t-esc="category.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_subcategory">Sub Category</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_subcategory" name="portal_subcategory"> + <option value="sub_category">Select Sub Category</option> + <t t-foreach="request.env['helpdesk.subcategory'].sudo().search([])" t-as="subcategory"> + <option t-att-value="subcategory.id"><t t-esc="subcategory.name" /></option> + </t> + </select> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_subject">Subject</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_subject" name="portal_subject"> + <option value="subject">Select Subject</option> + <t t-foreach="request.env['helpdesk.sub.type'].sudo().search([])" t-as="subject"> + <option t-att-value="subject.id"><t t-esc="subject.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-6"> + <div t-attf-class="form-group #{error and 'portal_description' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_description">Description</label> + <textarea id="description" name="portal_description" class="form-control form-field o_website_form_required_custom" placeholder="Description" /> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div t-attf-class="form-group"> + <label class="control-label" for="portal_priority">Priority</label> + <select class="form-control form-field o_website_form_required_custom" id="portal_priority" name="portal_priority"> + <option value="priority">Select Priority</option> + <t t-foreach="request.env['helpdesk.priority'].sudo().search([])" t-as="priority"> + <option t-att-value="priority.id"><t t-esc="priority.name" /></option> + </t> + </select> + </div> + </div> + <div class="col-6"> + <div name="portal_file_container" t-attf-class="form-group #{error and 'portal_file' in error and 'has-error' or ''}"> + <label class="control-label" for="portal_file">Attachments</label> + <label class="custom-file"> + <input name="portal_file" id="portal_file" type="file" multiple="multiple" /> + <span class="custom-file-control" /> + </label> + </div> + </div> + </div> + <div class="row" style="text-align: right;"> + <div class="col-12"> + <button type="submit" id="create_helpdesk_ticket" class="btn btn-primary">Create Ticket</button> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> + </div> + </div> + </form> + </div> + </div> + </div> + </div> + <t t-if="not tickets"> + <p>There are currently no tickets for your account.</p> + </t> + <t t-if="grouped_tickets" t-call="portal.portal_table"> + <t t-foreach="grouped_tickets" t-as="ticket"> + <thead> + <tr t-attf-class="{{'thead-light' if not groupby == 'none' else ''}}"> + <th t-if="groupby == 'create_by'"> + <em class="font-weight-normal text-muted">Created By:</em> + <span t-field="ticket[0].create_uid.name" /> + </th> + <th t-if="groupby == 'ticket_type'"> + <em class="font-weight-normal text-muted">Ticket Type:</em> + <span t-field="ticket[0].ticket_type.name" /> + </th> + <th t-if="groupby == 'status'"> + <em class="font-weight-normal text-muted">Status:</em> + <span t-esc="ticket[0].stage_id.name" /> + </th> + <th t-if="groupby == 'customer'"> + <em class="font-weight-normal text-muted">Customer:</em> + <span t-esc="ticket[0].partner_id.name" /> + </th> + <th t-if="groupby == 'category'"> + <em class="font-weight-normal text-muted">Category:</em> + <span t-esc="ticket[0].category_id.name" /> + </th> + <th t-if="groupby == 'subcategory'"> + <em class="font-weight-normal text-muted">Sub Category:</em> + <span t-esc="ticket[0].sub_category_id.name" /> + </th> + + <th t-if="groupby == 'subject'"> + <em class="font-weight-normal text-muted">Subject:</em> + <span t-esc="ticket[0].subject_id.name" /> + </th> + <th t-if="groupby == 'priority'"> + <em class="font-weight-normal text-muted">Priority:</em> + <span t-esc="ticket[0].priority.name" /> + </th> + <th t-if="groupby == 'state'"> + <em class="font-weight-normal text-muted">Reply Status:</em> + <span t-esc="ticket[0].state" /> + </th> + <th>Create Date</th> + <th>Last Update Date</th> + <th>Ticket Type</th> + <th>Status</th> + </tr> + </thead> + <tbody> + <t t-foreach="ticket" t-as="t"> + <tr> + <td> + <a t-att-href="t.get_portal_url()" t-att-title="t.name"> + <t t-esc="t.name" t-if="t.name" /> + <em t-else="">Ticket</em> + </a> + </td> + <td><span t-field="t.create_date" t-options='{"widget": "date"}' /></td> + <td><span t-field="t.write_date" t-options='{"widget": "date"}' /></td> + <td><span t-field="t.ticket_type" /></td> + <td><span t-field="t.stage_id" /></td> + </tr> + </t> + </tbody> + </t> + </t> + </t> + </template> + + <template id="portal_ticket_page" name="Ticket Portal Template" inherit_id="portal.portal_sidebar" primary="True"> + <xpath expr="//div[hasclass('o_portal_sidebar')]" position="inside"> + <div class="row mt16 o_portal_ticket_sidebar"> + <!-- Sidebar --> + <t t-call="portal.portal_record_sidebar"> + <t t-set="classes" t-value="'col-12 col-lg flex-lg-grow-0 d-print-none'" /> + <t t-set="title"> + <h2 class="mb-0"> + <b t-if="ticket" t-field="ticket.name" /> + <b t-else="Ticket" t-field="ticket.name" /> + </h2> + </t> + + <t t-set="entries"> + <ul class="list-group list-group-flush flex-wrap flex-row flex-lg-column"> + <li class="list-group-item flex-grow-1"> + <div class="o_download_pdf btn-toolbar flex-sm-nowrap"> + <div class="btn-group flex-grow-1 mr-1 mb-1"> + <a class="btn btn-secondary btn-block o_download_btn" t-att-href="ticket.get_portal_url(report_type='pdf', download=True)" title="Download"><i class="fa fa-download" /> Download</a> + </div> + </div> + </li> + <li t-if="ticket.user_id" class="list-group-item flex-grow-1"> + <div class="small mb-1"><strong class="text-muted">Your Contact</strong></div> + <div class="row"> + <div class="col flex-grow-0 pr-2"> + <img t-if="ticket.user_id.image_128" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(ticket.user_id.image_128)" alt="Contact" /> + <img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact" /> + </div> + <div class="col pl-0" style="min-width: 150px;"> + <span t-field="ticket.user_id" t-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True}' /> + <a href="#discussion" class="small"><i class="fa fa-comment"></i> Send message</a> + </div> + </div> + </li> + </ul> + </t> + </t> + + <!-- Page Content --> + <div id="ticket_content" class="col-12 col-lg justify-content-end"> + <div t-attf-class="card #{'pb-5' if report_type == 'html' else ''}"> + <div t-call="sh_helpdesk.helpdesk_ticket_portal_content" /> + </div> + + <!-- chatter --> + <div id="ticket_communication" class="mt-4"> + <h2>History</h2> + <t t-call="portal.message_thread"> + <t t-set="object" t-value="ticket" /> + </t> + </div> + </div> + </div> + </xpath> + </template> + <template id="helpdesk_ticket_portal_content" name="Helpdesk Ticket Portal Content"> + <!-- Intro --> + + <div id="introduction" t-attf-class="pb-2 pt-3 #{'card-header bg-white' if report_type == 'html' else ''}"> + <h2 class="my-0"> + <strong><em t-esc="ticket.name" /></strong> + </h2> + </div> + <div t-attf-class="#{'card-body' if report_type == 'html' else ''}"> + <div id="informations"> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Type</strong> + </div> + <div class="col-6"> + <span t-field="ticket.ticket_type" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Create Date</strong> + </div> + <div class="col-6"> + <span t-field="ticket.create_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Last Update Date</strong> + </div> + <div class="col-6"> + <span t-field="ticket.write_date" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Person Name</strong> + </div> + <div class="col-6"> + <span t-field="ticket.person_name" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Subject Type</strong> + </div> + <div class="col-6"> + <span t-field="ticket.subject_id" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Email</strong> + </div> + <div class="col-6"> + <span t-field="ticket.email" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Category</strong> + </div> + <div class="col-6"> + <span t-field="ticket.category_id" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Replied Date</strong> + </div> + <div class="col-6"> + <span t-field="ticket.replied_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Sub Category</strong> + </div> + <div class="col-6"> + <span t-field="ticket.sub_category_id" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed Date</strong> + </div> + <div class="col-6"> + <span t-field="ticket.close_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Priority</strong> + </div> + <div class="col-6"> + <span t-field="ticket.priority" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed By</strong> + </div> + <div class="col-6"> + <span t-field="ticket.close_by" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Date</strong> + </div> + <div class="col-6"> + <span t-field="ticket.cancel_date" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled By</strong> + </div> + <div class="col-6"> + <span t-field="ticket.cancel_by" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Status</strong> + </div> + <div class="col-6"> + <span t-field="ticket.stage_id" /> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Reason</strong> + </div> + <div class="col-6"> + <span t-field="ticket.cancel_reason" /> + </div> + </div> + </div> + </div> + <t t-if="ticket.comment"> + <div class="row"> + <div class="mb-3 col-12"> + <strong>Customer Comment</strong> + </div> + </div> + <div class="row"> + <div class="mb-3 col-12"> + <span t-field="ticket.comment" /> + </div> + </div> + </t> + <t t-if="ticket.description"> + <div class="row"> + <div class="mb-3 col-12"> + <strong>Description</strong> + </div> + </div> + <div class="row"> + <div class="mb-3 col-12"> + <span t-field="ticket.description" /> + </div> + </div> + </t> + <t t-if="ticket.priority_new and ticket.customer_comment"> + <div class="row"> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Rating</strong> + </div> + <div class="col-6"> + <span class="float-right" title="Rating" role="img" t-attf-aria-label="Rating: #{ticket.priority_new} on 3"> + <t t-foreach="range(2, 7)" t-as="i"> + <span t-attf-class="fa fa-lg fa-star#{'' if i <= int(ticket.priority_new) else '-o'}" /> + </t> + </span> + </div> + </div> + </div> + <div class="mb-3 col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Comment</strong> + </div> + <div class="col-6"> + <span t-field="ticket.customer_comment" /> + </div> + </div> + </div> + </div> + </t> + </div> + </div> + </template> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_ticket_type_view.xml b/sh_helpdesk/views/helpdesk_ticket_type_view.xml new file mode 100644 index 0000000..ce622df --- /dev/null +++ b/sh_helpdesk/views/helpdesk_ticket_type_view.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_ticket_type_form_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.type.form.view</field> + <field name="model">helpdesk.ticket.type</field> + <field name="arch" type="xml"> + <form string="Ticket Type"> + <sheet> + <div class="oe_button_box" name="button_box" groups="sh_helpdesk.group_helpdesk_sla_policy"> + <button name="action_view_sla" type="object" class="oe_stat_button" icon="fa-ticket" attrs="{'invisible':[('sla_count','=',0)]}" groups="sh_helpdesk.group_helpdesk_sla_policy"> + <div class="o_stat_info"> + <field name="sla_count" class="o_stat_value" /> + <span class="o_stat_text">Helpdesk SLA</span> + </div> + </button> + </div> + <group> + <group> + <field name="name" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + <record id="helpdesk_ticket_type_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.type.tree.view</field> + <field name="model">helpdesk.ticket.type</field> + <field name="arch" type="xml"> + <tree string="Ticket Type"> + <field name="name" /> + </tree> + </field> + </record> + <record id="helpdesk_ticket_type_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Ticket Type</field> + <field name="res_model">helpdesk.ticket.type</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Ticket Type</p> + </field> + </record> + <menuitem id="helpdesk_ticket_type_menu" name="Helpdesk Ticket Types" parent="sh_helpdesk.helpdesk_config_menu" action="helpdesk_ticket_type_action" sequence="2" /> +</odoo> diff --git a/sh_helpdesk/views/helpdesk_ticket_update_wizard_view.xml b/sh_helpdesk/views/helpdesk_ticket_update_wizard_view.xml new file mode 100644 index 0000000..02320eb --- /dev/null +++ b/sh_helpdesk/views/helpdesk_ticket_update_wizard_view.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> + +<odoo> + <record id="sh_helpdesk_ticket_mass_update_wizard_form_view" model="ir.ui.view"> + <field name="name">sh.helpdesk.ticket.mass.update.wizard.form.view</field> + <field name="model">sh.helpdesk.ticket.mass.update.wizard</field> + <field name="arch" type="xml"> + <form string="Ticket Mass Update"> + <group> + <field name="check_sh_display_multi_user" invisible="1" /> + <group string="Update Assign To"> + <field name="helpdesks_ticket_ids" invisible="1" widget="many2many_tags" /> + <field name="check_assign_to" /> + <field name="assign_to" attrs="{'invisible': [('check_assign_to', '=', False)],'required':[('check_assign_to','=',True)]}" /> + </group> + <group string="Update Assign To Multiuser" attrs="{'invisible': [('check_sh_display_multi_user', '=', False)]}"> + <field name="check_assign_to_multiuser" /> + <field name="ticket_update_type" attrs="{'invisible': [('check_assign_to_multiuser', '=', False)]}" widget="radio" /> + <field name="assign_to_multiuser" attrs="{'invisible': [('check_assign_to_multiuser', '=', False)],'required':[('check_assign_to_multiuser','=',True)]}" widget="many2many_tags" /> + </group> + <group string="Update Stage"> + <field name="check_helpdesks_state" /> + <field name="helpdesk_stages" attrs="{'invisible': [('check_helpdesks_state', '=', False)],'required':[('check_helpdesks_state','=',True)]}" /> + </group> + <!-- ADD/REMOVE FOLLOWER --> + <group string="Add/Remove Follower"> + <field name="check_add_remove" /> + <field name="helpdesks_ticket_ids" invisible="1" widget="many2many_tags" /> + <field name="followers" widget="many2many_tags" attrs="{'invisible': [('check_add_remove', '=', False)],'required':[('check_add_remove','=',True)]}" /> + <field name="ticket_follower_update_type" widget="radio" attrs="{'invisible': [('check_add_remove', '=', False)]}" /> + </group> + </group> + <footer> + <button name="update_record" class="btn btn-primary" type="object" string="Done" /> + <button string="Cancel" special="cancel" /> + </footer> + </form> + </field> + </record> + <record id="sh_helpdesk_ticket_mass_update_wizard_action_view" model="ir.actions.act_window"> + <field name="name">Ticket Mass Update</field> + <field name="res_model">sh.helpdesk.ticket.mass.update.wizard</field> + <field name="type">ir.actions.act_window</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/helpdesk_ticket_view.xml b/sh_helpdesk/views/helpdesk_ticket_view.xml new file mode 100644 index 0000000..adc630c --- /dev/null +++ b/sh_helpdesk/views/helpdesk_ticket_view.xml @@ -0,0 +1,320 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="helpdesk_ticket_form_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.form.view</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <form string="Ticket"> + <header> + <button name="action_approve" type="object" string="Approve" class="oe_highlight" attrs="{'invisible':['|','|',('cancel_stage_boolean','=',True),('done_stage_boolean','=',True),('closed_stage_boolean','=',True)]}" /> + <button name="action_reply" type="object" string="Reply" class="oe_highlight" /> + <button name="action_send_whatsapp" type="object" string="Send By Whatsapp" class="oe_highlight" groups="sh_helpdesk.helpdesk_group_whatsapp" /> + <button name="action_done" type="object" string="Resolved Ticket" class="oe_highlight" attrs="{'invisible':[('done_button_boolean','=',False)]}" /> + <button name="action_closed" type="object" string="Close Ticket" class="oe_highlight" attrs="{'invisible':[('done_stage_boolean','=',False)]}" /> + <button name="action_cancel" type="object" string="Cancel Ticket" class="oe_highlight" attrs="{'invisible':[('cancel_button_boolean','=',False)]}" /> + <button name="action_open" type="object" string="Re-Open Ticket" class="oe_highlight" attrs="{'invisible':[('open_boolean','=',False)]}" /> + <button name="preview_ticket" type="object" string="Preview" /> + <field name="stage_id" widget="statusbar" /> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}" /> + </div> + <div class="oe_title"> + <h1> + <field name="name" readonly="1" /> + <field name="active" invisible="1" /> + <field name="category_bool" invisible="1" /> + <field name="sub_category_bool" invisible="1" /> + <field name="rating_bool" invisible="1" /> + <field name="sh_status_boolean" invisible="1"/> + <field name="done_stage_boolean" invisible="1" /> + <field name="cancel_stage_boolean" invisible="1" /> + <field name="closed_stage_boolean" invisible="1" /> + <field name="ticket_from_website" invisible="1" /> + <field name="ticket_from_portal" invisible="1" /> + <field name="reopen_stage_boolean" invisible="1" /> + <field name="cancel_button_boolean" invisible="1" /> + <field name="done_button_boolean" invisible="1" /> + <field name="open_boolean" invisible="1" /> + <field name="sh_days_to_reach" invisible="1"/> + <field name="sh_days_to_late" invisible="1"/> + <field name="sh_ticket_report_url" invisible="1"/> + <field name="portal_ticket_url_wp" invisible="1"/> + </h1> + <h1> + <field name="email_subject" placeholder="Email Subject ...."/> + </h1> + <field name="sh_sla_status_ids" widget="many2many_tags" options="{'color_field': 'color'}" readonly="1" force_save="1" groups="sh_helpdesk.group_helpdesk_sla_policy"/> + </div> + <group> + <group> + <field name="sh_display_multi_user" invisible="1" /> + <field name="sh_display_product" invisible="1" /> + <field name="company_id" groups="base.group_multi_company" readonly="1" /> + <field name="state" /> + <field name="ticket_type" /> + <field name="ticket_allocated" invisible="1" /> + <field name="team_id" groups="sh_helpdesk.helpdesk_group_team_leader,sh_helpdesk.helpdesk_group_manager" /> + <field name="team_head" readonly="1" force_save="1" groups="sh_helpdesk.helpdesk_group_team_leader,sh_helpdesk.helpdesk_group_manager" /> + <field name="user_id" groups="sh_helpdesk.helpdesk_group_team_leader,sh_helpdesk.helpdesk_group_manager" /> + <field name="sh_user_ids" widget="many2many_tags" attrs="{'invisible':[('sh_display_multi_user','=',False)]}" groups="sh_helpdesk.helpdesk_group_team_leader,sh_helpdesk.helpdesk_group_manager" /> + <field name="subject_id" /> + <field name="category_id" attrs="{'invisible':[('category_bool','=',False)]}" /> + <field name="sub_category_id" attrs="{'invisible':[('sub_category_bool','=',False)]}" /> + <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}" /> + <field name="priority" /> + </group> + <group> + <field name="create_date" string="Create Date" /> + <field name="write_date" string="Last Update Date" /> + <field name="sh_due_date"/> + <field name="partner_id" /> + <field name="person_name" /> + <field name="email" /> + <field name="mobile_no"/> + <field name="replied_date" /> + <field name="product_ids" widget="many2many_tags" attrs="{'invisible':[('sh_display_product','=',False)]}" /> + <field name="sh_status" invisible="1"/> + <field name="sh_sla_deadline" attrs="{'invisible':[('sh_sla_deadline','=',False)]}" groups="sh_helpdesk.group_helpdesk_sla_policy"/> + <field name="sh_sla_policy_ids" widget="many2many_tags" force_save="1" invisible="1"/> + <field name="sh_ticket_alarm_ids" widget="many2many_tags" groups="sh_helpdesk.group_helpdesk_alarm"/> + </group> + </group> + <notebook> + <page string="Description"> + <group> + <field name="description" /> + </group> + </page> + <page string="Attachments"> + <group> + <field name="attachment_ids" nolabel="1"></field> + </group> + </page> + <page string="Customer Rating" attrs="{'invisible':[('rating_bool','=',False)]}"> + <group> + <field name="priority_new" widget="priority" /> + <field name="customer_comment" /> + </group> + </page> + <page string="Other Information"> + <group> + <group string="Ticket Closed Information"> + <field name="close_date" /> + <field name="close_by" /> + <field name="comment" string="Closed Comment" /> + </group> + <group string="Ticket Cancelled Information"> + <field name="cancel_date" /> + <field name="cancel_by" /> + <field name="cancel_reason" /> + <field name="form_url" invisible="1" /> + </group> + </group> + </page> + </notebook> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids" widget="mail_followers" /> + <field name="message_ids" widget="mail_thread" /> + </div> + </form> + </field> + </record> + <record id="helpdesk_ticket_tree_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.tree.view</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <tree string="Ticket" multi_edit="1"> + <field name="name" /> + <field name="partner_id" /> + <field name="create_date" string="Create Date" /> + <field name="write_date" string="Last Update Date" /> + <field name="ticket_type" /> + <field name="team_id" /> + <field name="team_head" /> + <field name="user_id" /> + <field name="subject_id" /> + <field name="category_id" /> + <field name="sub_category_id" /> + <field name="stage_id" /> + </tree> + </field> + </record> + <record id="helpdesk_ticket_search_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.search.view</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <search string="Helpdesk Ticket Search"> + <field name="name" string="Ticket" filter_domain="['|', '|', '|','|', '|', '|', ('name', 'ilike', self), ('sh_user_ids.name', 'ilike', self),('user_id.name', 'ilike', self),('email','ilike',self),('mobile_no','ilike',self),('partner_id.name','ilike',self),('email_subject','ilike',self)]"/> + <field name="create_date" /> + <field name="write_date" /> + <field name="partner_id" /> + <field name="ticket_type" /> + <field name="team_id" /> + <field name="team_head" /> + <field name="user_id" /> + <field name="subject_id" /> + <field name="category_id" /> + <field name="sub_category_id" /> + <field name="stage_id" /> + <separator /> + <filter string="My Ticket" name="assigned_to_me" domain="[('create_uid', '=', uid)]" /> + <separator /> + <filter string="Completed Tickets" name="complete_ticket" domain="[('done_stage_boolean', '=', True)]" /> + <filter string="Cancelled Tickets" name="cancel_ticket" domain="[('cancel_stage_boolean', '=', True)]" /> + <filter string="Archived" name="archived" domain="[('active', '=', False)]" /> + <separator /> + <filter string="Upcoming SLA Failed" name="upcoming" domain="[('sh_sla_deadline','!=',False),('sh_sla_deadline', '<=', (datetime.date.today() + relativedelta(days=1)).strftime('%Y-%m-%d'))]" groups="sh_helpdesk.group_helpdesk_sla_policy" /> + <filter string="SLA Failed" name="sla_failed" domain="[('sh_status','=','sla_failed')]" groups="sh_helpdesk.group_helpdesk_sla_policy" /> + <filter string="SLA Passed" name="sla_passed" domain="[('sh_status','=','sla_passed')]" groups="sh_helpdesk.group_helpdesk_sla_policy" /> + <filter string="SLA Partially Passed" name="sh_partially_passed" domain="[('sh_status','=','sh_partially_passed')]" groups="sh_helpdesk.group_helpdesk_sla_policy" /> + <group expand="0" string="Group By"> + <filter string="Created By" name="user" context="{'group_by':'create_uid'}" /> + <filter string="Ticket Type" name="ticket_type" context="{'group_by':'ticket_type'}" /> + <filter name="stage" string="Stage" context="{'group_by':'stage_id'}" /> + <filter name="customer" string="Customer" context="{'group_by':'partner_id'}" /> + <filter name="category" string="Category" context="{'group_by':'category_id'}" /> + <filter name="subcategory" string="Sub Category" context="{'group_by':'sub_category_id'}" /> + <filter name="team" string="Team" context="{'group_by':'team_id'}" /> + <filter name="team_head" string="Team Head" context="{'group_by':'team_head'}" /> + <filter name="user_id" string="Assigned User" context="{'group_by':'user_id'}" /> + <filter name="subject" string="Subject" context="{'group_by':'subject_id'}" /> + <filter name="priority" string="Priority" context="{'group_by':'priority'}" /> + <filter name="state" string="Reply Status" context="{'group_by':'state'}" /> + </group> + <searchpanel> + <field name="company_id" icon="fa-building" /> + <field name="state" icon="fa-folder" /> + <field name="stage_id" icon="fa-folder" /> + <field name="ticket_type" icon="fa-folder" /> + <field name="team_id" icon="fa-user-plus" /> + <field name="user_id" icon="fa-users" /> + <field name="partner_id" icon="fa-users" /> + <field name="subject_id" icon="fa-book" /> + <field name="category_id" icon="fa-list" /> + <field name="sub_category_id" icon="fa-list-alt" /> + <field name="priority" icon="fa-level-up" /> + </searchpanel> + </search> + </field> + </record> + <record model="ir.ui.view" id="helpdesk_ticket_kanban"> + <field name="name">helpdesk.ticket.kanban</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <kanban default_group_by="stage_id" class="o_kanban_small_column o_opportunity_kanban" archivable="false" examples="sh_helpdesk" sample="1"> + <field name="name" /> + <field name="color" /> + <field name="priority" /> + <field name="stage_id" /> + <field name="user_id" /> + <field name="tag_ids" /> + <field name="email_subject"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> + <div class="oe_kanban_content"> + <div> + <strong> + <field name="name" /><t t-if="record.priority.value">:<field name="priority" /></t> + </strong> + </div> + <div> + <t t-if="record.email_subject.value"> + <span t-att-title="record.email_subject.value" style="overflow: hidden;text-overflow: ellipsis;display:block;-webkit-line-clamp: 1;-webkit-box-orient: vertical;"><field name="email_subject"/></span> + </t> + </div> + <div> + <strong> + <field name="partner_id" /> + </strong> + </div> + <div> + <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" /> + </div> + <div> + <strong> + <field name="stage_id" /> + </strong> + </div> + <div> + <field name="create_date" /> + </div> + <div class="o_kanban_record_bottom"> + <div class="oe_kanban_bottom_right"> + <img t-att-src="kanban_image('res.users', 'image_1920', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar" /> + </div> + </div> + </div> + <div class="oe_clear" /> + </div> + </t> + </templates> + </kanban> + </field> + </record> + <record id="helpdesk_ticket_calendar" model="ir.ui.view"> + <field name="name">helpdesk.ticket.calendar</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <calendar string="Tickets" date_start="create_date" color="user_id"> + <field name="name" /> + <field name="partner_id" /> + <field name="stage_id" /> + </calendar> + </field> + </record> + <record model="ir.ui.view" id="helpdesk_ticket_pivot"> + <field name="name">helpdesk.ticket.pivot</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <pivot string="Tickets" disable_linking="True"> + <field name="create_date" interval="month" type="row" /> + <field name="stage_id" type="col" /> + <field name="partner_id" type="row" /> + </pivot> + </field> + </record> + + <record model="ir.ui.view" id="helpdesk_ticket_graph"> + <field name="name">helpdesk.ticket.graph</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <graph string="Tickets"> + <field name="stage_id" type="col" /> + <field name="user_id" type="row" /> + </graph> + </field> + </record> + <record id="helpdesk_ticket_action" model="ir.actions.act_window"> + <field name="name">Helpdesk Tickets</field> + <field name="res_model">helpdesk.ticket</field> + <field name="view_mode">kanban,tree,form,pivot,graph,calendar,activity</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create">Create a New Ticket</p> + </field> + </record> + <menuitem id="helpdesk_tickets_menu" name="Tickets" parent="sh_helpdesk.helpdesk_main_menu" sequence="2" action="helpdesk_ticket_action" /> + <record model="ir.ui.view" id="helpdesk_ticket_sla_pivot"> + <field name="name">helpdesk.ticket</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <pivot string="Helpdesk SLA Analysis" disable_linking="True" sample="1"> + <field name="team_id" type="row"/> + <field name="stage_id" type="row"/> + <field name="create_date" interval="month" type="col"/> + <field name="sh_status" type="col"/> + <field name="sh_days_to_reach" type="measure"/> + <field name="sh_days_to_late" type="measure"/> + </pivot> + </field> + </record> + <record id="helpdesk_ticket_sla_action" model="ir.actions.act_window"> + <field name="name">Helpdesk SLA Analysis</field> + <field name="res_model">helpdesk.ticket</field> + <field name="view_mode">pivot</field> + </record> + <menuitem id="menu_helpdesk_sla_analysis" name="Helpdesk SLA Analysis" parent="sh_helpdesk.helpdesk_reporting_menu" action="helpdesk_ticket_sla_action" groups="sh_helpdesk.group_helpdesk_sla_policy" /> +</odoo> diff --git a/sh_helpdesk/views/report_views.xml b/sh_helpdesk/views/report_views.xml new file mode 100644 index 0000000..ec488dc --- /dev/null +++ b/sh_helpdesk/views/report_views.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="action_report_helpdesk_ticket" model="ir.actions.report"> + <field name="name">Helpdesk Ticket</field> + <field name="model">helpdesk.ticket</field> + <field name="report_type">qweb-pdf</field> + <field name="report_name">sh_helpdesk.report_helpdeskticket</field> + <field name="report_file">sh_helpdesk.report_helpdeskticket</field> + <field name="binding_model_id" ref="model_helpdesk_ticket" /> + <field name="binding_type">report</field> + </record> + <record id="action_portal_report_helpdesk_ticket" model="ir.actions.report"> + <field name="name">Helpdesk Ticket</field> + <field name="model">helpdesk.ticket</field> + <field name="report_type">qweb-pdf</field> + <field name="report_name">sh_helpdesk.report_portal_helpdeskticket</field> + <field name="report_file">sh_helpdesk.report_portal_helpdeskticket</field> + <field name="binding_model_id" ref="model_helpdesk_ticket" /> + <field name="groups_id" eval="[(4, ref('base.group_portal'))]"/> + <field name="binding_type">report</field> + </record> +</odoo> diff --git a/sh_helpdesk/views/res_users.xml b/sh_helpdesk/views/res_users.xml new file mode 100644 index 0000000..9cce7f6 --- /dev/null +++ b/sh_helpdesk/views/res_users.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="sh_res_users_form_view" model="ir.ui.view"> + <field name="name">res.users</field> + <field name="model">res.users</field> + <field name="inherit_id" ref="base.view_users_form"/> + <field name="arch" type="xml"> + <xpath expr="//div[hasclass('oe_title')]//field[@name='partner_id']" position="after"> + <field name="sh_portal_user" invisible="1"/> + <field name="sh_portal_user_access" attrs="{'invisible':[('sh_portal_user','=',False)]}" /> + </xpath> + </field> + </record> + <record id="sh_users_form_simple_inherit_modif" model="ir.ui.view"> + <field name="name">res.users</field> + <field name="model">res.users</field> + <field name="inherit_id" ref="base.view_users_form_simple_modif" /> + <field name="arch" type="xml"> + <xpath expr="//footer" position="before"> + <group name="Signature"> + <field name="sign" /> + </group> + </xpath> + </field> + </record> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/send_mail_quick_reply.xml b/sh_helpdesk/views/send_mail_quick_reply.xml new file mode 100644 index 0000000..fdc51ba --- /dev/null +++ b/sh_helpdesk/views/send_mail_quick_reply.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="sh_helpdesk_form_view" model="ir.ui.view"> + <field name="name">sh.quick.reply</field> + <field name="model">sh.quick.reply</field> + <field name="arch" type="xml"> + <form string="Send Quick Reply Mail Template"> + <sheet> + <div class="oe_button_box" name="button_box"> + <widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}" /> + </div> + <group> + <group> + <field name="name" /> + <field name="sh_user_id" /> + <field name="commom_for_all" /> + </group> + <group> + <field name="active" invisible="1" /> + </group> + </group> + <group> + <field name="sh_description" /> + </group> + </sheet> + </form> + </field> + </record> + <record id="sh_helpdesk_tree_view" model="ir.ui.view"> + <field name="name">sh.quick.reply</field> + <field name="model">sh.quick.reply</field> + <field name="arch" type="xml"> + <tree string="Send Quick Reply Mail Template"> + <field name="name" /> + <field name="sh_user_id" /> + </tree> + </field> + </record> + <record id="sh_helpdesk_action" model="ir.actions.act_window"> + <field name="name">Send Quick Reply Mail Template</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">sh.quick.reply</field> + <field name="view_mode">tree,form</field> + </record> + <menuitem id="sh_send_quick_reply_menu" name="Send Quick Reply" parent="sh_helpdesk.helpdesk_main_menu" groups="sh_helpdesk.group_send_quick_reply" action="sh_helpdesk_action" sequence="4" /> +</odoo>
\ No newline at end of file diff --git a/sh_helpdesk/views/sh_helpdeks_report_portal.xml b/sh_helpdesk/views/sh_helpdeks_report_portal.xml new file mode 100644 index 0000000..0c6e6fb --- /dev/null +++ b/sh_helpdesk/views/sh_helpdeks_report_portal.xml @@ -0,0 +1,255 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <template id="helpdesk_portal_ticket_template"> + <t t-call="web.external_layout"> + <div class="page"> + <div class="container"> + <br /> + <br /> + <br /> + <div class="row"> + <div class="col-6"> + <h2><span t-field="o.name" /></h2> + </div> + </div> + <br /> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Type</strong> + </div> + <div class="col-6"> + <span t-field="o.ticket_type" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Create Date</strong> + </div> + <div class="col-6"> + <span t-field="o.create_date" t-options='{"widget": "date"}' /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Reply Status</strong> + </div> + <div class="col-6"> + <span t-field="o.state" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Last Update Date</strong> + </div> + <div class="col-6"> + <span t-field="o.write_date" t-options='{"widget": "date"}' /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Status</strong> + </div> + <div class="col-6"> + <span t-field="o.stage_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer</strong> + </div> + <div class="col-6"> + <span t-field="o.partner_id" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Person Name</strong> + </div> + <div class="col-6"> + <span t-field="o.person_name" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Subject Type</strong> + </div> + <div class="col-6"> + <span t-field="o.subject_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Email</strong> + </div> + <div class="col-6"> + <span t-field="o.email" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Category</strong> + </div> + <div class="col-6"> + <span t-field="o.category_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Replied Date</strong> + </div> + <div class="col-6"> + <span t-field="o.replied_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Sub Category</strong> + </div> + <div class="col-6"> + <span t-field="o.sub_category_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed Date</strong> + </div> + <div class="col-6"> + <span t-field="o.close_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Priority</strong> + </div> + <div class="col-6"> + <span t-field="o.priority" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed By</strong> + </div> + <div class="col-6"> + <span t-field="o.close_by" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Date</strong> + </div> + <div class="col-6"> + <span t-field="o.cancel_date" /> + </div> + </div> + </div> + <div class="col-6"></div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Reason</strong> + </div> + <div class="col-6"> + <span t-field="o.cancel_reason" /> + </div> + </div> + </div> + <div class="col-6"></div> + </div> + <div class="row"> + <div class="col-12"> + <h2>Description</h2> + </div> + </div> + <div class="row"> + <div class="col-12"> + <span t-field="o.description" /> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Rating</strong> + </div> + <div class="col-6"> + <span title="Rating" role="img" t-attf-aria-label="Rating: #{o.priority_new} on 3"> + <t t-foreach="range(2, 7)" t-as="i"> + <span t-attf-class="fa fa-lg fa-star#{'' if i <= int(o.priority_new) else '-o'}" /> + </t> + </span> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Comment</strong> + </div> + <div class="col-6"> + <span t-field="o.customer_comment" /> + </div> + </div> + </div> + </div> + </div> + </div> + </t> + </template> + <template id="report_portal_helpdeskticket"> + <t t-call="web.html_container"> + <t t-foreach="docs" t-as="o"> + <t t-call="sh_helpdesk.helpdesk_portal_ticket_template" t-lang="o.partner_id.lang" /> + </t> + </t> + </template> +</odoo> diff --git a/sh_helpdesk/views/sh_report_helpdesk_ticket_template.xml b/sh_helpdesk/views/sh_report_helpdesk_ticket_template.xml new file mode 100644 index 0000000..edf35c9 --- /dev/null +++ b/sh_helpdesk/views/sh_report_helpdesk_ticket_template.xml @@ -0,0 +1,277 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <template id="helpdesk_ticket_template"> + <t t-call="web.external_layout"> + <div class="page"> + <div class="container"> + <br /> + <br /> + <br /> + <div class="row"> + <div class="col-12"> + <h2> + <span t-field="o.name" /> + </h2> + </div> + </div> + <br /> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Type</strong> + </div> + <div class="col-6"> + <span t-field="o.ticket_type" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Create Date</strong> + </div> + <div class="col-6"> + <span t-field="o.create_date" t-options='{"widget": "date"}' /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Team</strong> + </div> + <div class="col-6"> + <span t-field="o.team_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Last Update Date</strong> + </div> + <div class="col-6"> + <span t-field="o.write_date" t-options='{"widget": "date"}' /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Team Head</strong> + </div> + <div class="col-6"> + <span t-field="o.team_head" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer</strong> + </div> + <div class="col-6"> + <span t-field="o.partner_id" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Assigned User</strong> + </div> + <div class="col-6"> + <span t-field="o.user_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Person Name</strong> + </div> + <div class="col-6"> + <span t-field="o.person_name" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Ticket Subject Type</strong> + </div> + <div class="col-6"> + <span t-field="o.subject_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Email</strong> + </div> + <div class="col-6"> + <span t-field="o.email" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Category</strong> + </div> + <div class="col-6"> + <span t-field="o.category_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Replied Date</strong> + </div> + <div class="col-6"> + <span t-field="o.replied_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Sub Category</strong> + </div> + <div class="col-6"> + <span t-field="o.sub_category_id" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed Date</strong> + </div> + <div class="col-6"> + <span t-field="o.close_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Priority</strong> + </div> + <div class="col-6"> + <span t-field="o.priority" /> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Closed By</strong> + </div> + <div class="col-6"> + <span t-field="o.close_by" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"></div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Date</strong> + </div> + <div class="col-6"> + <span t-field="o.cancel_date" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-6"></div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Cancelled Reason</strong> + </div> + <div class="col-6"> + <span t-field="o.cancel_reason" /> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-3"> + <strong>Products</strong> + </div> + <div class="col-9"> + <span t-if='o.sh_display_product'> + <span t-field="o.product_ids" /> + </span> + </div> + </div> + <div class="row mt-2"> + <div class="col-12"> + <h2>Description</h2> + </div> + </div> + <div class="row"> + <div class="col-12"> + <span t-field="o.description" /> + </div> + </div> + <div class="row"> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Rating</strong> + </div> + <div class="col-6"> + <span title="Rating" role="img" t-attf-aria-label="Rating: #{o.priority_new} on 3"> + <t t-foreach="range(2, 7)" t-as="i"> + <span t-attf-class="fa fa-lg fa-star#{'' if i <= int(o.priority_new) else '-o'}" /> + </t> + </span> + </div> + </div> + </div> + <div class="col-6"> + <div class="row"> + <div class="col-6"> + <strong>Customer Comment</strong> + </div> + <div class="col-6"> + <span t-field="o.customer_comment" /> + </div> + </div> + </div> + </div> + </div> + </div> + </t> + </template> + <template id="report_helpdeskticket"> + <t t-call="web.html_container"> + <t t-foreach="docs" t-as="o"> + <t t-call="sh_helpdesk.helpdesk_ticket_template" t-lang="o.partner_id.lang" /> + </t> + </t> + </template> +</odoo> diff --git a/sh_helpdesk/views/sh_ticket_feedback_template.xml b/sh_helpdesk/views/sh_ticket_feedback_template.xml new file mode 100644 index 0000000..7463d70 --- /dev/null +++ b/sh_helpdesk/views/sh_ticket_feedback_template.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <template id="assets_frontend_ticket" name="crm assets" inherit_id="web.assets_frontend"> + <xpath expr="." position="inside"> + <link type="text/scss" rel="stylesheet" href="/sh_helpdesk/static/src/css/feedback.scss" /> + </xpath> + </template> + <template id="helpdesk_ticket_feedback_page" name="Helpdesk Ticket Feedback Page"> + <t t-call="web.frontend_layout"> + <div class="container"> + <div class="mt16 mb16"> + <h1 class="text-center">Your Feedback</h1> + </div> + <form method="POST" t-attf-action="/helpdesk/ticket/feedback/#{ticket}" id="smileys"> + <input type="radio" name="smiley" value="6" class="very-happy" checked="checked" /> + <input type="radio" name="smiley" value="5" class="happy" /> + <input type="radio" name="smiley" value="4" class="neutral" /> + <input type="radio" name="smiley" value="3" class="sad" /> + <input type="radio" name="smiley" value="2" class="very-sad" /> + <div class="form-group"> + <input type="hidden" name="ticket_id" id="ticket_id" t-att-value="ticket" style="display: none;" /> + <label for="comment">Comment</label> + <textarea class="form-control" rows="5" name="comment"></textarea> + </div> + + <div class="form-group"> + <button id="feedback_btn" class="btn btn-primary btn-lg">Submit Feedback</button> + </div> + <div>It looks like you're feeling <span id="result" onclick="updateValue(this)">happy</span> today..</div> + </form> + </div> + </t> + </template> + <template id="ticket_feedback_thank_you" name="Helpdesk Ticket Thank You"> + <t t-call="web.login_layout"> + <div class="container"> + <h1>Thanks!</h1> + <div class="row"> + <div class="col-md-12"> + <div class="alert alert-success" role="status"> + Thank you for your valuable feedback to us. + <button type="button" class="close" data-dismiss="alert">&times;</button> + </div> + </div> + </div> + </div> + </t> + </template> +</odoo> diff --git a/sh_helpdesk/views/ticket_dashboard_templates.xml b/sh_helpdesk/views/ticket_dashboard_templates.xml new file mode 100644 index 0000000..9e1d7fc --- /dev/null +++ b/sh_helpdesk/views/ticket_dashboard_templates.xml @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <template id="sh_web_layout" inherit_id="web.layout" name="Web layout"> + <xpath expr="//head/meta[last()]" position="after"> + <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> + </xpath> + </template> + <template id="ticket_dashboard_count" name="My Dashboard Count"> + <div id="js_ticket_count_div"> + <div> + <div class="row"> + <t t-foreach="data_dict.keys()" t-as="value"> + <t t-if="data_dict"> + <t t-foreach="data_dict[value]" t-as="v"> + <div class="col-lg-3 col-md-4 col-sm-12"> + <a class="sh_tile_click custom" href="#" t-att-data-res_ids="v or []"> + <div class="card card_1 custom-card" href="#"> + <div class="sh-card-body dash1 badge-info" style="background-color: #445ee9;"> + <div class="media"> + <i class="fa fa-clock-o fs-20 text-white align-self-center mr-3"></i> + <div style="display: inline-block;color: white;"> + <h3 class="mt-0"><t t-esc="len(v)" /></h3> + <p><span t-esc="value" /></p> + </div> + </div> + </div> + </div> + </a> + </div> + </t> + <br /> + </t> + </t> + </div> + </div> + </div> + </template> + <template id="ticket_dashboard_tbl" name="My Ticket Table"> + <div id="js_ticket_tbl_div"> + <div> + <div class="row" style="margin: 0;"> + <t t-if="ticket_data_dic"> + <div class="modal fade whatsapp_modal" tabindex="-1" role="dialog" aria-labelledby="whatsappModalLabel" aria-hidden="true"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="whatsappModalLabel">Send By Whatsapp</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">&times;</span> + </button> + </div> + <div class="modal-body"> + <form> + <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" /> + <div class="form-group" style="display: flex;align-items: center;"> + <label for="ticket_partner_id" style="margin-bottom: 0;font-weight: 600;width:100px">Partner</label> + <select class="form-select form-select-lg mb-3 custom-select" id="ticket_partner_id" required="True" style="margin-bottom: 0 !important;"> + <option value="select_partner">Select Partner</option> + <t t-foreach="request.env['res.partner'].sudo().search([])" t-as="partner"> + <option t-att-value="partner.id"><t t-esc="partner.name_get()[0][1]" /></option> + </t> + </select> + </div> + <div class="form-group" style="display: flex;align-items: center;margin-bottom: 1.3rem;"> + <label for="partner_mobile_no" style="font-weight: 600;margin-bottom: 0;width: 100px;">Mobile No</label> + <input id="partner_mobile_no" name="partner_mobile_no" class="form-control" type="text" placeholder="Enter Mobile No with conutry code" required="True" /> + </div> + <div class="form-group" style="display: flex;align-items: center;margin-bottom: 1.3rem;"> + <label for="whatsapp_message" style="font-weight: 600;width: 100px;margin-bottom: 0;">Message</label> + <textarea class="form-control rounded-0" id="whatsapp_message" required="True"></textarea> + </div> + <div class="form-group"> + <p> + <strong>Note:</strong><br /> + 1) Use *text* to make text bold.<br /> + 2) Use _text_ to make text italic.<br /> + 3) Use %0A after/before Text if you want to add blank line.<br /> + 4) use %20 after/before any Text if you want to give space.<br /> + 5) go to users => preferences to add signature. + </p> + </div> + </form> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary" id="send">Send</button> + </div> + </div> + </div> + </div> + <t t-foreach="ticket_data_dic.keys()" t-as="ticket"> + <div class="col-md-12" style="margin-bottom: 20px; box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); padding-left: 0 !important; padding-right: 0 !important;"> + <h3 style="padding: 10px; margin-top: 7px; margin-bottom: 7px;"> + <b> + <span>Stage :</span> + <span t-esc="ticket" /> + </b> + </h3> + <div class="table-responsive"> + <table class="table" style="margin-bottom: 0.5rem;"> + <tr> + <th>Ticket No</th> + <th>Customer Name</th> + <th>Mobile Number</th> + <th>Create Date</th> + <th>Last Update Date</th> + <th>Assign User</th> + <th style="padding-left: 25px;">Action</th> + <th style="display: none;"></th> + </tr> + <t t-if="len(ticket_data_dic[ticket])==0"> + <tr> + <td colspan="7"> + Data not available. + </td> + </tr> + </t> + <t t-if="len(ticket_data_dic[ticket])>0"> + <tr t-foreach="ticket_data_dic[ticket]" t-as="order"> + <td> + <a t-att-href="'/web#id=%s&view_type=form&model=helpdesk.ticket' % (order.get('ticket_id'))" target="_blank"><span t-esc="order.get('ticket_no')" /></a> + </td> + <td><span t-esc="order.get('partner_name')" /></td> + <td><span t-esc="order.get('partner_mobile')" /></td> + <td><span t-esc="order.get('create_date')" /></td> + <td><span t-esc="order.get('write_date')" /></td> + <td><span t-esc="order.get('user_id')" /></td> + <td> + <a style="cursor: pointer;" class="btn-success" t-att-href="'/web#id=%s&view_type=form&model=helpdesk.ticket' % (order.get('ticket_id'))" target="_blank"> + <i class="fa fa-eye" /> + </a> + &nbsp; + <button style="cursor: pointer;" class="btn-success mark-whatsapp"><i class="fa fa-whatsapp" /></button> + </td> + <td style="display: none;"> + <input type="hidden" id="partner_id" name="partner_id" t-att-value="order.get('partner_id')" t-att-data-mobile="order.get('partner_mobile') or ''" /> + </td> + </tr> + </t> + </table> + </div> + </div> + <br /> + </t> + </t> + </div> + </div> + </div> + </template> +</odoo> diff --git a/sh_helpdesk/views/ticket_dashboard_view.xml b/sh_helpdesk/views/ticket_dashboard_view.xml new file mode 100644 index 0000000..5789233 --- /dev/null +++ b/sh_helpdesk/views/ticket_dashboard_view.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id="sh_ticket_dashboard_kanban_view" model="ir.ui.view"> + <field name="name">Ticket Dashboard</field> + <field name="model">ticket.dashboard</field> + <field name="type">kanban</field> + <field name="arch" type="xml"> + <kanban create="false"> + <field name="name" /> + <templates> + <t t-name="kanban-box"> + <section id="dashboard_counter" class="counter-area" style="min-width: 100% !important; width: 100% !important;"> + <script type="text/javascript" src="/sh_helpdesk/static/src/js/filter.js" /> + <link rel="stylesheet" type="text/css" href="/sh_helpdesk/static/src/css/ticket_dashboard.css" /> + <div class="container"> + <section class="drop_btn sh_drop_btn"> + <div class="row"> + <div class="col-md-4 col-sm-4" id="leader_div"> + <div class="sh_btn"> + <div class="dropdown"> + <select id="team_leader" class="btn btn-primary dropdown-toggle"> + <option value="0" selected="True">Team Leader</option> + </select> + </div> + </div> + </div> + <div class="col-md-4 col-sm-4" id="team_div"> + <div class="sh_btn"> + <div class="dropdown"> + <select id="team" class="btn btn-primary dropdown-toggle"> + <option value="0" selected="True">Team</option> + </select> + </div> + </div> + </div> + <div class="col-md-4 col-sm-4" id="assign_user_div"> + <div class="sh_btn"> + <div class="dropdown"> + <select id="assign_user" class="btn btn-primary dropdown-toggle"> + <option value="0" selected="True">Assign User</option> + </select> + </div> + </div> + </div> + <br /> + <br /> + <div class="col-md-4 col-sm-4"> + <div class="sh_btn"> + <div class="dropdown"> + <select id="days_filter" class="btn btn-primary dropdown-toggle"> + <option value="all" selected="True">Select Date</option> + <option value="today">Today</option> + <option value="yesterday">Yesterday</option> + <option value="weekly">Current Week</option> + <option value="prev_week">Previous Week</option> + <option value="monthly">Current Month</option> + <option value="prev_month">Previous Month</option> + <option value="cur_year">Current Year</option> + <option value="prev_year">Previous Year</option> + <option value="custom">Custom</option> + </select> + </div> + </div> + </div> + + <div class="col-md-3 col-sm-4 col-12 col-lg-2"> + <input type="date" id="start_date" name="start_date" class="form-control o_hidden" /> + </div> + <div class="col-md-3 col-sm-4 col-12 col-lg-2"> + <input type="date" id="end_date" name="end_date" class="form-control o_hidden" /> + </div> + </div> + </section> + <br /> + <br /> + <section id="dashboard_counter" class="counter-area" style="min-width: 100% !important; width: 100% !important;"> + <div id="js_ticket_count_div"></div> + <br /> + <br /> + <div id="js_ticket_tbl_div"></div> + </section> + </div> + </section> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="sh_action_ticket_dashboard" model="ir.actions.act_window"> + <field name="name">Ticket Dashboard</field> + <field name="res_model">ticket.dashboard</field> + <field name="view_mode">kanban,form</field> + <field name="view_id" ref="sh_ticket_dashboard_kanban_view" /> + </record> + <menuitem id="helpdesk_dashboard_menu" name="Dashboard" parent="sh_helpdesk.helpdesk_main_menu" sequence="1" action="sh_action_ticket_dashboard" /> +</odoo> |
