Your IP : 3.139.238.203


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/aspro.allcorp3/lib/crm/acloud/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/aspro.allcorp3/lib/crm/acloud/lead.php

<?
namespace Aspro\Allcorp3\CRM\Acloud;

use Bitrix\Main\Localization\Loc,
    Aspro\Allcorp3\CRM;

Loc::loadMessages(__FILE__);

class Lead extends CRM\Base\Lead
    implements \Aspro\Allcorp3\CRM\Base\Lead\iReferential {
    public static function getFieldsMap(CRM\Base\Connection $connection) :array {
        $result = [];
        
        foreach (
            [
                'name',
                'description',
                'budget',
                'contact_name',
                'contact_email',
                'contact_phone',
                'contact_mobile',
                'contact_company',
                'contact_position',
                'contact_web',
                'start_date',
                'deadline',
                'closing_date',
                'closing_comment',
            ] as $field
        ) {
            $result[$field] = Loc::getMessage('CRM_LEAD_FIELD_'.$field);
        }

        return $result;
    }

    public static function getCustomFieldsMap(CRM\Base\Connection $connection) :array {
        $result = [];
        
        $customFields = static::getCustomFields($connection);
        if ($customFields) {
            foreach ($customFields as $field) {
                if (
                    $field['active'] &&
                    in_array(
                        $field['type'], 
                        [
                            'smalltext',
                            'text',
                            'int',
                            'price',
                            'date',
                            'datetime',
                            'decimal',
                            'password',
                            'phone',
                            'percent',
                        ]
                    )
                ){
                    $result['cf_'.$field['id']] = $field['name'];
                }
            }
        }

        return $result;
    }

    protected static function getCustomFields(CRM\Base\Connection $connection) :array {
        $result = [];

        $customFieldset = static::getCustomFieldset($connection);
        if ($customFieldset) {
            $params = [
                'filter' => array(
                    'fieldset_id' => $customFieldset['id'],
                ),
            ];

            $response = $connection->api('/module/customfields/fields/list', $params);
            if (
                $response &&
                is_array($response) &&
                is_array($response['items'])
            ) {
                $result = $response['items'];
            }
        }

        return $result;
    }

    protected static function getCustomFieldset(CRM\Base\Connection $connection) :array {
        $result = [];

        $params = [
            'filter' => array(
                'module' => 'crm',
                'model' => 'leads',
            ),
        ];

        $response = $connection->api('/module/customfields/fieldsets/list', $params);
        if (
            $response &&
            is_array($response) &&
            is_array($response['items'])
        ) {
            if ($response['items']) {
                $result = array_values($response['items'])[0];
            }
        }

        return $result;
    }

    public static function getRefField() :string {
        return 'ref';
    }

    public static function getRefIdField() :string {
        return 'ref_id';
    }

    public static function getUrl(int $id) :string {
        return $id > 0 ? '/_module/crm/view/lead/'.$id : '';
    }

    public function load() {
        $this->values = [];

        if ($this->id) {
            $response = $this->connection->api('/module/crm/leads/get/'.$this->id);
            if (
                $response &&
                is_array($response)
            ) {
                $this->values = $response;
            }
        }

        return $this;
    }

    public function create() :bool {
        if ($this->id) {
            return false;
        }

        $response = $this->connection->api('/module/crm/lead/create', $this->values);
        if (
            $response &&
            is_array($response) &&
            $response['id']
        ) {
            $this->id = $response['id'];
            $this->values = [];
            
            return true;
        }

        return false;
    }

    public function update() :bool {
        if ($this->id) {
            $response = $this->connection->api('/module/crm/lead/update/'.$this->id, $this->values);
            if (
                $response &&
                is_array($response)
            ) {
                $this->values = $response;
                
                return true;
            }
        }

        return false;
    }

    public function delete() :bool {
        if ($this->id) {
            $response = $this->connection->api('/module/crm/lead/delete/'.$this->id);
            if (
                $response &&
                is_array($response)
            ) {
                $this->id = $this->values = null;
                
                return true;
            }
        }

        return false;
    }
}