| @ -1,5 +1,26 @@ | |||
| from . import website_form | |||
| from . import portal | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from . import helpdesk_website | |||
| from . import portal | |||
| from . import ticket_search | |||
| from . import ticket_group_by | |||
| from . import website | |||
|  | |||
| @ -0,0 +1,22 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
| <!--    Ticket types--> | |||
|     <record id="helpdesk_types_question" model="helpdesk.types"> | |||
|         <field name="name">Question</field> | |||
|     </record> | |||
|     <record id="helpdesk_types_issue" model="helpdesk.types"> | |||
|         <field name="name">Issue</field> | |||
|     </record> | |||
|     <record id="helpdesk_types_repair" model="helpdesk.types"> | |||
|         <field name="name">Repair</field> | |||
|     </record> | |||
|     <record id="helpdesk_types_maintenance" model="helpdesk.types"> | |||
|         <field name="name">Maintenance</field> | |||
|     </record> | |||
|     <record id="helpdesk_categories_internal" model="helpdesk.categories"> | |||
|         <field name="name">Internal</field> | |||
|     </record> | |||
|     <record id="helpdesk_categories_technical" model="helpdesk.categories"> | |||
|         <field name="name">Technical</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <data noupdate="1"> | |||
| <!--        Auto close ticket--> | |||
|         <record id="ir_cron_auto_close_ticket" model="ir.cron"> | |||
|             <field name="name">Auto Close Ticket</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="state">code</field> | |||
|             <field name="code">model.auto_close_ticket()</field> | |||
|             <field name="user_id" ref="base.user_root"/> | |||
|             <field name="interval_number">1</field> | |||
|             <field name="interval_type">days</field> | |||
|             <field name="numbercall">-1</field> | |||
|         </record> | |||
|     </data> | |||
| </odoo> | |||
| @ -0,0 +1,211 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--Ticket mail template--> | |||
|     <record id="mail_template_create_ticket" model="mail.template"> | |||
|         <field name="name">Create Ticket</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="email_to">{{object.customer_id.email}}</field> | |||
|         <field name="subject">Ticket Created</field> | |||
|         <field name="body_html" type="html"> | |||
|             <p> | |||
|                 Dear | |||
|                 <t t-out="object.customer_id.name"/> | |||
|                 <br/> | |||
|                 Your Ticket | |||
|                 <t t-out="object.name"/> | |||
|                 is Created and Assigned.Kindly Wait while we're resolving | |||
|                 your Query | |||
|                 <br/> | |||
|                 <br/> | |||
|                 Thanks. | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--     Helpdesk ticket Rating template--> | |||
|     <record id="mail_template_ticket_rating" model="mail.template"> | |||
|         <field name="name">Close Ticket And Feedback</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="email_to">{{object.customer_id.email}}</field> | |||
|         <field name="subject">Ticket Closed</field> | |||
|         <field name="body_html" type="html"> | |||
|             <p> | |||
|                 Dear | |||
|                 <t t-out="object.customer_id.name"/> | |||
|                 Your Ticket | |||
|                 <t t-out="object.name"/> | |||
|                 Is Closed | |||
|                 <br/> | |||
|                 <button class="btn btn-info" role="button" | |||
|                         style="border:1px solid black;background-color:purple;padding-x:20px;padding-y:15px;border-radius:10px; width:120px;"> | |||
|                     <a t-attf-href="/rating/{{object.id}}" | |||
|                        style="text-decoration:none;color:white;font-weight:bold;font-size:18px;"> | |||
|                         Rate Now | |||
|                     </a> | |||
|                 </button> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 Thanks. | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--        Ticket response sending formate--> | |||
|     <record id="mail_template_ticket_reopened" model="mail.template"> | |||
|         <field name="name">Reopened Ticket</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="email_to">{{object.customer_id.email}}</field> | |||
|         <field name="subject">Ticket Reopened</field> | |||
|         <field name="body_html" type="html"> | |||
|             <p> | |||
|                 Dear | |||
|                 <t t-out="object.customer_id.name"/> | |||
|                 <br/> | |||
|                 Your Ticket | |||
|                 <t t-out="object.name"/> | |||
|                 is Reopened | |||
|                 <br/> | |||
|                 <br/> | |||
|                 Thanks. | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--        Ticket approved sending formate--> | |||
|     <record id="mail_template_ticket_approved" model="mail.template"> | |||
|         <field name="name">Approve Ticket</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="email_to">{{object.customer_id.email}}</field> | |||
|         <field name="subject">Ticket Solved</field> | |||
|         <field name="body_html" type="html"> | |||
|             <p> | |||
|                 Dear | |||
|                 <t t-out="object.customer_id.name"/> | |||
|                 <br/> | |||
|                 i think your Problem is Solved. | |||
|                 Your Ticket | |||
|                 <t t-out="object.name"/> | |||
|                 is Done | |||
|                 <br/> | |||
|                 <br/> | |||
|                 Thanks. | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--  Cancelled tickets  formate--> | |||
|     <record id="mail_template_ticket_canceled" model="mail.template"> | |||
|         <field name="name">Cancel Ticket</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="email_to">{{object.customer_id.email}}</field> | |||
|         <field name="subject">Ticket Canceled</field> | |||
|         <field name="body_html" type="html"> | |||
|             <p> | |||
|                 Dear | |||
|                 <t t-out="object.customer_id.name"/> | |||
|                 <br/> | |||
|                 Your Ticket | |||
|                 <t t-out="object.name"/> | |||
|                 is Canceled Due to Some Reasons | |||
|                 <br/> | |||
|                 <br/> | |||
|                 Thanks. | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--        Mail formate to inform the Team to assign a task--> | |||
|         <record id="mail_template_odoo_website_helpdesk_assign" | |||
|                 model="mail.template"> | |||
|             <field name="name">Ticket Assign</field> | |||
|             <field name="email_from"/> | |||
|             <field name="email_to"/> | |||
|             <field name="subject"/> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear, | |||
|                         <t t-esc="object.team_head.name"/> | |||
|                     </p> | |||
|                     <p>Your team has been given the ticket [<t | |||
|                             t-esc="object.name"/>] kindly complete your work | |||
|                         carefully. | |||
|                     </p> | |||
|                     <br/> | |||
|                     <h2>Details</h2> | |||
|                     <p>Subject : | |||
|                         <t t-esc="object.subject"/> | |||
|                     </p> | |||
|                     <p>Customer : | |||
|                         <t t-esc="object.customer_id.name"/> | |||
|                     </p> | |||
|                     <p>Description : | |||
|                         <t t-esc="object.description"/> | |||
|                     </p> | |||
|                     <br/> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
| <!--      Mail sending formate to inform the user to assign the task--> | |||
|         <record id="mail_template_odoo_website_helpdesk_assign_user" | |||
|                 model="mail.template"> | |||
|             <field name="name">Ticket Assign to User</field> | |||
|             <field name="email_from"/> | |||
|             <field name="email_to"/> | |||
|             <field name="subject"/> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear, | |||
|                         <t t-esc="object.assigned_user.name"/> | |||
|                     </p> | |||
|                     <p>Ticket [<t t-esc="object.name"/>] Assign to you , kindly | |||
|                         complete your work carefully. | |||
|                     </p> | |||
|                     <br/> | |||
|                     <h2>Details</h2> | |||
|                     <p>Subject : | |||
|                         <t t-esc="object.subject"/> | |||
|                     </p> | |||
|                     <p>Customer : | |||
|                         <t t-esc="object.customer_id.name"/> | |||
|                     </p> | |||
|                     <p>Description : | |||
|                         <t t-esc="object.description"/> | |||
|                     </p> | |||
|                     <br/> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
| <!--       Mail sending to the customer for informing the assigned user--> | |||
|         <record id="mail_template_odoo_website_helpdesk_to_customer" | |||
|                 model="mail.template"> | |||
|             <field name="name">Mail To Customer Assign to User</field> | |||
|             <field name="email_from"/> | |||
|             <field name="email_to"/> | |||
|             <field name="subject"/> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear, | |||
|                         <t t-esc="object.customer_id.name"/> | |||
|                     </p> | |||
|                     <p>Ticket [<t t-esc="object.name"/>] successfully assigned | |||
|                         to "<t t-esc="object.assigned_user.name"/>". | |||
|                     </p> | |||
|                     <br/> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
| </odoo> | |||
| @ -1,121 +0,0 @@ | |||
| <odoo> | |||
|     <data> | |||
|           <record id="ticket_created" model="mail.template"> | |||
|           <field name="name">Create Ticket</field> | |||
|           <field name="model_id" ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|           <field name="auto_delete" eval="True"/> | |||
|           <field name="email_to">{{object.customer_id.email}}</field> | |||
|           <field name="subject">Ticket Created</field> | |||
|           <field name="body_html" type="html"> | |||
|               <p> | |||
|                   Dear <t t-out="object.customer_id.name"/> | |||
|                   <br/> | |||
|                   Your Ticket  <t t-out="object.name"/> is Created and Assigned.Kindly Wait while we're resolving your Query | |||
|                   <br/> | |||
|                   <br/> | |||
|                   Thanks. | |||
|             </p> | |||
| 
 | |||
