<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
  <classes>
    <class id="UserRequest" _delta="define">
      <parent>Ticket</parent>
      <properties>
        <comment><![CDATA[/**
 * Persistent classes for a CMDB
 *
 * @copyright   Copyright (C) 2010-2024 Combodo SAS
 * @license     http://opensource.org/licenses/AGPL-3.0
 */]]></comment>
        <category>bizmodel,searchable,requestmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>ticket_request</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="ref"/>
          </attributes>
          <complementary_attributes>
            <attribute id="title"/>
          </complementary_attributes>
        </naming>
        <fields_semantic>
          <state_attribute>status</state_attribute>
        </fields_semantic>
        <style>
          <icon>images/user-request.svg</icon>
          <main_color>$ibo-color-blue-800</main_color>
        </style>
        <reconciliation>
          <attributes>
            <attribute id="ref"/>
          </attributes>
        </reconciliation>
        <order>
          <columns>
            <column id="ref" ascending="false"/>
          </columns>
        </order>
      </properties>
      <fields>
        <field id="status" xsi:type="AttributeEnum">
          <always_load_in_tables>true</always_load_in_tables>
          <sort_type>rank</sort_type>
          <values>
            <value id="new">
              <code>new</code>
              <rank>10</rank>
              <style>
                <main_color>$ibo-lifecycle-new-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-new-state-secondary-color</complementary_color>
                <decoration_classes/>
              </style>
            </value>
            <value id="waiting_for_approval">
              <code>waiting_for_approval</code>
              <rank>20</rank>
              <style>
                <main_color>$ibo-lifecycle-waiting-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-waiting-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-hourglass-half</decoration_classes>
              </style>
            </value>
            <value id="approved">
              <code>approved</code>
              <rank>30</rank>
              <style>
                <main_color>$ibo-lifecycle-success-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-user-check</decoration_classes>
              </style>
            </value>
            <value id="rejected">
              <code>rejected</code>
              <rank>40</rank>
              <style>
                <main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-user-times</decoration_classes>
              </style>
            </value>
            <value id="assigned">
              <code>assigned</code>
              <rank>60</rank>
              <style>
                <main_color>$ibo-lifecycle-neutral-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color>
                <decoration_classes/>
              </style>
            </value>
            <value id="pending">
              <code>pending</code>
              <rank>70</rank>
              <style>
                <main_color>$ibo-lifecycle-waiting-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-waiting-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-hourglass-half</decoration_classes>
              </style>
            </value>
            <value id="escalated_tto">
              <code>escalated_tto</code>
              <rank>80</rank>
              <style>
                <main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-fire</decoration_classes>
              </style>
            </value>
            <value id="escalated_ttr">
              <code>escalated_ttr</code>
              <rank>90</rank>
              <style>
                <main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-fire</decoration_classes>
              </style>
            </value>
            <value id="resolved">
              <code>resolved</code>
              <rank>100</rank>
              <style>
                <main_color>$ibo-lifecycle-success-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color>
                <decoration_classes>fas fa-check</decoration_classes>
              </style>
            </value>
            <value id="closed">
              <code>closed</code>
              <rank>110</rank>
              <style>
                <main_color>$ibo-lifecycle-frozen-state-primary-color</main_color>
                <complementary_color>$ibo-lifecycle-frozen-state-secondary-color</complementary_color>
                <decoration_classes/>
              </style>
            </value>
          </values>
          <default_style>
            <main_color>$ibo-lifecycle-neutral-state-primary-color</main_color>
            <complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color>
            <decoration_classes/>
          </default_style>
          <sql>status</sql>
          <default_value>new</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="request_type" xsi:type="AttributeEnum">
          <values>
            <value id="service_request">
              <code>service_request</code>
            </value>
          </values>
          <sql>request_type</sql>
          <default_value>service_request</default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="impact" xsi:type="AttributeEnum">
          <values>
            <value id="1">
              <code>1</code>
            </value>
            <value id="2">
              <code>2</code>
            </value>
            <value id="3">
              <code>3</code>
            </value>
          </values>
          <sql>impact</sql>
          <default_value>1</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="priority" xsi:type="AttributeEnum">
          <values>
            <value id="1">
              <code>1</code>
            </value>
            <value id="2">
              <code>2</code>
            </value>
            <value id="3">
              <code>3</code>
            </value>
            <value id="4">
              <code>4</code>
            </value>
          </values>
          <dependencies>
            <attribute id="impact"/>
            <attribute id="urgency"/>
          </dependencies>
          <sql>priority</sql>
          <default_value>4</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="urgency" xsi:type="AttributeEnum">
          <values>
            <value id="1">
              <code>1</code>
            </value>
            <value id="2">
              <code>2</code>
            </value>
            <value id="3">
              <code>3</code>
            </value>
            <value id="4">
              <code>4</code>
            </value>
          </values>
          <sql>urgency</sql>
          <default_value>4</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="origin" xsi:type="AttributeEnum">
          <sort_type>label</sort_type>
          <values>
            <value id="in_person">
              <code>in_person</code>
            </value>
            <value id="chat">
              <code>chat</code>
            </value>
            <value id="mail">
              <code>mail</code>
            </value>
            <value id="phone">
              <code>phone</code>
            </value>
            <value id="portal">
              <code>portal</code>
            </value>
          </values>
          <sql>origin</sql>
          <default_value>phone</default_value>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="approver_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[
						SELECT Person WHERE org_id= :this->org_id
						]]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <sql>approver_id</sql>
          <target_class>Person</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <allow_target_creation>false</allow_target_creation>
        </field>
        <field id="approver_email" xsi:type="AttributeExternalField">
          <extkey_attcode>approver_id</extkey_attcode>
          <target_attcode>email</target_attcode>
        </field>
        <field id="service_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT Service AS s JOIN lnkCustomerContractToService AS l1 ON l1.service_id=s.id JOIN CustomerContract AS cc ON l1.customercontract_id=cc.id WHERE cc.org_id = :this->org_id AND s.status != 'obsolete']]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <sql>service_id</sql>
          <target_class>Service</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <allow_target_creation>false</allow_target_creation>
        </field>
        <field id="service_name" xsi:type="AttributeExternalField">
          <extkey_attcode>service_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="servicesubcategory_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT ServiceSubcategory WHERE service_id = :this->service_id AND request_type = :this->request_type AND status != 'obsolete']]></filter>
          <dependencies>
            <attribute id="service_id"/>
            <attribute id="request_type"/>
          </dependencies>
          <sql>servicesubcategory_id</sql>
          <target_class>ServiceSubcategory</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <allow_target_creation>false</allow_target_creation>
          <jointype/>
        </field>
        <field id="servicesubcategory_name" xsi:type="AttributeExternalField">
          <extkey_attcode>servicesubcategory_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="escalation_flag" xsi:type="AttributeEnum">
          <values>
            <value id="yes">
              <code>yes</code>
            </value>
            <value id="no">
              <code>no</code>
            </value>
          </values>
          <sql>escalation_flag</sql>
          <default_value>no</default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="escalation_reason" xsi:type="AttributeString">
          <sql>escalation_reason</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="assignment_date" xsi:type="AttributeDateTime">
          <sql>assignment_date</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="resolution_date" xsi:type="AttributeDateTime">
          <sql>resolution_date</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="last_pending_date" xsi:type="AttributeDateTime">
          <sql>last_pending_date</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="cumulatedpending" xsi:type="AttributeStopWatch">
          <states>
            <state id="pending"/>
          </states>
          <working_time/>
          <thresholds/>
          <goal/>
        </field>
        <field id="tto" xsi:type="AttributeStopWatch">
          <always_load_in_tables>true</always_load_in_tables>
          <states>
            <state id="new"/>
            <state id="escalated_tto"/>
            <state id="approved"/>
          </states>
          <working_time/>
          <goal>ResponseTicketTTO</goal>
          <thresholds>
            <threshold id="75">
              <highlight>
                <code>warning</code>
                <persistent>false</persistent>
              </highlight>
              <actions>
							</actions>
            </threshold>
            <threshold id="100">
              <highlight>
                <code>critical</code>
                <persistent>false</persistent>
              </highlight>
              <actions>
                <action>
                  <verb>ApplyStimulus</verb>
                  <params>
                    <param>ev_timeout</param>
                  </params>
                </action>
              </actions>
            </threshold>
          </thresholds>
        </field>
        <field id="ttr" xsi:type="AttributeStopWatch">
          <always_load_in_tables>true</always_load_in_tables>
          <states>
            <state id="new"/>
            <state id="escalated_tto"/>
            <state id="assigned"/>
            <state id="approved"/>
            <state id="escalated_ttr"/>
          </states>
          <working_time/>
          <goal>ResponseTicketTTR</goal>
          <thresholds>
            <threshold id="75">
              <highlight>
                <code>warning</code>
                <persistent>false</persistent>
              </highlight>
              <actions>
							</actions>
            </threshold>
            <threshold id="100">
              <highlight>
                <code>critical</code>
                <persistent>false</persistent>
              </highlight>
              <actions>
                <action>
                  <verb>ApplyStimulus</verb>
                  <params>
                    <param>ev_timeout</param>
                  </params>
                </action>
              </actions>
            </threshold>
          </thresholds>
        </field>
        <field id="tto_escalation_deadline" xsi:type="AttributeSubItem">
          <target_attcode>tto</target_attcode>
          <item_code>100_deadline</item_code>
        </field>
        <field id="sla_tto_passed" xsi:type="AttributeSubItem">
          <target_attcode>tto</target_attcode>
          <item_code>100_passed</item_code>
        </field>
        <field id="sla_tto_over" xsi:type="AttributeSubItem">
          <target_attcode>tto</target_attcode>
          <item_code>100_overrun</item_code>
        </field>
        <field id="ttr_escalation_deadline" xsi:type="AttributeSubItem">
          <target_attcode>ttr</target_attcode>
          <item_code>100_deadline</item_code>
        </field>
        <field id="sla_ttr_passed" xsi:type="AttributeSubItem">
          <target_attcode>ttr</target_attcode>
          <item_code>100_passed</item_code>
        </field>
        <field id="sla_ttr_over" xsi:type="AttributeSubItem">
          <target_attcode>ttr</target_attcode>
          <item_code>100_overrun</item_code>
        </field>
        <field id="time_spent" xsi:type="AttributeDuration">
          <sql>time_spent</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="resolution_code" xsi:type="AttributeEnum">
          <sort_type>label</sort_type>
          <values>
            <value id="assistance">
              <code>assistance</code>
            </value>
            <value id="other">
              <code>other</code>
            </value>
            <value id="software patch">
              <code>software patch</code>
            </value>
            <value id="training">
              <code>training</code>
            </value>
            <value id="hardware repair">
              <code>hardware repair</code>
            </value>
            <value id="system update">
              <code>system update</code>
            </value>
            <value id="bug fixed">
              <code>bug fixed</code>
            </value>
          </values>
          <sql>resolution_code</sql>
          <default_value>assistance</default_value>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="solution" xsi:type="AttributeText">
          <sql>solution</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
          <format>html</format>
        </field>
        <field id="pending_reason" xsi:type="AttributeText">
          <sql>pending_reason</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="parent_request_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT UserRequest WHERE id != :this->id AND status NOT IN ('rejected','resolved','closed')]]></filter>
          <dependencies/>
          <sql>parent_request_id</sql>
          <target_class>UserRequest</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="parent_request_ref" xsi:type="AttributeExternalField">
          <extkey_attcode>parent_request_id</extkey_attcode>
          <target_attcode>ref</target_attcode>
        </field>
        <field id="parent_incident_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT Incident WHERE status != "closed"]]></filter>
          <sql>parent_incident_id</sql>
          <target_class>Incident</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="parent_incident_ref" xsi:type="AttributeExternalField">
          <extkey_attcode>parent_incident_id</extkey_attcode>
          <target_attcode>ref</target_attcode>
        </field>
        <field id="parent_problem_id" xsi:type="AttributeExternalKey">
          <sql>parent_problem_id</sql>
          <target_class>Problem</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="parent_problem_ref" xsi:type="AttributeExternalField">
          <extkey_attcode>parent_problem_id</extkey_attcode>
          <target_attcode>ref</target_attcode>
        </field>
        <field id="parent_change_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT Change WHERE status != "closed"]]></filter>
          <sql>parent_change_id</sql>
          <target_class>Change</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="parent_change_ref" xsi:type="AttributeExternalField">
          <extkey_attcode>parent_change_id</extkey_attcode>
          <target_attcode>ref</target_attcode>
        </field>
        <field id="related_request_list" xsi:type="AttributeLinkedSet">
          <linked_class>UserRequest</linked_class>
          <ext_key_to_me>parent_request_id</ext_key_to_me>
          <edit_mode>add_remove</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
        </field>
        <field id="public_log" xsi:type="AttributeCaseLog">
          <sql>public_log</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="user_satisfaction" xsi:type="AttributeEnum">
          <values>
            <value id="1">
              <code>1</code>
            </value>
            <value id="2">
              <code>2</code>
            </value>
            <value id="3">
              <code>3</code>
            </value>
            <value id="4">
              <code>4</code>
            </value>
          </values>
          <sql>user_satisfaction</sql>
          <default_value>1</default_value>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="user_comment" xsi:type="AttributeText">
          <sql>user_commment</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
      </fields>
      <lifecycle>
        <highlight_scale>
          <item id="warning">
            <rank>1</rank>
            <color>HIGHLIGHT_CLASS_WARNING</color>
            <icon>images/user-request-deadline.svg</icon>
          </item>
          <item id="critical">
            <rank>2</rank>
            <color>HIGHLIGHT_CLASS_CRITICAL</color>
            <icon>images/user-request-escalated.svg</icon>
          </item>
          <item id="closed">
            <rank>3</rank>
            <color>HIGHLIGHT_CLASS_NONE</color>
            <icon>images/user-request-closed.svg</icon>
          </item>
        </highlight_scale>
        <stimuli>
          <stimulus id="ev_assign" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_reassign" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_approve" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_reject" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_pending" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_timeout" xsi:type="StimulusInternal"/>
          <stimulus id="ev_autoresolve" xsi:type="StimulusInternal"/>
          <stimulus id="ev_autoclose" xsi:type="StimulusInternal"/>
          <stimulus id="ev_resolve" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_close" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_reopen" xsi:type="StimulusUserAction"/>
          <stimulus id="ev_wait_for_approval" xsi:type="StimulusUserAction"/>
        </stimuli>
        <states>
          <state id="new">
            <flags>
              <attribute id="ref">
                <read_only/>
              </attribute>
              <attribute id="org_id">
                <mandatory/>
              </attribute>
              <attribute id="caller_id">
                <mandatory/>
              </attribute>
              <attribute id="team_id">
                <hidden/>
              </attribute>
              <attribute id="agent_id">
                <hidden/>
              </attribute>
              <attribute id="priority">
                <read_only/>
              </attribute>
              <attribute id="start_date">
                <read_only/>
              </attribute>
              <attribute id="last_update">
                <read_only/>
              </attribute>
              <attribute id="close_date">
                <hidden/>
              </attribute>
              <attribute id="approver_id">
                <hidden/>
              </attribute>
              <attribute id="request_type">
                <read_only/>
              </attribute>
              <attribute id="escalation_flag">
                <hidden/>
              </attribute>
              <attribute id="escalation_reason">
                <hidden/>
              </attribute>
              <attribute id="assignment_date">
                <hidden/>
              </attribute>
              <attribute id="resolution_date">
                <hidden/>
              </attribute>
              <attribute id="last_pending_date">
                <hidden/>
              </attribute>
              <attribute id="time_spent">
                <hidden/>
              </attribute>
              <attribute id="resolution_code">
                <hidden/>
              </attribute>
              <attribute id="solution">
                <hidden/>
              </attribute>
              <attribute id="pending_reason">
                <hidden/>
              </attribute>
              <attribute id="user_satisfaction">
                <hidden/>
              </attribute>
              <attribute id="user_comment">
                <hidden/>
              </attribute>
              <attribute id="tto_escalation_deadline">
                <read_only/>
              </attribute>
              <attribute id="sla_tto_passed">
                <hidden/>
              </attribute>
              <attribute id="sla_tto_over">
                <hidden/>
              </attribute>
              <attribute id="sla_ttr_passed">
                <hidden/>
              </attribute>
              <attribute id="ttr_escalation_deadline">
                <hidden/>
              </attribute>
              <attribute id="sla_ttr_over">
                <hidden/>
              </attribute>
            </flags>
            <transitions>
              <transition id="ev_assign">
                <target>assigned</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">assignment_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
              <transition id="ev_timeout">
                <target>escalated_tto</target>
                <actions/>
              </transition>
              <transition id="ev_wait_for_approval">
                <target>waiting_for_approval</target>
                <actions/>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="escalated_tto">
            <highlight>
              <code>critical</code>
            </highlight>
            <inherit_flags_from>new</inherit_flags_from>
            <flags>
              <attribute id="team_id"/>
            </flags>
            <transitions>
              <transition id="ev_assign">
                <target>assigned</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">assignment_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="assigned">
            <inherit_flags_from>new</inherit_flags_from>
            <flags>
              <attribute id="team_id">
                <mandatory/>
                <must_prompt/>
                <read_only/>
              </attribute>
              <attribute id="agent_id">
                <mandatory/>
                <must_prompt/>
                <read_only/>
              </attribute>
              <attribute id="approver_id">
                <read_only/>
              </attribute>
              <attribute id="assignment_date">
                <read_only/>
              </attribute>
              <attribute id="tto_escalation_deadline">
                <hidden/>
              </attribute>
              <attribute id="sla_tto_passed">
                <read_only/>
              </attribute>
              <attribute id="sla_tto_over">
                <read_only/>
              </attribute>
              <attribute id="ttr_escalation_deadline">
                <read_only/>
              </attribute>
              <attribute id="caller_id"/>
              <attribute id="escalation_flag"/>
              <attribute id="escalation_reason"/>
            </flags>
            <transitions>
              <transition id="ev_pending">
                <target>pending</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">last_pending_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
              <transition id="ev_resolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
              <transition id="ev_reassign">
                <target>assigned</target>
                <flags>
                  <attribute id="agent_id">
                    <must_change/>
                  </attribute>
                  <attribute id="team_id">
                    <must_prompt/>
                  </attribute>
                </flags>
                <actions/>
              </transition>
              <transition id="ev_timeout">
                <target>escalated_ttr</target>
                <actions/>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="escalated_ttr">
            <highlight>
              <code>critical</code>
            </highlight>
            <inherit_flags_from>assigned</inherit_flags_from>
            <flags/>
            <transitions>
              <transition id="ev_pending">
                <target>pending</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">last_pending_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
              <transition id="ev_resolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
              <transition id="ev_reassign">
                <target>assigned</target>
                <actions/>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="waiting_for_approval">
            <inherit_flags_from>new</inherit_flags_from>
            <flags>
              <attribute id="approver_id">
                <must_prompt/>
              </attribute>
              <attribute id="team_id"/>
            </flags>
            <transitions>
              <transition id="ev_approve">
                <target>approved</target>
                <actions/>
              </transition>
              <transition id="ev_reject">
                <target>rejected</target>
                <actions/>
              </transition>
            </transitions>
          </state>
          <state id="approved">
            <inherit_flags_from>waiting_for_approval</inherit_flags_from>
            <flags>
              <attribute id="approver_id">
                <read_only/>
              </attribute>
            </flags>
            <transitions>
              <transition id="ev_timeout">
                <target>escalated_tto</target>
                <actions/>
              </transition>
              <transition id="ev_assign">
                <target>assigned</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">assignment_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="rejected">
            <inherit_flags_from>new</inherit_flags_from>
            <flags>
              <attribute id="tto_escalation_deadline">
                <hidden/>
              </attribute>
              <attribute id="team_id"/>
            </flags>
            <transitions>
              <transition id="ev_reopen">
                <target>new</target>
                <actions/>
              </transition>
            </transitions>
          </state>
          <state id="pending">
            <inherit_flags_from>assigned</inherit_flags_from>
            <flags>
              <attribute id="last_pending_date">
                <read_only/>
              </attribute>
              <attribute id="pending_reason">
                <mandatory/>
                <must_prompt/>
              </attribute>
              <attribute id="ttr_escalation_deadline">
                <hidden/>
              </attribute>
            </flags>
            <transitions>
              <transition id="ev_assign">
                <target>assigned</target>
                <actions>
								</actions>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="resolved">
            <highlight>
              <code>closed</code>
            </highlight>
            <inherit_flags_from>assigned</inherit_flags_from>
            <flags>
              <attribute id="caller_id">
                <read_only/>
              </attribute>
              <attribute id="origin">
                <read_only/>
              </attribute>
              <attribute id="impact">
                <read_only/>
              </attribute>
              <attribute id="urgency">
                <read_only/>
              </attribute>
              <attribute id="service_id">
                <mandatory/>
                <must_prompt/>
              </attribute>
              <attribute id="servicesubcategory_id">
                <must_prompt/>
              </attribute>
              <attribute id="escalation_flag">
                <read_only/>
              </attribute>
              <attribute id="escalation_reason">
                <read_only/>
              </attribute>
              <attribute id="parent_request_id">
                <read_only/>
              </attribute>
              <attribute id="parent_change_id">
                <read_only/>
              </attribute>
              <attribute id="parent_problem_id">
                <read_only/>
              </attribute>
              <attribute id="title">
                <read_only/>
              </attribute>
              <attribute id="description">
                <read_only/>
              </attribute>
              <attribute id="org_id">
                <read_only/>
              </attribute>
              <attribute id="team_id">
                <read_only/>
              </attribute>
              <attribute id="agent_id">
                <read_only/>
              </attribute>
              <attribute id="resolution_date">
                <read_only/>
              </attribute>
              <attribute id="time_spent">
                <read_only/>
              </attribute>
              <attribute id="resolution_code">
                <mandatory/>
                <must_prompt/>
              </attribute>
              <attribute id="solution">
                <mandatory/>
                <must_prompt/>
              </attribute>
              <attribute id="pending_reason">
                <read_only/>
              </attribute>
              <attribute id="sla_ttr_passed">
                <read_only/>
              </attribute>
              <attribute id="ttr_escalation_deadline">
                <hidden/>
              </attribute>
              <attribute id="sla_ttr_over">
                <read_only/>
              </attribute>
            </flags>
            <transitions>
              <transition id="ev_close">
                <target>closed</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">close_date</param>
                    </params>
                  </action>
                </actions>
              </transition>
              <transition id="ev_reopen">
                <target>assigned</target>
                <actions>
								</actions>
              </transition>
              <transition id="ev_autoresolve">
                <target>resolved</target>
                <actions>
                  <action>
                    <verb>SetCurrentDate</verb>
                    <params>
                      <param xsi:type="attcode">resolution_date</param>
                    </params>
                  </action>
                  <action>
                    <verb>SetElapsedTime</verb>
                    <params>
                      <param xsi:type="attcode">time_spent</param>
                      <param xsi:type="attcode">start_date</param>
                      <param xsi:type="string">DefaultWorkingTimeComputer</param>
                    </params>
                  </action>
                  <action>
                    <verb>ResolveChildTickets</verb>
                    <params/>
                  </action>
                </actions>
              </transition>
            </transitions>
          </state>
          <state id="closed">
            <highlight>
              <code>closed</code>
            </highlight>
            <inherit_flags_from>resolved</inherit_flags_from>
            <flags>
              <attribute id="private_log">
                <read_only/>
              </attribute>
              <attribute id="public_log">
                <read_only/>
              </attribute>
              <attribute id="functionalcis_list">
                <read_only/>
              </attribute>
              <attribute id="contacts_list">
                <read_only/>
              </attribute>
              <attribute id="service_id">
                <read_only/>
              </attribute>
              <attribute id="servicesubcategory_id">
                <read_only/>
              </attribute>
              <attribute id="close_date">
                <read_only/>
              </attribute>
              <attribute id="resolution_code">
                <read_only/>
              </attribute>
              <attribute id="solution">
                <read_only/>
              </attribute>
              <attribute id="pending_reason">
                <read_only/>
                <read_only/>
              </attribute>
              <attribute id="user_satisfaction">
                <read_only/>
                <must_prompt/>
              </attribute>
              <attribute id="user_comment">
                <read_only/>
                <must_prompt/>
              </attribute>
            </flags>
            <transitions/>
          </state>
        </states>
      </lifecycle>
      <methods>
        <method id="GetTicketRefFormat">
          <static>true</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[
        public static function GetTicketRefFormat()
        {
                return 'R-%06d';
        }
        ]]></code>
        </method>
        <method id="DoCheckToWrite">
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[public function DoCheckToWrite()
  {
    parent::DoCheckToWrite();
    if (!$this->IsNew() && ($this->Get('parent_request_id') == $this->GetKey()))
    {
      $this->m_aCheckIssues[] = Dict::Format('Class:UserRequest/Error:CannotAssignParentRequestIdToSelf');
    }
  }]]></code>
        </method>
        <method id="ComputePriority">
          <comment>/** Compute the priority of the ticket based on its impact and urgency&#13;
						* @return integer The priority of the ticket 1(high) .. 3(low)&#13;
						*/</comment>
          <static>false</static>
          <access>public</access>
          <type>LifecycleAction</type>
          <code><![CDATA[public function ComputePriority()
	{
		// priority[impact][urgency]
		$aPriorities = array(
			// a department
			1 => array(
				1 => 1,
				2 => 1,
				3 => 2,
				4 => 4,
			),
			// a group
			2 => array(
				1 => 1,
				2 => 2,
				3 => 3,
				4 => 4,
			),
			// a person
			3 => array(
				1 => 2,
				2 => 3,
				3 => 3,
				4 => 4,
			),
		);
		$oAttDef = MetaModel::GetAttributeDef(get_class($this), 'priority');
		$iPriority = $oAttDef->IsNullAllowed() ? null : $oAttDef->GetDefaultValue();

		if (isset($aPriorities[(int)$this->Get('impact')]) && isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')])) {
			$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
		}
		return $iPriority;
	}]]></code>
        </method>
        <method id="ComputeValues">
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[	public function ComputeValues()
	{
		// Compute the priority of the ticket
		$this->Set('priority', $this->ComputePriority());

		return parent::ComputeValues();
	}]]></code>
        </method>
        <method id="DisplayBareRelations">
          <static>false</static>
          <access>public</access>
          <type>Overload-cmdbAbstractObject</type>
          <code><![CDATA[	function DisplayBareRelations(WebPage $oPage, $bEditMode = false)
	{
		parent::DisplayBareRelations($oPage, $bEditMode);

    $sKnownErrorClass = 'KnownError';
    $sTabCode = 'Class:UserRequest:KnownErrorList';
		if (MetaModel::IsValidClass($sKnownErrorClass)) {
			//Search for known errors
			$iTicketID = $this->GetKey();;
			$oKnownErrorSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT $sKnownErrorClass AS ke JOIN lnkErrorToFunctionalCI AS l1 ON l1.error_id=ke.id JOIN FunctionalCI AS ci ON l1.functionalci_id=ci.id JOIN lnkFunctionalCIToTicket AS l2 ON l2.functionalci_id=ci.id WHERE l2.ticket_id=$iTicketID"));
			$iNumberKE = $oKnownErrorSet->count();
      if ($iNumberKE > 0) {
           $oPage->SetCurrentTab($sTabCode, Dict::S($sTabCode)." ($iNumberKE)", Dict::S($sTabCode."+"));
      } else {
           $oPage->SetCurrentTab($sTabCode, Dict::S($sTabCode), Dict::S($sTabCode."+"));
      }
			self::DisplaySet($oPage, $oKnownErrorSet, [
			  'menu' => false,
        'panel_title' => Dict::S($sTabCode),
        'panel_icon' => MetaModel::GetClassIcon($sKnownErrorClass, false),
        'panel_title_tooltip' => Dict::S($sTabCode."+"),
			]);
		}
	}]]></code>
        </method>
        <method id="ResolveChildTickets">
          <comment><![CDATA[/**
	 * Cascade the resolution to child User Request
	 * @return true (returning false would stop the ongoing transition)
	 */]]></comment>
          <static>false</static>
          <access>public</access>
          <type>LifecycleAction</type>
          <arguments>
					</arguments>
          <code><![CDATA[	public function ResolveChildTickets()
	{
        static $aTickets = array(); // prevent infinite recursion
    
		// Automatically resolve child requests
		$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
		$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
		while($oRequest = $oChildRequestSet->Fetch())
		{
            if (!array_key_exists($oRequest->GetKey(), $aTickets))
            {
                $aTickets[$oRequest->GetKey()] = true;
			    $oRequest->ResolveFrom($this);
            }
		}
		return true;
	}]]></code>
        </method>
        <method id="ResolveFrom">
          <comment><![CDATA[/**
	 * Resolve the ticket from another resolved ticket
	 * @return void
	 */]]></comment>
          <static>false</static>
          <access>public</access>
          <type>Internal</type>
          <code><![CDATA[	public function ResolveFrom($oParentTicket)
	{
		if ($this->Get('status') != 'resolved' && $this->Get('status') != 'closed' )
		{
			$aDummy = array();
			$aExcludedAttributes = array('team_id', 'agent_id');
		    foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
		    {
		    	// Exclude inter dependant attributes to keep consistency
		    	if(in_array($sAttCode, $aExcludedAttributes))
		    	{
		    		continue;
		    	}
		    	
		         if (($this->GetAttributeFlags($sAttCode, $aDummy, 'resolved') & OPT_ATT_MANDATORY) && empty($this->Get($sAttCode)))
		         {
		            $this->Set($sAttCode, $oParentTicket->Get($sAttCode));
		         }
		    }
		  if (($this->Get('team_id') == 0) || ($this->Get('agent_id') ==0))  
           {  
                  $this->Set('team_id', $oParentTicket->Get('team_id'));
                  $this->Set('agent_id', $oParentTicket->Get('agent_id'));
           }
			$sParent = '[['.get_class($oParentTicket).':'.$oParentTicket->GetKey().'|'.$oParentTicket->Get('ref').']]';
			$this->Set('solution', Dict::Format('Tickets:ResolvedFrom', $sParent, MetaModel::GetName(get_class($oParentTicket))));
			$this->ApplyStimulus('ev_autoresolve');
			$this->DBUpdate();
		}
	}]]></code>
        </method>
        <method id="UpdateChildRequestLog">
          <static>false</static>
          <access>public</access>
          <type>LifecycleAction</type>
          <code><![CDATA[	public function UpdateChildRequestLog()
	{
		$oLog = $this->Get('public_log');
		$sLogPublic = $oLog->GetModifiedEntry('html');
		if ($sLogPublic != '')
		{
			$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
			$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
							array(),
							array(
								'ticket' => $this->GetKey(),
								)
							);
			while($oRequest = $oChildRequestSet->Fetch())
			{
				$oRequest->set('public_log',$sLogPublic);
				$oRequest->DBUpdate();
			}

		}
		$oLog = $this->Get('private_log');
		$sLogPrivate = $oLog->GetModifiedEntry('html');
		if ($sLogPrivate != '')
		{
			$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
			$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
							array(),
							array(
								'ticket' => $this->GetKey(),
								)
							);
			while($oRequest = $oChildRequestSet->Fetch())
			{
				$oRequest->set('private_log',$sLogPrivate);
				$oRequest->DBUpdate();
			}
		}
		return true;

	}]]></code>
        </method>
        <method id="ComputeImpactedItems">
          <static>false</static>
          <access>public</access>
          <type>LifecycleAction</type>
          <code><![CDATA[
    public function ComputeImpactedItems()
	{
        // This method is kept for backward compatibility
        // in case a delta redefines it, but you may call
        // UpdateImpactedItems directly
		$this->UpdateImpactedItems();
	}]]></code>
        </method>
        <method id="OnInsert">
          <static>false</static>
          <access>protected</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[
    protected function OnInsert()
	{
	  parent::OnInsert();
		$this->SetIfNull('last_update', time());
		$this->SetIfNull('start_date', time());
	}]]></code>
        </method>
        <method id="OnUpdate">
          <static>false</static>
          <access>protected</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[
    protected function OnUpdate()
	{
        parent::OnUpdate();
		$this->Set('last_update', time());
		$this->UpdateChildRequestLog();
	}]]></code>
        </method>
      </methods>
      <presentation>
        <details>
          <items>
            <item id="functionalcis_list">
              <rank>10</rank>
            </item>
            <item id="contacts_list">
              <rank>20</rank>
            </item>
            <item id="related_request_list">
              <rank>30</rank>
            </item>
            <item id="workorders_list">
              <rank>40</rank>
            </item>
            <item id="col:col1">
              <rank>50</rank>
              <items>
                <item id="fieldset:Ticket:baseinfo">
                  <rank>10</rank>
                  <items>
                    <item id="org_id">
                      <rank>10</rank>
                    </item>
                    <item id="caller_id">
                      <rank>20</rank>
                    </item>
                    <item id="status">
                      <rank>30</rank>
                    </item>
                    <item id="origin">
                      <rank>40</rank>
                    </item>
                    <item id="title">
                      <rank>50</rank>
                    </item>
                    <item id="description">
                      <rank>60</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Ticket:moreinfo">
                  <rank>20</rank>
                  <items>
                    <item id="service_id">
                      <rank>10</rank>
                    </item>
                    <item id="servicesubcategory_id">
                      <rank>20</rank>
                    </item>
                    <item id="escalation_flag">
                      <rank>30</rank>
                    </item>
                    <item id="escalation_reason">
                      <rank>40</rank>
                    </item>
                    <item id="pending_reason">
                      <rank>50</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col2">
              <rank>60</rank>
              <items>
                <item id="fieldset:Ticket:Type">
                  <rank>10</rank>
                  <items>
                    <item id="request_type">
                      <rank>10</rank>
                    </item>
                    <item id="impact">
                      <rank>20</rank>
                    </item>
                    <item id="urgency">
                      <rank>30</rank>
                    </item>
                    <item id="priority">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Ticket:contact">
                  <rank>20</rank>
                  <items>
                    <item id="team_id">
                      <rank>10</rank>
                    </item>
                    <item id="agent_id">
                      <rank>20</rank>
                    </item>
                    <item id="approver_id">
                      <rank>30</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Ticket:date">
                  <rank>30</rank>
                  <items>
                    <item id="start_date">
                      <rank>10</rank>
                    </item>
                    <item id="last_update">
                      <rank>20</rank>
                    </item>
                    <item id="assignment_date">
                      <rank>30</rank>
                    </item>
                    <item id="tto_escalation_deadline">
                      <rank>40</rank>
                    </item>
                    <item id="ttr_escalation_deadline">
                      <rank>50</rank>
                    </item>
                    <item id="last_pending_date">
                      <rank>60</rank>
                    </item>
                    <item id="resolution_date">
                      <rank>70</rank>
                    </item>
                    <item id="close_date">
                      <rank>80</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col3">
              <rank>70</rank>
              <items>
                <item id="fieldset:Ticket:relation">
                  <rank>10</rank>
                  <items>
                    <item id="parent_request_id">
                      <rank>10</rank>
                    </item>
                    <item id="parent_incident_id">
                      <rank>20</rank>
                    </item>
                    <item id="parent_problem_id">
                      <rank>30</rank>
                    </item>
                    <item id="parent_change_id">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Ticket:resolution">
                  <rank>20</rank>
                  <items>
                    <item id="resolution_code">
                      <rank>10</rank>
                    </item>
                    <item id="solution">
                      <rank>20</rank>
                    </item>
                    <item id="time_spent">
                      <rank>30</rank>
                    </item>
                    <item id="user_satisfaction">
                      <rank>40</rank>
                    </item>
                    <item id="user_comment">
                      <rank>50</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Ticket:SLA">
                  <rank>30</rank>
                  <items>
                    <item id="sla_tto_passed">
                      <rank>10</rank>
                    </item>
                    <item id="sla_tto_over">
                      <rank>20</rank>
                    </item>
                    <item id="sla_ttr_passed">
                      <rank>30</rank>
                    </item>
                    <item id="sla_ttr_over">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="public_log">
              <rank>100</rank>
            </item>
            <item id="private_log">
              <rank>110</rank>
            </item>
          </items>
        </details>
        <search>
          <items>
            <item id="ref">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="title">
              <rank>30</rank>
            </item>
            <item id="description">
              <rank>40</rank>
            </item>
            <item id="start_date">
              <rank>50</rank>
            </item>
            <item id="resolution_date">
              <rank>70</rank>
            </item>
            <item id="close_date">
              <rank>80</rank>
            </item>
            <item id="status">
              <rank>90</rank>
            </item>
            <item id="operational_status">
              <rank>95</rank>
            </item>
            <item id="caller_id">
              <rank>100</rank>
            </item>
            <item id="origin">
              <rank>110</rank>
            </item>
            <item id="request_type">
              <rank>120</rank>
            </item>
            <item id="impact">
              <rank>130</rank>
            </item>
            <item id="urgency">
              <rank>140</rank>
            </item>
            <item id="priority">
              <rank>150</rank>
            </item>
            <item id="service_id">
              <rank>160</rank>
            </item>
            <item id="servicesubcategory_id">
              <rank>170</rank>
            </item>
            <item id="team_id">
              <rank>180</rank>
            </item>
            <item id="agent_id">
              <rank>190</rank>
            </item>
            <item id="escalation_flag">
              <rank>200</rank>
            </item>
            <item id="resolution_code">
              <rank>210</rank>
            </item>
            <item id="user_satisfaction">
              <rank>220</rank>
            </item>
            <item id="sla_tto_passed">
              <rank>230</rank>
            </item>
            <item id="sla_ttr_passed">
              <rank>240</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="title">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="caller_id">
              <rank>30</rank>
            </item>
            <item id="start_date">
              <rank>40</rank>
            </item>
            <item id="status">
              <rank>50</rank>
            </item>
            <item id="agent_id">
              <rank>60</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="Organization">
      <fields>
        <field id="overview" xsi:type="AttributeDashboard" _delta="if_exists">
          <definition>
            <cells>
              <cell id="9000" _delta="delete">
                <rank>5</rank>
                <dashlets>
                  <dashlet id="0" xsi:type="DashletEmptyCell">
                    <rank>0</rank>
                  </dashlet>
                </dashlets>
              </cell>
              <cell id="1" _delta="define">
                <rank>10</rank>
                <dashlets>
                  <dashlet id="9" xsi:type="DashletHeaderDynamic">
                    <rank>0</rank>
                    <title>Organization:Overview:UserRequests</title>
                    <icon>itop-welcome-itil/images/user-request-deadline.svg</icon>
                    <subtitle>Menu:UserRequest:OpenRequests</subtitle>
                    <query>SELECT UserRequest WHERE status != "closed" AND org_id=:this-&gt;id</query>
                    <group_by>status</group_by>
                    <values>new,assigned,escalated_tto,escalated_ttr,resolved</values>
                  </dashlet>
                </dashlets>
              </cell>
              <cell id="3" _delta="define">
                <rank>30</rank>
                <dashlets>
                  <dashlet id="10" xsi:type="DashletObjectList">
                    <rank>0</rank>
                    <title>Organization:Overview:MyUserRequests</title>
                    <query>SELECT UserRequest AS i WHERE i.agent_id = :current_contact_id AND status NOT IN ("closed", "resolved")  AND org_id=:this-&gt;id</query>
                    <menu>true</menu>
                  </dashlet>
                  <dashlet id="13" xsi:type="DashletGroupByPie">
                    <rank>1</rank>
                    <title>Organization:Overview:Tickets</title>
                    <query>SELECT Ticket WHERE org_id = :this-&gt;id</query>
                    <group_by>finalclass</group_by>
                    <style>pie</style>
                    <aggregation_function>count</aggregation_function>
                    <aggregation_attribute/>
                    <limit/>
                    <order_by>attribute</order_by>
                    <order_direction>desc</order_direction>
                  </dashlet>
                </dashlets>
              </cell>
            </cells>
          </definition>
        </field>
      </fields>
    </class>
  </classes>
  <menus>
    <menu id="WelcomeMenuPage" xsi:type="DashboardMenuNode" _delta="must_exist">
      <definition>
        <cells>
          <cell id="1" _delta="define">
            <rank>1</rank>
            <dashlets>
              <dashlet id="11" xsi:type="DashletHeaderDynamic">
                <rank>0</rank>
                <title>Menu:RequestManagement</title>
                <icon>itop-welcome-itil/images/user-request-deadline.svg</icon>
                <subtitle>Menu:UserRequest:OpenRequests</subtitle>
                <query>SELECT UserRequest WHERE status != "closed"</query>
                <group_by>status</group_by>
                <values>new,assigned,escalated_tto,escalated_ttr,resolved</values>
              </dashlet>
              <dashlet id="12" xsi:type="DashletObjectList">
                <rank>1</rank>
                <title>UI:WelcomeMenu:MyCalls</title>
                <query>SELECT UserRequest AS i WHERE i.agent_id = :current_contact_id AND status NOT IN ("closed", "resolved")</query>
                <menu>true</menu>
              </dashlet>
            </dashlets>
          </cell>
        </cells>
      </definition>
    </menu>
    <menu id="RequestManagement" xsi:type="MenuGroup" _delta="define">
      <rank>30</rank>
      <enable_stimulus/>
      <style>
        <decoration_classes>fas fa-comment-alt</decoration_classes>
      </style>
    </menu>
    <menu id="UserRequest:Overview" xsi:type="DashboardMenuNode" _delta="define">
      <rank>0</rank>
      <parent>RequestManagement</parent>
      <definition>
        <layout>DashboardLayoutTwoCols</layout>
        <title>UI:RequestMgmtMenuOverview:Title</title>
        <cells>
          <cell id="0">
            <rank>0</rank>
            <dashlets>
              <dashlet id="1" xsi:type="DashletGroupByPie">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-RequestByType-last-14-days</title>
                <query>SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) &lt; start_date</query>
                <group_by>request_type</group_by>
                <style>pie</style>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="1">
            <rank>1</rank>
            <dashlets>
              <dashlet id="2" xsi:type="DashletGroupByBars">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-Last-14-days</title>
                <query>SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) &lt; start_date</query>
                <group_by>start_date:day_of_month</group_by>
                <style>bars</style>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="2">
            <rank>2</rank>
            <dashlets>
              <dashlet id="3" xsi:type="DashletGroupByTable">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-OpenRequestByStatus</title>
                <query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
                <group_by>status</group_by>
                <style>table</style>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="3">
            <rank>3</rank>
            <dashlets>
              <dashlet id="4" xsi:type="DashletGroupByTable">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-OpenRequestByAgent</title>
                <query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
                <group_by>agent_id</group_by>
                <style>table</style>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="4">
            <rank>4</rank>
            <dashlets>
              <dashlet id="5" xsi:type="DashletGroupByTable">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-OpenRequestByType</title>
                <query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
                <group_by>finalclass</group_by>
                <style>table</style>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="5">
            <rank>5</rank>
            <dashlets>
              <dashlet id="6" xsi:type="DashletGroupByTable">
                <rank>0</rank>
                <title>UI-RequestManagementOverview-OpenRequestByCustomer</title>
                <query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
                <group_by>org_id</group_by>
                <style>table</style>
              </dashlet>
            </dashlets>
          </cell>
        </cells>
      </definition>
    </menu>
    <menu id="NewUserRequest" xsi:type="NewObjectMenuNode" _delta="define">
      <rank>1</rank>
      <parent>RequestManagement</parent>
      <class>UserRequest</class>
    </menu>
    <menu id="SearchUserRequests" xsi:type="SearchMenuNode" _delta="define">
      <rank>2</rank>
      <parent>RequestManagement</parent>
      <class>UserRequest</class>
    </menu>
    <menu id="UserRequest:Shortcuts" xsi:type="TemplateMenuNode" _delta="define">
      <rank>3</rank>
      <parent>RequestManagement</parent>
      <template_file/>
    </menu>
    <menu id="UserRequest:MyRequests" xsi:type="OQLMenuNode" _delta="define">
      <rank>0</rank>
      <parent>UserRequest:Shortcuts</parent>
      <oql><![CDATA[SELECT UserRequest WHERE agent_id = :current_contact_id AND status NOT IN ("closed","resolved")]]></oql>
      <do_search/>
      <auto_reload>fast</auto_reload>
    </menu>
    <menu id="UserRequest:EscalatedRequests" xsi:type="OQLMenuNode" _delta="define">
      <rank>1</rank>
      <parent>UserRequest:Shortcuts</parent>
      <oql><![CDATA[SELECT UserRequest WHERE status IN ("escalated_tto", "escalated_ttr") OR escalation_flag="yes"]]></oql>
      <do_search/>
      <auto_reload>fast</auto_reload>
    </menu>
    <menu id="UserRequest:OpenRequests" xsi:type="OQLMenuNode" _delta="define">
      <rank>2</rank>
      <parent>UserRequest:Shortcuts</parent>
      <oql><![CDATA[SELECT UserRequest WHERE status NOT IN ("closed")]]></oql>
      <do_search>1</do_search>
      <auto_reload>fast</auto_reload>
    </menu>
    <menu id="UserRequest:MySupportRequests" xsi:type="OQLMenuNode" _delta="define">
      <rank>3</rank>
      <parent>UserRequest:Shortcuts</parent>
      <oql><![CDATA[SELECT UserRequest WHERE caller_id = :current_contact_id AND status NOT IN ("closed")]]></oql>
      <do_search/>
      <auto_reload>fast</auto_reload>
    </menu>
  </menus>
  <module_designs>
    <module_design id="itop-portal">
      <classes>
        <class id="ServiceSubcategory">
          <scopes>
            <scope id="all">
              <oql_view _delta="redefine"><![CDATA[SELECT ServiceSubcategory WHERE status != 'obsolete' AND request_type = 'service_request']]></oql_view>
            </scope>
          </scopes>
        </class>
      </classes>
    </module_design>
  </module_designs>
</itop_design>
