2017-10-04 7 views
1

tous, Je travaille actuellement sur SugarCRM. Nous avons mis à jour la fonction handleCreateCase sur le module InboundMail . Dans ce module, nous devons assigner n'importe quel cas à l'utilisateur actif. Supposé que tout utilisateur manipule l'affaire mais maintenant il quitte la société donc nous avons désactivé son compte mais maintenant le client va rejouer les cas alors ce cas assigné à cet utilisateur donc nous vérifions avant d'affecter le cas cet l'utilisateur est actif ou pasLes cas de suivi doivent être assignés à l'utilisateur actif dans sugarcrm

J'ai donc écrit le code pour ces derniers,

**// Write The Code for Active User -** 
         $qry_user = "SELECT status FROM users WHERE id='" . $assign_id . "' LIMIT 1"; 
         $res_user = $this -> db -> query($qry_user, true); 
         $resultUser = $this -> db -> fetchByAssoc($res_user); 
         $status = $resultUser['status']; 
         if($status != 'Active'){ 
          $GLOBALS['log'] -> fatal('Not Active User'. $assign_id); 
          $qry_db = "SELECT id FROM users WHERE is_group=0 AND deleted = 0 AND status = 'active' ORDER BY RAND() LIMIT 1"; 
          $res_db = $this -> db ->query($qry_db, true); 
          $fetch_db = $this -> db -> fetchByAssoc($res_db); 
          if (is_array($fetch_db) && count($fetch_db) > 0) { 
           $assign_id = $fetch_db['id']; 
          } else { 
           $GLOBALS['log'] -> fatal('User Not Present in Users table'); 
          } 
         } 
         else{ 
          $assign_id = $assign_id; 
         } 

Avant renvoyer l'affaire.