|           </field> | |||
|       </record> | |||
| 
 | |||
|         <record id="helpdesk_rating" model="mail.template"> | |||
|             <field name="name">Close Ticket And Feedback</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <!--          <field name="email_from">{{object.customer_id.email}}</field>--> | |||
|             <field name="email_to">{{object.customer_id.email}}</field> | |||
|             <field name="subject">Ticket Closed</field> | |||
|             <field name="body_html" type="html"> | |||
|                 <p> | |||
|                     Dear | |||
|                     <t t-out="object.customer_id.name"/> | |||
|                     Your Ticket | |||
|                     <t t-out="object.name"/> | |||
|                     Is Closed | |||
|                     <br/> | |||
| 
 | |||
|                     <button class="btn btn-info" role="button" | |||
|                             style="border:1px solid black;background-color:purple;padding-x:20px;padding-y:15px;border-radius:10px; width:120px;"> | |||
|                         <a t-attf-href="/rating/{{object.id}}" | |||
|                            style="text-decoration:none;color:white;font-weight:bold;font-size:18px;"> | |||
|                             Rate Now | |||
|                         </a> | |||
|                     </button> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     Thanks. | |||
|                 </p> | |||
| 
 | |||
|             </field> | |||
|         </record> | |||
|         <record id="ticket_reopened" model="mail.template"> | |||
|             <field name="name">Reopened Ticket</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <field name="email_to">{{object.customer_id.email}}</field> | |||
|             <field name="subject">Ticket Reopened</field> | |||
|             <field name="body_html" type="html"> | |||
|                 <p> | |||
|                     Dear | |||
|                     <t t-out="object.customer_id.name"/> | |||
|                     <br/> | |||
|                     Your Ticket | |||
|                     <t t-out="object.name"/> | |||
|                     is Reopened | |||
|                     <br/> | |||
|                     <br/> | |||
|                     Thanks. | |||
|                 </p> | |||
| 
 | |||
|             </field> | |||
|         </record> | |||
|         <record id="ticket_approved" model="mail.template"> | |||
|             <field name="name">Approve Ticket</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <field name="email_to">{{object.customer_id.email}}</field> | |||
|             <field name="subject">Ticket Solved</field> | |||
|             <field name="body_html" type="html"> | |||
|                 <p> | |||
|                     Dear | |||
|                     <t t-out="object.customer_id.name"/> | |||
|                     <br/> | |||
|                     i think your Problem is Solved. | |||
|                     Your Ticket | |||
|                     <t t-out="object.name"/> | |||
|                     is Done | |||
|                     <br/> | |||
|                     <br/> | |||
|                     Thanks. | |||
|                 </p> | |||
| 
 | |||
|             </field> | |||
|         </record> | |||
|         <record id="ticket_canceled" model="mail.template"> | |||
|             <field name="name">Cancel Ticket</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <field name="email_to">{{object.customer_id.email}}</field> | |||
|             <field name="subject">Ticket Canceled</field> | |||
|             <field name="body_html" type="html"> | |||
|                 <p> | |||
|                     Dear | |||
|                     <t t-out="object.customer_id.name"/> | |||
|                     <br/> | |||
|                     Your Ticket | |||
|                     <t t-out="object.name"/> | |||
|                     is Canceled Due to Some Reasons | |||
|                     <br/> | |||
|                     <br/> | |||
|                     Thanks. | |||
|                 </p> | |||
| 
 | |||
|             </field> | |||
|         </record> | |||
|     </data> | |||
| </odoo> | |||
| @ -1,79 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <data noupdate="1"> | |||
|             <record id="auto_close_ticket" model="ir.cron"> | |||
|             <field name="name">Auto Close Ticket</field> | |||
|             <field name="model_id" ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="state">code</field> | |||
|             <field name="code">model.auto_close_ticket()</field> | |||
|             <field name="user_id" ref="base.user_root"/> | |||
|             <field name="interval_number">1</field> | |||
|             <field name="interval_type">days</field> | |||
|             <field name="numbercall">-1</field> | |||
|         </record> | |||
|          <record id="odoo_website_helpdesk_assign" | |||
|                 model="mail.template"> | |||
|             <field name="name">Ticket Assign</field> | |||
|             <field name="email_from"></field> | |||
|             <field name="email_to"></field> | |||
|             <field name="subject"></field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear,<t t-esc="object.team_head.name"/></p> | |||
|                     <p> Your team has been given the ticket [<t t-esc="object.name"/>] kindly complete your work carefully. | |||
|                     </p> | |||
|                     <br></br> | |||
|                     <h2>Details </h2> | |||
|                     <p>Subject : <t t-esc="object.subject"/></p> | |||
|                     <p>Customer : <t t-esc="object.customer_id.name"/></p> | |||
|                     <p>Description : <t t-esc="object.description"/></p> | |||
|                     <br></br> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
|         <record id="odoo_website_helpdesk_assign_user" | |||
|                 model="mail.template"> | |||
|             <field name="name">Ticket Assign to User</field> | |||
|             <field name="email_from"></field> | |||
|             <field name="email_to"></field> | |||
|             <field name="subject"></field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear,<t t-esc="object.assigned_user.name"/></p> | |||
|                     <p> Ticket [<t t-esc="object.name"/>] Assign to you , kindly complete your work carefully. | |||
|                     </p> | |||
|                     <br></br> | |||
|                     <h2>Details </h2> | |||
|                     <p>Subject : <t t-esc="object.subject"/></p> | |||
|                     <p>Customer : <t t-esc="object.customer_id.name"/></p> | |||
|                     <p>Description : <t t-esc="object.description"/></p> | |||
|                     <br></br> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
|         <record id="odoo_website_helpdesk_to_customer" | |||
|                 model="mail.template"> | |||
|             <field name="name">Mail To Customer Assign to User</field> | |||
|             <field name="email_from"></field> | |||
|             <field name="email_to"></field> | |||
|             <field name="subject"></field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="body_html" type="html"> | |||
|                 <div style="margin: 0px; padding: 0px;"> | |||
|                     <p>Dear,<t t-esc="object.customer_id.name"/></p> | |||
|                     <p> Ticket [<t t-esc="object.name"/>] successfully assigned to "<t t-esc="object.assigned_user.name"/>". | |||
|                     </p> | |||
|                     <br></br> | |||
|                     <p>Best regards</p> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
|     </data> | |||
| </odoo> | |||
| @ -1,31 +1,39 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
|     <!-- Project Stages --> | |||
|     <record id="stage_inbox" model="ticket.stage"> | |||
|     <record id="ticket_stage_inbox" model="ticket.stage"> | |||
|         <field name="sequence">10</field> | |||
|         <field name="name">Inbox</field> | |||
|     </record> | |||
|     <record id="stage_draft" model="ticket.stage"> | |||
| <!--    Draft--> | |||
|     <record id="ticket_stage_draft" model="ticket.stage"> | |||
|         <field name="sequence">15</field> | |||
|         <field name="name">Draft</field> | |||
|     </record> | |||
|     <record id="stage_done" model="ticket.stage"> | |||
|         <field name="sequence">25</field> | |||
|         <field name="name">Done</field> | |||
|     </record> | |||
|     <record id="stage_in_progress" model="ticket.stage"> | |||
| <!--In progress--> | |||
|     <record id="ticket_stage_in_progress" model="ticket.stage"> | |||
|         <field name="sequence">20</field> | |||
|         <field name="starting_stage" eval="True"/> | |||
|         <field name="name">In Progress</field> | |||
|     </record> | |||
|     <record id="stage_closed" model="ticket.stage"> | |||
|         <field name="sequence">30</field> | |||
|         <field name="closing_stage">True</field> | |||
|         <field name="name">Closed</field> | |||
| <!--Done--> | |||
|     <record id="ticket_stage_done" model="ticket.stage"> | |||
|         <field name="sequence">25</field> | |||
|         <field name="name">Done</field> | |||
|         <field name="folded" eval="True"/> | |||
|     </record> | |||
|     <record id="stage_canceled" model="ticket.stage"> | |||
|         <field name="sequence">35</field> | |||
|         <field name="cancel_stage">True</field> | |||
| <!--Cancelled--> | |||
|     <record id="ticket_stage_cancel" model="ticket.stage"> | |||
|         <field name="sequence">30</field> | |||
|         <field name="name">Canceled</field> | |||
|         <field name="cancel_stage" eval="True"/> | |||
|         <field name="folded" eval="True"/> | |||
|     </record> | |||
| <!--    Closed--> | |||
|     <record id="ticket_stage_closed" model="ticket.stage"> | |||
|         <field name="sequence">29</field> | |||
|         <field name="name">Closed</field> | |||
|         <field name="closing_stage" eval="True"/> | |||
|         <field name="folded" eval="True"/> | |||
|     </record> | |||
| </odoo> | |||
|  | |||
| @ -1,21 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
|     <record id="ticket_type_1" model="helpdesk.types"> | |||
|         <field name="name">Question</field> | |||
|     </record> | |||
|     <record id="ticket_type_2" model="helpdesk.types"> | |||
|         <field name="name">Issue</field> | |||
|     </record> | |||
|     <record id="ticket_type_3" model="helpdesk.types"> | |||
|         <field name="name">Repair</field> | |||
|     </record> | |||
|     <record id="ticket_type_4" model="helpdesk.types"> | |||
|         <field name="name">Maintenance</field> | |||
|     </record> | |||
|     <record id="ticket_categories_1" model="helpdesk.categories"> | |||
|         <field name="name">Internal</field> | |||
|     </record> | |||
|     <record id="ticket_categories_2" model="helpdesk.categories"> | |||
|         <field name="name">Technical</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -1,13 +1,6 @@ | |||
| ## Module <odoo_website_helpdesk> | |||
| 
 | |||
