Globalization is inevitable so, as we settle into the holiday mindset, we spend the month filling in for teammates and client maintenance tasks. Still, some extra time is invested in nice features like a starting project for Generative AI. Happy Holidays.

Wizard version 3

The wizard extension is about being able to implement the typical "step-guided" process, the next-next-next-finish paradigm. I will eventually get to creating a specific blog post about this functionality but it is looking very good and arrived to version 3 this month.

  • support ListColumns map for each step
  • support mapping for create mode
  • add missing parameters for record validation
  • download files if a document is generated from workflows
  • filter records based on roles
  • show the default date for datetime field
  • hide the finish button
  • prevent fatal error if filter context is not given

Generative AI scaffolding

This month we get a very interesting generative AI question which I will document in next months blog post, but the question finally strikes me as something useful to do with generative AI! I have been holding back from adding generative AI into the application because I found the use cases trivial. Every other CRM-like application is adding functionality to help you write emails or comments... duh! Doing that seems like a waste of time and effort.

This month we were asked by a user to generate a prompt using information in a record and show the answer to the user. This is brilliant (IMHO). The use cases are immense;

  • given the data in this potential, tell me how to proceed with the sale
  • given the data in this support ticket, how should I answer next?
  • ...

I jumped on the question as it was really easy to implement and about an hour later had a generic solution for it! We still need some polishing and documentation, but if you need to do this now, reach out!

File System abstraction layer using Gaufrette integration

This month we validate and accept into the main branch a long running project. This project creates an abstracion layer on saving files. Now we can save document files in various supported file systems, not only the local hard disk. We support services like Amazon S3, Azure BlobStorage, and Google CloudStorage.

File System Config

There are still some tasks to be done and some more testing needs to be carried out but, this project is here to stay and completes the necessary changes to make EvolutivoFW fully support containerization (even Kubernetes, if that makes any sense for a project like this)

Some of the pending tasks we have in sight:

  • Check file integrity not working: in the document detail view there is an action link "Check file integrity" that is not working when S3 is set as a storage layer
  • Document shared link: the document module supports creating a shared link for external users to download the attachment, we must test it and make sure it works
  • integrate the configuration screen into the ConfigEditor
  • test download documents: in the Documents list view, there is an action button that downloads a zip of all the selected document records. test and make sure it works
  • test cannot write: before this change, when the storage directory was not writable we would get an error when saving a Contact/Document or any module with an image indicating that the attachment was not written. We need to verify this functionality
  • more tests
  • Send Files to function. Enhance the integration to support selecting a set of records with attachments and uploading them to a designated folder

Export/Report Enhancements

This month we implement an optimization that is in line with the ones we do every month but is important enough to be mentioned apart. It is about optimizing the export and report functionality.

Firstly, we refactor the formatting code to reduce duplicate code, making the output more consistent and even correct in more cases as we didn't fully support uitype 101 user relation fields correctly nor all the cases of date time fields. We also convert XLS and CSV export to generators to reduce memory usage and increment speed which permits us to export much larger output sizes.

Features and Implementor/Developer enhancements

  • add DATETIME_TYPES array to FieldMetaInfo
  • add mapping ID option and set assigned user to logged in user if not given in Create Widget
  • use the correct function to render multipicklist in Upsert Workflow

EvolutivoFW Standard Code Formatting, Security, Optimizations, and Tests

  • EvolutivoFW Standard Formatting
  • Documentation: code and wiki.
  • Refactor and Optimize code
    • SonarQube recommendations.
    • eliminate obsolete and unused Calculator functionality
    • add debug messages to Mail Converter
    • use str_starts_with instead of substr
    • convert XLS and CSV export to generator to reduce memory usage and increment speed. support larger export size
    • reduce SQL columns, reduce query_result, and use direct value
  • PHP 8.4 testing and fixes
  • update DOMPurify to 3.2.3
  • update Guzzle/gaufrette/AWSS3
  • add OpenAI PHP library
  • Unit Tests: keeps getting more and more assertions.

Others

  • update application name to Evolutivo
  • add another continuous changeset that cleans the vtiger_fieldmodulerel database table, because it is not cleaned when we delete relational fields
  • fix incorrect empty string for uitype 101 fields in Edit View
  • set correct file name format extension in GenDoc
  • initialize Home variable in correct context
  • Layout Editor:
    • set cf_ fieldname if none is given
    • set correct typeofdata for relation fields
  • null coalesce Mail Converter property that may be empty
  • Master Grid
    • add mandatory parameters for validation before save
    • add uitype 33 render for view only
    • check if field element exists and load it once
  • remove un-desired columns from generated report table data
  • save with 12/24 hour format of time fields in detail view failing
  • TreeView: retain field values during save operation
  • Web Service
    • avoid trying to create record with empty image name
    • do not override entityName variable and use direct value
  • Workflow
    • SignDocuments: allow documents to be signed from image fields for each record separately and restrict the signature to pdf files
  • Translations
    • Wizard and File System

Insights

December Insights

December January
Sonarqube December Sonarqube January

Thanks for reading.

Previous Post