SinergiaTIC / SinergiaCRM

SinergiaCRM is an open source CRM for non-profits based on SuiteCRM
https://www.sinergiacrm.org
GNU Affero General Public License v3.0
20 stars 2 forks source link

Incidencia - Constructor - Ver nombre de fichero en vista de lista de un módulo propio #24

Closed ManuSinergiaCRM closed 1 month ago

ManuSinergiaCRM commented 10 months ago

Descripción del problema

En un módulo custom basado en la plantilla de tipo archivo, al visualizar el campo que hace referencia al fichero en la vista de lista no se muestra el enlace al nombre del fichero que permite su descarga, solo se muestra el icono del ojo que permite abrir el archivo directamente en el navegador, a diferencia de lo que sucede en el módulo Documentos, donde aparecen ambas opciones.

Verificar que es así e investigar si se podría corregir en el constructor para que se utilice el widget o la propiedad correspondiente para que se comporte igual que en Documentos.

ManuSinergiaCRM commented 10 months ago

He dedicado un tiempo a investigar la incidencia y veo varias diferencias a nivel de código por donde se podría seguir investigando si así se considera. La otra opción que veo es comunicárselo a SA, donde no he encontrado issue ni PR relacionado.

  1. Crear un módulo nuevo de tipo Archivo.

  2. Crear una relación con Persona de modo que una persona pueda relacionarse con varios registros de este módulo nuevo.

  3. Publicar el módulo

  4. Una vez publicado, por defecto no aparecen definidos los campos relacionados con el archivo ni en la vista de lista ni en el subpanel. Se puede comprobar abriendo la vista de detalle de una persona y comprobar que en el subpanel del módulo nuevo no aparece información sobre el archivo ni la posibilidad de abrirlo o descargarlo.

  5. Añadir los campos (filename y uploadfile) que tienen relación con el fichero apuntado por cada registro en el layout de lista y de subpanel.

    5.1 En la vista de lista podemos añadir cualquiera de los dos campos y añadir el siguiente código a la propiedad customcode:

    'UPLOADFILE' => 
    array (
      'label' => 'LBL_FILE_UPLOAD',
      'width' => '20%',
      'default' => true,
      'type' => 'file',
      'customCode' => '<a href="index.php?entryPoint=download&id={$ID}&type=<MODULE>">{$DOCUMENT_NAME}</a>&nbsp; 
                       <a href="index.php?preview=yes&amp;entryPoint=download&amp;id={$ID}&amp;type=<MODULE>" class="tabDetailViewDFLink" target="_blank" style="border-bottom: 0px;"><i class="glyphicon glyphicon-eye-open"></i></a>',
    ),  

    5.2 No consigo que este customcode aplique en el listado del subpanel por lo que continúo analizando la situación.

  6. Diferencias que considero relevantes para poder implementar una solución en el subpanel:

    En Documentos

    • En el vardef, la definición del campo Filename (campo de tipo type) contiene más información que el campo de tipo Type (uploadfile) del módulo nuevo de tipo Archivo.

      'filename' => 
          array (
            'name' => 'filename',
            'vname' => 'LBL_FILENAME',
            'type' => 'file',
            'source' => 'non-db',
            'comment' => 'The filename of the document attachment',
            'required' => 0,
            'noChange' => true,
            'allowEapm' => true,
            'fileId' => 'document_revision_id',
            'docType' => 'doc_type',
            'docUrl' => 'doc_url',
            'docId' => 'doc_id',
            'inline_edit' => 0,
            'massupdate' => 0,
          ),
    • En el renderizado de los campos se usa el método get_list_view_data() definido en el archivo modules/Documents/Document.php. Dicho método no se implementa en los módulos nuevos.

    En el módulo nuevo de tipo Archivo:

    • En el vardef, esta es la declaración de los dos campos relacionados con el archivo:

      'filename' => array(
         'name' => 'filename',
         'vname' => 'LBL_FILENAME',
         'width' => '20%',
         'link' => 1,
         'module' => '<MODULE>',
         'default' => true,
      ),   
      
      'uploadfile' =>
      array (
       'name' => 'uploadfile',
       'vname' => 'LBL_FILE_UPLOAD',
       'width' => '20%',
       'module' => '<MODULE>',
       'sortable' => false,
       'default' => true,
      ),
    • No tiene declarado ningún método específico para renderizar los campos de tipo file. Se llama al método genérico get_list_view_data() del archivo data/SugarBean.php

Añado la pila de llamadas que se recorre al cargar la vista de detalle de una persona donde se muestran los dos subpaneles extendidos.

  ```
  SugarBean->get_list_view_array (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/data/SugarBean.php:5815)
  SugarBean->get_list_view_data (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/data/SugarBean.php:5773)
  ListViewSubPanel->process_dynamic_listview_rows (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/ListView/ListViewSubPanel.php:308)
  ListViewSubPanel->process_dynamic_listview (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/ListView/ListViewSubPanel.php:159)
  SubPanel->ProcessSubPanelListView (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/SubPanel/SubPanel.php:220)
  SubPanelTiles->display (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/SubPanel/SubPanelTiles.php:366)
  SugarView->_displaySubPanels (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/MVC/View/SugarView.php:1181)
  SugarView->process (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/MVC/View/SugarView.php:239)
  SugarController->processView (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/MVC/Controller/SugarController.php:432)
  SugarController->execute (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/MVC/Controller/SugarController.php:363)
  SugarApplication->execute (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/include/MVC/SugarApplication.php:101)
  {main} (/home/jim/code/SinergiaCRM_Repos/workkit_php72/app/sinergiacrm/index.php:52)
  ```