| #### 01.09.2023 | |||
| #### 04.12.2023 | |||
| #### Version 16.0.1.0.0 | |||
| #### ADD | |||
| 
 | |||
| - Initial commit for Website Helpdesk Support Ticket | |||
| 
 | |||
| #### 28.11.2023 | |||
| #### Version 16.0.1.0.1 | |||
| #### FIX | |||
| 
 | |||
| - Updated the End date when changed the stage to Closed | |||
| - Initial commit for Website Helpdesk Support Ticket Management | |||
|  | |||
| @ -1,59 +0,0 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import api, fields, models | |||
| 
 | |||
| 
 | |||
| class HelpDeskTeam(models.Model): | |||
|     """Helpdesk team""" | |||
|     _name = 'help.team' | |||
|     _description = 'Helpdesk Team' | |||
| 
 | |||
|     name = fields.Char('Name', help='Helpdesk Team Name') | |||
|     team_lead_id = fields.Many2one('res.users', string='Team Leader', | |||
|                                    help='Team Leader Name', | |||
|                                    domain=lambda self: [ | |||
|                                        ('groups_id', 'in', self.env.ref( | |||
|                                            'odoo_website_helpdesk.helpdesk_team_leader').id)]) | |||
|     member_ids = fields.Many2many('res.users', string='Members', | |||
|                                   help='Team Members', | |||
|                                   domain=lambda self: [ | |||
|                                       ('groups_id', 'in', self.env.ref( | |||
|                                           'odoo_website_helpdesk.helpdesk_user').id)]) | |||
|     email = fields.Char('Email', help='Email') | |||
|     project_id = fields.Many2one('project.project', | |||
|                                  string='Project', | |||
|                                  help='Projects') | |||
|     create_task = fields.Boolean(string="Create Task", | |||
|                                  help="Task created or not") | |||
| 
 | |||
|     @api.onchange('team_lead_id') | |||
|     def members_choose(self): | |||
|         """Members selection function""" | |||
|         fetch_memebers = self.env['res.users'].search([]) | |||
|         filterd_members = fetch_memebers.filtered( | |||
|             lambda x: x.id != self.team_lead_id.id) | |||
|         return {'domain': {'member_ids': | |||
|                                [('id', '=', filterd_members.ids), ( | |||
|                                'groups_id', 'in', | |||
|                                self.env.ref('base.group_user').id), | |||
|                                 ('groups_id', 'not in', self.env.ref( | |||
|                                     'odoo_website_helpdesk.helpdesk_team_leader').id)]}} | |||
| @ -0,0 +1,65 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import api, fields, models | |||
| 
 | |||
| 
 | |||
| class HelpTeam(models.Model): | |||
|     """ This class represents a Helpdesk Team in the system, providing | |||
|      information about the team members, leader, and related project.""" | |||
|     _name = 'help.team' | |||
|     _description = 'Helpdesk Team' | |||
| 
 | |||
|     name = fields.Char(string='Name', help='Name of the Helpdesk Team. It ' | |||
|                                            'identify the helpdesk team') | |||
|     team_lead_id = fields.Many2one( | |||
|         'res.users', | |||
|         string='Team Leader', | |||
|         help='Name of the Helpdesk Team Leader.', | |||
|         domain=lambda self: [('groups_id', 'in', self.env.ref( | |||
|             'odoo_website_helpdesk.helpdesk_team_leader').id)]) | |||
|     member_ids = fields.Many2many( | |||
|         'res.users', | |||
|         string='Members', | |||
|         help='Users who belong to that Helpdesk Team', | |||
|         domain=lambda self: [('groups_id', 'in', self.env.ref( | |||
|             'odoo_website_helpdesk.helpdesk_user').id)]) | |||
|     email = fields.Char(string='Email', help='Email') | |||
|     project_id = fields.Many2one('project.project', | |||
|                                  string='Project', | |||
|                                  help='The Project they are currently in') | |||
|     create_task = fields.Boolean(string="Create Task", | |||
|                                  help="Enable for allowing team to " | |||
|                                       "create tasks from tickets") | |||
| 
 | |||
|     @api.onchange('team_lead_id') | |||
|     def members_choose(self): | |||
|         """ This method is triggered when the Team Leader is changed. It | |||
|         updates the available team members based on the selected leader and | |||
|         filters out the leader from the list of potential members.""" | |||
|         fetch_members = self.env['res.users'].search([]) | |||
|         filtered_members = fetch_members.filtered( | |||
|             lambda x: x.id != self.team_lead_id.id) | |||
|         return {'domain': {'member_ids': [ | |||
|             ('id', '=', filtered_members.ids), | |||
|             ('groups_id', 'in', self.env.ref('base.group_user').id), | |||
|             ('groups_id', 'not in', self.env.ref( | |||
|                 'odoo_website_helpdesk.helpdesk_team_leader').id)]}} | |||
| @ -0,0 +1,34 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models | |||
| 
 | |||
| 
 | |||
| class HelpdeskCategories(models.Model): | |||
|     """This class represents the Helpdesk Categories, providing information | |||
|     about different categories that can be assigned to helpdesk items. | |||
|    """ | |||
|     _name = 'helpdesk.categories' | |||
|     _description = 'Helpdesk Categories' | |||
| 
 | |||
|     name = fields.Char(string='Name', help='Category Name') | |||
|     sequence = fields.Integer(string='Sequence', default=0, | |||
|                               help='Sequence of a Category') | |||
| @ -0,0 +1,30 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models | |||
| 
 | |||
| 
 | |||
| class HelpdeskTypes(models.Model): | |||
|     """Its handle to control helpdesk ticket types """ | |||
|     _name = 'helpdesk.types' | |||
|     _description = 'Helpdesk Types' | |||
| 
 | |||
|     name = fields.Char(string='Type', help='Types helpdesk tickets') | |||
| @ -0,0 +1,42 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models | |||
| 
 | |||
| 
 | |||
| class ProjectTask(models.Model): | |||
|     """ | |||
|     This class extends the 'project.task' model in Odoo to add a custom field | |||
|      called 'ticket_billed' and 'ticket_id'. | |||
|      ticket_billed: A boolean field indicating whether the ticket has | |||
|      been billed or not. | |||
|      ticket_id : A many2One field to link the task | |||
|     with a help ticket | |||
|     """ | |||
|     _inherit = 'project.task' | |||
| 
 | |||
|     ticket_billed = fields.Boolean(string='Billed', | |||
|                                    help='Whether the Ticket has been Invoiced' | |||
|                                         'or Not') | |||
|     ticket_id = fields.Many2one('help.ticket', string='Ticket', | |||
|                                 help='The help ticket associated with this ' | |||
|                                      'recordThis field allows you to link ' | |||
|                                      'this record to an existing help ticket.') | |||
| @ -1,100 +0,0 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import api, fields, models | |||
| 
 | |||
| 
 | |||
| class Menu(models.Model): | |||
|     """Inheriting the website menu""" | |||
|     _inherit = "website.menu" | |||
| 
 | |||
|     def _compute_visible(self): | |||
|         """Compute visible""" | |||
|         super()._compute_visible() | |||
|         show_menu_header = self.env['ir.config_parameter'].sudo().get_param( | |||
|             'odoo_website_helpdesk.helpdesk_menu_show') | |||
|         for menu in self: | |||
|             if menu.name == 'Helpdesk' and show_menu_header == False: | |||
|                 menu.is_visible = False | |||
|             if menu.name == 'Helpdesk' and show_menu_header == True: | |||
|                 menu.is_visible = True | |||
| 
 | |||
| 
 | |||
| class Helpdesk(models.TransientModel): | |||
|     """Inheriting the res config""" | |||
|     _inherit = 'res.config.settings' | |||
| 
 | |||
|     show_create_task = fields.Boolean(string="Create Tasks", | |||
|                                       config_parameter='odoo_website_helpdesk.show_create_task', | |||
|                                       help='Create Task') | |||
|     show_category = fields.Boolean(string="Category", | |||
|                                    config_parameter='odoo_website_helpdesk.show_category', | |||
|                                    help='Category', | |||
|                                    implied_group='odoo_website_helpdesk.group_show_category') | |||
|     product_website = fields.Boolean(string="Product On Website", | |||
|                                      config_parameter='odoo_website_helpdesk.product_website', | |||
|                                      help='Product on website') | |||
|     auto_close_ticket = fields.Boolean(string="Auto Close Ticket", | |||
|                                        config_parameter='odoo_website_helpdesk.auto_close_ticket', | |||
|                                        help='Auto Close ticket') | |||
|     no_of_days = fields.Integer(string="No Of Days", | |||
|                                 config_parameter='odoo_website_helpdesk.no_of_days', | |||
|                                 help='No of Days') | |||
|     closed_stage = fields.Many2one( | |||
|         'ticket.stage', string='Closing stage', | |||
|         help='Closing Stage', | |||
|         config_parameter='odoo_website_helpdesk.closed_stage') | |||
| 
 | |||
