Logic hook and beans

Hi
How can I to create a logic hook for module A that also executes when we save a record in module B?

Now when I process or save records and add or delete related records my logic hook runs well in model A (Contacts). But I need process when I save a new recored in a module B (Puestos) also.

This is my code:
I have this logic hook “custom/modules/Contacts/LogicResumenContacto.php”

    <?php
    if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class LogicResumenContacto
    {

      public function before_save(&$bean, $event, $arguments)
      {
        $this->_actualizarDatosContacto($bean);
      }
      public function after_save(&$bean, $event, $arguments)
      {
        $this->_actualizarDatosContacto($bean);
      }

      public function after_relationship_add(&$bean, $event, $arguments)
      {
        $this->_actualizarDatosContacto($bean);
      }

      public function after_relationship_delete(&$bean, $event, $arguments)
      {
        $this->_actualizarDatosContacto($bean);
      }
      public function process_record (&$bean, $event, $arguments)
      {
        $this->_actualizarDatosContacto($bean);
      }


    //Actualizamos Resumen Contacto
    private function _actualizarDatosContacto (&$bean)
    {
      global $db;

      $sqlUpdate = "UPDATE contacts_cstm
                    join (SELECT
                    contacts.id AS contacto_id,
                    count(DISTINCT(pdt_puestos_trabajo.id)) As puestos,
                    GROUP_CONCAT(DISTINCT(concat(' ',users.user_name))) AS delegados,
                    GROUP_CONCAT(DISTINCT(concat('^',pdt_puestos_trabajo.specialty,'^'))) AS especialidades,
                    GROUP_CONCAT(DISTINCT(concat('^',pdt_puestos_trabajo.subspeciality,'^'))) AS subespecialidades,
                    count(DISTINCT(users.user_name)) AS numDelegados,
                    count(DISTINCT(pdt_puestos_trabajo.specialty)) AS numEspecialidades,
                    GROUP_CONCAT(DISTINCT(concat(' ',accounts.`name`))) AS cuentas,
                    count(DISTINCT(accounts.`name`)) AS numCuentas,
                    min(pdt_puestos_trabajo.priority) As prioridad,
                    max(meetings.date_start) as last_visit,
                    DATEDIFF(now(),max(meetings.date_start)) as dias_ultima_visita,
                    COUNT(DISTINCT(meetings.id))as numVisitas,
                    (CASE
                    	WHEN (COUNT(DISTINCT(meetings.id))) BETWEEN 1 and 20 THEN 3
                    	WHEN (COUNT(DISTINCT(meetings.id))) BETWEEN 21 and 50 THEN 2
                    	WHEN (COUNT(DISTINCT(meetings.id))) BETWEEN 51 and 100 THEN 1
                    	ELSE null
                    END) as prioridad2
                    FROM
                    pdt_puestos_trabajo_contacts_c
                    RIGHT JOIN contacts
                    ON pdt_puestos_trabajo_contacts_c.pdt_puestos_trabajo_contactscontacts_ida = contacts.id and pdt_puestos_trabajo_contacts_c.deleted=0
                    LEFT JOIN pdt_puestos_trabajo
                    ON pdt_puestos_trabajo_contacts_c.pdt_puestos_trabajo_contactspdt_puestos_trabajo_idb = pdt_puestos_trabajo.id and pdt_puestos_trabajo.deleted=0
                    LEFT JOIN users
                    ON pdt_puestos_trabajo.assigned_user_id = users.id and users.deleted=0 and users.`status`='Active' and users.employee_status='Active'
                    LEFT JOIN pdt_puestos_trabajo_accounts_c
                    ON pdt_puestos_trabajo.id = pdt_puestos_trabajo_accounts_c.pdt_puestos_trabajo_accountspdt_puestos_trabajo_idb and pdt_puestos_trabajo_accounts_c.deleted=0
                    LEFT JOIN accounts
                    ON pdt_puestos_trabajo_accounts_c.pdt_puestos_trabajo_accountsaccounts_ida = accounts.id and accounts.deleted=0
                    LEFT JOIN pdt_puestos_trabajo_meetings_c
                    ON pdt_puestos_trabajo.id = pdt_puestos_trabajo_meetings_c.pdt_puestos_trabajo_meetingspdt_puestos_trabajo_ida and pdt_puestos_trabajo_meetings_c.deleted=0
                    LEFT JOIN meetings
                    ON pdt_puestos_trabajo_meetings_c.pdt_puestos_trabajo_meetingsmeetings_idb = meetings.id and meetings.deleted=0 and meetings.`status`='Held' and DATEDIFF(now(),meetings.date_start)<500
                    WHERE contacts.id='$bean->id'
                    GROUP BY
                    contacts.id
                    ) as datos on contacts_cstm.id_c=datos.contacto_id
                    set
                    contacts_cstm.num_pdt_c = datos.puestos,
                    contacts_cstm.delegados_test_c = datos.delegados,
                    contacts_cstm.numerodelegados_c=datos.numDelegados,
                    contacts_cstm.especialidades_multiple_c=datos.especialidades,
                    contacts_cstm.subespecialidades_multiple_c=datos.subespecialidades,
                    contacts_cstm.cuentas_test_c = datos.cuentas,
                    contacts_cstm.num_cuentas_c=datos.numCuentas,
                    contacts_cstm.dias_ult_visita_c=datos.dias_ultima_visita,
                    contacts_cstm.prioridad_c=datos.prioridad,
                    contacts_cstm.prioridad_2_c=datos.prioridad2
                    where contacts_cstm.id_c='$bean->id' ";
      $db->query($sqlUpdate);
      }
      }

custom/Extension/modules/Contacts/Ext/LogicHooks/LogicResumenContacto.php

    <?php
    $hook_array['before_save'][]= Array(
	99, 'Set Name', 'custom/modules/Contacts/LogicResumenContacto.php', 'LogicResumenContacto', 'before_save'
    );
    $hook_array['after_save'][]= Array(
	99, 'Set Name', 'custom/modules/Contacts/LogicResumenContacto.php', 'LogicResumenContacto',  'after_save'
    );
    $hook_array['process_record'][]= Array(
	99, 'Set Name', 'custom/modules/Contacts/LogicResumenContacto.php', 'LogicResumenContacto',  'process_record'
    );

    $hook_array['after_relationship_add'][]= Array(
	99, 'Set Name', 'custom/modules/Contacts/LogicResumenContacto.php', 'LogicResumenContacto',    'after_relationship_add'
    );
    $hook_array['after_relationship_delete'][]= Array(
	99, 'Set Name', 'custom/modules/Contacts/LogicResumenContacto.php', 'LogicResumenContacto',    'after_relationship_delete'
    );

Thank you

@lpalet

You should put file with calling logichook into directory:
custom/Extension/application/Ext/LogicHooks/
Look at:

This hook will work for all modules. I think that the you can add code which control the module name into your functions.

1 Like