From 999544f416481e18dfb962c746b447c4fece22cd Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Wed, 31 Jul 2024 14:19:07 +0300 Subject: [PATCH] Create custom fields in CRM --- retailcrm/lib/RetailcrmHistory.php | 8 ++--- retailcrm/lib/RetailcrmOrderBuilder.php | 14 +++++++- retailcrm/lib/RetailcrmTools.php | 22 +++++++++++++ retailcrm/lib/api/RetailcrmApiClientV5.php | 2 +- retailcrm/lib/settings/RetailcrmSettings.php | 33 +++++++++++++++++++ .../templates/RetailcrmAbstractTemplate.php | 22 ------------- .../templates/RetailcrmSettingsTemplate.php | 2 +- retailcrm/retailcrm.php | 1 + 8 files changed, 75 insertions(+), 29 deletions(-) diff --git a/retailcrm/lib/RetailcrmHistory.php b/retailcrm/lib/RetailcrmHistory.php index dc641bb..75bf523 100755 --- a/retailcrm/lib/RetailcrmHistory.php +++ b/retailcrm/lib/RetailcrmHistory.php @@ -1235,10 +1235,10 @@ class RetailcrmHistory $addressBuilder = new RetailcrmCustomerAddressBuilder(); $address = $addressBuilder ->setIdCustomer($customer->id) - ->setDataCrm(isset($order['delivery']['address']) ? $order['delivery']['address'] : []) - ->setFirstName(isset($order['firstName']) ? $order['firstName'] : null) - ->setLastName(isset($order['lastName']) ? $order['lastName'] : null) - ->setPhone(isset($order['phone']) ? $order['phone'] : null) + ->setDataCrm($order['delivery']['address'] ?? []) + ->setFirstName($order['firstName'] ?? null) + ->setLastName($order['lastName'] ?? null) + ->setPhone($order['phone'] ?? null) ->build() ->getData() ; diff --git a/retailcrm/lib/RetailcrmOrderBuilder.php b/retailcrm/lib/RetailcrmOrderBuilder.php index b0d5487..b7654da 100644 --- a/retailcrm/lib/RetailcrmOrderBuilder.php +++ b/retailcrm/lib/RetailcrmOrderBuilder.php @@ -985,7 +985,19 @@ class RetailcrmOrderBuilder ? 'legal-entity' : 'individual'; - if (!$isCorporateEnabled && RetailcrmTools::isCampanyAndVatNumberSendEnabled()) { + if ($addressInvoice instanceof Address && !empty($addressInvoice->company)) { + $crmOrder['contragent']['legalName'] = $addressInvoice->company; + + if (!empty($addressInvoice->vat_number)) { + $crmOrder['contragent']['INN'] = $addressInvoice->vat_number; + } + } + + if ( + !$isCorporateEnabled + && RetailcrmTools::isCampanyAndVatNumberSendEnabled() + && Configuration::get(RetailCRM::COMPANY_AND_VAT_NUMBER_CREATED) + ) { $company = $addressDelivery->company; $vatNumber = $addressDelivery->vat_number; diff --git a/retailcrm/lib/RetailcrmTools.php b/retailcrm/lib/RetailcrmTools.php index fc0e64d..bfa78fd 100644 --- a/retailcrm/lib/RetailcrmTools.php +++ b/retailcrm/lib/RetailcrmTools.php @@ -58,6 +58,28 @@ class RetailcrmTools return self::$default_lang; } + /** + * Returns ISO code of current employee language or default language. + * + * @return string + */ + public static function getCurrentLanguageISO() + { + global $cookie; + + $context = Context::getContext(); + + if (!empty($context) && !empty($context->employee)) { + $langId = (int) $context->employee->id_lang; + } elseif ($cookie instanceof Cookie) { + $langId = (int) $cookie->id_lang; + } else { + $langId = (int) Configuration::get('PS_LANG_DEFAULT'); + } + + return (string) Language::getIsoById($langId); + } + /** * Returns true if corporate customers are enabled in settings * diff --git a/retailcrm/lib/api/RetailcrmApiClientV5.php b/retailcrm/lib/api/RetailcrmApiClientV5.php index 443dd47..7addcf8 100644 --- a/retailcrm/lib/api/RetailcrmApiClientV5.php +++ b/retailcrm/lib/api/RetailcrmApiClientV5.php @@ -362,7 +362,7 @@ class RetailcrmApiClientV5 ); } - if (empty($entity) || 'customer' != $entity || 'order' != $entity) { + if (empty($entity)) { throw new \InvalidArgumentException( 'Parameter `entity` must contain a data & value must be `order` or `customer`' ); diff --git a/retailcrm/lib/settings/RetailcrmSettings.php b/retailcrm/lib/settings/RetailcrmSettings.php index 1740ff2..b593578 100644 --- a/retailcrm/lib/settings/RetailcrmSettings.php +++ b/retailcrm/lib/settings/RetailcrmSettings.php @@ -87,6 +87,13 @@ class RetailcrmSettings $changed['consultantScript'] = $this->consultantScript->getValueStored(); } + if ( + !empty($changed['enableCompanyAndVatNumberSend']) + && !Configuration::get(RetailCRM::COMPANY_AND_VAT_NUMBER_CREATED) + ) { + $this->createCompanyAndVatNumberFields(); + } + return [ 'success' => $this->validator->getSuccess(), 'errors' => $this->validator->getErrors(), @@ -127,4 +134,30 @@ class RetailcrmSettings } } } + + private function createCompanyAndVatNumberFields() + { + $api = RetailcrmTools::getApiClient(); + $locale = RetailcrmTools::getCurrentLanguageISO(); + $translate = [ + 'ru' => ['company' => 'Компания', 'vat_number' => 'Номер НДС'], + 'en' => ['company' => 'Company', 'vat_number' => 'VAT number'], + ]; + + $company = $translate[$locale]['company'] ?? 'Firma'; + $vatNumber = $translate[$locale]['vat_number'] ?? 'CVR-nummer'; + + $customFields = [ + ['code' => 'ps_company', 'name' => $company, 'type' => 'string', 'displayArea' => 'customer'], + ['code' => 'ps_vat_number', 'name' => $vatNumber, 'type' => 'string', 'displayArea' => 'customer'] + ]; + + if (null !== $api) { + foreach ($customFields as $field) { + $api->customFieldsCreate('order', $field); + } + + Configuration::updateValue(RetailCRM::COMPANY_AND_VAT_NUMBER_CREATED, true); + } + } } diff --git a/retailcrm/lib/templates/RetailcrmAbstractTemplate.php b/retailcrm/lib/templates/RetailcrmAbstractTemplate.php index 4f17d20..47615d7 100644 --- a/retailcrm/lib/templates/RetailcrmAbstractTemplate.php +++ b/retailcrm/lib/templates/RetailcrmAbstractTemplate.php @@ -65,28 +65,6 @@ abstract class RetailcrmAbstractTemplate $this->assets = $assets; } - /** - * Returns ISO code of current employee language or default language. - * - * @return string - */ - protected function getCurrentLanguageISO() - { - $langId = 0; - - global $cookie; - - if (!empty($this->context) && !empty($this->context->employee)) { - $langId = (int) $this->context->employee->id_lang; - } elseif ($cookie instanceof Cookie) { - $langId = (int) $cookie->id_lang; - } else { - $langId = (int) Configuration::get('PS_LANG_DEFAULT'); - } - - return (string) Language::getIsoById($langId); - } - /** * @param $file * diff --git a/retailcrm/lib/templates/RetailcrmSettingsTemplate.php b/retailcrm/lib/templates/RetailcrmSettingsTemplate.php index fe9b9a6..95aaf17 100644 --- a/retailcrm/lib/templates/RetailcrmSettingsTemplate.php +++ b/retailcrm/lib/templates/RetailcrmSettingsTemplate.php @@ -47,7 +47,7 @@ class RetailcrmSettingsTemplate extends RetailcrmAbstractTemplate 'chunk-vendors' => filemtime(_PS_MODULE_DIR_ . '/retailcrm/views/js/chunk-vendors.js'), ], 'appData' => [ - 'locale' => $this->getCurrentLanguageISO(), + 'locale' => RetailcrmTools::getCurrentLanguageISO(), 'debug' => RetailcrmTools::isDebug(), 'routes' => [ 'settings' => RetailcrmTools::getAdminControllerUrl(RetailcrmSettingsController::class), diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php index 2efc786..09864b1 100755 --- a/retailcrm/retailcrm.php +++ b/retailcrm/retailcrm.php @@ -73,6 +73,7 @@ class RetailCRM extends Module const ENABLE_ORDER_NUMBER_SENDING = 'RETAILCRM_ENABLE_ORDER_NUMBER_SENDING'; const ENABLE_ORDER_NUMBER_RECEIVING = 'RETAILCRM_ENABLE_ORDER_NUMBER_RECEIVING'; const ENABLE_COMPANY_AND_VAT_NUMBER_SEND = 'RETAILCRM_ENABLE_COMPANY_AND_VAT_NUMBER_SEND'; + const COMPANY_AND_VAT_NUMBER_CREATED = 'RETAILCRM_COMPANY_AND_VAT_NUMBER_CREATED'; const ENABLE_DEBUG_MODE = 'RETAILCRM_ENABLE_DEBUG_MODE'; const CONSULTANT_SCRIPT = 'RETAILCRM_CONSULTANT_SCRIPT'; const CONSULTANT_RCCT = 'RETAILCRM_CONSULTANT_RCCT';