J'ai écrit le code pour le suivi des cas doit être affecté à un utilisateur actif, mais il ne fonctionne pas s'il vous plaît aidez-moi sur ces .... code:

   function handleCreateCase($email, $userId) { 
       global $current_user, $mod_strings, $current_language; 
       $mod_strings = return_module_language($current_language, "Emails"); 
       $GLOBALS['log']->debug('In handleCreateCase'); 
       $c = new aCase(); 
       $this->getCaseIdFromCaseNumber($email->name, $c); 
       if (!$this->handleCaseAssignment($email) && $this->isMailBoxTypeCreateCase()) { 
        // create a case 
        $GLOBALS['log']->debug('retrieveing email'); 
        $email->retrieve($email->id); 
        $c = new aCase(); 
        /*Amol If Have open case from this email*/ 
        $new_case = 1; 
        //create new case? 
        $skip_checking = 0; 
        // skip mailbox for attached into existing case? 
        $email_from = $email -> from_addr; 

        $sql = "SELECT c.id FROM cases c INNER JOIN emails e on e.parent_id=c.id INNER JOIN emails_text et on et.email_id=e.id WHERE (c.`status`='New' OR c.`status`='FollowUp' OR c.`status`='PartsReqCompleted') AND et.from_addr LIKE '%" . $email_from . "%' ORDER BY c.date_entered DESC LIMIT 1"; //Amol 
        $results = $this -> db -> query($sql, true); 
        $row_c = $this -> db -> fetchByAssoc($results); 

        $skip_emailboxes = $this -> get_stored_options('create_case_skip_emails', ""); 
        // skip mailboxes 



        if (!empty($skip_emailboxes)) { 
         $case_skip_followup_mailboxes_from = explode(',', $skip_emailboxes); 
         if (in_array($email_from, $case_skip_followup_mailboxes_from)) { 
          $skip_checking = 1; 
         } 
        } 
        if (strpos((trim(strtolower($email->to_addrs))), "[email protected]") !== false) { 
         $fixedstring = "CASE"; 
         if(count($row_c) <= 0){ 
         if (strpos($email->name, $fixedstring) !== false) { 
           list($first_str, $second_str) = explode('[CASE:', $subject); 
           list($first_string, $second_string) = explode(']', $second_str); 
           $caseId = $first_string; 
           $new_case=0; // Already exist case 
         }else{ 
          $new_case=1; // New Case 
         } 
         } 
         else{ 
          $new_case=1; 
        }else{ 
         preg_match("/Name:(.*)/", $email -> description, $data); 
         $mailer_name = trim($data[1]); 
         $email_sender= $email->reply_to_email; 

         $sql_acc = "SELECT eabr.bean_id, eabr.bean_module FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (ea.id = eabr.email_address_id) WHERE eabr.deleted=0 AND ea.email_address = '$email_sender' AND eabr.bean_module='Accounts'"; 

         $res = $this->db->query($sql_acc); 
         $id; 
         while ($row = $GLOBALS['db']->fetchByAssoc($res)) { 
           $id = $row['bean_id']; 
          } 
         if(is_null($id)){ 

          $mailer_name = mysql_escape_string($mailer_name); 
           $acc_id=create_guid(); 
           $id = $acc_id; 
           $insert_acc="INSERT INTO `accounts`(`id`, `name`) VALUES ('$acc_id','$mailer_name')"; 
           $this->db->query($insert_acc); 
           $email_add_id = create_guid(); 
           $email_sender_upper = strtoupper($email_sender); 
           $insert_emai_add="INSERT INTO `email_addresses`(`id`, `email_address`, `email_address_caps`) VALUES ('$email_add_id','$email_sender','$email_sender_upper')"; 
           $this->db->query($insert_emai_add); 
           $relation_id = create_guid(); 
           $insert_rel="INSERT INTO `email_addr_bean_rel`(`id`, `email_address_id`, `bean_id`, `bean_module`) VALUES ('$relation_id','$email_add_id','$acc_id','Accounts')"; 
           $this->db->query($insert_rel); 
          } 

         $c -> account_id = $id; 
        } 

        $c -> description = $email -> description; 
        /* Asssign Case*/ 
        if ($new_case) { 
         $createCaseAssignId = $this -> get_stored_options('create_case_user_id', ""); 
        } else { 
         $createCaseAssignId = ''; 
        } 
        if (!empty($createCaseAssignId)) { 
         $case_assign_uids = explode(',', $createCaseAssignId); 
         //check for last assigned 
         $query = "SELECT * FROM case_email_quene WHERE mailbox_id = '" . $this -> id . "' LIMIT 1 "; 
         $results = $this -> db -> query($query, true); 
         $row = $this -> db -> fetchByAssoc($results); 
         if (is_array($row) && count($row) > 0) { 
          if ($row['last_uid'] == end($case_assign_uids)) { 
           $query = "UPDATE case_email_quene SET last_uid='" . $case_assign_uids[0] . "' WHERE mailbox_id = '" . $this -> id . "' "; 
           $results = $this -> db -> query($query, true); 
           $assign_id = $case_assign_uids[0]; 
          } else {// if not end of array 
           $keys = array_keys($case_assign_uids, $row['last_uid']); 
           if (is_array($keys) && count($keys) > 0) {//if we have this user selected 
            $new_key = $keys[0] + 1; 
            $query = "UPDATE case_email_quene SET last_uid='" . $case_assign_uids[$new_key] . "' WHERE mailbox_id = '" . $this -> id . "' "; 
            $results = $this -> db -> query($query, true); 
            $assign_id = $case_assign_uids[$new_key]; 

           } else {// if record was updated 
            $query = "UPDATE case_email_quene SET last_uid='" . $case_assign_uids[0] . "' WHERE mailbox_id = '" . $this -> id . "' "; 
            $results = $this -> db -> query($query, true); 
            $assign_id = $case_assign_uids[0]; 
           } 
          } 
         } else {//but if not registered? 
          $query = "INSERT INTO case_email_quene (mailbox_id,last_uid) VALUES ('" . $this -> id . "','" . $case_assign_uids[0] . "') "; 
          $results = $this -> db -> query($query, true); 
          $assign_id = $case_assign_uids[0]; 
         } 
         //$this->id mailbox id 
         $GLOBALS['log'] -> fatal('New Case - User Id: ' . $assign_id); 
         **// Write The Code for Active User -** 
         $qry_user = "SELECT status FROM users WHERE id='" . $assign_id . "' LIMIT 1"; 
         $res_user = $this -> db -> query($qry_user, true); 
         $resultUser = $this -> db -> fetchByAssoc($res_user); 
         $status = $resultUser['status']; 
         if($status != 'Active'){ 
          $GLOBALS['log'] -> fatal('Not Active User'. $assign_id); 
          $qry_db = "SELECT id FROM users WHERE is_group=0 AND deleted = 0 AND status = 'active' ORDER BY RAND() LIMIT 1"; 
          $res_db = $this -> db ->query($qry_db, true); 
          $fetch_db = $this -> db -> fetchByAssoc($res_db); 
          if (is_array($fetch_db) && count($fetch_db) > 0) { 
           $assign_id = $fetch_db['id']; 
          } else { 
           $GLOBALS['log'] -> fatal('User Not Present in Users table'); 
          } 
         } 
         else{ 
          $assign_id = $assign_id; 
         } 
         $c -> assigned_user_id = $assign_id; 
        } elseif ($new_case) { 
         /*check if database not empty then empty it*/ 
         $query = "SELECT * FROM case_email_quene WHERE mailbox_id = '" . $this -> id . "' LIMIT 1 "; 
         $results = $this -> db -> query($query, true); 
         $row_id = $this -> db -> fetchByAssoc($results); 
         if (is_array($row_id) && count($row_id) > 0) { 
          $query = "DELETE FROM case_email_quene WHERE mailbox_id = '" . $this -> id . "' "; 
          $results = $this -> db -> query($query, true); 
         } 

         $GLOBALS['log'] -> fatal('Existing Case - User Id: ' . $userId); 

         $c -> assigned_user_id = $userId; 

        }   

Répondre

1

Je résolu ce problème,

Veuillez mettre le code sur handleCaseAssignment()

function handleCaseAssignment($email) { 
    $c = new aCase(); 
    if ($caseId = $this -> getCaseIdFromCaseNumber($email -> name, $c)) { 
     $c -> retrieve($caseId); 
     if (($c -> status == "Closed") || ($c -> status == "Rejected")) {//Amol 
      $c -> status = "ReOpened"; 
     } else { 
      $c -> status = "FollowUp"; 
     } 
     $c -> save(); 

     $email -> retrieve($email -> id); 
     //assign the case info to parent id and parent type so that the case can be linked to the email on Email Save 
     $email -> parent_type = "Cases"; 
     $email -> parent_id = $caseId; 
     // assign the email to the case owner 

     $GLOBALS['log'] -> fatal('Case - cassigned_user_id11: ' . $c->assigned_user_id); 
     $GLOBALS['log'] -> fatal('Case - caseId Id11: ' . $caseId); 
     $GLOBALS['log'] -> fatal('emailid11: ' . $email->id); 
      $qry_user = "SELECT status FROM users WHERE id='" . $c->assigned_user_id . "' LIMIT 1"; 
      $res_user = $this -> db -> query($qry_user, true); 
      $resultUser = $this -> db -> fetchByAssoc($res_user); 
      $status = $resultUser['status']; 
      if($status != 'Active'){ 
       $qry_db = "SELECT id FROM users WHERE is_group=0 AND deleted = 0 AND status = 'active' AND department='CS' ORDER BY RAND() LIMIT 1"; 

       $res_db = $this -> db ->query($qry_db, true); 
       $fetch_db = $this -> db -> fetchByAssoc($res_db); 
       if (is_array($fetch_db) && count($fetch_db) > 0) { 
        $email->assigned_user_id = $fetch_db['id']; 
        $c -> assigned_user_id = $email->assigned_user_id; 
        $c -> save(); 
       } else { 
        $GLOBALS['log'] -> fatal('User Not Present in Users table'); 
       } 
      } 
      else{ 
       $email->assigned_user_id = $c->assigned_user_id; 

     //$email->assigned_user_id = $c->assigned_user_id; 
     $email->save(); 
     $GLOBALS['log']->debug('InboundEmail found exactly 1 match for a case: '.$c->name); 
     return true; 
    } // if 
    return false; 
} // fn