|     reply_template_id = fields.Many2one('mail.template', | |||
|                                         domain="[('model', '=', 'help.ticket')]", | |||
|                                         config_parameter='odoo_website_helpdesk.reply_template_id', | |||
|                                         help='Reply Template') | |||
|     helpdesk_menu_show = fields.Boolean('Helpdesk Menu', | |||
|                                         config_parameter= | |||
|                                         'odoo_website_helpdesk.helpdesk_menu_show', | |||
|                                         help='Helpdesk menu') | |||
| 
 | |||
|     @api.onchange('closed_stage') | |||
|     def closed_stage_a(self): | |||
|         """Closing stage function""" | |||
|         if self.closed_stage: | |||
|             stage = self.closed_stage.id | |||
|             in_stage = self.env['ticket.stage'].search([('id', '=', stage)]) | |||
|             not_in_stage = self.env['ticket.stage'].search([('id', '!=', stage)]) | |||
|             in_stage.closing_stage = True | |||
|             for each in not_in_stage: | |||
|                 each.closing_stage = False | |||
| 
 | |||
|     @api.constrains('show_category') | |||
|     def show_category_subcategory(self): | |||
|         """Show category and the sub category""" | |||
|         if self.show_category: | |||
|             group_cat = self.env.ref( | |||
|                 'odoo_website_helpdesk.group_show_category') | |||
|             group_cat.write({ | |||
|                 'users': [(4, self.env.user.id)] | |||
|             }) | |||
|         else: | |||
|             group_cat = self.env.ref( | |||
|                 'odoo_website_helpdesk.group_show_category') | |||
|             group_cat.write({ | |||
|                 'users': [(5, False)] | |||
|             }) | |||
| @ -0,0 +1,100 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import api, fields, models | |||
| 
 | |||
| 
 | |||
| class ResConfigSettings(models.TransientModel): | |||
|     """This class extends the functionality of the 'res.config.settings' model | |||
|      to provide configuration options for various settings related to the | |||
|      helpdesk module. | |||
|    """ | |||
|     _inherit = 'res.config.settings' | |||
| 
 | |||
|     show_create_task = fields.Boolean( | |||
|         string="Create Tasks", | |||
|         config_parameter='odoo_website_helpdesk.show_create_task', | |||
|         help='When enabling this field yu can create a task under the ticket') | |||
|     show_category = fields.Boolean( | |||
|         string="Category", | |||
|         config_parameter='odoo_website_helpdesk.show_category', | |||
|         help='When enabling this its show the category of ticket', | |||
|         implied_group='odoo_website_helpdesk.group_show_category') | |||
|     product_website = fields.Boolean( | |||
|         string="Product On Website", | |||
|         config_parameter='odoo_website_helpdesk.product_website', | |||
|         help='When enabling this feature you can mention the product on website' | |||
|              ' at time of creating the ticketProduct on website') | |||
|     auto_close_ticket = fields.Boolean( | |||
|         string="Auto Close Ticket", | |||
|         config_parameter='odoo_website_helpdesk.auto_close_ticket', | |||
|         help='Automatically Close ticket if the condition is satisfied') | |||
|     no_of_days = fields.Integer( | |||
|         string="No Of Days", | |||
|         config_parameter='odoo_website_helpdesk.no_of_days', | |||
|         help='After this date the ticket will closing automatically ') | |||
|     closed_stage = fields.Many2one( | |||
|         'ticket.stage', string='Closing stage', | |||
|         help='Closing Stage', | |||
|         config_parameter='odoo_website_helpdesk.closed_stage') | |||
| 
 | |||
|     reply_template_id = fields.Many2one( | |||
|         'mail.template', | |||
|         string='Relaid ID', | |||
|         domain="[('model', '=', 'help.ticket')]", | |||
|         config_parameter='odoo_website_helpdesk.reply_template_id', | |||
|         help='Reply Template') | |||
|     helpdesk_menu_show = fields.Boolean( | |||
|         string='Helpdesk Menu', | |||
|         config_parameter='odoo_website_helpdesk.helpdesk_menu_show', | |||
|         help='When enabling this option to visible Helpdesk menu in website') | |||
| 
 | |||
|     @api.onchange('closed_stage') | |||
|     def closed_stage_a(self): | |||
|         """This method is triggered when the 'closed_stage' field is changed. | |||
|          It updates the 'closing_stage' attribute of the selected stage and | |||
|          clears it for other stages. | |||
|        """ | |||
|         stage = self.closed_stage.id | |||
|         in_stage = self.env['ticket.stage'].search([('id', '=', stage)]) | |||
|         not_in_stage = self.env['ticket.stage'].search([('id', '!=', stage)]) | |||
|         in_stage.closing_stage = True | |||
|         for each in not_in_stage: | |||
|             each.closing_stage = False | |||
| 
 | |||
|     @api.constrains('show_category') | |||
|     def show_category_subcategory(self): | |||
|         """ This constraint method is triggered when the 'show_category' field | |||
|         is changed. It updates the users in the 'group_show_category' based on | |||
|         the 'show_category' value. | |||
|        """ | |||
|         if self.show_category: | |||
|             group_cat = self.env.ref( | |||
|                 'odoo_website_helpdesk.group_show_category') | |||
|             group_cat.write({ | |||
|                 'users': [(4, self.env.user.id)] | |||
|             }) | |||
|         else: | |||
|             group_cat = self.env.ref( | |||
|                 'odoo_website_helpdesk.group_show_category') | |||
|             group_cat.write({ | |||
|                 'users': [(5, False)] | |||
|             }) | |||
| @ -0,0 +1,98 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import fields, models, _ | |||
| from odoo.exceptions import UserError | |||
| 
 | |||
| 
 | |||
| class TicketStage(models.Model): | |||
|     """This model represents the stages of a helpdesk ticket. A stage is used to | |||
|     indicate the current state of a ticket, such as 'New', 'In Progress', | |||
|     'Resolved', or 'Closed'. Stages are used to organize and track the | |||
|     progress of tickets throughout their lifecycle.""" | |||
| 
 | |||
|     _name = 'ticket.stage' | |||
|     _description = 'Ticket Stage' | |||
|     _order = 'sequence, id' | |||
|     _fold_name = 'fold' | |||
| 
 | |||
|     name = fields.Char(string='Name', help='The name of the stage. This field' | |||
|                                            ' is used to identify the stage and' | |||
|                                            ' is displayed in various views ' | |||
|                                            'and reports.') | |||
|     active = fields.Boolean(default=True, | |||
|                             string='Active', | |||
|                             help='Whether the stage is active or not. If this ' | |||
|                                  'field is set to False,the stage will not be ' | |||
|                                  'displayed in various views and reports.') | |||
|     sequence = fields.Integer(string='Sequence', | |||
|                               default=50, | |||
|                               help='The sequence number of the stage. This ' | |||
|                                    'field is used to specify the order in which' | |||
|                                    ' the stages are displayed in various views ' | |||
|                                    'and reports.', ) | |||
|     closing_stage = fields.Boolean(string='Closing Stage', | |||
|                                    help='Whether the stage is a closing stage ' | |||
|                                         'or not. A closing stage is a stage ' | |||
|                                         'that indicates that the helpdesk ' | |||
|                                         'ticket has been resolved or closed.' | |||
|                                         ' This field is used to identify the ' | |||
|                                         'closing stage and is used in various ' | |||
|                                         'calculations and reports.') | |||
|     cancel_stage = fields.Boolean(string='Cancel Stage', | |||
|                                   help='Whether the stage is a cancel stage ' | |||
|                                        'or not. A cancel stage is a stage that' | |||
|                                        'indicate the helpdesk tickets has been ' | |||
|                                        'cancelled or removed') | |||
|     starting_stage = fields.Boolean(string='Start Stage', | |||
|                                     help='Starting  ticket Stage') | |||
|     folded = fields.Boolean(string='Folded in Kanban', | |||
|                             help='Whether the stage is folded in the Kanban ' | |||
|                                  'view or not. If this field is set to True,' | |||
|                                  ' the stage will be displayed in a collapsed ' | |||
|                                  'state in the Kanban view, which can be ' | |||
|                                  'expanded by clicking on it.This field is ' | |||
|                                  'used to control the behavior of the ' | |||
|                                  'Kanban view.') | |||
|     template_id = fields.Many2one('mail.template', | |||
|                                   string='Template', | |||
|                                   help='Choose the template', | |||
|                                   domain="[('model', '=', 'help.ticket')]") | |||
|     group_ids = fields.Many2many('res.groups', | |||
|                                  string='Group', | |||
|                                  help='Choose the group ID') | |||
|     fold = fields.Boolean(string='Fold', help='When enabling this the ticket ' | |||
|                                               'stage will folded on the view') | |||
| 
 | |||
