%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/connectors/ |
Current File : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/connectors/lead.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage sender * @copyright 2001-2012 Bitrix */ namespace Bitrix\Sender\Integration\Crm\Connectors; use Bitrix\Main\DB\Result; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Entity; use Bitrix\Main\Page\Asset; use Bitrix\Main\UI\Filter\AdditionalDateType; use Bitrix\Sender\Connector\BaseFilter as ConnectorBaseFilter; use Bitrix\Sender\Connector\ResultView; use Bitrix\Crm\LeadTable; use Bitrix\Crm\PhaseSemantics; Loc::loadMessages(__FILE__); /** * Class Lead * @package Bitrix\Sender\Integration\Crm\Connectors */ class Lead extends ConnectorBaseFilter { /** * Get name. * * @return string */ public function getName() { return Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_NAME'); } /** * Get code. * * @return string */ public function getCode() { return "crm_lead"; } /** * Get query. * * @return null|Entity\Query */ public function getQuery() { $filter = Helper::getFilterByFields( self::getUiFilterFields(), $this->getFieldValues() ); $runtime = Helper::getRuntimeByEntity(null); $nameExprField = new Entity\ExpressionField( '`NAME`', 'CASE %2$s WHEN \'Y\' ' . 'THEN if (%3$s>0, %4$s, if (%5$s>0, %6$s, %1$s)) ELSE %1$s END', [ 'NAME', 'IS_RETURN_CUSTOMER', 'CONTACT_ID', 'CONTACT.NAME', 'COMPANY_ID', 'COMPANY.TITLE' ] ); $query = new Entity\Query(LeadTable::getEntity()); $query->setFilter($filter); $query->setSelect([ $nameExprField, 'CRM_ENTITY_ID' => 'ID', 'CRM_ENTITY_TYPE_ID', 'CRM_CONTACT_ID' => 'CONTACT_ID', 'CRM_COMPANY_ID' => 'COMPANY_ID', ]); $query->registerRuntimeField(new Entity\ExpressionField('CRM_ENTITY_TYPE_ID', \CCrmOwnerType::Lead)); $query->registerRuntimeField(null, new Entity\ReferenceField( 'CONTACT', "\\Bitrix\\Crm\\ContactTable", ['=this.CONTACT_ID' => 'ref.ID'], ['join_type' => 'LEFT'] )); $query->registerRuntimeField(null, new Entity\ReferenceField( 'COMPANY', "\\Bitrix\\Crm\\CompanyTable", ['=this.COMPANY_ID' => 'ref.ID'], ['join_type' => 'LEFT'] )); foreach ($runtime as $item) { $item = new Entity\ExpressionField( $item['name'], $item['expression'], $item['buildFrom'] ); $query->registerRuntimeField($item); } //echo "<pre>" . $query->getQuery(); die(); return $query; } /** * Get data count by type. * * @return null|array */ protected function getDataCountByType() { if (!$this->hasFieldValues()) { return array(); } return QueryCount::getCount($this->getQuery(), $this->getDataTypeId()); } /** * Get data. * * @return array|Result */ public function getData() { if (!$this->hasFieldValues()) { return array(); } $query = $this->getQuery(); if ($this->getResultView()->hasNav()) { $query->setOffset($this->getResultView()->getNav()->getOffset()); $query->setLimit($this->getResultView()->getNav()->getLimit()); } return QueryData::getData($query, $this->getDataTypeId()); } /** * Get personalize field list. * * @return array */ public static function getPersonalizeList() { return Helper::getPersonalizeList(); } /** * Get filter fields. * * @return array */ public static function getUiFilterFields() { $list = [ [ 'id' => 'EMAIL', 'type' => 'string', 'sender_segment_filter' => '%EMAIL', 'sender_internal' => true ], [ 'id' => 'PHONE', 'type' => 'string', 'sender_segment_filter' => '%PHONE', 'sender_internal' => true ], [ 'id' => 'NAME', 'type' => 'string', 'sender_segment_filter' => '%NAME', 'sender_internal' => true ], ]; $list[] = array( "id" => "DATE_CREATE", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_DATE_CREATE'), "type" => "date", "include" => [ AdditionalDateType::CUSTOM_DATE, AdditionalDateType::PREV_DAY, AdditionalDateType::NEXT_DAY, AdditionalDateType::MORE_THAN_DAYS_AGO, AdditionalDateType::AFTER_DAYS, ], "allow_years_switcher" => true, "default" => true ); $list[] = array( "id" => "STATUS_ID", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_STATUS_ID'), "type" => "list", "items" => \CCrmStatus::GetStatusList('STATUS'), "default" => true, 'params' => array('multiple' => 'Y'), ); $list[] = array( "id" => "SOURCE_ID", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_SOURCE_ID'), "type" => "list", "items" => \CCrmStatus::GetStatusList('SOURCE'), "default" => true, 'params' => array('multiple' => 'Y'), ); $list[] = array( 'id' => 'COMMUNICATION_TYPE', "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_COMMUNICATION_TYPE'), 'params' => array('multiple' => 'Y'), 'default' => true, 'type' => 'list', 'items' => \CCrmFieldMulti::PrepareListItems(array( \CCrmFieldMulti::PHONE, \CCrmFieldMulti::EMAIL, \CCrmFieldMulti::IM )) ); $list[] = PhaseSemantics::getListFilterInfo( \CCrmOwnerType::Lead, array( 'id' => 'STATUS_SEMANTIC_ID', "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_STATUS_SEMANTIC_ID'), 'default' => true, 'params' => array('multiple' => 'Y'), ), true ); $list[] = array( "id" => "STATUS_CONVERTED", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_STATUS_CONVERTED'), 'type' => 'checkbox', 'sender_segment_filter' => array( 'N' => array('=STATUS_SEMANTIC_ID', PhaseSemantics::PROCESS), 'Y' => array('!=STATUS_SEMANTIC_ID', PhaseSemantics::PROCESS), ), "default" => false, ); $list[] = array( "id" => "ASSIGNED_BY_ID", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_ASSIGNED_BY_ID'), 'type' => 'custom_entity', 'params' => array('multiple' => 'Y'), 'selector' => array( 'TYPE' => 'user', 'DATA' => array('ID' => 'assigned_by', 'FIELD_ID' => 'ASSIGNED_BY_ID') ), 'sender_segment_callback' => function ($field) { return Helper::getFilterFieldUserSelector($field['selector']['DATA'], 'crm_segment_lead'); }, "default" => false, ); $list[] = array( "id" => "BIRTHDATE", "name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_BIRTHDATE'), 'type' => 'date', "include" => [ AdditionalDateType::CUSTOM_DATE, AdditionalDateType::PREV_DAY, AdditionalDateType::NEXT_DAY, AdditionalDateType::MORE_THAN_DAYS_AGO, AdditionalDateType::AFTER_DAYS, ], "allow_years_switcher" => true, "default" => false, ); $list = array_merge($list, Helper::getFilterUserFields(\CCrmOwnerType::Lead)); return $list; } /** * Get filter presets. * * @return array */ public static function getUiFilterPresets() { return array( 'crm_lead_all' => array( 'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_ALL'), 'sender_segment_name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_SEGMENT_ALL'), 'fields' => array( self::FIELD_FOR_PRESET_ALL => 'Y', ) ), 'crm_lead_converted' => array( 'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_CONV'), 'sender_segment_name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_SEGMENT_CONV'), 'fields' => array( 'STATUS_SEMANTIC_ID' => array(PhaseSemantics::SUCCESS), ) ), 'crm_lead_in_work' => array( 'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_INW'), 'sender_segment_name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_SEGMENT_INW'), 'fields' => array( 'STATUS_SEMANTIC_ID' => array(PhaseSemantics::PROCESS), ) ), 'crm_lead_birthday' => array( 'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_BIRTH'), 'sender_segment_name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_PRESET_SEGMENT_BIRTH'), 'sender_segment_business_case' => true, 'fields' => array( 'BIRTHDATE_datesel' => 'NEXT_DAY', 'BIRTHDATE_days' => '5', 'BIRTHDATE_allow_year' => '0', ) ), ); } /** * Return true if support view of result. * * @return bool */ public function isResultViewable() { return true; } protected function onInitResultView() { $this->getResultView() ->setCallback( ResultView::ColumnModifier, function (array &$columns) { Asset::getInstance()->addJs('/bitrix/js/crm/common.js'); $columns = array_merge( [[ 'id' => 'CRM_LEAD', 'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_LEAD_FIELD_LEAD'), 'default' => true ]], $columns ); return $columns; } ) ->setCallback( ResultView::Draw, [__NAMESPACE__ . '\Helper', 'onResultViewDraw'] ); } }