mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-26 16:18:47 +00:00
320 lines
10 KiB
PHP
320 lines
10 KiB
PHP
<?php
|
|
/*************************************
|
|
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
************************************/
|
|
/* crmv@71387 */
|
|
|
|
require_once 'include/Webservices/ConvertLead.php';
|
|
require_once 'modules/Leads/ConvertLeadUI.php';
|
|
|
|
class TouchConvertLead extends TouchWSClass {
|
|
|
|
// these are the default fields shown, but according to visibility, they may be restricted
|
|
public $convertFields = array(
|
|
'Accounts' => array(
|
|
array(
|
|
'fieldname' => 'accountname',
|
|
'readonly' => true, // the value cannot be changed from the user
|
|
'mappable' => false, // the source field can be configured
|
|
//'sourcefield' => '', // the field in the lead
|
|
),
|
|
array(
|
|
'fieldname' => 'industry',
|
|
'readonly' => false,
|
|
'mappable' => true,
|
|
)
|
|
),
|
|
'Contacts' => array(
|
|
array(
|
|
'fieldname' => 'lastname',
|
|
'readonly' => false,
|
|
'mappable' => false,
|
|
),
|
|
array(
|
|
'fieldname' => 'firstname',
|
|
'readonly' => false,
|
|
'mappable' => false,
|
|
),
|
|
array(
|
|
'fieldname' => 'email',
|
|
'readonly' => false,
|
|
'mappable' => false,
|
|
),
|
|
),
|
|
'Potentials' => array(
|
|
array(
|
|
'fieldname' => 'potentialname',
|
|
'readonly' => false,
|
|
'mappable' => false,
|
|
),
|
|
array(
|
|
'fieldname' => 'closingdate',
|
|
'readonly' => false,
|
|
'mappable' => true,
|
|
),
|
|
array(
|
|
'fieldname' => 'sales_stage',
|
|
'readonly' => false,
|
|
'mappable' => true,
|
|
),
|
|
array(
|
|
'fieldname' => 'amount',
|
|
'readonly' => false,
|
|
'mappable' => true,
|
|
),
|
|
),
|
|
);
|
|
|
|
function process(&$request) {
|
|
global $adb, $table_prefix, $touchInst;
|
|
|
|
if (in_array('Leads', $touchInst->excluded_modules)) return $this->error('Module not permitted');
|
|
|
|
$mode = $request['mode'];
|
|
if ($mode == 'getconfig') {
|
|
return $this->getConfig($request);
|
|
} elseif ($mode == 'convert') {
|
|
return $this->convertLead($request);
|
|
} else {
|
|
return $this->error('Unknown mode');
|
|
}
|
|
}
|
|
|
|
public function getConfig(&$request) {
|
|
global $current_user;
|
|
|
|
$config = array();
|
|
$uiinfo = new ConvertLeadUI(0, $current_user);
|
|
|
|
$fields = array();
|
|
foreach ($this->convertFields as $module => $list) {
|
|
if ($uiinfo->isModuleActive($module)) {
|
|
foreach ($list as $finfo) {
|
|
if ($uiinfo->isActive($finfo['fieldname'], $module)) {
|
|
// ok, I can use the field
|
|
$src = $this->getSourceField($module, $finfo['fieldname'], $finfo['mappable']);
|
|
$okfield = $finfo;
|
|
if ($src) $okfield['sourcefield'] = $src;
|
|
$fields[$module][] = $okfield;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$config['modules'] = array_keys($fields);
|
|
$config['fields'] = $fields;
|
|
$config['mapping'] = $this->getMapping();
|
|
|
|
return $this->success(array('result' => $config));
|
|
}
|
|
|
|
protected function getMapping() {
|
|
global $adb, $table_prefix, $touchInst;
|
|
|
|
$mapping = array();
|
|
|
|
$res = $adb->pquery("
|
|
SELECT clm.cfmid, f.fieldname as lead_field, f2.fieldname as account_field, f3.fieldname as contact_field, f4.fieldname as potential_field
|
|
FROM {$table_prefix}_field f
|
|
INNER JOIN {$table_prefix}_convertleadmapping clm ON clm.leadfid = f.fieldid
|
|
LEFT JOIN {$table_prefix}_field f2 ON f2.fieldid = clm.accountfid
|
|
LEFT JOIN {$table_prefix}_field f3 ON f3.fieldid = clm.contactfid
|
|
LEFT JOIN {$table_prefix}_field f4 ON f4.fieldid = clm.potentialfid",
|
|
array($tabid, $fieldname, intval($editable))
|
|
);
|
|
if ($res && $adb->num_rows($res) > 0) {
|
|
while ($row = $adb->FetchByAssoc($res, -1, false)) {
|
|
$leadField = $row['lead_field'];
|
|
if ($row['account_field']) {
|
|
$mapping[$leadField]['Accounts'][] = $row['account_field'];
|
|
}
|
|
if ($row['contact_field']) {
|
|
$mapping[$leadField]['Contacts'][] = $row['contact_field'];
|
|
}
|
|
if ($row['potential_field']) {
|
|
$mapping[$leadField]['Potentials'][] = $row['potential_field'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $mapping;
|
|
}
|
|
|
|
protected function getSourceField($module, $fieldname, $editable = true) {
|
|
global $adb, $table_prefix;
|
|
|
|
$tabid = getTabid($module);
|
|
if ($module == 'Accounts') {
|
|
$column = 'accountfid';
|
|
} elseif ($module == 'Contacts') {
|
|
$column = 'contactfid';
|
|
} elseif ($module == 'Potentials') {
|
|
$column = 'potentialfid';
|
|
}
|
|
|
|
$sourcefield = null;
|
|
$res = $adb->pquery("
|
|
SELECT f.fieldname
|
|
FROM {$table_prefix}_field f
|
|
INNER JOIN {$table_prefix}_convertleadmapping clm ON clm.leadfid = f.fieldid
|
|
INNER JOIN {$table_prefix}_field f2 ON f2.fieldid = clm.{$column}
|
|
WHERE f2.tabid = ? AND f2.fieldname = ? AND clm.editable = ?",
|
|
array($tabid, $fieldname, intval($editable))
|
|
);
|
|
if ($res && $adb->num_rows($res) > 0) {
|
|
$sourcefield = $adb->query_result_no_html($res, 0, 'fieldname');
|
|
}
|
|
return $sourcefield;
|
|
}
|
|
|
|
public function convertLead(&$request) {
|
|
global $adb, $table_prefix, $current_user;
|
|
global $touchInst;
|
|
|
|
$leadid = intval($request['leadid']);
|
|
$values = Zend_Json::decode($request['values']);
|
|
|
|
if ($leadid <= 0) {
|
|
return $this->error('Invalid leadid');
|
|
}
|
|
if (empty($values)) {
|
|
return $this->error('Invalid values');
|
|
}
|
|
|
|
$uiinfo = new ConvertLeadUI($leadid, $current_user);
|
|
|
|
// get fiere and telemarketing related
|
|
$this->checkFiereAndTmk($leadid);
|
|
|
|
// prepare the conversion
|
|
try {
|
|
$otype = vtws_getOwnerType($values['Globals']['assigned_user_id']);
|
|
$assignedTo = vtws_getWebserviceEntityId($otype, $values['Globals']['assigned_user_id']);
|
|
} catch (Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
|
|
$entityValues=array();
|
|
$entityValues['transferRelatedRecordsTo'] = ($values['Globals']['transferto'] == 'transfertoacc' ? 'Accounts' : 'Contacts');
|
|
$entityValues['assignedTo'] = $assignedTo;
|
|
$entityValues['leadId'] = vtws_getWebserviceEntityId('Leads', $leadid);
|
|
|
|
foreach ($values as $module => $mvalues) {
|
|
if ($module == 'Globals' || !$uiinfo->isModuleActive($module)) continue;
|
|
$entityValues['entities'][$module]['create'] = true;
|
|
$entityValues['entities'][$module]['name'] = $module;
|
|
foreach ($mvalues as $name => $value) {
|
|
if (!$uiinfo->isActive($name, $module)) continue;
|
|
$tvalue = $touchInst->touch2Field($module, $name, $value);
|
|
$entityValues['entities'][$module][$name] = $tvalue;
|
|
}
|
|
}
|
|
|
|
//convert!
|
|
try{
|
|
$result = vtws_convertlead($entityValues,$current_user);
|
|
} catch(Exception $e) {
|
|
return array('success' => false, 'error' => $e->getMessage());
|
|
}
|
|
|
|
// get the resulting ids
|
|
$accountIdComponents = vtws_getIdComponents($result['Accounts']);
|
|
$contactIdComponents = vtws_getIdComponents($result['Contacts']);
|
|
$potentialIdComponents = vtws_getIdComponents($result['Potentials']);
|
|
|
|
// prepare the result
|
|
$result = array(
|
|
'leadid' => $leadid,
|
|
'accountid' => $accountIdComponents[1],
|
|
'contactid' => $contactIdComponents[1],
|
|
'potentialid' => $potentialIdComponents[1],
|
|
// temp ids
|
|
'temp_accountid' => $values['Accounts']['temp_crmid'],
|
|
'temp_contactid' => $values['Contacts']['temp_crmid'],
|
|
'temp_potentialid' => $values['Potentials']['temp_crmid'],
|
|
);
|
|
|
|
// update fiere and telemarketing
|
|
$this->saveFiereAndTmk($leadid, $result);
|
|
|
|
return $this->success(array('result' => $result));
|
|
}
|
|
|
|
protected function checkFiereAndTmk($leadid) {
|
|
global $adb, $table_prefix;
|
|
|
|
$this->fiere_ids = null;
|
|
$this->tmk_ids = null;
|
|
|
|
//crmv@52391
|
|
if (isModuleInstalled('Fiere') && vtlib_isModuleActive('Fiere')) {
|
|
// check if the lead has fiere
|
|
$res = $adb->pquery("select fieraid, leadid from {$table_prefix}_fiere inner join {$table_prefix}_crmentity on fieraid = crmid where {$table_prefix}_crmentity.deleted = 0 and {$table_prefix}_fiere.leadid = ?", array($leadid));
|
|
if ($res) {
|
|
for ($i=0; $i<$adb->num_rows($res); ++$i) {
|
|
$this->fiere_ids[] = intval($adb->query_result_no_html($res, $i, 'fieraid'));
|
|
}
|
|
}
|
|
}
|
|
if (isModuleInstalled('Telemarketing') && vtlib_isModuleActive('Telemarketing')) {
|
|
// check if the lead has telemarketing(s)
|
|
$res = $adb->pquery("select telemarketingid, leadid from {$table_prefix}_telemarketing inner join {$table_prefix}_crmentity on telemarketingid = crmid where {$table_prefix}_crmentity.deleted = 0 and {$table_prefix}_telemarketing.leadid = ?", array($leadid));
|
|
if ($res) {
|
|
for ($i=0; $i<$adb->num_rows($res); ++$i) {
|
|
$this->tmk_ids[] = intval($adb->query_result_no_html($res, $i, 'telemarketingid'));
|
|
}
|
|
}
|
|
}
|
|
//crmv@52391e
|
|
}
|
|
|
|
protected function saveFiereAndTmk($leadid, $result) {
|
|
global $adb, $table_prefix;
|
|
|
|
$accountId = $result['accountid'];
|
|
$contactId = $result['contactid'];
|
|
|
|
//crmv@52391
|
|
// convert fiere
|
|
$updateFiere = false;
|
|
if (is_array($this->fiere_ids) && count($this->fiere_ids) > 0 && !empty($accountId)) {
|
|
$params = array($accountId);
|
|
$params = array_merge($params, $this->fiere_ids);
|
|
$adb->pquery("update {$table_prefix}_fiere set leadid = 0, accountid = ? where fieraid in (".generateQuestionMarks($this->fiere_ids).')', $params);
|
|
$updateFiere = true;
|
|
}
|
|
if (is_array($this->fiere_ids) && count($this->fiere_ids) > 0 && !empty($contactId)) {
|
|
$params = array($contactId);
|
|
$params = array_merge($params, $this->fiere_ids);
|
|
$adb->pquery("update {$table_prefix}_fiere set leadid = 0, contactid = ? where fieraid in (".generateQuestionMarks($this->fiere_ids).')', $params);
|
|
$updateFiere = true;
|
|
}
|
|
// fix the modifiedtime
|
|
if ($updateFiere) {
|
|
$adb->pquery("update {$table_prefix}_crmentity set modifiedtime = ? where crmid in (".generateQuestionMarks($this->fiere_ids).')', array(date('Y-m-d H:i:s'), $this->fiere_ids));
|
|
}
|
|
|
|
// convert telemarketings
|
|
$updateTmk = false;
|
|
if (is_array($this->tmk_ids) && count($this->tmk_ids) > 0 && !empty($accountId)) {
|
|
$params = array($accountId);
|
|
$params = array_merge($params, $this->tmk_ids);
|
|
$adb->pquery("update {$table_prefix}_telemarketing set leadid = 0, accountid = ? where telemarketingid in (".generateQuestionMarks($this->tmk_ids).')', $params);
|
|
$updateTmk = true;
|
|
}
|
|
if (is_array($this->tmk_ids) && count($this->tmk_ids) > 0 && !empty($contactId)) {
|
|
$params = array($contactId);
|
|
$params = array_merge($params, $this->tmk_ids);
|
|
$adb->pquery("update {$table_prefix}_telemarketing set leadid = 0, contactid = ? where telemarketingid in (".generateQuestionMarks($this->tmk_ids).')', $params);
|
|
$updateTmk = true;
|
|
}
|
|
// fix the modifiedtime
|
|
if ($updateTmk) {
|
|
$adb->pquery("update {$table_prefix}_crmentity set modifiedtime = ? where crmid in (".generateQuestionMarks($this->tmk_ids).')', array(date('Y-m-d H:i:s'), $this->tmk_ids));
|
|
}
|
|
//crmv@52391e
|
|
|
|
}
|
|
|
|
} |