|     def unlink(self): | |||
|         """Deleting the helpdesk tickets from various stage.""" | |||
|         for rec in self: | |||
|             tickets = rec.search([]) | |||
|             sequence = tickets.mapped('sequence') | |||
|             lowest_sequence = tickets.filtered( | |||
|                 lambda x: x.sequence == min(sequence)) | |||
|             if self.name == "Draft": | |||
|                 raise UserError(_("Cannot Delete This Stage")) | |||
|             if rec == lowest_sequence: | |||
|                 raise UserError(_("Cannot Delete '%s'" % (rec.name))) | |||
|             else: | |||
|                 res = super().unlink() | |||
|                 return res | |||
| @ -0,0 +1,61 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################# | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |||
| # | |||
| #    You can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################# | |||
| from odoo import models | |||
| 
 | |||
| 
 | |||
| class WebsiteMenu(models.Model): | |||
|     """ | |||
|      Inheriting the website menu. | |||
| 
 | |||
|      This class inherits from the 'website.menu' model and extends its | |||
|      functionality to compute the visibility of the menu | |||
|      item based on the value of the 'odoo_website_helpdesk.helpdesk_menu_show' | |||
|      configuration parameter. | |||
| 
 | |||
|      Attributes: | |||
|         _inherit (str): The name of the model being inherited. | |||
|     """ | |||
|     _inherit = "website.menu" | |||
| 
 | |||
|     def _compute_visible(self): | |||
|         """ | |||
|         Compute the visibility of the menu item. | |||
| 
 | |||
|         This method is used to determine whether the menu item should be | |||
|         visible or hidden based on the value of the | |||
|         'odoo_website_helpdesk.helpdesk_menu_show' configuration parameter. | |||
| 
 | |||
|         Returns: | |||
|             None | |||
| 
 | |||
|         Side Effects: | |||
|             Sets the 'is_visible' field of the menu item record to True or | |||
|             False accordingly. | |||
|         """ | |||
|         super()._compute_visible() | |||
|         show_menu_header = self.env['ir.config_parameter'].sudo().get_param( | |||
|             'odoo_website_helpdesk.helpdesk_menu_show') | |||
|         for menu in self: | |||
|             if menu.name == 'Helpdesk' and show_menu_header is False: | |||
|                 menu.is_visible = False | |||
|             if menu.name == 'Helpdesk' and show_menu_header is True: | |||
|                 menu.is_visible = True | |||
| 
 | 
