Задача.
В списке контактов вывести поле "Tota lpay" в котором отобразить общую сумму по контакту.
Решение.
1. Создано дополнительное поле для контакта "Total pay" с идентификатором "UF_CRM_xxxxxxxxx".
В админке, в настройках поля, установлена галка "Только для чтения", чтобы менеджеры не могли менять его содержимое.
2. Создан обработчик событий "OnAfterCrmInvoiceUpdate" и "OnSaleStatusOrder"
Обработчик события "OnSaleStatusOrder" смены статуса через "Градусник" в списке счетов и при детальном просмотре.
Комментарий
Как известно, никакого описания на модуль CRM и его методы, нет.
Поэтому пришлось использовать модуль Live_API.
Самое интересное, что LIVE API не показывает событие "OnAfterCrmInvoiceUpdate" и "OnAfterCrmInvoiceAdd",
однако они присутствуют в коде и прекрасно работают..
Обработчик событий.
Размещается в "/bitrix/php_interface/init.php".
UF_CRM_xxxxxxxxx заменить на код, полученный при создании поля.
AddEventHandler("crm", "OnAfterCrmInvoiceUpdate", array("Invoice", "OnAfterCrmInvoiceUpdateHandler")); AddEventHandler("sale", "OnSaleStatusOrder", array("Invoice", "OnAfterCrmInvoiceUpdateHandler")); class Invoice { function OnAfterCrmInvoiceUpdateHandler ($arFields) { $CrmInvoice = new CCrmInvoice; if (!$arFields["UF_CONTACT_ID"]) { $invoiceData = $CrmInvoice->GetByID((is_array($arFields)) ? $arFields['ID'] : $arFields,false); $contactId = $invoiceData["UF_CONTACT_ID"]; } else $contactId = $arFields["UF_CONTACT_ID"]; $invoiceSumm = $CrmInvoice->GetPaidSum ( Array( "UF_CONTACT_ID"=> $contactId, "STATUS_ID" => "P", "CHECK_PERMISSIONS" => 'N' ) ); Global $USER_FIELD_MANAGER; $USER_FIELD_MANAGER->Update( 'CRM_CONTACT', $contactId, array("UF_CRM_1462380852" => $invoiceSumm['sum']) ); } } |