Пример #1
1
 /**
  * Do a specific SLAlevel for a ticket
  *
  * @param $data array data of an entry of slalevels_tickets
  *
  * @return nothing
  **/
 static function doLevelForTicket(array $data)
 {
     $ticket = new Ticket();
     $slalevelticket = new self();
     // existing ticket and not deleted
     if ($ticket->getFromDB($data['tickets_id']) && !$ticket->isDeleted()) {
         $slalevel = new SlaLevel();
         $sla = new SLA();
         // Check if sla datas are OK
         if ($ticket->fields['slas_id'] > 0 && $ticket->fields['slalevels_id'] == $data['slalevels_id']) {
             if ($ticket->fields['status'] == CommonITILObject::CLOSED) {
                 // Drop line when status is closed
                 $slalevelticket->delete(array('id' => $data['id']));
             } else {
                 if ($ticket->fields['status'] != CommonITILObject::SOLVED) {
                     // If status = solved : keep the line in case of solution not validated
                     $input['id'] = $ticket->getID();
                     $input['_auto_update'] = true;
                     if ($slalevel->getRuleWithCriteriasAndActions($data['slalevels_id'], 1, 1) && $sla->getFromDB($ticket->fields['slas_id'])) {
                         $doit = true;
                         if (count($slalevel->criterias)) {
                             $doit = $slalevel->checkCriterias($ticket->fields);
                         }
                         // Process rules
                         if ($doit) {
                             $input = $slalevel->executeActions($input, array());
                         }
                     }
                     // Put next level in todo list
                     $next = $slalevel->getNextSlaLevel($ticket->fields['slas_id'], $ticket->fields['slalevels_id']);
                     $input['slalevels_id'] = $next;
                     $ticket->update($input);
                     $sla->addLevelToDo($ticket);
                     // Action done : drop the line
                     $slalevelticket->delete(array('id' => $data['id']));
                 }
             }
         } else {
             // Drop line
             $slalevelticket->delete(array('id' => $data['id']));
         }
     } else {
         // Drop line
         $slalevelticket->delete(array('id' => $data['id']));
     }
 }
Пример #2
0
 /**
  * Do a specific SLAlevel for a ticket
  *
  * @param $data array data of an entry of slalevels_tickets
  *
  * @return nothing
  **/
 static function doLevelForTicket(array $data)
 {
     $ticket = new Ticket();
     $slalevelticket = new self();
     // existing ticket and not deleted
     if ($ticket->getFromDB($data['tickets_id']) && !$ticket->isDeleted()) {
         // search all actors of a ticket
         foreach ($ticket->getUsers(CommonITILActor::REQUESTER) as $user) {
             $ticket->fields['_users_id_requester'][] = $user['users_id'];
         }
         foreach ($ticket->getUsers(CommonITILActor::ASSIGN) as $user) {
             $ticket->fields['_users_id_assign'][] = $user['users_id'];
         }
         foreach ($ticket->getUsers(CommonITILActor::OBSERVER) as $user) {
             $ticket->fields['_users_id_observer'][] = $user['users_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::REQUESTER) as $group) {
             $ticket->fields['_groups_id_requester'][] = $group['groups_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::ASSIGN) as $group) {
             $ticket->fields['_groups_id_assign'][] = $group['groups_id'];
         }
         foreach ($ticket->getGroups(CommonITILActor::OBSERVER) as $groups) {
             $ticket->fields['_groups_id_observer'][] = $group['groups_id'];
         }
         foreach ($ticket->getSuppliers(CommonITILActor::ASSIGN) as $supplier) {
             $ticket->fields['_suppliers_id_assign'][] = $supplier['suppliers_id'];
         }
         $slalevel = new SlaLevel();
         $sla = new SLA();
         // Check if sla datas are OK
         if ($ticket->fields['slas_id'] > 0 && $ticket->fields['slalevels_id'] == $data['slalevels_id']) {
             if ($ticket->fields['status'] == CommonITILObject::CLOSED) {
                 // Drop line when status is closed
                 $slalevelticket->delete(array('id' => $data['id']));
             } else {
                 if ($ticket->fields['status'] != CommonITILObject::SOLVED) {
                     // If status = solved : keep the line in case of solution not validated
                     $input['id'] = $ticket->getID();
                     $input['_auto_update'] = true;
                     if ($slalevel->getRuleWithCriteriasAndActions($data['slalevels_id'], 1, 1) && $sla->getFromDB($ticket->fields['slas_id'])) {
                         $doit = true;
                         if (count($slalevel->criterias)) {
                             $doit = $slalevel->checkCriterias($ticket->fields);
                         }
                         // Process rules
                         if ($doit) {
                             $input = $slalevel->executeActions($input, array());
                         }
                     }
                     // Put next level in todo list
                     $next = $slalevel->getNextSlaLevel($ticket->fields['slas_id'], $ticket->fields['slalevels_id']);
                     $input['slalevels_id'] = $next;
                     $ticket->update($input);
                     $sla->addLevelToDo($ticket);
                     // Action done : drop the line
                     $slalevelticket->delete(array('id' => $data['id']));
                 }
             }
         } else {
             // Drop line
             $slalevelticket->delete(array('id' => $data['id']));
         }
     } else {
         // Drop line
         $slalevelticket->delete(array('id' => $data['id']));
     }
 }
 /**
  * Cron for ticket's automatic close
  * @param $task : crontask object
  *
  * @return integer (0 : nothing done - 1 : done)
  *
  */
 static function cronSlaTicket($task)
 {
     global $DB;
     $tot = 0;
     $query = "SELECT *\n                FROM `glpi_slalevels_tickets`\n                WHERE `glpi_slalevels_tickets`.`date` < NOW()";
     $slalevelticket = new self();
     foreach ($DB->request($query) as $data) {
         $tot++;
         $ticket = new Ticket();
         if ($ticket->getFromDB($data['tickets_id'])) {
             $slalevel = new SlaLevel();
             $sla = new SLA();
             // Check if sla datas are OK
             if ($ticket->fields['slas_id'] > 0 && $ticket->fields['slalevels_id'] == $data['slalevels_id']) {
                 if ($ticket->fields['status'] == 'closed') {
                     // Drop line when status is closed
                     $slalevelticket->delete(array('id' => $data['id']));
                 } else {
                     if ($ticket->fields['status'] != 'solved') {
                         // If status = solved : keep the line in case of solution not validated
                         $input = $ticket->fields;
                         $input['_auto_update'] = true;
                         if ($slalevel->getRuleWithCriteriasAndActions($data['slalevels_id'], 0, 1) && $sla->getFromDB($ticket->fields['slas_id'])) {
                             // Process rules
                             $input = $slalevel->executeActions($input, array());
                         }
                         // Put next level in todo list
                         $next = $slalevel->getNextSlaLevel($ticket->fields['slas_id'], $ticket->fields['slalevels_id']);
                         $input['slalevels_id'] = $next;
                         $ticket->update($input);
                         $sla->addLevelToDo($ticket);
                     }
                 }
             }
         } else {
             // Drop line
             $slalevelticket->delete(array('id' => $data['id']));
         }
     }
     $task->setVolume($tot);
     return $tot > 0;
 }