incidentMgmt.business.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. <?php
  2. /**
  3. * incident<business<php
  4. * Define business model for incident mgmt module
  5. *
  6. * @package iTopBizModelSamples
  7. * @author Erwan Taloc <erwan.taloc@gmail.com>
  8. * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
  9. * @link www.itop.com
  10. * @since 1.0
  11. * @version 1.1.1.1 $
  12. */
  13. ////////////////////////////////////////////////////////////////////////////////////
  14. /**
  15. * An Incident Ticket
  16. */
  17. ////////////////////////////////////////////////////////////////////////////////////
  18. class bizIncidentTicket extends cmdbAbstractObject
  19. {
  20. public static function Init()
  21. {
  22. $aParams = array
  23. (
  24. "category" => "bizmodel,searchable",
  25. "name" => "Incident",
  26. "description" => "Incident ticket",
  27. "key_type" => "autoincrement",
  28. "key_label" => "id",
  29. "name_attcode" => "name",
  30. "state_attcode" => "ticket_status",
  31. "reconc_keys" => array("title"),
  32. "db_table" => "incident",
  33. "db_key_field" => "id",
  34. "db_finalclass_field" => "",
  35. "display_template" => "../business/templates/ticket.html",
  36. );
  37. MetaModel::Init_Params($aParams);
  38. //MetaModel::Init_InheritAttributes();
  39. MetaModel::Init_AddAttribute(new AttributeString("name", array("allowed_values"=>null, "sql"=>"name", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  40. MetaModel::Init_AddAttribute(new AttributeString("title", array("allowed_values"=>null, "sql"=>"title", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  41. MetaModel::Init_AddAttribute(new AttributeEnum("type", array("allowed_values"=>new ValueSetEnum("Network,Server,Desktop,Application"), "sql"=>"type", "default_value"=>"Server", "is_null_allowed"=>false, "depends_on"=>array())));
  42. MetaModel::Init_AddAttribute(new AttributeExternalKey("org_id", array("targetclass"=>"bizOrganization", "allowed_values"=>null, "sql"=>"customer", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
  43. MetaModel::Init_AddAttribute(new AttributeExternalField("customer_name", array("allowed_values"=>null, "extkey_attcode"=> 'org_id', "target_attcode"=>"name")));
  44. MetaModel::Init_AddAttribute(new AttributeEnum("ticket_status", array("allowed_values"=>new ValueSetEnum("New, Assigned, WorkInProgress, Resolved, Closed"), "sql"=>"ticket_status", "default_value"=>"New", "is_null_allowed"=>false, "depends_on"=>array())));
  45. // SetPossibleValues("status",array("Open","Monitored","Closed"));
  46. MetaModel::Init_AddAttribute(new AttributeText("initial_situation", array("allowed_values"=>null, "sql"=>"initial_situation", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  47. MetaModel::Init_AddAttribute(new AttributeText("current_situation", array("allowed_values"=>null, "sql"=>"current_situation", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  48. MetaModel::Init_AddAttribute(new AttributeDate("start_date", array("allowed_values"=>null, "sql"=>"start_date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  49. // définir une date de défaut à maintenant, alias creation ou modification du ticket
  50. MetaModel::Init_AddAttribute(new AttributeDate("last_update", array("allowed_values"=>null, "sql"=>"last_update", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  51. MetaModel::Init_AddAttribute(new AttributeDate("next_update", array("allowed_values"=>null, "sql"=>"next_update", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  52. MetaModel::Init_AddAttribute(new AttributeDate("end_date", array("allowed_values"=>null, "sql"=>"closed_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  53. MetaModel::Init_AddAttribute(new AttributeExternalKey("caller_id", array("targetclass"=>"bizPerson", "jointype"=> "", "allowed_values"=>new ValueSetObjects('SELECT bizPerson AS p WHERE p.org_id = :this->org_id'), "sql"=>"caller_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array("org_id"))));
  54. MetaModel::Init_AddAttribute(new AttributeExternalField("caller_mail", array("allowed_values"=>null, "extkey_attcode"=> 'caller_id', "target_attcode"=>"email")));
  55. MetaModel::Init_AddAttribute(new AttributeString("impact", array("allowed_values"=>null, "sql"=>"impact", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  56. MetaModel::Init_AddAttribute(new AttributeExternalKey("workgroup_id", array("targetclass"=>"bizWorkgroup", "jointype"=> "", "allowed_values"=>null, "sql"=>"workgroup_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
  57. MetaModel::Init_AddAttribute(new AttributeExternalField("workgroup_name", array("allowed_values"=>null, "extkey_attcode"=> 'workgroup_id', "target_attcode"=>"name")));
  58. MetaModel::Init_AddAttribute(new AttributeExternalKey("agent_id", array("targetclass"=>"bizPerson", "jointype"=> "", "allowed_values"=>new ValueSetObjects('SELECT bizPerson AS p JOIN lnkContactTeam AS l ON l.contact_id=p.id JOIN bizTeam AS t ON l.team_id=t.id JOIN bizWorkgroup AS w ON w.team_id=t.id WHERE w.id = :this->workgroup_id'), "sql"=>"agent_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array('workgroup_id'))));
  59. MetaModel::Init_AddAttribute(new AttributeExternalField("agent_mail", array("allowed_values"=>null, "extkey_attcode"=> 'agent_id', "target_attcode"=>"email")));
  60. // Comment afficher le first + last name de l'agent ? Est-ce utile d'ajouter ce champ?
  61. MetaModel::Init_AddAttribute(new AttributeText("action_log", array("allowed_values"=>null, "sql"=>"action_log", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  62. MetaModel::Init_AddAttribute(new AttributeEnum("severity", array("allowed_values"=>new ValueSetEnum("critical,medium,low"), "sql"=>"criticity", "default_value"=>"low", "is_null_allowed"=>false, "depends_on"=>array())));
  63. MetaModel::Init_AddAttribute(new AttributeInteger("assignment_count", array("allowed_values"=>null, "sql"=>"assignment_count", "default_value"=>0, "is_null_allowed"=>false, "depends_on"=>array())));
  64. MetaModel::Init_AddAttribute(new AttributeText("resolution", array("allowed_values"=>null, "sql"=>"resolution", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  65. MetaModel::Init_AddAttribute(new AttributeLinkedSetIndirect("impacted_infra_manual", array("linked_class"=>"lnkInfraTicket", "ext_key_to_me"=>"ticket_id", "ext_key_to_remote"=>"infra_id", "allowed_values"=>null, "count_min"=>1, "count_max"=>0, "depends_on"=>array())));
  66. MetaModel::Init_AddAttribute(new AttributeLinkedSetIndirect("related_tickets", array("linked_class"=>"lnkRelatedTicket", "ext_key_to_me"=>"ticket_id", "ext_key_to_remote"=>"rel_ticket_id", "allowed_values"=>null, "count_min"=>0, "count_max"=>0, "depends_on"=>array(/*'impacted_infra_computed',*/ 'impacted_infra_manual'))));
  67. MetaModel::Init_AddAttribute(new AttributeLinkedSetIndirect("contacts_a_notifier", array("linked_class"=>"lnkContactTicket", "ext_key_to_me"=>"ticket_id", "ext_key_to_remote"=>"contact_id", "allowed_values"=>null, "default_value"=>new ValueSetRelatedObjectsFromLinkSet('impacted_infra_manual'/*sLinkSetAttCode*/, 'infra_id'/*sExtKeyToRemote*/, 'impacts'/*sRelationCode*/, 3/*iMaxDepth*/, 'bizContact'/*sTargetClass*/, 'lnkContactTicket'/*sTargetLinkClass*/, 'contact_id'/*sTargetExtKey*/) /* ici plus tard... */, "count_min"=>0, "count_max"=>0, "depends_on"=>array('impacted_infra_manual'))));
  68. //MetaModel::Init_InheritFilters();
  69. MetaModel::Init_AddFilterFromAttribute("name");
  70. MetaModel::Init_AddFilterFromAttribute("title");
  71. MetaModel::Init_AddFilterFromAttribute("type");
  72. MetaModel::Init_AddFilterFromAttribute("org_id");
  73. MetaModel::Init_AddFilterFromAttribute("caller_id");
  74. MetaModel::Init_AddFilterFromAttribute("ticket_status");
  75. MetaModel::Init_AddFilterFromAttribute("start_date");
  76. MetaModel::Init_AddFilterFromAttribute("last_update");
  77. MetaModel::Init_AddFilterFromAttribute("end_date");
  78. MetaModel::Init_AddFilterFromAttribute("workgroup_id");
  79. MetaModel::Init_AddFilterFromAttribute("agent_id");
  80. MetaModel::Init_AddFilterFromAttribute("severity");
  81. MetaModel::Init_AddFilterFromAttribute("assignment_count");
  82. // doit-on aussi ajouter un filtre sur les extfields lié à une extkey ? ici le name de l'agent?
  83. // Display lists
  84. MetaModel::Init_SetZListItems('details', array('name','title', 'org_id', 'type','ticket_status', 'severity','start_date', 'initial_situation', 'current_situation','caller_id', 'impact', 'last_update', 'next_update','end_date', 'assignment_count', 'workgroup_id','agent_id','action_log','resolution')); // Attributes to be displayed for a list
  85. MetaModel::Init_SetZListItems('list', array('name', 'title', 'org_id', 'type','ticket_status','severity','start_date', 'initial_situation')); // Attributes to be displayed for a list
  86. // Search criteria
  87. MetaModel::Init_SetZListItems('standard_search', array('name', 'title', 'org_id', 'caller_id','type', 'ticket_status', 'severity','start_date', 'last_update','end_date','agent_id')); // Criteria of the std search form
  88. MetaModel::Init_SetZListItems('advanced_search', array('name', 'title', 'org_id','caller_id','type','ticket_status', 'severity','start_date', 'last_update', 'end_date','agent_id')); // Criteria of the advanced search form
  89. // State machine
  90. MetaModel::Init_DefineState("New", array("attribute_inherit"=>null,
  91. "attribute_list"=>array('name' => OPT_ATT_READONLY, 'assignment_count' => OPT_ATT_HIDDEN, 'end_date' => OPT_ATT_HIDDEN, 'next_update' => OPT_ATT_HIDDEN, 'last_update' => OPT_ATT_HIDDEN,
  92. "title"=>OPT_ATT_MANDATORY, "org_id"=>OPT_ATT_MANDATORY, "caller_id"=>OPT_ATT_MANDATORY, "initial_situation"=>OPT_ATT_MANDATORY, "start_date"=>OPT_ATT_MANDATORY, "workgroup_id"=>OPT_ATT_MANDATORY,
  93. "severity"=>OPT_ATT_MANDATORY, "agent_id"=>OPT_ATT_HIDDEN,"impacted_infra_manual"=>OPT_ATT_MANDATORY, "related_tickets"=>OPT_ATT_MUSTPROMPT,"resolution"=>OPT_ATT_HIDDEN)));
  94. MetaModel::Init_DefineState("Assigned", array("attribute_inherit"=>null,
  95. "attribute_list"=>array('name' => OPT_ATT_READONLY, "title"=>OPT_ATT_READONLY, "org_id"=>OPT_ATT_READONLY, "caller_id"=>OPT_ATT_READONLY, "initial_situation"=>OPT_ATT_READONLY, "start_date"=>OPT_ATT_READONLY,'assignment_count' => OPT_ATT_READONLY,'end_date' => OPT_ATT_HIDDEN, "workgroup_id"=>OPT_ATT_READONLY, "agent_id"=>OPT_ATT_MUSTCHANGE,"resolution"=>OPT_ATT_HIDDEN)));
  96. MetaModel::Init_DefineState("WorkInProgress", array("attribute_inherit"=>null, "attribute_list"=>array("title"=>OPT_ATT_READONLY, "org_id"=>OPT_ATT_READONLY, "caller_id"=>OPT_ATT_READONLY, "initial_situation"=>OPT_ATT_READONLY,'end_date' => OPT_ATT_HIDDEN, "start_date"=>OPT_ATT_READONLY,"workgroup_id"=>OPT_ATT_MANDATORY, "agent_id"=>OPT_ATT_MANDATORY,"action_log"=>OPT_ATT_MANDATORY,"impact"=>OPT_ATT_READONLY,"severity"=>OPT_ATT_READONLY)));
  97. MetaModel::Init_DefineState("Resolved", array("attribute_inherit"=>null, "attribute_list"=>array('name' => OPT_ATT_READONLY,'type' => OPT_ATT_READONLY, "title"=>OPT_ATT_READONLY, "org_id"=>OPT_ATT_READONLY, "caller_id"=>OPT_ATT_READONLY, "initial_situation"=>OPT_ATT_READONLY,"current_situation"=>OPT_ATT_READONLY,'end_date' => OPT_ATT_READONLY,'last_update' => OPT_ATT_READONLY,'next_update' => OPT_ATT_READONLY, "start_date"=>OPT_ATT_READONLY,"workgroup_id"=>OPT_ATT_READONLY, "agent_id"=>OPT_ATT_READONLY,"action_log"=>OPT_ATT_READONLY,"impact"=>OPT_ATT_READONLY,"severity"=>OPT_ATT_READONLY,"resolution"=>OPT_ATT_MUSTCHANGE)));
  98. MetaModel::Init_DefineState("Closed", array("attribute_inherit"=>null, "attribute_list"=>array('name' => OPT_ATT_READONLY,'type' => OPT_ATT_READONLY, "title"=>OPT_ATT_READONLY, "org_id"=>OPT_ATT_READONLY, "caller_id"=>OPT_ATT_READONLY, "initial_situation"=>OPT_ATT_READONLY,"current_situation"=>OPT_ATT_READONLY,'end_date' => OPT_ATT_READONLY,'last_update' => OPT_ATT_READONLY,'next_update' => OPT_ATT_READONLY, "start_date"=>OPT_ATT_READONLY,"workgroup_id"=>OPT_ATT_READONLY, "agent_id"=>OPT_ATT_READONLY,"action_log"=>OPT_ATT_READONLY,"impact"=>OPT_ATT_READONLY,"severity"=>OPT_ATT_READONLY,"resolution"=>OPT_ATT_READONLY)));
  99. MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_assign", array()));
  100. MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_reassign", array()));
  101. MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_start_working", array()));
  102. MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_resolve", array()));
  103. MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_close", array()));
  104. MetaModel::Init_DefineTransition("New", "ev_assign", array("target_state"=>"Assigned", "actions"=>array('IncrementAssignmentCount'), "user_restriction"=>null));
  105. MetaModel::Init_DefineTransition("Assigned", "ev_reassign", array("target_state"=>"Assigned", "actions"=>array('IncrementAssignmentCount','SetLastUpdate'), "user_restriction"=>null));
  106. MetaModel::Init_DefineTransition("Assigned", "ev_start_working", array("target_state"=>"WorkInProgress", "actions"=>array('SetLastUpdate'), "user_restriction"=>null));
  107. MetaModel::Init_DefineTransition("WorkInProgress", "ev_reassign", array("target_state"=>"Assigned", "actions"=>array('IncrementAssignmentCount','SetLastUpdate'), "user_restriction"=>null));
  108. MetaModel::Init_DefineTransition("WorkInProgress", "ev_resolve", array("target_state"=>"Resolved", "actions"=>array('SetLastUpdate'), "user_restriction"=>null));
  109. MetaModel::Init_DefineTransition("Resolved", "ev_close", array("target_state"=>"Closed", "actions"=>array('SetClosureDate','SetLastUpdate'), "user_restriction"=>null));
  110. }
  111. public function Generate(cmdbDataGenerator $oGenerator)
  112. {
  113. $this->Set('org_id', $oGenerator->GetOrganizationId());
  114. $this->Set('title', $oGenerator->GenerateString("enum(Site,Server,Line)| |enum(is down,is flip-flopping,is not responding)"));
  115. $this->Set('agent_id', $oGenerator->GenerateKey("bizPerson", array('org_id' =>$oGenerator->GetOrganizationId() )));
  116. $this->Set('ticket_status', $oGenerator->GenerateString("enum(Open,Closed,Closed,Monitored)"));
  117. $this->Set('start_date', $oGenerator->GenerateString("2007-|number(07-12)|-|number(01-30)| |number(07-12)|:|number(00-59)|:|number(00-59)"));
  118. $this->Set('last_update', $oGenerator->GenerateString("2007-|number(07-12)|-|number(01-30)| |number(07-12)|:|number(00-59)|:|number(00-59)"));
  119. $this->Set('end_date', $oGenerator->GenerateString("2007-|number(07-12)|-|number(01-30)| |number(07-12)|:|number(00-59)|:|number(00-59)"));
  120. }
  121. // State machine actions
  122. public function IncrementAssignmentCount($sStimulusCode)
  123. {
  124. $this->Set('assignment_count', $this->Get('assignment_count') + 1);
  125. return true;
  126. }
  127. public function SetClosureDate($sStimulusCode)
  128. {
  129. $this->Set('end_date', time());
  130. return true;
  131. }
  132. public function SetLastUpdate($sStimulusCode)
  133. {
  134. $this->Set('last_update', time());
  135. return true;
  136. }
  137. /*
  138. EXAMPLE: OnInsert....
  139. public function OnInsert()
  140. {
  141. // Romain: ajouter cette ligne
  142. $oToNotify = $this->Get('contacts_a_notifier');
  143. // Romain: ca c'etait pour verifier que ca fonctionne bien
  144. // $oFirstContact = MetaModel::GetObject('bizPerson', 6);
  145. // $oNewLink = new lnkContactTicket();
  146. // $oNewLink->Set('contact_id', 6);
  147. // $oNewLink->Set('role', 'created before');
  148. // $oToNotify->AddObject($oNewLink);
  149. $oImpactedInfras = DBObjectSet::FromLinkSet($this, 'impacted_infra_manual', 'infra_id');
  150. $aComputed = $oImpactedInfras->GetRelatedObjects('impacts', 2);
  151. if (array_key_exists('logRealObject', $aComputed))
  152. {
  153. // Romain: supprimer cette ligne
  154. // $aLinksToCreate = array();
  155. foreach($aComputed['logRealObject'] as $iKey => $oObject)
  156. {
  157. if (MetaModel::IsParentClass('bizContact', get_class($oObject)))
  158. {
  159. $oNewLink = new lnkContactTicket();
  160. $oNewLink->Set('contact_id', $iKey);
  161. //$oNewLink->Set('ticket_id', $this->GetKey()); // unkown at that time!
  162. $oNewLink->Set('role', 'concerned by an impacted CI');
  163. // Romain: transformer cette ligne
  164. $oToNotify->AddObject($oNewLink);
  165. }
  166. }
  167. // Romain: supprimer cette ligne
  168. // $this->Set('contacts_a_notifier', $oToNotify);
  169. }
  170. }
  171. */
  172. public function ComputeValues()
  173. {
  174. $iKey = $this->GetKey();
  175. if ($iKey < 0)
  176. {
  177. // Object not yet in the Database
  178. $iKey = MetaModel::GetNextKey(get_class($this));
  179. }
  180. $sName = sprintf('I-%06d', $iKey);
  181. $this->Set('name', $sName);
  182. }
  183. }
  184. ////////////////////////////////////////////////////////////////////////////////////
  185. /**
  186. * n-n link between any Infra and a Incident
  187. */
  188. ////////////////////////////////////////////////////////////////////////////////////
  189. class lnkRelatedTicket extends cmdbAbstractObject
  190. {
  191. public static function Init()
  192. {
  193. $aParams = array
  194. (
  195. "category" => "bizmodel,searchable",
  196. "name" => "Related Ticket",
  197. "description" => "Ticket related to a ticket",
  198. "key_type" => "autoincrement",
  199. "key_label" => "link_id",
  200. "name_attcode" => "impact", // ????
  201. "state_attcode" => "",
  202. "reconc_keys" => array("impact"), // ????
  203. "db_table" => "related_ticket",
  204. "db_key_field" => "link_id",
  205. "db_finalclass_field" => "",
  206. "display_template" => "../business/templates/default.html",
  207. );
  208. MetaModel::Init_Params($aParams);
  209. MetaModel::Init_AddAttribute(new AttributeExternalKey("rel_ticket_id", array("targetclass"=>"bizIncidentTicket", "jointype"=> '', "allowed_values"=>null, "sql"=>"rel_ticket_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  210. MetaModel::Init_AddAttribute(new AttributeExternalField("rel_ticket_name", array("allowed_values"=>null, "extkey_attcode"=> 'rel_ticket_id', "target_attcode"=>"title")));
  211. MetaModel::Init_AddAttribute(new AttributeExternalKey("ticket_id", array("targetclass"=>"bizIncidentTicket", "jointype"=> '', "allowed_values"=>null, "sql"=>"ticket_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  212. MetaModel::Init_AddAttribute(new AttributeExternalField("ticket_name", array("allowed_values"=>null, "extkey_attcode"=> 'ticket_id', "target_attcode"=>"title")));
  213. MetaModel::Init_AddAttribute(new AttributeString("impact", array("allowed_values"=>null, "sql"=>"impact", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  214. MetaModel::Init_AddFilterFromAttribute("rel_ticket_id");
  215. MetaModel::Init_AddFilterFromAttribute("ticket_id");
  216. // Display lists
  217. MetaModel::Init_SetZListItems('details', array('rel_ticket_id', 'ticket_id', 'impact')); // Attributes to be displayed for a list
  218. MetaModel::Init_SetZListItems('list', array('rel_ticket_id', 'ticket_id', 'impact')); // Attributes to be displayed for a list
  219. // Search criteria
  220. MetaModel::Init_SetZListItems('standard_search', array('rel_ticket_id', 'ticket_id')); // Criteria of the std search form
  221. MetaModel::Init_SetZListItems('advanced_search', array('rel_ticket_id', 'ticket_id')); // Criteria of the advanced search form
  222. }
  223. public function Generate(cmdbDataGenerator $oGenerator)
  224. {
  225. $this->Set('infra_id', $oGenerator->GenerateKey("logInfra", array('org_id' =>$oGenerator->GetOrganizationId() )));
  226. $this->Set('ticket_id', $oGenerator->GenerateKey("bizIncidentTicket", array('org_id' =>$oGenerator->GetOrganizationId() )));
  227. $this->Set('impact', $oGenerator->GenerateString("enum(none,mandatory,partial)"));
  228. }
  229. }
  230. ////////////////////////////////////////////////////////////////////////////////////
  231. /**
  232. * n-n link between any Infra and a Incident
  233. */
  234. ////////////////////////////////////////////////////////////////////////////////////
  235. class lnkInfraTicket extends cmdbAbstractObject
  236. {
  237. public static function Init()
  238. {
  239. $aParams = array
  240. (
  241. "category" => "bizmodel,searchable",
  242. "name" => "Infra Ticket",
  243. "description" => "Infra impacted by a ticket",
  244. "key_type" => "autoincrement",
  245. "key_label" => "link_id",
  246. "name_attcode" => "impact", // ????
  247. "state_attcode" => "",
  248. "reconc_keys" => array("impact"), // ????
  249. "db_table" => "infra_ticket",
  250. "db_key_field" => "link_id",
  251. "db_finalclass_field" => "",
  252. "display_template" => "../business/templates/default.html",
  253. );
  254. MetaModel::Init_Params($aParams);
  255. MetaModel::Init_AddAttribute(new AttributeExternalKey("infra_id", array("targetclass"=>"logInfra", "jointype"=> '', "allowed_values"=>null, "sql"=>"infra_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  256. MetaModel::Init_AddAttribute(new AttributeExternalField("infra_name", array("allowed_values"=>null, "extkey_attcode"=> 'infra_id', "target_attcode"=>"name")));
  257. MetaModel::Init_AddAttribute(new AttributeExternalKey("ticket_id", array("targetclass"=>"bizIncidentTicket", "jointype"=> '', "allowed_values"=>null, "sql"=>"ticket_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  258. MetaModel::Init_AddAttribute(new AttributeExternalField("ticket_name", array("allowed_values"=>null, "extkey_attcode"=> 'ticket_id', "target_attcode"=>"title")));
  259. MetaModel::Init_AddAttribute(new AttributeString("impact", array("allowed_values"=>null, "sql"=>"impact", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
  260. MetaModel::Init_AddFilterFromAttribute("infra_id");
  261. MetaModel::Init_AddFilterFromAttribute("ticket_id");
  262. // Display lists
  263. MetaModel::Init_SetZListItems('details', array('infra_id', 'ticket_id', 'impact')); // Attributes to be displayed for a list
  264. MetaModel::Init_SetZListItems('list', array('infra_id', 'ticket_id', 'impact')); // Attributes to be displayed for a list
  265. // Search criteria
  266. MetaModel::Init_SetZListItems('standard_search', array('infra_id', 'ticket_id')); // Criteria of the std search form
  267. MetaModel::Init_SetZListItems('advanced_search', array('infra_id', 'ticket_id')); // Criteria of the advanced search form
  268. }
  269. public function Generate(cmdbDataGenerator $oGenerator)
  270. {
  271. $this->Set('infra_id', $oGenerator->GenerateKey("logInfra", array('org_id' =>$oGenerator->GetOrganizationId() )));
  272. $this->Set('ticket_id', $oGenerator->GenerateKey("bizIncidentTicket", array('org_id' =>$oGenerator->GetOrganizationId() )));
  273. $this->Set('impact', $oGenerator->GenerateString("enum(none,mandatory,partial)"));
  274. }
  275. }
  276. ////////////////////////////////////////////////////////////////////////////////////
  277. /**
  278. * n-n link between any Contqct and a Incident
  279. */
  280. ////////////////////////////////////////////////////////////////////////////////////
  281. class lnkContactTicket extends cmdbAbstractObject
  282. {
  283. public static function Init()
  284. {
  285. $aParams = array
  286. (
  287. "category" => "bizmodel,searchable",
  288. "name" => "Contact Ticket",
  289. "description" => "Contacts to be notify for a ticket",
  290. "key_type" => "autoincrement",
  291. "key_label" => "link_id",
  292. "name_attcode" => "role", // ????
  293. "state_attcode" => "",
  294. "reconc_keys" => array("role"), // ????
  295. "db_table" => "contact_ticket",
  296. "db_key_field" => "link_id",
  297. "db_finalclass_field" => "",
  298. "display_template" => "../business/templates/default.html",
  299. );
  300. MetaModel::Init_Params($aParams);
  301. MetaModel::Init_AddAttribute(new AttributeExternalKey("contact_id", array("targetclass"=>"bizContact", "jointype"=> '', "allowed_values"=>null, "sql"=>"contact_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  302. MetaModel::Init_AddAttribute(new AttributeExternalField("contact_email", array("allowed_values"=>null, "extkey_attcode"=> 'contact_id', "target_attcode"=>"email")));
  303. MetaModel::Init_AddAttribute(new AttributeExternalKey("ticket_id", array("targetclass"=>"bizIncidentTicket", "jointype"=> '', "allowed_values"=>null, "sql"=>"ticket_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
  304. MetaModel::Init_AddAttribute(new AttributeExternalField("ticket_name", array("allowed_values"=>null, "extkey_attcode"=> 'ticket_id', "target_attcode"=>"title")));
  305. MetaModel::Init_AddAttribute(new AttributeString("role", array("allowed_values"=>null, "sql"=>"role", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
  306. MetaModel::Init_AddFilterFromAttribute("contact_id");
  307. MetaModel::Init_AddFilterFromAttribute("ticket_id");
  308. // Display lists
  309. MetaModel::Init_SetZListItems('details', array('contact_id', 'ticket_id', 'role')); // Attributes to be displayed for a list
  310. MetaModel::Init_SetZListItems('list', array('contact_id', 'ticket_id', 'role')); // Attributes to be displayed for a list
  311. // Search criteria
  312. MetaModel::Init_SetZListItems('standard_search', array('contact_id', 'ticket_id')); // Criteria of the std search form
  313. MetaModel::Init_SetZListItems('advanced_search', array('contact_id', 'ticket_id')); // Criteria of the advanced search form
  314. }
  315. public function Generate(cmdbDataGenerator $oGenerator)
  316. {
  317. $this->Set('infra_id', $oGenerator->GenerateKey("logInfra", array('org_id' =>$oGenerator->GetOrganizationId() )));
  318. $this->Set('ticket_id', $oGenerator->GenerateKey("bizIncidentTicket", array('org_id' =>$oGenerator->GetOrganizationId() )));
  319. $this->Set('impact', $oGenerator->GenerateString("enum(none,mandatory,partial)"));
  320. }
  321. }
  322. ////////////////////////////////////////////////////////////////////////////////////
  323. //**
  324. //* A workgroup is a queue in a given call tracking system
  325. //* It belongs to a team and a given organization
  326. ////////////////////////////////////////////////////////////////////////////////////
  327. class bizWorkgroup extends logRealObject
  328. {
  329. public static function Init()
  330. {
  331. $aParams = array
  332. (
  333. "category" => "bizmodel,searchable",
  334. "name" => "Workgroup",
  335. "description" => "Call tracking workgroup",
  336. "key_type" => "",
  337. "key_label" => "id",
  338. "name_attcode" => "name",
  339. "state_attcode" => "",
  340. "reconc_keys" => array("org_name", "name"), // inherited attributes
  341. "db_table" => "workgroups",
  342. "db_key_field" => "id",
  343. "db_finalclass_field" => "",
  344. "display_template" => "../business/templates/default.html",
  345. );
  346. MetaModel::Init_Params($aParams);
  347. MetaModel::Init_InheritAttributes();
  348. MetaModel::Init_AddAttribute(new AttributeEnum("status", array("allowed_values"=>new ValueSetEnum('production,implementation,obsolete'), "sql"=>"status", "default_value"=>"implementation", "is_null_allowed"=>false, "depends_on"=>array())));
  349. MetaModel::Init_AddAttribute(new AttributeExternalField("org_name", array("allowed_values"=>null, "extkey_attcode"=> 'org_id', "target_attcode"=>"name")));
  350. MetaModel::Init_AddAttribute(new AttributeExternalKey("team_id", array("targetclass"=>"bizTeam", "allowed_values"=>null, "sql"=>"team_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
  351. MetaModel::Init_AddAttribute(new AttributeExternalField("team_name", array("allowed_values"=>null, "extkey_attcode"=> 'team_id', "target_attcode"=>"name")));
  352. MetaModel::Init_AddAttribute(new AttributeString("role", array("allowed_values"=>new ValueSetEnum("1st level support,2nd level support,3rd level support"), "sql"=>"role", "default_value"=>"1st level support", "is_null_allowed"=>true, "depends_on"=>array())));
  353. MetaModel::Init_InheritFilters();
  354. MetaModel::Init_AddFilterFromAttribute("org_name");
  355. MetaModel::Init_AddFilterFromAttribute("team_id");
  356. MetaModel::Init_AddFilterFromAttribute("role");
  357. // Display lists
  358. MetaModel::Init_SetZListItems('details', array('name', 'status', 'org_id', 'team_id', 'role')); // Attributes to be displayed for the complete details
  359. MetaModel::Init_SetZListItems('list', array('name', 'team_id','role')); // Attributes to be displayed for a list
  360. // Search criteria
  361. MetaModel::Init_SetZListItems('standard_search', array('name', 'status', 'team_id')); // Criteria of the std search form
  362. MetaModel::Init_SetZListItems('advanced_search', array('name', 'status', 'team_id','role')); // Criteria of the advanced search form
  363. }
  364. }
  365. ?>