| After Width: | Height: | Size: 89 KiB | 
| After Width: | Height: | Size: 93 KiB | 
| After Width: | Height: | Size: 70 KiB | 
| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 101 KiB | 
| After Width: | Height: | Size: 92 KiB | 
| Before Width: | Height: | Size: 59 KiB | 
| Before Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 56 KiB | 
| Before Width: | Height: | Size: 58 KiB | 
| Before Width: | Height: | Size: 119 KiB | 
| Before Width: | Height: | Size: 174 KiB | 
| Before Width: | Height: | Size: 178 KiB | 
| Before Width: | Height: | Size: 218 KiB | 
| Before Width: | Height: | Size: 174 KiB | 
| Before Width: | Height: | Size: 224 KiB | 
| Before Width: | Height: | Size: 172 KiB | 
| Before Width: | Height: | Size: 100 KiB | 
| Before Width: | Height: | Size: 175 KiB | 
| Before Width: | Height: | Size: 101 KiB | 
| Before Width: | Height: | Size: 117 KiB | 
| Before Width: | Height: | Size: 182 KiB | 
| After Width: | Height: | Size: 187 KiB | 
| After Width: | Height: | Size: 42 KiB | 
| Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 109 KiB | 
| After Width: | Height: | Size: 143 KiB | 
| After Width: | Height: | Size: 96 KiB | 
| After Width: | Height: | Size: 85 KiB | 
| After Width: | Height: | Size: 126 KiB | 
| Before Width: | Height: | Size: 154 KiB | 
| After Width: | Height: | Size: 142 KiB | 
| After Width: | Height: | Size: 59 KiB | 
| Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 104 KiB | 
| After Width: | Height: | Size: 108 KiB | 
| Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 106 KiB | 
| After Width: | Height: | Size: 113 KiB | 
| After Width: | Height: | Size: 70 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 35 KiB | 
| After Width: | Height: | Size: 139 KiB | 
| After Width: | Height: | Size: 43 KiB | 
| After Width: | Height: | Size: 98 KiB | 
| After Width: | Height: | Size: 40 KiB | 
| After Width: | Height: | Size: 446 KiB | 
| @ -1,14 +1,23 @@ | |||
| odoo.define('odoo_website_helpdesk.multiple_product_choose', function(require) { | |||
|     "use strict"; | |||
|     var ajax = require('web.ajax'); | |||
|     $(document).ready(function() { | |||
|          ajax.rpc('/product').then(function (res) { | |||
|             var ar = res | |||
|             $('#product').empty() | |||
|             $(ar).each(function(i){ | |||
|             $('#product').append("<option value=" + ar[i].id + ">" + ar[i].name + "</option>"); | |||
|     var rpc = require('web.rpc'); | |||
|     var publicWidget = require('web.public.widget'); | |||
|     publicWidget.registry.SelectProduct = publicWidget.Widget.extend({ | |||
|         selector: '.website_ticket', | |||
|         start: function () { | |||
|             var self = this; | |||
|             rpc.query({ | |||
|                 route: '/product' | |||
|             }).then(function (res) { | |||
|                 var ar = res; | |||
|                 self.$el.find('#product').empty(); | |||
|                 ar.forEach(function (item) { | |||
|                     self.$el.find('#product').append("<option value='" + item.id + "'>" + item.name + "</option>"); | |||
|                 }); | |||
|                 self.$el.find('#product').SumoSelect({ clearAll: true }); | |||
|             }); | |||
|             $('#product').SumoSelect({ clearAll: true }); | |||
|             return this._super.apply(this, arguments); | |||
|         }, | |||
|         }); | |||
|   }); | |||
| }); | |||
|      return publicWidget.registry.SelectProduct; | |||
| }); | |||
|  | |||
| @ -1,16 +0,0 @@ | |||
| odoo.define("odoo_website_helpdesk.portal_group_by", function (require) { | |||
|     "use strict"; | |||
|     var ajax = require('web.ajax'); | |||
|     var core = require('web.core'); | |||
|     var QWeb = core.qweb; | |||
| 
 | |||
|     $("#group_select").on('change', function () { | |||
|     var search_value = $("#group_select").val(); | |||
|     ajax.jsonRpc('/ticketgroupby', 'call', { | |||
|                 'search_value': search_value, | |||
|             }).then(function(result) { | |||
|                 $('.search_ticket').html(result); | |||
|                 }); | |||
|     }) | |||
| 
 | |||
| }) | |||
| @ -0,0 +1,33 @@ | |||
| odoo.define("odoo_website_helpdesk.portal_group_by_and_search", function (require) { | |||
|     "use strict"; | |||
|     var ajax = require('web.ajax'); | |||
|     var publicWidget = require('web.public.widget'); | |||
|     publicWidget.registry.portalSearchGroup = publicWidget.Widget.extend({ | |||
|         selector: '.portal_group_by', | |||
|         events: { | |||
|             'change #group_select': '_onGroupSelectChange', | |||
|             'click #search_ticket': '_searchTickets', | |||
|         }, | |||
| //        GroupBy filtering the portal tickets
 | |||
|         _onGroupSelectChange: function (ev) { | |||
|             var self = this; | |||
|             var searchValue = this.$el.find('#group_select').val(); | |||
|             ajax.jsonRpc('/ticketgroupby', 'call', { | |||
|                 'search_value': searchValue, | |||
|             }).then(function (result) { | |||
|                   $('.search_ticket').html(result); | |||
|             }); | |||
|         }, | |||
| //        Searching the portal tickets
 | |||
|         _searchTickets: function (ev) { | |||
|         var self = this; | |||
|         var search_value = this.$el.find("#search_box").val(); | |||
|         ajax.jsonRpc('/ticketsearch', 'call', { | |||
|                 'search_value': search_value, | |||
|             }).then(function(result) { | |||
|                 var self = this; | |||
|                 $('.search_ticket').html(result); | |||
|                 }); | |||
|         } | |||
|     }); | |||
| }) | |||
| @ -1,16 +0,0 @@ | |||
| odoo.define("odoo_website_helpdesk.portal_search", function (require) { | |||
|     "use strict"; | |||
|     var ajax = require('web.ajax'); | |||
|     var core = require('web.core'); | |||
|     var QWeb = core.qweb; | |||
| 
 | |||
|     $("#search_ticket").on('click', function () { | |||
|     var search_value = $("#search_box").val(); | |||
|     ajax.jsonRpc('/ticketsearch', 'call', { | |||
|                 'search_value': search_value, | |||
|             }).then(function(result) { | |||
|                 $('.search_ticket').html(result); | |||
|                 }); | |||
|     }) | |||
| 
 | |||
| }) | |||
| @ -0,0 +1,272 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <templates> | |||
|     <t t-name="HelpdeskDashBoard"> | |||
|         <section class="dashboard_main_section" id="main_section_manager"> | |||
|             <div class="row"> | |||
|                 <style> | |||
|                     .c-dashboardInfo { | |||
|                     margin-bottom: 15px; | |||
|                     width: 20%; | |||
|                     } | |||
|                     .c-dashboardInfo .wrap { | |||
|                     background: #ffffff; | |||
|                     box-shadow: 2px 10px 20px rgba(0, 0, 0, 0.1); | |||
|                     border-radius: 7px; | |||
|                     text-align: center; | |||
|                     position: relative; | |||
|                     overflow: hidden; | |||
|                     padding: 40px 25px 20px; | |||
|                     height: 100%; | |||
|                     } | |||
|                     .c-dashboardInfo__title, | |||
|                     .c-dashboardInfo__subInfo { | |||
|                     color: #6c6c6c; | |||
|                     font-size: 1.18em; | |||
|                     } | |||
|                     .c-dashboardInfo span { | |||
|                     display: block; | |||
|                     } | |||
|                     .c-dashboardInfo__count { | |||
|                     font-weight: 600; | |||
|                     font-size: 2.5em; | |||
|                     line-height: 64px; | |||
|                     color: #323c43; | |||
|                     } | |||
|                     .c-dashboardInfo .wrap:after { | |||
|                     display: block; | |||
|                     position: absolute; | |||
|                     top: 0; | |||
|                     left: 0; | |||
|                     width: 100%; | |||
|                     height: 10px; | |||
|                     content: ""; | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(1) .wrap:after { | |||
|                     background: linear-gradient(82.59deg, #00c48c 0%, #00a173 | |||
|                     100%); | |||
|                     } | |||
|                     .wrap:hover{ | |||
|                     -webkit-transform: scale(1.2); | |||
|                     -ms-transform: scale(1.2); | |||
|                     transform: scale(1.2); | |||
|                     transition: 1s ease; | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(2) .wrap:after { | |||
|                     background: linear-gradient(81.67deg, #0084f4 0%, #1a4da2 | |||
|                     100%); | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(3) .wrap:after { | |||
|                     background: linear-gradient(69.83deg, #0084f4 0%, #00c48c | |||
|                     100%); | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(4) .wrap:after { | |||
|                     background: linear-gradient(81.67deg, #ff647c 0%, #1f5dc5 | |||
|                     100%); | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(5) .wrap:after { | |||
|                     background: linear-gradient(82.59deg, #00c48c 0%, #00a173 | |||
|                     100%); | |||
|                     } | |||
|                     .c-dashboardInfo:nth-child(6) .wrap:after { | |||
|                     background: linear-gradient(81.67deg, #ff647c 0%, #1f5dc5 | |||
|                     100%); | |||
|                     } | |||
|                     .c-dashboardInfo__title svg { | |||
|                     color: #d7d7d7; | |||
|                     margin-left: 5px; | |||
|                     } | |||
|                     .MuiSvgIcon-root-19 { | |||
|                     fill: currentColor; | |||
|                     width: 1em; | |||
|                     height: 1em; | |||
|                     display: inline-block; | |||
|                     font-size: 24px; | |||
|                     transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; | |||
|                     user-select: none; | |||
|                     flex-shrink: 0; | |||
|                     } | |||
|                     .dropbtn { | |||
|                     background-color: #04AA6D; | |||
|                     color: white; | |||
|                     padding: 16px; | |||
|                     font-size: 16px; | |||
|                     border: none; | |||
|                     width: 16px; | |||
|                     } | |||
|                     .dropdown { | |||
|                     position: relative; | |||
|                     display: inline-block; | |||
|                     } | |||
|                     .dropdown-content { | |||
|                     display: none; | |||
|                     position: absolute; | |||
|                     background-color: #f1f1f1; | |||
|                     min-width: 160px; | |||
|                     box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); | |||
|                     z-index: 1; | |||
|                     } | |||
|                     .dropdown-content a { | |||
|                     color: black; | |||
|                     padding: 12px 16px; | |||
|                     text-decoration: none; | |||
|                     display: block; | |||
|                     } | |||
|                     .dropdown-content a:hover {background-color: #ddd;} | |||
|                     .dropdown:hover .dropdown-content {display: block;} | |||
|                     .dropdown:hover .dropbtn {background-color: #3e8e41;} | |||
|                 </style> | |||
|                 <div class="col-sm-12 mb-4"> | |||
|                     <div class="row"> | |||
|                         <div class="col" | |||
|                              style="margin-top: 28px;margin-left: 88px;height: 48px;"> | |||
|                             <h2 class="section-header" style="color:#4a5c9a;"> | |||
|                                 Helpdesk Dashboard | |||
|                             </h2> | |||
|                         </div> | |||
|                         <div class="col-md-4 d-flex justify-content-end bg-light" | |||
|                              style="margin-top: 20px;margin-right: 20px; padding-bottom: 40px"> | |||
|                             <b style="white-space: nowrap;padding-right: 8px;padding-top: 8px;"> | |||
|                                 Filter by: | |||
|                             </b> | |||
|                             <select id="filter_selection" | |||
|                                     style="width: 50%;padding:10px;border-radius:10px; background:white;"> | |||
|                                 <option id="this_year" value="this_year" | |||
|                                         selected="">This Year | |||
|                                 </option> | |||
|                                 <option id="this_month" | |||
|                                         value="this_month">This Month | |||
|                                 </option> | |||
|                                 <option id="this_week" value="this_week">This | |||
|                                     Week | |||
|                                 </option> | |||
|                             </select> | |||
|                         </div> | |||
|                         <hr/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div id="root"> | |||
|                     <div class="container pt-5"> | |||
|                         <div class="row align-items-stretch"> | |||
|                             <div class="c-dashboardInfo" | |||
|                                  id="new_state"> | |||
|                                 <div class="wrap"> | |||
|                                     <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                         New | |||
|                                         <svg | |||
|                                                 class="MuiSvgIcon-root-19" | |||
|                                                 focusable="false" | |||
|                                                 viewBox="0 0 24 24" | |||
|                                                 aria-hidden="true" | |||
|                                                 role="presentation"> | |||
|                                             <path fill="none" | |||
|                                                   d="M0 0h24v24H0z"/> | |||
|                                             <path | |||
|                                                     d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                             </path> | |||
|                                         </svg> | |||
|                                     </h4> | |||
|                                     <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                           id="new_state_value"> | |||
|                                     </span> | |||
|                                 </div> | |||
|                             </div> | |||
|                             <div class="c-dashboardInfo" | |||
|                                  id="in_progress_state"> | |||
|                                 <div class="wrap"> | |||
|                                     <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                         In Progress | |||
|                                         <svg | |||
|                                                 class="MuiSvgIcon-root-19" | |||
|                                                 focusable="false" | |||
|                                                 viewBox="0 0 24 24" | |||
|                                                 aria-hidden="true" | |||
|                                                 role="presentation"> | |||
|                                             <path fill="none" | |||
|                                                   d="M0 0h24v24H0z"/> | |||
|                                             <path | |||
|                                                     d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                             </path> | |||
|                                         </svg> | |||
|                                     </h4> | |||
|                                     <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                           id="inprogress_value"> | |||
|                                     </span> | |||
|                                 </div> | |||
|                             </div> | |||
|                             <div class="c-dashboardInfo" | |||
|                                  id="cancelled_state"> | |||
|                                 <div class="wrap"> | |||
|                                     <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                         Cancelled | |||
|                                         <svg | |||
|                                                 class="MuiSvgIcon-root-19" | |||
|                                                 focusable="false" | |||
|                                                 viewBox="0 0 24 24" | |||
|                                                 aria-hidden="true" | |||
|                                                 role="presentation"> | |||
|                                             <path fill="none" | |||
|                                                   d="M0 0h24v24H0z"/> | |||
|                                             <path | |||
|                                                     d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                             </path> | |||
|                                         </svg> | |||
|                                     </h4> | |||
|                                     <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                           id="canceled_value"> | |||
| 
 | |||
|                                     </span> | |||
|                                 </div> | |||
|                             </div> | |||
|                             <div class="c-dashboardInfo" | |||
|                                  id="done_state"> | |||
|                                 <div class="wrap"> | |||
|                                     <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                         Done | |||
|                                         <svg | |||
|                                                 class="MuiSvgIcon-root-19" | |||
|                                                 focusable="false" | |||
|                                                 viewBox="0 0 24 24" | |||
|                                                 aria-hidden="true" | |||
|                                                 role="presentation"> | |||
|                                             <path fill="none" | |||
|                                                   d="M0 0h24v24H0z"/> | |||
|                                             <path | |||
|                                                     d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                             </path> | |||
|                                         </svg> | |||
|                                     </h4> | |||
|                                     <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                           id="done_value"> | |||
|                                     </span> | |||
|                                 </div> | |||
|                             </div> | |||
|                             <div class="c-dashboardInfo" | |||
|                                  id="closed_state"> | |||
|                                 <div class="wrap"> | |||
|                                     <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                         Closed | |||
|                                         <svg | |||
|                                                 class="MuiSvgIcon-root-19" | |||
|                                                 focusable="false" | |||
|                                                 viewBox="0 0 24 24" | |||
|                                                 aria-hidden="true" | |||
|                                                 role="presentation"> | |||
|                                             <path fill="none" | |||
|                                                   d="M0 0h24v24H0z"/> | |||
|                                             <path | |||
|                                                     d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                             </path> | |||
|                                         </svg> | |||
|                                     </h4> | |||
|                                     <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                           id="closed_value"> | |||
|                                     </span> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </section> | |||
|     </t> | |||
| </templates> | |||
| @ -1,287 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <template> | |||
|     <t t-name="HelpdeskDashBoard"> | |||
| 
 | |||
|         <section class="dashboard_main_section" id="main_section_manager"> | |||
|             <div class="row"> | |||
|             <style> | |||
|                 .c-dashboardInfo { | |||
|                 margin-bottom: 15px; | |||
|                 width: 20%; | |||
|                 } | |||
|                 .c-dashboardInfo .wrap { | |||
|                 background: #ffffff; | |||
|                 box-shadow: 2px 10px 20px rgba(0, 0, 0, 0.1); | |||
|                 border-radius: 7px; | |||
|                 text-align: center; | |||
|                 position: relative; | |||
|                 overflow: hidden; | |||
|                 padding: 40px 25px 20px; | |||
|                 height: 100%; | |||
|                 } | |||
|                 .c-dashboardInfo__title, | |||
|                 .c-dashboardInfo__subInfo { | |||
|                 color: #6c6c6c; | |||
|                 font-size: 1.18em; | |||
|                 } | |||
|                 .c-dashboardInfo span { | |||
|                 display: block; | |||
|                 } | |||
|                 .c-dashboardInfo__count { | |||
|                 font-weight: 600; | |||
|                 font-size: 2.5em; | |||
|                 line-height: 64px; | |||
|                 color: #323c43; | |||
|                 } | |||
|                 .c-dashboardInfo .wrap:after { | |||
|                 display: block; | |||
|                 position: absolute; | |||
|                 top: 0; | |||
|                 left: 0; | |||
|                 width: 100%; | |||
|                 height: 10px; | |||
|                 content: ""; | |||
|                 } | |||
| 
 | |||
|                 .c-dashboardInfo:nth-child(1) .wrap:after { | |||
|                 background: linear-gradient(82.59deg, #00c48c 0%, #00a173 | |||
|                 100%); | |||
|                 } | |||
|                 .wrap:hover{ | |||
|                 -webkit-transform: scale(1.2); | |||
|                 -ms-transform: scale(1.2); | |||
|                 transform: scale(1.2); | |||
|                 transition: 1s ease; | |||
|                 } | |||
|                 .c-dashboardInfo:nth-child(2) .wrap:after { | |||
|                 background: linear-gradient(81.67deg, #0084f4 0%, #1a4da2 | |||
|                 100%); | |||
|                 } | |||
|                 .c-dashboardInfo:nth-child(3) .wrap:after { | |||
|                 background: linear-gradient(69.83deg, #0084f4 0%, #00c48c | |||
|                 100%); | |||
|                 } | |||
|                 .c-dashboardInfo:nth-child(4) .wrap:after { | |||
|                 background: linear-gradient(81.67deg, #ff647c 0%, #1f5dc5 | |||
|                 100%); | |||
|                 } | |||
|                 .c-dashboardInfo:nth-child(5) .wrap:after { | |||
|                 background: linear-gradient(82.59deg, #00c48c 0%, #00a173 | |||
|                 100%); | |||
|                 } | |||
|                 .c-dashboardInfo:nth-child(6) .wrap:after { | |||
|                 background: linear-gradient(81.67deg, #ff647c 0%, #1f5dc5 | |||
|                 100%); | |||
|                 } | |||
|                 .c-dashboardInfo__title svg { | |||
|                 color: #d7d7d7; | |||
|                 margin-left: 5px; | |||
|                 } | |||
|                 .MuiSvgIcon-root-19 { | |||
|                 fill: currentColor; | |||
|                 width: 1em; | |||
|                 height: 1em; | |||
|                 display: inline-block; | |||
|                 font-size: 24px; | |||
|                 transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; | |||
|                 user-select: none; | |||
|                 flex-shrink: 0; | |||
|                 } | |||
|                 .dropbtn { | |||
|                 background-color: #04AA6D; | |||
|                 color: white; | |||
|                 padding: 16px; | |||
|                 font-size: 16px; | |||
|                 border: none; | |||
|                 width: 16px; | |||
|                 } | |||
| 
 | |||
|                 .dropdown { | |||
|                 position: relative; | |||
|                 display: inline-block; | |||
|                 } | |||
| 
 | |||
|                 .dropdown-content { | |||
|                 display: none; | |||
|                 position: absolute; | |||
|                 background-color: #f1f1f1; | |||
|                 min-width: 160px; | |||
|                 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); | |||
|                 z-index: 1; | |||
|                 } | |||
| 
 | |||
|                 .dropdown-content a { | |||
|                 color: black; | |||
|                 padding: 12px 16px; | |||
|                 text-decoration: none; | |||
|                 display: block; | |||
|                 } | |||
| 
 | |||
|                 .dropdown-content a:hover {background-color: #ddd;} | |||
| 
 | |||
|                 .dropdown:hover .dropdown-content {display: block;} | |||
| 
 | |||
|                 .dropdown:hover .dropbtn {background-color: #3e8e41;} | |||
| 
 | |||
|             </style> | |||
|             <div class="col-sm-12 mb-4"> | |||
|                 <div class="row"> | |||
|                     <div class="col" | |||
|                          style="margin-top: 28px;margin-left: 88px;height: 48px;"> | |||
|                         <h2 class="section-header" style="color:#4a5c9a;"> | |||
|                             Helpdesk Dashboard | |||
|                         </h2> | |||
|                     </div> | |||
|                     <div class="col-md-4 d-flex justify-content-end bg-light" | |||
|                          style="margin-top: 20px;margin-right: 20px; padding-bottom: 40px"> | |||
|                         <b style="white-space: nowrap;padding-right: 8px;padding-top: 8px;">Filter by:</b> | |||
|                         <select id="filter_selection" style="width: 50%;padding:10px;border-radius:10px; background:white;"> | |||
|                             <option id="this_year" value="this_year" | |||
|                                     selected="">This Year | |||
|                             </option> | |||
|                             <option id="this_month" | |||
|                                     value="this_month">This Month | |||
|                             </option> | |||
|                             <option id="this_week" value="this_week">This Week | |||
|                             </option> | |||
|                         </select> | |||
| 
 | |||
|                     </div> | |||
|                     <hr/> | |||
|                 </div> | |||
|             </div> | |||
|             <div id="root"> | |||
|                 <div class="container pt-5"> | |||
|                     <div class="row align-items-stretch"> | |||
|                         <div class="c-dashboardInfo" | |||
|                              id="new_state"> | |||
|                             <div class="wrap"> | |||
|                                 <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                     New | |||
|                                     <svg | |||
|                                             class="MuiSvgIcon-root-19" | |||
|                                             focusable="false" | |||
|                                             viewBox="0 0 24 24" | |||
|                                             aria-hidden="true" | |||
|                                             role="presentation"> | |||
|                                         <path fill="none" | |||
|                                               d="M0 0h24v24H0z"></path> | |||
|                                         <path | |||
|                                                 d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                         </path> | |||
|                                     </svg> | |||
|                                 </h4> | |||
|                                 <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                       id="new_state_value"> | |||
| 
 | |||
|                                 </span> | |||
|                             </div> | |||
|                         </div> | |||
|                         <div class="c-dashboardInfo" | |||
|                              id="in_progress_state"> | |||
|                             <div class="wrap"> | |||
|                                 <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                     In Progress | |||
|                                     <svg | |||
|                                             class="MuiSvgIcon-root-19" | |||
|                                             focusable="false" | |||
|                                             viewBox="0 0 24 24" | |||
|                                             aria-hidden="true" | |||
|                                             role="presentation"> | |||
|                                         <path fill="none" | |||
|                                               d="M0 0h24v24H0z"></path> | |||
|                                         <path | |||
|                                                 d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                         </path> | |||
|                                     </svg> | |||
|                                 </h4> | |||
|                                 <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                       id="inprogress_value"> | |||
| 
 | |||
|                                 </span> | |||
|                             </div> | |||
|                         </div> | |||
|                         <div class="c-dashboardInfo" | |||
|                              id="cancelled_state"> | |||
|                             <div class="wrap"> | |||
|                                 <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                     Cancelled | |||
|                                     <svg | |||
|                                             class="MuiSvgIcon-root-19" | |||
|                                             focusable="false" | |||
|                                             viewBox="0 0 24 24" | |||
|                                             aria-hidden="true" | |||
|                                             role="presentation"> | |||
|                                         <path fill="none" | |||
|                                               d="M0 0h24v24H0z"></path> | |||
|                                         <path | |||
|                                                 d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                         </path> | |||
|                                     </svg> | |||
|                                 </h4> | |||
|                                 <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                       id="canceled_value"> | |||
| 
 | |||
|                                 </span> | |||
|                             </div> | |||
|                         </div> | |||
|                         <div class="c-dashboardInfo" | |||
|                              id="done_state"> | |||
|                             <div class="wrap"> | |||
|                                 <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                     Done | |||
|                                     <svg | |||
|                                             class="MuiSvgIcon-root-19" | |||
|                                             focusable="false" | |||
|                                             viewBox="0 0 24 24" | |||
|                                             aria-hidden="true" | |||
|                                             role="presentation"> | |||
|                                         <path fill="none" | |||
|                                               d="M0 0h24v24H0z"></path> | |||
|                                         <path | |||
|                                                 d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                         </path> | |||
|                                     </svg> | |||
|                                 </h4> | |||
|                                 <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                       id="done_value"> | |||
| 
 | |||
|                                 </span> | |||
|                                 <!--                                <span--> | |||
|                                 <!--                                        class="hind-font caption-12 c-dashboardInfo__subInfo">--> | |||
|                                 <!--                                    Last month: €30--> | |||
|                                 <!--                                </span>--> | |||
|                             </div> | |||
|                         </div> | |||
|                         <div class="c-dashboardInfo" | |||
|                              id="closed_state"> | |||
|                             <div class="wrap"> | |||
|                                 <h4 class="heading heading5 hind-font medium-font-weight c-dashboardInfo__title"> | |||
|                                     Closed | |||
|                                     <svg | |||
|                                             class="MuiSvgIcon-root-19" | |||
|                                             focusable="false" | |||
|                                             viewBox="0 0 24 24" | |||
|                                             aria-hidden="true" | |||
|                                             role="presentation"> | |||
|                                         <path fill="none" | |||
|                                               d="M0 0h24v24H0z"></path> | |||
|                                         <path | |||
|                                                 d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"> | |||
|                                         </path> | |||
|                                     </svg> | |||
|                                 </h4> | |||
|                                 <span class="hind-font caption-12 c-dashboardInfo__count" | |||
|                                       id="closed_value"> | |||
| 
 | |||
|                                 </span> | |||
|                             </div> | |||
|                         </div> | |||
| 
 | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             </div> | |||
|         </section> | |||
|     </t> | |||
| </template> | |||
| @ -1,58 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <data> | |||
| <!--        Helpdesk Replay mail template--> | |||
|         <record id="helpdesk_replay_email_template" model="mail.template"> | |||
|             <field name="name">Helpdesk Reply Email Template</field> | |||
|             <field name="model_id" | |||
|                    ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <field name="subject">{{ object.name }} Replay</field> | |||
|             <field name="body_html" type="html"> | |||
|                 <div class="container"> | |||
|                     <h4 style="text-align:center">Helpdesk Replay</h4> | |||
|                     <div style="min-height:30vh;"> | |||
|                         message........ | |||
|                     </div> | |||
|                     <h6><a t-attf-href="http://cybrosys:8050/@/my/tickets/{{object.id}}" | |||
|                        class="btn btn-primary">View Ticket | |||
|                     </a></h6> | |||
|                         <table class="table table-light" width="100%"> | |||
|                             <tbody> | |||
|                                 <tr> | |||
|                                     <th>Name</th> | |||
|                                     <td> | |||
|                                         <t t-if="object.assigned_user"> | |||
|                                             <t t-esc="object.assigned_user.name"/> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             username | |||
|                                         </t> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <tr> | |||
|                                     <th>Team name</th> | |||
|                                     <td> | |||
|                                         <t t-if="object.team_id"> | |||
|                                             <t t-esc="object.team_id.name"/> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             Team name | |||
|                                         </t> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <tr> | |||
|                                     <th>Replied On</th> | |||
|                                     <td> | |||
|                                         <t t-set="date" | |||
|                                            t-value="(datetime.date.today())"/> | |||
|                                         <t t-esc="date"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </tbody> | |||
|                         </table> | |||
|                 </div> | |||
|             </field> | |||
|         </record> | |||
|     </data> | |||
| </odoo> | |||
| @ -1,13 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <record id="view_helpdesk_categories_tree" model="ir.ui.view"> | |||
|         <field name="name">categories.tree</field> | |||
|         <field name="model">helpdesk.categories</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree string="Categories" editable="bottom"> | |||
|                 <field name="sequence" widget="handle"/> | |||
|                 <field name="name"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,20 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Helpdesk categories view action--> | |||
|     <record id="helpdesk_categories_action" model="ir.actions.act_window"> | |||
|         <field name="name">Categories</field> | |||
|         <field name="res_model">helpdesk.categories</field> | |||
|         <field name="view_mode">tree</field> | |||
|     </record> | |||
|     <!--    Helpdesk category tree view--> | |||
|     <record id="helpdesk_categories_view_tree" model="ir.ui.view"> | |||
|         <field name="name">helpdesk.categories.view.tree</field> | |||
|         <field name="model">helpdesk.categories</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree string="Categories" editable="bottom"> | |||
|                 <field name="sequence" widget="handle"/> | |||
|                 <field name="name"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,61 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--        Helpdesk Replay mail template--> | |||
|     <record id="helpdesk_replay_email_template" model="mail.template"> | |||
|         <field name="name">Helpdesk Reply Email Template</field> | |||
|         <field name="model_id" | |||
|                ref="odoo_website_helpdesk.model_help_ticket"/> | |||
|         <field name="auto_delete" eval="True"/> | |||
|         <field name="subject">{{ object.name }} Replay</field> | |||
|         <field name="body_html" type="html"> | |||
|             <div class="container"> | |||
|                 <h4 style="text-align:center">Helpdesk Replay</h4> | |||
|                 <div style="min-height:30vh;"> | |||
|                     message........ | |||
|                 </div> | |||
|                 <t t-set="base_url" | |||
|                    t-value="request.env['ir.config_parameter'].sudo().get_param('web.base.url')"/> | |||
|                 <h6> | |||
|                     <a t-attf-href="{{base_url}}/my/tickets/{{object.id}}" | |||
|                        class="btn btn-primary">View Ticket | |||
|                     </a> | |||
|                 </h6> | |||
|                 <table class="table table-light" width="100%"> | |||
|                     <tbody> | |||
|                         <tr> | |||
|                             <th>Name</th> | |||
|                             <td> | |||
|                                 <t t-if="object.assigned_user"> | |||
|                                     <t t-esc="object.assigned_user.name"/> | |||
|                                 </t> | |||
|                                 <t t-else=""> | |||
|                                     username | |||
|                                 </t> | |||
|                                 <t t-esc="base_url"/> | |||
|                             </td> | |||
|                         </tr> | |||
|                         <tr> | |||
|                             <th>Team name</th> | |||
|                             <td> | |||
|                                 <t t-if="object.team_id"> | |||
|                                     <t t-esc="object.team_id.name"/> | |||
|                                 </t> | |||
|                                 <t t-else=""> | |||
|                                     Team name | |||
|                                 </t> | |||
|                             </td> | |||
|                         </tr> | |||
|                         <tr> | |||
|                             <th>Replied On</th> | |||
|                             <td> | |||
|                                 <t t-set="date" | |||
|                                    t-value="(datetime.date.today())"/> | |||
|                                 <t t-esc="date"/> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|             </div> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,24 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Helpdesk tag view action--> | |||
|     <record id="helpdesk_tag_action" model="ir.actions.act_window"> | |||
|         <field name="name">Tags</field> | |||
|         <field name="res_model">helpdesk.tag</field> | |||
|         <field name="view_mode">tree</field> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 Create a new record! | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!--Helpdesk tag tree view--> | |||
|     <record id="helpdesk_tag_view_tree" model="ir.ui.view"> | |||
|         <field name="name">helpdesk.tag.view.tree</field> | |||
|         <field name="model">helpdesk.tag</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree editable="bottom"> | |||
|                 <field name="name"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,24 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Helpdesk types view action--> | |||
|     <record id="helpdesk_types_action" model="ir.actions.act_window"> | |||
|         <field name="name">Types</field> | |||
|         <field name="res_model">helpdesk.types</field> | |||
|         <field name="view_mode">tree</field> | |||
|         <field name="help" type="html"> | |||
|             <p class="o_view_nocontent_smiling_face"> | |||
|                 Create a new record! | |||
|             </p> | |||
|         </field> | |||
|     </record> | |||
|     <!-- Helpdesk type tree view--> | |||
|     <record id="helpdesk_types_view_tree" model="ir.ui.view"> | |||
|         <field name="name">helpdesk.types.view.tree</field> | |||
|         <field name="model">helpdesk.types</field> | |||
|         <field name="arch" type="xml"> | |||
|             <tree editable="bottom"> | |||
|                 <field name="name"/> | |||
|             </tree> | |||
|         </field> | |||
|     </record> | |||
| </odoo> | |||