[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Leads/models/ -> Record.php (source)

   1  <?php
   2  /*+***********************************************************************************
   3   * The contents of this file are subject to the vtiger CRM Public License Version 1.0
   4   * ("License"); You may not use this file except in compliance with the License
   5   * The Original Code is:  vtiger CRM Open Source
   6   * The Initial Developer of the Original Code is vtiger.
   7   * Portions created by vtiger are Copyright (C) vtiger.
   8   * All Rights Reserved.
   9   *************************************************************************************/
  10  
  11  class Leads_Record_Model extends Vtiger_Record_Model {
  12  
  13      /**
  14       * Function returns the url for converting lead
  15       */
  16  	function getConvertLeadUrl() {
  17          return 'index.php?module='.$this->getModuleName().'&view=ConvertLead&record='.$this->getId();
  18      }
  19  
  20      /**
  21       * Static Function to get the list of records matching the search key
  22       * @param <String> $searchKey
  23       * @return <Array> - List of Vtiger_Record_Model or Module Specific Record Model instances
  24       */
  25  	public static function getSearchResult($searchKey, $module=false) {
  26          $db = PearDatabase::getInstance();
  27  
  28          $deletedCondition = $this->getModule()->getDeletedRecordCondition();
  29          $query = 'SELECT * FROM vtiger_crmentity
  30                      INNER JOIN vtiger_leaddetails ON vtiger_leaddetails.leadid = vtiger_crmentity.crmid
  31                      WHERE label LIKE ? AND '.$deletedCondition;
  32          $params = array("%$searchKey%");
  33          $result = $db->pquery($query, $params);
  34          $noOfRows = $db->num_rows($result);
  35  
  36          $moduleModels = array();
  37          $matchingRecords = array();
  38          for($i=0; $i<$noOfRows; ++$i) {
  39              $row = $db->query_result_rowdata($result, $i);
  40              $row['id'] = $row['crmid'];
  41              $moduleName = $row['setype'];
  42              if(!array_key_exists($moduleName, $moduleModels)) {
  43                  $moduleModels[$moduleName] = Vtiger_Module_Model::getInstance($moduleName);
  44              }
  45              $moduleModel = $moduleModels[$moduleName];
  46              $modelClassName = Vtiger_Loader::getComponentClassName('Model', 'Record', $moduleName);
  47              $recordInstance = new $modelClassName();
  48              $matchingRecords[$moduleName][$row['id']] = $recordInstance->setData($row)->setModuleFromInstance($moduleModel);
  49          }
  50          return $matchingRecords;
  51      }
  52  
  53      /**
  54       * Function returns Account fields for Lead Convert
  55       * @return Array
  56       */
  57  	function getAccountFieldsForLeadConvert() {
  58          $accountsFields = array();
  59          $privilegeModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
  60          $moduleName = 'Accounts';
  61  
  62          if(!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) {
  63              return;
  64          }
  65  
  66          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
  67          if ($moduleModel->isActive()) {
  68              $fieldModels = $moduleModel->getFields();
  69              //Fields that need to be shown
  70              $complusoryFields = array('industry');
  71              foreach ($fieldModels as $fieldName => $fieldModel) {
  72                  if($fieldModel->isMandatory() && $fieldName != 'assigned_user_id') {
  73                      $keyIndex = array_search($fieldName,$complusoryFields);
  74                      if($keyIndex !== false) {
  75                          unset($complusoryFields[$keyIndex]);
  76                      }
  77                      $leadMappedField = $this->getConvertLeadMappedField($fieldName, $moduleName);
  78                      $fieldModel->set('fieldvalue', $this->get($leadMappedField));
  79                      $accountsFields[] = $fieldModel;
  80                  }
  81              }
  82              foreach($complusoryFields as $complusoryField) {
  83                  $fieldModel = Vtiger_Field_Model::getInstance($complusoryField, $moduleModel);
  84                  if($fieldModel->getPermissions('readwrite')) {
  85                      $industryFieldModel = $moduleModel->getField($complusoryField);
  86                      $industryLeadMappedField = $this->getConvertLeadMappedField($complusoryField, $moduleName);
  87                      $industryFieldModel->set('fieldvalue', $this->get($industryLeadMappedField));
  88                      $accountsFields[] = $industryFieldModel;
  89                  }
  90              }
  91          }
  92          return $accountsFields;
  93      }
  94  
  95      /**
  96       * Function returns Contact fields for Lead Convert
  97       * @return Array
  98       */
  99  	function getContactFieldsForLeadConvert() {
 100          $contactsFields = array();
 101          $privilegeModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
 102          $moduleName = 'Contacts';
 103  
 104          if(!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) {
 105              return;
 106          }
 107  
 108          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
 109          if ($moduleModel->isActive()) {
 110              $fieldModels = $moduleModel->getFields();
 111              $complusoryFields = array('firstname', 'email');
 112              foreach($fieldModels as $fieldName => $fieldModel) {
 113                  if($fieldModel->isMandatory() &&  $fieldName != 'assigned_user_id' && $fieldName != 'account_id') {
 114                      $keyIndex = array_search($fieldName,$complusoryFields);
 115                      if($keyIndex !== false) {
 116                          unset($complusoryFields[$keyIndex]);
 117                      }
 118  
 119                      $leadMappedField = $this->getConvertLeadMappedField($fieldName, $moduleName);
 120                      $fieldValue = $this->get($leadMappedField);
 121                      if ($fieldName === 'account_id') {
 122                          $fieldValue = $this->get('company');
 123                      }
 124                      $fieldModel->set('fieldvalue', $fieldValue);
 125                      $contactsFields[] = $fieldModel;
 126                  }
 127              }
 128  
 129              foreach($complusoryFields as $complusoryField) {
 130                  $fieldModel = Vtiger_Field_Model::getInstance($complusoryField, $moduleModel);
 131                  if($fieldModel->getPermissions('readwrite')) {
 132                      $leadMappedField = $this->getConvertLeadMappedField($complusoryField, $moduleName);
 133                      $fieldModel = $moduleModel->getField($complusoryField);
 134                      $fieldModel->set('fieldvalue', $this->get($leadMappedField));
 135                      $contactsFields[] = $fieldModel;
 136                  }
 137              }
 138          }
 139          return $contactsFields;
 140      }
 141  
 142      /**
 143       * Function returns Potential fields for Lead Convert
 144       * @return Array
 145       */
 146  	function getPotentialsFieldsForLeadConvert() {
 147          $potentialFields = array();
 148          $privilegeModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
 149          $moduleName = 'Potentials';
 150  
 151          if(!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) {
 152              return;
 153          }
 154  
 155          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
 156          if ($moduleModel->isActive()) {
 157              $fieldModels = $moduleModel->getFields();
 158  
 159              $complusoryFields = array('amount');
 160              foreach($fieldModels as $fieldName => $fieldModel) {
 161                  if($fieldModel->isMandatory() &&  $fieldName != 'assigned_user_id' && $fieldName != 'related_to'
 162                          && $fieldName != 'contact_id') {
 163                      $keyIndex = array_search($fieldName,$complusoryFields);
 164                      if($keyIndex !== false) {
 165                          unset($complusoryFields[$keyIndex]);
 166                      }
 167                      $leadMappedField = $this->getConvertLeadMappedField($fieldName, $moduleName);
 168                      $fieldModel->set('fieldvalue', $this->get($leadMappedField));
 169                      $potentialFields[] = $fieldModel;
 170                  }
 171              }
 172              foreach($complusoryFields as $complusoryField) {
 173                  $fieldModel = Vtiger_Field_Model::getInstance($complusoryField, $moduleModel);
 174                  if($fieldModel->getPermissions('readwrite')) {
 175                      $fieldModel = $moduleModel->getField($complusoryField);
 176                      $amountLeadMappedField = $this->getConvertLeadMappedField($complusoryField, $moduleName);
 177                      $fieldModel->set('fieldvalue', $this->get($amountLeadMappedField));
 178                      $potentialFields[] = $fieldModel;
 179                  }
 180              }
 181          }
 182          return $potentialFields;
 183      }
 184  
 185      /**
 186       * Function returns field mapped to Leads field, used in Lead Convert for settings the field values
 187       * @param <String> $fieldName
 188       * @return <String>
 189       */
 190  	function getConvertLeadMappedField($fieldName, $moduleName) {
 191          $mappingFields = $this->get('mappingFields');
 192  
 193          if (!$mappingFields) {
 194              $db = PearDatabase::getInstance();
 195              $mappingFields = array();
 196  
 197              $result = $db->pquery('SELECT * FROM vtiger_convertleadmapping', array());
 198              $numOfRows = $db->num_rows($result);
 199  
 200              $accountInstance = Vtiger_Module_Model::getInstance('Accounts');
 201              $accountFieldInstances = $accountInstance->getFieldsById();
 202  
 203              $contactInstance = Vtiger_Module_Model::getInstance('Contacts');
 204              $contactFieldInstances = $contactInstance->getFieldsById();
 205  
 206              $potentialInstance = Vtiger_Module_Model::getInstance('Potentials');
 207              $potentialFieldInstances = $potentialInstance->getFieldsById();
 208  
 209              $leadInstance = Vtiger_Module_Model::getInstance('Leads');
 210              $leadFieldInstances = $leadInstance->getFieldsById();
 211  
 212              for($i=0; $i<$numOfRows; $i++) {
 213                  $row = $db->query_result_rowdata($result,$i);
 214                  if(empty($row['leadfid'])) continue;
 215  
 216                  $leadFieldInstance = $leadFieldInstances[$row['leadfid']];
 217                  if(!$leadFieldInstance) continue;
 218  
 219                  $leadFieldName = $leadFieldInstance->getName();
 220                  $accountFieldInstance = $accountFieldInstances[$row['accountfid']];
 221                  if ($row['accountfid'] && $accountFieldInstance) {
 222                      $mappingFields['Accounts'][$accountFieldInstance->getName()] = $leadFieldName;
 223                  }
 224                  $contactFieldInstance = $contactFieldInstances[$row['contactfid']];
 225                  if ($row['contactfid'] && $contactFieldInstance) {
 226                      $mappingFields['Contacts'][$contactFieldInstance->getName()] = $leadFieldName;
 227                  }
 228                  $potentialFieldInstance = $potentialFieldInstances[$row['potentialfid']];
 229                  if ($row['potentialfid'] && $potentialFieldInstance) {
 230                      $mappingFields['Potentials'][$potentialFieldInstance->getName()] = $leadFieldName;
 231                  }
 232              }
 233              $this->set('mappingFields', $mappingFields);
 234          }
 235          return $mappingFields[$moduleName][$fieldName];
 236      }
 237  
 238      /**
 239       * Function returns the fields required for Lead Convert
 240       * @return <Array of Vtiger_Field_Model>
 241       */
 242  	function getConvertLeadFields() {
 243          $convertFields = array();
 244          $accountFields = $this->getAccountFieldsForLeadConvert();
 245          if(!empty($accountFields)) {
 246              $convertFields['Accounts'] = $accountFields;
 247          }
 248  
 249          $contactFields = $this->getContactFieldsForLeadConvert();
 250          if(!empty($contactFields)) {
 251              $convertFields['Contacts'] = $contactFields;
 252          }
 253  
 254          $potentialsFields = $this->getPotentialsFieldsForLeadConvert();
 255          if(!empty($potentialsFields)) {
 256              $convertFields['Potentials'] = $potentialsFields;
 257          }
 258          return $convertFields;
 259      }
 260  
 261      /**
 262       * Function returns the url for create event
 263       * @return <String>
 264       */
 265  	function getCreateEventUrl() {
 266          $calendarModuleModel = Vtiger_Module_Model::getInstance('Calendar');
 267          return $calendarModuleModel->getCreateEventRecordUrl().'&parent_id='.$this->getId();
 268      }
 269  
 270      /**
 271       * Function returns the url for create todo
 272       * @return <String>
 273       */
 274  	function getCreateTaskUrl() {
 275          $calendarModuleModel = Vtiger_Module_Model::getInstance('Calendar');
 276          return $calendarModuleModel->getCreateTaskRecordUrl().'&parent_id='.$this->getId();
 277      }
 278      
 279      /**
 280       * Function to check whether the lead is converted or not
 281       * @return True if the Lead is Converted false otherwise.
 282       */
 283      function isLeadConverted() {
 284          $db = PearDatabase::getInstance();
 285          $id = $this->getId();
 286          $sql = "select converted from vtiger_leaddetails where converted = 1 and leadid=?";
 287          $result = $db->pquery($sql,array($id));
 288          $rowCount = $db->num_rows($result);
 289          if($rowCount > 0){
 290              return true;
 291          }
 292          return false;
 293      }
 294  
 295  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1