Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
crear nuevo módulo
#41
Hola

hay varias maneras de hacer esto.



1.- javascript

Cada módulo tiene un fichero ModuleFile.js que carga código javascript propio del módulo. Como este fichero está dentro del módulo se exporta con el y se copiará al instalarlo en otra instalación. El problema de esto es que has de estás cómodo capturando los eventos de guardar y balancearlos con las validaciones y demás.

https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.js

2.- save_module

Cada módulo tiene un fichero ModuleFile.php que contiene un método llamado save_module() este método se llama al finalizar una operación de "guardar". Tienes a tu disposición todos los campos y sus valores y puedes ejecutar cualquier operación en la base de datos. Es el sitio ideal para unos cálculos rápidos. Recuerda que este método se llama antes de los flujos de trabajo por lo que si actualizas la base de datos con valores calculados has de actualizar también el array column_fields para que los flujos de trabajo "vean" los nuevos valores.

Este fichero, al igual que el de javascript se copia al exportar/importar el módulo con lo que tus cambios se copiarán de una instalación a la otra

el problema que tiene este es que si necesitas cambiar los cálculos tienes que modificar el código

https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.php#L101

3.- eventos

coreBOS tiene una gran variedad de eventos en los que puedes añadir tu código, por ejemplo, tienes un evento `after_save` En el wiki se explica cómo  añadir tu código a estos eventos. así podrías crear un script dentro del directorio de tu módulo y crear funciones para diferentes eventos. Después registras estos eventos en el método `vtlib_handler` de ModuleFile.php o en el propio manifest.xml

Este es similar a la opción 2, la ventaja es que tienes más opciones de cuando se ejecuta tu código y que puedes aplicar cambios en otros módulos si es necesario

https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.php#L112
https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/manifest.xml#L210
https://discussions.corebos.org/documentation/doku.php?id=en:devel:corebos_hooks

4.- flujos de trabajo

si los cálculos los puedes hacer con flujos de trabajo, entonces puedes crear los flujos de trabajo mediante código en el método `vtlib_handler` al instalar. La gran ventaja de este es que los cálculos los puede controlar/cambiar cualquier usuario administrador en cualquier instalación done los instales.

La desventaja es que es un poco más complejo crear los flujos de trabajo mediante código y no se puede hacer todo lo que se puede hacer con código utilizando flujos de trabajo (aunque en realidad son muy potentes).

https://github.com/tsolucio/corebos/blob/master/build/changeSets/PotentialForecastAmount.php#L52-L66
Joe
TSolucio
Reply
#42
Muchas gracias, Joe.
Reply
#43
Buenas tardes a todos:

He creado un nuevo módulo en la última versión , directamente con el constructor de módulos (una gran mejora Smile ) . Una vez creado, y para realizar una funcionalidad añadida desde el modulo de facturas, añadí un botón que crea elementos en el modulo nuevo a partir de una factura , en concreto son recibos y los crea con los diferentes vencimientos que recoge de campos personalizados de la cuenta.

Hasta aquí perfecto. Lo que he visto es que ahora en la tabla vtiger_crmentity hay un campo adicional, ccuid, que también aparece en la tabla vtiger_crmobject, pero no sé como crear el valor de ese campo.

Sin ese campo, ni la entrada en la tabla vtiger_crmobject, sí se crean los registros en el nuevo módulo, pero al intentar añadir una Acción de negocio tipo LISTLINKROW , al cargar el listview da un error...

select id from vtiger_ws_entity where name=''select id from vtiger_ws_entity where name=''
Fatal error: Uncaught WebServiceException: Permission to perform the operation is denied for id: 0 in /home/cermeval/www/crm/include/Webservices/VtigerWebserviceObject.php:78 Stack trace: #0 /home/cermeval/www/crm/include/Webservices/Retrieve.php(206): VtigerWebserviceObject::fromId(Object(PearDatabase), '0') #1 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTEntityCache.inc(36): vtws_retrieve_deleted('0x13402', Object(Users)) #2 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTEntityCache.inc(164): VTWorkflowEntity->__construct(Object(Users), '0x13402', true) #3 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTSimpleTemplate.inc(30): VTEntityCache->forId('0x13402') #4 /home/cermeval/www/crm/modules/BusinessActions/BusinessActions.php(322): VTSimpleTemplate->render(Object(VTEntityCache), '0x13402') #5 /home/cermeval/www/crm/include/ListView/ListViewController.php(653): BusinessActions::getAllByType(87, Array, Array, '5', '13402') #6 /home/cermeval/www/crm/modules/Vtiger/ListView.php(224): ListViewController-> in /home/cermeval/www/crm/include/Webservices/VtigerWebserviceObject.php on line 78

Si creo manualmente un registro del nuevo módulo, me genera este valor:

f74503af1005df9286709fddf62edae40fc43f75

Como puedo generar ese valor para los registros creados automáticamente? Gracias.
Reply
#44
entiendo que estas creando registros insertando directamente in la base de datos?

si es así, no deberías ya que aparte de detalles como el que mencionas también estas perdiendo toda la potencia de los flujos de trabajo

además es más sencillo hacerlo utilizando la infraestructura de la aplicación

https://github.com/tsolucio/corebos/blob/master/modules/BusinessActions/BusinessActions.php#L373-L395

ahi puedes ver como se crea un registro desde dentro de la aplicación. solo has de cambiar el nombre del módulo y los nomres de los campos

¿has pensado en utilizar el módulo de cobro pagos? ese fue creado para la gestión de recibos
Joe
TSolucio
Reply
#45
por si aun quieres seguir insertando directamente, utiliza este método:

https://github.com/tsolucio/corebos/blob/master/data/CRMEntity.php#L102
Joe
TSolucio
Reply
#46
(08-02-2023, 04:34 PM)joebordes Wrote: por si aun quieres seguir insertando directamente, utiliza este método:

https://github.com/tsolucio/corebos/blob/master/data/CRMEntity.php#L102

Joe. Gracias por la rapidez

La verdad es que me he decidido por la inserción directa porque dependiendo de la forma de pago de la cuenta relacionada con la factura, hay que generar 1, 2 3 o 4 recibos, con vencimientos diferentes cada uno de ellos e importes diferentes también, a partir de una fecha valor que indica el cliente. Algo lioso, y me encontraba  más cómodo de esta forma, no se si seria posible hacer esto a través de la infraestructura.

De todas formas, investigaré eso que me indicas

Saludos
Reply
#47
si, se puede, incluso solo con flujos de trabajo

creo que tengo un video muy muy viejo donde explico como hacer eso desde la forma de pago de una facura

pero puedes utilizar el código de arriba tambien para crear los otros registros
Joe
TSolucio
Reply
#48
https://youtu.be/QazE4NkCtUI
Joe
TSolucio
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)