Laravel Enso Enso Versions Save

Laravel Vue SPA, Bulma themed. For demo login use `[email protected]` & `password` -

6.0.0

1 month ago

6.0.0

This release aims to bring our ecosystem one step closer to the latest Laravel release. The primary reason for the delay was the necessity to upgrade all dynamic relations across our entire codebase to support the native Laravel Implementation. This process required extensive testing to ensure proper compatibility.

Additionally, we took this opportunity to implement support for PHP native enums alongside our existing enum implementation. This decision was mandatory for maintaining backward compatibility while also embracing the latest features offered by PHP. Integrating these two required enum implementations further contributed to the release delay.

Here are the key highlights:

  • Laravel 10: Laravel 10 is now a mandatory requirement for the v6 release.

  • Form and Tables Packages Update: Both packages now support native PHP Enums in addition to our custom implementation, ensuring backward compatibility.

  • Automatic Dynamic Relations/Methods Registration: Dynamic relations are now registered automatically and utilize Laravel's native dynamic relation registration functionality. Dynamic methods are registered automatically as well. All dynamic methods and relations must be created under the App\Dynamics namespace.

Front-end

accessories

  • hides count if 0

addresses

  • fixes modal multiple open/close
  • improves logic segregation
  • fixes default value for id in form

bookmarks

  • fixes bookmarks

calendar

  • removes deprecated imports
  • adds colors
  • fixes import

card

  • fixes events

charts

  • fixes rounding issue

checkbox

  • fixes v-model use on prop

clipboard

  • fixes size
  • removes custom size

comments

  • improves padding
  • improves word break

companies

  • adds ability to navigate to person create form from company edit form
  • adds router error handler
  • fixes #16

confirmation

  • fixes attribute inheritance

currencies

  • removes unneeded actions in store

data-import

  • fixes rejected arg
  • refactor due to Types enum deletion
  • adds invisible & template props in import uploader
  • fixes import uploader
  • fixes selections during transition
  • adds open-up prop

files

  • adds store
  • adds count option on folder
  • removes max width for files
  • brings back max-w
  • improves file layout
  • adds word-wrap:break-all

filters

  • fixes input filter clear control
  • fixes v-model on input filters
  • supports null in core input filter
  • improves label translation
  • adds x padding for header

forms

  • implements custom submit path
  • adds dirtyFields array
  • adds Confirmation to export list
  • makes all actions <a> instead of <button>
  • removes confirmation modal
  • extracts the new confirmation in its own component
  • adds ability to pass params to select field

how-to

  • raised limit for how to videos;

io

  • removes redundant websockets connect
  • fixes IO elapsed / remaining toggle
  • improves operation template
  • adds support for tasks
  • makes tasks not cancellable

measurement-units

  • makes form smaller
  • removes transition group tag from draggable
  • removes unused prop

money

  • fixes modelValue precision
  • fixes input for values with comma thousands separator
  • fixes null handling

notifications

  • removes redundant websockets connect

packaging-units

  • improves form

people

  • improves edit form

progress-circle

  • allows string progress

progress-indicator

  • fixes missing import

quick-view

  • fixes animation

select

  • ignores options if is server side
  • fixes searchLimit condition
  • fixes objects scenario
  • adds open-up prop

strings

  • fixes #2

switch

  • improves label slots

tables

  • adds event on ajax/fetch error
  • implements filter state handling
  • fixes initial filters backup
  • improves filter state handling
  • implements custom css row style
  • fixes mobile controls
  • adds ability to toggle selectable from ui
  • clears selection when selectable is toggled
  • fixes space in records info -> selection details

tabs

  • improves tab id type

tasks

  • removes redundant websockets connect
  • update error handler in selector

themes

  • fixes avatar size
  • fixes tooltip arrow
  • disables light classes for dark theme

typeahead

  • now using trim for query length
  • uses invalidRegExp in template

ui

  • fixes code style
  • uses await / async in store
  • improves app-update
  • puts app-update indicator in its original position
  • adds route getter in store
  • added check for having the route in the state obj
  • adds http helper in local
  • fixes password reset
  • adds app-state-loaded event
  • adds option to hide/show page header
  • fixes edge case where the appUpdate item is not present
  • adds handling for 422 errors in error handler
  • improves navbar item to accept array icons

users

  • fixes user profile template

Back-end

action-logger

  • implements duration

addresses

  • adds name in township rememberable keys
  • adds abbreviation in region rememberable keys
  • adds ability to update coordinates
  • adds missing relations
  • implements the new geocodingKey
  • adds Region resource
  • adds locality name to resource Locality
  • adds addresses relation
  • adds Abilities trait

api

  • allows string type request body
  • adds timeout contract
  • implements mandatory validation
  • helper update

avatar

  • adds minssing unique() on file_id

calendar

  • fixes event filtering
  • adds colors

charts

  • depreciate when helper trait

comments

  • refactor resource alias

companies

  • makes fiscal_code unique in importer
  • drops companies_reg_com_nr_unique

control-panel-api

  • implements syncPermissions

core

  • removes superfluous enum
  • removes .styleci.yml
  • adds tiktok in config
  • fixes email icons
  • adds noindex meta

data-export

  • improves export excel speed
  • adds custom max contract
  • adds custom count
  • improves email subject for export done / export error notification
  • implements CascadesFileDeletion
  • adds missing unique() on file_id
  • fixes syncExporter
  • improves data export by extracting iteration part; adds CustomMin interface
  • fixes edge case in iterator
  • Use qualified key name instead of key name
  • adds notifiables ability to export

data-import

  • added the purge command implementation
  • removes prune batches
  • makes private table builder methods protected
  • adds avoids deletion conflicts on import
  • added upgrade; updated migration
  • set batch null on import cancellation
  • implements CascadesFileDeletion
  • updated cascade deletion; added missing unique index
  • when restarting an import, optionally cleanup the attached RejectedImport
  • improves purge command; improves table builder; fixes rejected_imports fk
  • improves purge command
  • fixes delete method in model
  • fixed old deletable($type) usages
  • fixes rejected load
  • prioritized RejectedDataImportForeignKey AFTER RejectedDataImportId
  • fixes excel seeder
  • Update RejectedFileCreatedBy
  • improves excel seeder for better flexibility
  • refactor due to Types enum deletion
  • fixes missing enum
  • adds cancel stuck command
  • implements CSV import
  • reverts example import to excel
  • addresses mentions
  • depreciate when helper trait
  • fixes exception in Options service, refactor
  • improves restart method
  • adds txt as supported type

document

  • implements CascadesFileDeletion
  • fixed deletion
  • fixed actions

dynamic-methods

  • improves dynamic methods and relations functionality, wraps core laravel dynamic relations

files

  • adds file id unique upgrade
  • fixes destroy redirect
  • removes file in attachable; adds CascadesFileDeletion interface
  • fixes cascadable
  • adds missing unique() on file_id
  • add upgrade to drop old morphable index
  • improves performance in files index
  • fixed upgrade order & type (manual)
  • adds missing index
  • adds type_id & created_at index
  • adds state for types
  • improves upload controller logic
  • adds loadData in file model
  • fixes icons in type index table;
  • moves is_public in file_types table
  • fixes factory
  • fixes browsing public files

form

  • improves form mutators (arg handling)
  • fixes args handling
  • adds support for params
  • adds support for pivot params & custom params
  • depreciate when helper trait

google

  • fixes encrypted columns length
  • updated migrations
  • addresses PR discussion
  • removes static property from settings model
  • adds recaptcha url field
  • adds recaptcha validation rule
  • improves message in recaptcha rule
  • adds geocoding key

helpers

  • adds round capability in Decimals
  • adds use index ability in forceable index trait
  • small refactor
  • depreciate when helper trait

how-to

  • adds minssing unique() on file_id

io

  • improves ioEvent
  • adds support for task
  • reverted interface method return type
  • uses broadcastQueue methods in event

localisation

  • adds new confirmation text
  • fixes translation
  • improves texts
  • refactors the menu table

pdf

  • adds filename for inline

people

  • adds email in person resource
  • implements id_series and id_number fields
  • import #23
  • improves factory
  • remove validator
  • fixes upgrade order
  • Update IdNumber

permissions

  • improves access-route gate to user cache

roles

  • manages role-permissions cache
  • improves cache handling
  • caches permissions only in production
  • improves role seeder
  • reverts previous config change
  • improves roles seeder
  • adds user groups selector in form

select

  • fixes pivot params with null value
  • depreciate when helper trait, upgrade

tables

  • adds properties to number
  • sets decimal & thousand only when were defined
  • removes money
  • adds the ability to define method columns (calls method from model)
  • adds method to default false meta columns array
  • small refactor in filter class
  • fixed error when filtering a multiple selection
  • fixes internal string filters
  • extracts table cache key in a method
  • fixes and improves excel export performance
  • fixes edge case when the writer was not initialised yet
  • fixes enum export
  • implements custom filtered count interface
  • refactors interval logic
  • fixes server side enum computation for loaded relations
  • fixes strip order

tasks

  • improves task validation

upgrade

  • resets role permission cache
  • adds tiny integer helper
  • adds support for unsigned
  • namespace update
  • adds missing column upgrade helper
  • fixes upgrade structure

user

  • adds isSuperior (role) in user
  • adds canAccess helper that caches permissions
  • implements Role::permissionList()
  • adds appellative getter in user

Upgrade Steps:

  1. Sync Composer Dependencies: Update your composer.json file according to this file.

  2. Run Composer Update: Execute composer update in your terminal.

    • Rename password_resets migrations to password_reset_tokens.

    • Run php artisan enso:upgrade —before-migration

    • Run php artisan migrate.

    • Run php artisan enso:upgrade.

    • Change password_resets to password_reset_tokens in auth.php as demonstrated here.

    • Update PHPUnit XML config as seen here.

  3. Follow the official Laravel 10 Upgrade guide: Refer to the Laravel 10 Upgrade guide, making sure to also check out the comparison tool and update your files accordingly.

  4. Upgrade Dynamic Relations: Ensure all dynamic methods are under the App\Dynamics namespace prefix. Follow this example.

  5. Upgrade Dynamic Methods: Ensure all dynamic methods are under the App\Dynamics namespace prefix. Refer to this commit.

  6. Update User Factory: Refer to this file.

  7. Optional: Migrate Existing Enso Enums to Native PHP Enums: If you wish to migrate your existing Enso Enums to native PHP enums, ensure that you use the LaravelEnso\Enums\Traits\Select.php Trait in order to retain compatibility with our Forms and Tables packages.

5.0.0

2 years ago

5.0.0

This breaking release brings the new Enso file system and upgrades all packages to Laravel 9.

The old filesystem was pretty basic and has been upgraded to something more robust by replacing the usage of polymorphic relationships with regular foreign keys (models that were using the HasFile trait now have a file relationship through a file_id column) with more features (such as favorite files) as well leaving room for future functionality.

We've taken advantage of the breaking version state, included other small changes from our backlog and made a slight change to the mechanism for locally extending package forms and tables.

Due to these changes, most packages have had a refactor and dependency list upgrade.

Front-end

clipboard

  • updated clipboard size

confirmation

  • removed unneded v-bind from dropdown

directives

  • improved clickOutside.js

documents

  • removed Document.vue component, now we use File.vue instead

files

  • major refactor in order to work with the new file system back-end changes
  • several fixes & enhancements
  • added edit ability for file name

how-to

  • fixed uploader

mixins

  • improved ensoFile.js, now it's constructor receives a File resource instead of a filename

notifications

  • fixed transition group

tables

  • cascades reset method
  • implemented number formatting for nested columns

themes

  • fixed confirmation; removes duplicated & deprecated classes

ui

  • added avatarKey in store
  • made content relative in default layout
  • improved websockets

uploader

  • cascades slot in enso-uploader
  • small refactor

users

  • fixed uploader
  • fixed v-click-outside related bug on profile control
  • improved Avatar.vue
  • added Url component

back-end

All packages have been updated with regards to:

  • aligning Form builder, Table builder & Form request validation classes naming conventions, by dropping superfluous prefixes.

  • when extending forms, rather than overriding the protected constant TemplatePath (which has now become private), we've added a protected method templatePath() that is used in the forms' constructor. When extending any form builders, you should override this method if you want to use another form template.

  • when extending tables, note that the protected constant TemplatePath has now become private, and we've updated the public method templatePath(). When extending any table builders, you should override this method if you want to use another table template.

  • due to the major files refactor, all packages that use files have been updated. FileServiceProvider file has been deleted and also removed form composer files.

  • the new file system impact has also led to the need of changing the initial order of migrations. For this change it already exists an upgrade, but you should take a note that a lot of package migrations have been renamed.

  • all migrations have been upgraded in order to return an anonymous class by the new Laravel 9 style. This way we can avoid class name collision.

  • an important note is that the old DataImport and DataExport models have been renamed to Import and Export, respectively.

action-logger

  • updated migration style

addresses

  • fixed seeders path
  • updated migration classes

api

  • no longer sends empty request body
  • fixed api calls
  • added query parameters interface

avatars

  • refactor for the new file system
  • updated migrations

calendar

  • updated migrations

cli

  • fixed synthax error in Exceptions/WriterProvider.php
  • fixed template path generation for forms and tables

comments

  • updated migrations

companies

  • fixed seeders path
  • updated migrations

control-panel-api

  • fixed seeders path
  • updated migrations

core

  • fixed seeders path
  • updated Preference rememberable keys
  • fixed password validation when resetting password and email is missing

countries

  • updated eea for United Kingdom
  • fixed seeders path
  • updated migrations

data-export

  • refactor for the new file system
  • updated migrations
  • renamed DataExport model to Export

data-import

  • switched order for authenticate / authorize
  • refactor for the new file system
  • updated migrations
  • renamed DataImport model to Import
  • the excel seeder has been updated, please see upgrade steps regarding this change

documents

  • refactor for the new file system
  • updated migrations

files

The file system has been significantly improved and has received a lot of new features, such as:

  • switched polymorphic relations to one to one
  • updated migrations
  • a much more user friendly interface
  • added edit ability for file name
  • temporary link generation for 5 minutes, 1 hour or 24 hours
  • improved inline preview
  • allows the transformation of private files into public files and vice versa

filters

  • fixed "doesntContain" search mode

google

  • updated migrations

helpers

  • small refactor

how-to

  • refactor for the new file system
  • updated migrations

impersonate

  • updated migration;

localisation

  • added the Full Name key and RO translation
  • fixed seeders path
  • updated migrations
  • the localisation files have been moved from resources/lang directory to lang directory
  • updated migrations

notifications

  • updated migrations
  • updated pusher dependency

pdf

  • updated laravel snappy
  • added output() to Pdf
  • added return types

people

  • updated migrations

permissions

  • updated migrations

roles

  • updated migrations

tables

  • added the possibility to conditionally return a table builder using the tableClass($request) method in addition to the $tableClass property, used in the table related controllers (init, data, excel)
  • fixed resource collection computor
  • refactor for the new file system
  • implemented number and date formating for nested columns from loaded relationships

tasks

  • updated migrations

tutorials

  • updated migrations

user-groups

  • fixed seeders path

users

  • fixed seeders path
  • changed user defaultPreferences visibility to protected
  • updated migrations
  • updated user preferences to use cache

Private Packages

webshop-commercial

  • updated migration
  • refactor for the new file system

webshop

  • rebuilt assets
  • updated registration form label for name to Full Name
  • added default for sorting in order to address bot caching of deprecated URLs
  • fixed seeders path
  • updated migrations
  • removed services as dependency
  • refactor for the new file system

emag

  • added missing branch from the UpdateStock listener; small job rename
  • offer now uses dynamic methods
  • added conditional trim
  • added new Offer::valid scope
  • added logic to delete awbs after download
  • fixed Job location;
  • updated migrations

hr

  • fixed seeders path
  • updated migrations

projects

  • fixed seeders path
  • updated migrations

contracts

  • updated migrations

commercial

  • updated the UpdateStockValues due to supllier pivot refactor
  • shipping address is optional on store orders
  • added fix for missing address
  • made supplier query more specific
  • added requests
  • fixed issue due to product_supplier pivot id
  • updated migrations
  • refactor for the new file system

financials

  • updated migrations
  • refactor for the new file system

inventory

  • bundlePacking cleanup
  • added withAvailable scope on Product
  • updated migrations

discounts

  • updated migrations

wiki

  • updated migrations
  • refactor for the new file system

frisbo

  • fixed seeders path
  • updated migrations

stripe

  • updated migration

eav

  • adds publish method AppServiceProvider
  • simplified eav validation
  • removed unused model
  • added default for validator, when eav params payload is missing
  • updated migrations

sale-channels

  • updated migrations

product-eav

  • fixed eav syncing
  • simplified logic; removed attribute id from values pivot
  • added missing model
  • fixed table PK
  • added default for eav sync / Update
  • fixed the getEav dynamic; transformed the $product->attributes() dynamic relationship into a method
  • updated migration
  • fixes import

Upgrade steps

First and foremost, be sure the to read the official Laravel 9 upgrade guide to understand all implications.

  • before starting to upgrade your project, please read with attention the following step:

Due to the major files package refactor, all the Enso package classes using files will be updated accordingly.

  • publish the updated files config with php artisan vendor:publish --tag=files-config --force

  • add your local models using files under the upgrade key. The syntax is: old attachable_type name => Model::class.

  • if having several models stored under the same folder, then that folder name should be added under the nonStandardFolders key, so that the files could be migrated according to the new convention. The new convention is that the folder will be named as the model, written camelCase.

  • if you also want to rename your folder, you'll need to specify the name change under renameFolders key, as 'old name' => 'new name'.

  • for all models using files, update your migrations by adding file_id foreign key.

$table->unsignedBigInteger('file_id')->nullable();
$table->foreign('file_id')->references('id')->on('files')
    ->onUpdate('restrict')->onDelete('restrict');
  • if using the ensoFile.js mixin locally, when instantiating the class, you should pass a file resource object instead of a filename string

  • if you're sending email notifications with mailgun and inline attaching pdf files created with the LaravelEnso\Pdf\Services\Pdf service, you need to use ->output() method:

    ...
    ->attachData($invoice->output(), $this->filename());
    ...
    
  • if locally customizing Enso package form builders and providing another template file, while not customizing the constructor, you should

    • change the protected const TemplatePath = ... visibility to private
    • override the parent's templatePath() method:
    protected function templatePath(): string
    {
        return self::TemplatePath;
    }
    
  • if locally customizing Enso package table builders and providing another template file, you should

    • change the protected const TemplatePath = ... visibility to private
    • override the parent's templatePath() method:
public function templatePath(): string
    {
        return self::TemplatePath;
    }
  • if locally extending any table builder classes, check your imports as names may have changed. Make sure to also check within your app service providers

  • if locally extending any request validation classes, check your imports as names may have changed. Make sure to check within your app service providers

  • note that the DataImport and DataExport models have been renamed to Import and Export. You should updated your imports accordingly.

  • upgrade all package dependencies to their latest version

  • if using mailgun, make sure to require symfony/mailgun-mailer and symfony/http-client by using composer require symfony/mailgun-mailer symfony/http-client

  • update your config files, .gitignore, Middleware classes, Providers, Exceptions/Handler.php and Http/Kernel.php by following this merge request as an example https://github.com/laravel-enso/enso/pull/417/files

  • refactor your local excel seeders by implementing the following methods

    protected function type(): string // If the $type property is overwritten
    {
        return $this->type;
    }

    protected function filename(): string
    {
        return $this->filename;
    }

  • if you need to customize the select options sort method, you can do so by publishing the select config using php artisan vendor:publish --tag=select-config --force and updating the sortByOptions key as needed.

  • update your DatabaseSeeder by adding LaravelEnso\Files\Database\Seeders\TypeSeeder before UserSeeder

  • if using phpinsights, note that there was a bug https://github.com/nunomaduro/phpinsights/issues/565. The bug was fixed, but not tagged, so you need to update your dependency to "nunomaduro/phpinsights": "dev-master",

  • note that all all migrations have been upgraded in order to return an anonymous class by the new Laravel 9 style.

  • update the Enso version to 5.0.0 in config/enso/config.php

  • run composer update in the project's root

  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches

  • php artisan enso:upgrade --before-migration

  • php artisan migrate

  • php artisan enso:upgrade

  • php artisan enso:upgrade --manual

  • make sure permissions are properly configured for each role and then save/refresh the roles configuration files

  • as per every release, delete any local, deprecated upgrades

4.9.1

2 years ago

4.9.1

This minor release aims to update front-end packages to use the latest bulma syntax. It also includes many improvements and bug fixes.

Front-end

auth

  • fixed password confirmation bug

data-import

  • added support for template params options in addition to source

directives

  • simplified, improved performance & code readability of v-click-outside

io

  • updated navbar-item use

notifications

  • updated navbar-item use

roles

  • improved configure.vue info

tables

  • fixed bug affecting preferences saving caused by the vue3 ugrade

tasks

  • updated navbar-item use

themes

  • several deprecated helper classes such as has-margin-small, has-padding-small and their derivates have been removed
  • [v-cloak] & *:focus styling is included within the package
  • since v-tooltip is globally available, its css is loaded within the themes package

ui

  • fixed dynamic navbar component registration rendering
  • improved navbar-item; added show, hide and touch events

users

  • fixed navbar avatar on safari

back-end

core

8ee62af updated meta: removed csrf token

countries

b4bc27f updates eea for United Kingdom

data-import

  • added template params options support

permissions

  • added short name in permission resource

users

  • fixed user preferences reset
  • changed the User storePreferences method visibility to public

Private packages

webshop

  • removed deprecated css classes
  • updated searchable array to use the visibleOnWebshop dynamic

emag

  • added check for response error

commercial

  • added validation on external fulfilment
  • fixed typo

wiki

  • removed deprecated css classes

Upgrade steps

  • if you're still using the deprecated css which have now been removed, you should update:

    • has-vertically-centered-content to is-flex is-align-items-center

    • has-margin-auto to ma

    • has-margin-xxx, has-padding-xxx and their derivates (top, left, etc) to their corresponding bulma counterparts (m-1, m-2, ml-1, etc). See docs.

      For example:

      • has-margin-large -> m-3
      • has-margin-top-large -> mt-3
      • has-margin-right-small -> mr-1
      • has-margin-bottom-medium -> mb-2
      • has-margin-top-small -> mt-1
      • has-padding-left-large -> pl-3
      • has-padding-large -> p-3
      • has-padding-medium -> p-2
      • has-margin-top-medium -> mt-2
  • remove [v-cloak], *:focus & @import 'v-tooltip/dist/v-tooltip'; from client/src/sass/enso.scss

  • update the Enso version to 4.9.1 in config/enso/config.php

  • run composer update in the project's root

  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches

  • php artisan enso:upgrade --before-migration

  • php artisan migrate

  • php artisan enso:upgrade

  • as per every release, delete any local, deprecated upgrades

4.9.0

2 years ago

4.9.0

This release upgrades the UI to Vue 3 and also includes under the hood refactor for a few core components. We've tried to maintain overall component compatibility and done our best to document the breaking changes.

Depending on how complex the UI for your project is, the upgrade may take anywhere from a 1.5h to many days, so please take your time to go through the Enso changelog, especially the upgrade steps AND also the Vue3 upgrade guide linked below.

Front-end

All packages have had their dependencies and dev dependencies updated and pruned. Many packages have had linter recommended fixes.

filters

  • the DateIntervalFilter & EnsoDateIntervalFilter components have been retired

laravel-validation

  • added an all() method, that returns all errors

pull-to-refresh (new)

This a new Enso package, forked from lakb248/vue-pull-refresh and updated to work with Vue3.

select

  • fixed element deselection when the select was used in 'object' mode

Private packages

inventory

  • aligned products index page style & updated table filters/state

commercial

  • updated the invoice issuing routes
  • improved items display

emag

  • fixed auto pricing controls
  • fixed auto pricing conditions
  • updated emag dependent filters to auto clear when deactivating emag
  • fixed can-access usage; improved Emag.vue
  • added new product filters for emag offers; added new visual indicator for "genius"

products

  • small fix for products index styling

webshop

  • form cleanup

Back-end

categories

  • fixed ordering bug

core

  • updated state Meta: removed csrf token

localisation

  • removed the expanded sidebar key (cleanup)

tables

  • fixed excel export on all scenarios
  • fixed authenticates on export
  • fixed style
  • updated to allow sortable for nested columns (should be used carefully);
  • extracted Computor from Data
  • improved excel export -> fetcher needs to be redesigned
  • improved excel preparing

tutorials

  • updated form to use the new permissions.options route

Private packages

commercial

  • updated addresses logic for the sale form
  • fixed status filter
  • improved stock values computation
  • removed created/updated_by fields from being exportable
  • bugfix: only perform invoice cancellation if invoice exits
  • implemented the possibility to enable per sale channel opt-in/out for sale notifications
  • fixed acquisition price in stock values Computor
  • removes unneeded relation loads; fixed style

commercial

  • removed the back button for the modal form

eav

  • fixed group & attribute reordering bug
  • small Attribute factory fix

emag

  • fixed missing return
  • refined stock management
  • improved code to keep the local offer in sync with the emag remote offer on each upload
  • improve order flow for edge cases when API is down

frisbo

  • added order update webhook endpoint, append product lot to product name and order notes
  • small refactor
  • added logging for api callbacks
  • expiration date flow enhancements

Vue Migration Build

In order to migrate a project, we will use the Vue3 Migration Build as an intermediary step, upgrade the code to make it Vue3 compatible, then finally switch to the regular Vue3 build.

Please read the official documentation linked above, so you have a better understanding of the process.

In order to use the migration build, it needs to be imported and configured:

  • in client\package.json: "@vue/compat": "^3.2.20",
  • in vue.config.js, within the chainWebpack config:
        config.resolve.alias.set('vue', '@vue/compat');
        config.module
            .rule('vue')
            .use('vue-loader')
            .tap(options => ({
                ...options,
                compilerOptions: {
                    compatConfig: {
                        MODE: 2,
                        COMPILER_V_BIND_OBJECT_ORDER: false,
                        COMPILER_IS_ON_ELEMENT: false,
                    },
                },
            }));
    
  • in client\src\js\enso.js:
    Vue.configureCompat({
        RENDER_FUNCTION: false,
        INSTANCE_LISTENERS: false,
        COMPONENT_V_MODEL: false,
        ATTR_FALSE_VALUE: false,
        INSTANCE_ATTRS_CLASS_STYLE: false,
        TRANSITION_GROUP_ROOT: false,
    });
    

The package & snippets are already present in the Enso release, but they will be commented out, so in order to enable the migration build, open the relevant files and uncomment the blocks above.

Note that the compiler migration build flags belong to the vue.config.js file and require the restart of HMR (if using it) while all other flags belong to the client\src\js\enso.js file.

Vue Dev Tools

For Vue3, a new browser devtools plugin is needed and can be installed along side the Vue2 plugin.

Upgrade Steps

In addition to upgrading the Enso UI to make it Vue3 compatible, we've also made some other changes to a few Enso components some of which may impact your local code.

  • update the following files with the latest versions

    • .babel.config.js
    • .eslintrc.js
    • vue.config.js
    • client\src\js\enso.js
    • client\package.json
    • client\src\sass\enso.scss
  • enable the migration mode, as noted above

  • run yarn && yarn upgrade and start HMR

  • you should be able to login into the application and will probably have some (lots of) errors and warnings

  • the deprecated legacyBuild flow for building the application state has been removed entirely store.js

  • we have aimed to remove global components and instead import them for each use case

    • the fa component is no longer global and needs to be imported locally, where used
      import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
      ...
      components: { ..., Fa, ... },
      
    • the global http axios alias is no longer available, instead it should be injected as required: Update:
      myMethod() {
          axios.post(...);
      }
      
      to
      inject: ['http']
      ...
      myMethod() {
          this.http.post(...);
      }
      
  • if using any @hook:... hooks, replace all usages with @vnode-... docs

  • in all of your renderless components you can set the inheritAttrs: false, attribute to eliminate warnings about inherited attributes

  • $listeners has been removed / merged into $attrs. See docs

    You need to remove v-on="$listeners" usages. Note that in such cases, you will probably need to cascade events, either directly or via v-bind="$attrs" if applicable.

  • $scopedSlots property is removed and all slots are exposed via $slots as functions. See docs.

    You should replace this.$scopedSlots.xxx with this.$slots.xxx in your render functions

  • update the slot syntax, by replacing v-slot:xxx with #xxx

  • if you are still using the deprecated named / scoped slot syntax, update it to the latest syntax first (which is already supported in 2.6) For example, replace

    <template slot-scope="{ count }">
    

    to

    <template #default="{ count }">
    
  • the beforeDestroy hook has been renamed to beforeUnmount - you should replace all usages project wide. See docs

  • when using $el within components, ensure that there is a single root within the element (e.g. <div>)

  • when emitting events in components (e.g. $emit('click')), it is recommended to declare/list the emitted events:

    emits: ['click'],
    
  • for components, the value property has become modelValue and the input event has been replaced with update:modelValue. See docs

    When listening on 'value' changes on components, you need to replace @input="xxx" with @update:model-value="xxx". In Vue3 you can also have multiple v-model bindings on the same component. See docs

  • in all of your renderless components you can set the inheritAttrs: false, attribute to eliminate warnings about inherited attributes

  • note that in Vue3 you can no longer programmatically destroy components as the $destroy() method has been removed. See docs

  • HTML bound attributes such as :disabled will be rendered as disabled="false" for false values, and if you need to not have them rendered, the bound attribute value needs to be evaluated to null or undefinded. See docs

  • if using watch on arrays, you need to add deep: true otherwise the callback may not be triggered. See docs

  • you no longer need to use $set & $delete to manage object attributes in order to keep responsiveness, you can use regular JS syntax. See docs.

  • if asynchronously loading components, the syntax has changed. See docs.

  • transitions have suffered a few changes. See docs

  • the render function API has changed. See docs

  • if using DateFilter or EnsoDateFilter please note:

    • the default property has been removed
    • the disabledOptions property has been renamed to excluded
    • the default property has been removed
    • value/v-model has become filter
    • using v-model for filter & interval is now required

    For example, replace

    • v-model="params.dateInterval" with v-model:filter="params.dateInterval"
    • :interval="intervals.products.date" with v-model:interval="intervals.products.date"

    where the attributes look like this

    params: {
        dateInterval: 'thisMonth',
    },
    intervals: {
        products: {
            date: {
                max: null,
                min: null,
            },
        },
    },
    
  • if emitting/listening to global events, you should import and refactor to using the eventBus instead. See docs.

    import eventBus from '@enso-ui/ui/scrc/core/services/eventBus';
    ...
    eventBus.$emit('my-event');
    eventBus.$on('my-event', this.myHandler);
    
  • the <modal> component no longer needs a portal attribute/property, and you should delete all its usages

  • the AutosizeTextarea component has been updated and no longer needs to wrap around a textarea. Update:

    <autosize-textarea>
        <textarea v-model="..."/>
    </autosize-textarea>
    

    to

    <autosize-textarea v-model="...">
    
  • filters are no longer supported, refactor as needed (you may use methods instead). For example, update:

    {{ value | numberFormat(2) }}
    

    to

    {{ numberFormat(value, 2) }}
    
  • if you're using the automatic component registration, the syntax has changed from

    Vue.component('navbar-notification', Notification);
    App.registerNavbarItem('navbar-notification', 300, 'core.notifications.count');
    

    to

    App.registerNavbarItem('navbar-notification', Notification, 300, 'core.notifications.count');
    
  • the v-tooltip library has been updated: Import has been updated from

    import { VPopover } from 'v-tooltip';
    

    to

    import { Dropdown } from 'v-tooltip';
    

    Component has been updated:

    <v-popover trigger="hover"
    

    to

    <dropdown :triggers="['hover']"
    

    The slot name has been updated:

    <template v-slot:popover>
    

    to

    <template #popper>
    
  • we've switched to the standard (non compatibility) syntax for the animate animations. You should prefix animate related classes with animate__. For example, update:

    <enso-form class="box animated fadeIn">
    

    to

    <enso-form class="box animate__animated animate__fadeIn">
    

    Alternatively, refactor using transition components.

  • the @enso-ui/bulma package has been deprecated and will no longer be maintained. You should refactor your components and import components from their respective packages.

Moving forward from Migration Build

Once you've migrated your local pages/components and packages, you may switch from the migration build to the regular Vue3 build.

  • remove the customization from vue.config.js i.e. the code related to @vue/compat
    config.resolve.alias.set('vue', '@vue/compat');
    config.module
        .rule('vue')
        .use('vue-loader')
        .tap(options => ({
            ...options,
            compilerOptions: {
                compatConfig: {
                    MODE: 2,
                    COMPILER_V_BIND_OBJECT_ORDER: false,
                    COMPILER_IS_ON_ELEMENT: false,
                },
            },
        }));
    
  • remove the compatibility customization to client\src\js\enso.js
    Vue.configureCompat({
        RENDER_FUNCTION: false,
        INSTANCE_LISTENERS: false,
        COMPONENT_V_MODEL: false,
        ATTR_FALSE_VALUE: false,
        INSTANCE_ATTRS_CLASS_STYLE: false,
        TRANSITION_GROUP_ROOT: false,
    });
    
  • remove the "@vue/compat": "^3.2.20", dependency from client/package.json
  • run yarn, rebuild etc.

Known issues

  • in development, you will have warnings about Unexpected mutation of ... prop vue/no-mutating-props which can be ignored for now
  • the vuejs/vuex-router-sync has an unresolved issue that, at the time of writing, requires a patch package to fix
  • the Chrome devtools plugin is at v6.0.0-beta.21 (pre-release) and may throw a lot of errors such as Timed out getting app record for app which should not affect application functionality

4.8.2

2 years ago

4.8.2

This aims to be the last minor release before upgrading to Vue 3 and includes many improvements, bug fixes and also several new features.

Front-end

addresses

  • implemented google package

algolia (new)

  • implemented settings package for Algolia

bulma

  • added toggle filters
  • added users as dependency

charts

  • updated Chart.vue
  • updated dependencies
  • fixed chart instance usage
  • brings back default options
  • added shortNumber filter

data-import

  • improved UX for disabled exports

emails

  • updated syntax and eslint config

enums

  • updated dependencies and .eslintrc.js

files

  • small refactor in index
  • removed redundant chart option

filters

  • added toggle filters
  • added dirty to filter-state
  • improved dirty watcher in filter state

forms

  • added the ability to reload based on a be flag
  • exposed undo()

google

  • fixed missing icon import

meili-search (new)

  • implemented settings package for MeiliSearch

mixins

  • fixed edge case with re-rendering login form after logging in

mobile-app

  • added .eslintrc.js
  • updated .gitignore and dependencies

range-slider (new)

  • Vue Range Slider based on noUiSlider

route-mapper

  • updated dependencies
  • updated .eslintrc.js
  • refactored the mapper class; fixed bug related to optional params; improved logic/flow

scroll-to-top

  • fixed bottom margin

search-mode

  • renamed algolia to searchProvider

select

  • fixed multiple select value mutations when using state options

sentry

  • updated dependencies and .eslintrc.js

strings

  • fixed slug generation issue to handle cases when regEx matching had no actual matches

tables

  • improved key in table header
  • reflected filtered state
  • added missing mr-1 in controls
  • added danger on filter flag
  • added support for dropdown actions
  • added debounce for filters

themes

  • added has-margin-auto
  • removed bulma-checkradio
  • updated bulma-extensions dependency
  • imported minimized css from bulma-extensions

typesense (new)

  • typesense integration for laravel-enso

ui

  • added integrations.js
  • improved app update notification
  • updated AppUpdate.vue
  • fixed app update v-if
  • made app update dropdown always visible
  • improved internal AppUpdate flow; fixed issue with showing the modal
  • updated bulma-extensions dependency

users

  • fixed user profile level margin

back-end

activity-log

  • updated for php 8
  • updated .styleci.yml

addresses

  • deprecated google config key, uses settings from google package
  • improved validation for case when postcode exists in the DB, but for a different country
  • improved postcode validation
  • added GBR addresses
  • added Geocoding service; updated Coordinates to use the new service

algolia (new)

  • implemented settings package for Algolia

api

  • implemented custom headers
  • added a throttle helper
  • added toJson method to the api resource
  • improved adding headers to the request
  • added request duration logging
  • updated api logger
  • decreased duration column size
  • removed nullable from duration
  • added public apiEnabled: bool on Action
  • improved exception message
  • updated method visibility

avatars

  • made the avatars generators configurable

categories

  • added options endpoint
  • removed unneeded attribute
  • added categories import
  • added sync queue for the categories import; if needed, template can be locally customized

charts

  • refactored to chartjs 3
  • fixes default tooltip config
  • implemented backend shortNumbers
  • fixed horizontal chart

cnp-validator

  • updated CnpValidator.php
  • required php 8
  • updated strlen usage to mb_strlen

companies

  • fixed company fiscal code in factory
  • added queue sync for the companies import; if needed, template can be locally customized
  • updated import, added new attributes
  • added fiscal code to rememberable keys

control-panel-api

  • fixed stat class

core

  • added structure for integrations
  • improved app update event
  • added a Login trait to work with the latest changes in laravel-ui
  • fixed login test for the new guard config attribute in sanctum.php

countries

  • updated eea for United Kingdom

data-import

  • fixed the Template's notifies method

documentation

  • added route mapper docs stub & mention about transpiling

filters

  • renamed algolia to searchProvider; improves searchProvider results

google (new)

  • implemented settings package for Google

helpers

  • updated searchable trait
  • added production check
  • configured styleci for php8
  • updated Searchable trait due to new Algolia package
  • updated price computor constructor and vatPercent use
  • fixed searchable for extended / binded models
  • added support for meilisearch in searchable
  • removed deprecated searchable trait
  • fixed Obj casts: set method now performs json encode
  • fixed Cash label
  • updated codesize/phpmd config rules for constant naming
  • removed Sleep
  • added new min max utility methods to Decimals

localisation

  • updated texts, added new keys & translations
  • added missing cleanup for the language update test
  • added missing php dependency
  • made seeder reusable in local projects

logs

  • improved logs collection to handle archives
  • fixed tests

meili-search (new)

  • implemented settings package for MeiliSearch

phpunit-pretty-print

  • updated strlen usage to Str::length

select

  • opened up flexibility on Options Service instantiation from OptionsBuilder

tables

  • added support for dropdown actions
  • resolved resources from service container
  • updated template

tasks

  • fixed export error

typesense (new)

  • new typesense integration for Laravel Enso

unit-conversion (new)

  • new unit converter utility classes for Laravel Enso.

upgrade

  • added getLength in Column
  • added exists() helper for table
  • updated upgrade status to address change in Symphony console table
  • ignored upgrades from namespaces that are not within autoload

Private packages

webshop-commercial

  • added webshop searchable array
  • maked default ranking 0 in search provider data
  • replaced the product dynamic method WebshopSearchableArray with a simple service
  • updated flow for webshopDiscount; now we no longer fall through to general supplier discount but use webshop company if no specific cliend discount exits
  • used float casts for searchable attributes
  • updated webshop order implementation
  • fixed class path and deprecated Online

webshop

  • moved search provider product index to webshop from algolia
  • hides price and discount when no stock available
  • removed webshop-shadow role
  • added isActive to the BaseFilters@facets array (excluded facets)
  • moved searchable attributes to webshop from webshop commercial
  • updated contract & account order actions
  • updated BaseFilters.php
  • added availability filters
  • updated discount observer
  • hides empty filters
  • added price filter
  • added priceFiltered() getter
  • added services for search providers
  • removed PaymentMethods enum;
  • added payment config
  • added default sorting to newest
  • builded the new price filter
  • implemented most popular sort
  • various fixes, improvements and refactors

emag

  • refactored add invoice -> upload invoice
  • refactored product index use
  • removed ValidateStoreRequest request, MissingOffer notification, deprecated parents() setter call, measurment units implementation, checker scopes & methods, recheck & cleanup flows and notSyncedYet scenarios branch
  • offer download throws exception on error; categories sync service deletes any old emag categories
  • updated order flow: now stopping before generating awb if not fully reserved
  • emag categories now have parent id
  • implemented awb schedule
  • added vat id to the offer update resource and conversionable unit Enums
  • updated CreateCategoryEmagCategoryPivotTable and CreateEmagOffersTable migration
  • now an offer is made inactive when we do not have stock
  • removed deprecated NullableCategoryId upgrade
  • added emagDiscount() dynamic for services, new headers to all emag requests and check for sync / when not empty
  • log now also sends email notification; added checker jobs failure handling
  • made the buy button rank array key optional
  • set number of offers & best offer sale price as nullable
  • renamed last_checked_at to checked_at
  • added check for the presence of the emag settings table for further scheduling
  • refactors fetchPicture(s) to downloadPictures
  • added new emag status
  • added upgrade to drop offers discount_percent
  • removed auto_pricing from the Offer table resource and urls from the settings form and migration
  • removed download after each operation; updated offer fill, using DI resource, new genius column
  • added upgrade for removal of old settings url columns
  • added commands for activation/deactivation of the emag api
  • various fixes and improvements

commercial

  • enabled cancel
  • removed sort by created_by/updated_by
  • removed By columns from being searchable
  • added limit for product labels
  • updated products template
  • refactored grn to goodsReceivedNote
  • added bulkStockRemoval
  • added limit and ordering for bulk stock removal;
  • updated sale cancellation policy to exclude invoiced sales
  • added locks
  • updated limit to cover all cases
  • allowed sale fulfill, on default channel & internal warehouses when missing address
  • renamed externallyFullfilled
  • added quick fix for sales payment form
  • added awb schedule validation and internal code to typeahead controller
  • added serializeDate to models and cast to settings
  • reverted schema check
  • made settings warehouse_id nullable to avoid seed / provider / schedule issues
  • updated awb generation schedule to 06:00
  • various fixes, refactors and improvements

financials

  • date is now required for client payments
  • fixed payment due date logic; updated tests
  • fixed case when no serial is given
  • refactored code
  • due date fixes
  • added date serialization customization for all relevant models
  • updated client invoice form

inventory

  • removed manual upgrade from the INsLot upgrade
  • fixed reservations count for Reservations.vue update
  • added inventoryIn locks as required to avoid over-reserving
  • extracted to services
  • added is_bundle check
  • removed App make from the Inventory interface
  • fixed update available emitting

discounts

  • refactor for import
  • added reset
  • improved client product discount importer
  • fixed missing param

frisbo

  • converted eav grams to kg when publishing product
  • updated resource to use the new unit conversion package; added validation
  • updated product bundle resource to correctly use bundled quantity

eav

  • added a public searchableKey method on the attribute
  • improved eav filterable searchable key
  • small Attribute factory fix

product-eav

  • replaced the EavSearchableArray dynamic product method with a simple service class
  • updated searchable array
  • improved facets
  • added search provider integration
  • fixed import

Upgrade steps

  • update the Enso version to 4.8.2 in config/enso/config.php
  • run composer update in the project's root
  • remove the bulma-extensions patch
  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches
  • after yarn upgrade, update vue.config.js by adding @enso-ui/route-mapper package under transpileDependencies key
  • php artisan enso:upgrade --before-migration
  • php artisan migrate
  • php artisan enso:upgrade
  • as per every release, delete any local, deprecated upgrades
  • update all models having forms with date fields, by adding the following method:
protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

Make sure you have set the $dates property.

4.8.1

2 years ago

4.8.1

Front-end

For most of our frontend packages we've added router error handling.

addresses

  • fixed case when address does not have locality/city

charts

  • updated Chart.vue

companies

  • refactored slot-scope to v-scope

control-panel

  • improved layout
  • fixed index and stat value format

datepicker

  • fixes edge case when attempting to change value during picker reset

forms

  • clears errors before autosave

mixins

  • added 413 error code handling
  • fixes modal and modal template

notifications

  • fixed Notification component registration for cases where we might revoke the default notification permission

products

  • fixed small bug due to being unable to create slug when name is null
  • reverted check for null, and moved it to the slug method

sentry

  • added ingored errors (for ChunkLoadError)
  • added UnhandledRejection to ignored

strings

  • added string validation
  • casted args to string
  • refactored strings
  • updated methods to also handle null parameters, in which case they return an empty string

tables

  • fixed number formatter when fullRecordInfo is false
  • added ongoing request cancel in before destroy to avoid various timing errors; fixed and refactored NumberFormatter
  • renamed method in number formatter

typeahead

  • added force-selection

ui

  • adds sentry context
  • removed duplicated filters
  • fixed navbar item registration
  • fixed text in dark theme on error pages
  • added maintenance mode page
  • fixed router error handler; improved middleware

users

  • fixed user profile layout

back-end

action-logger

  • refactors action logger middleware
  • updates .styleci.yml
  • removes redundant argument

addresses

  • fixed code style

avatars

  • improved gravatar; renamed observer to User

companies

  • added company fiscal code request validation

control-panel

  • drops org url
  • adds sentry org to config
  • improves config, adds env vars
  • fixes return types; refactors switch to matches
  • updates id signature & implements id provider
  • adds is_active in table builder for apps

control-panel-api

  • improves middleware registration
  • extracts api middleware group in the api package
  • improves database sensor
  • removes digits for request monitor
  • improves request monitor
  • extracts id provider
  • improves logic; adds danger class for outdated versions
  • fixed type in Services\Statistics

control-panel-common

  • added missing return types in contracts
  • added IdProvider abstract class

core

  • .gitIgnore
  • adds alias for ensure-frontent-requests-are-stateful middleware
  • extras middleware registration in separate provider
  • updates .styleci.yml
  • style update
  • removes core-api route group
  • improves Logout trait to work with non spa env
  • reverts logout
  • New State logic - customization flexibility #393
  • used App::make instead of new for providers instantiation for flexibility on customizing states.

data-export

  • fixed export error notification
  • added custom row action contract

forms

  • fixed section visibility set automatically to visible in the builder

helpers

  • added forceable index
  • added cascades observers trait

localisation

  • updated translations for webshop reviews
  • added php version 8 for styleci cfg

roles

  • improved syntax in config writer

select

  • Options ordering - more sorting flexibility. #46
  • created new select config option 'sortByOptions' for controling Select Options sorting.
  • used new config 'sortByOptions' inside Options get method

sentry

  • added prefix for recent exceptions; added dedupeInterval in publisheable config

tables

  • fixed button name check (needed only for row)
  • fixed tests

users

  • added policy fixes
  • implemented cascades observers

Privates

webshop-commercial

  • updated middleware names

webshop

  • added exception when attempting navigation to unavailable pages; fixes #46

  • removed log

  • updated cookie consent blade

  • cleanup of unused routes; added local auth middleware instead of package

  • customized verifiy active state for webshop

  • makes product filters a partial;

  • built with latest sentry version

  • disabled the form button after submitting a review to avoid double clicks

  • updated the Review Submitted notif to include the product name

emag

  • handled setting attribute for when value is array; ref #30

  • updated offer generation for bundle

  • updated new offer resource for bundle products

  • updated resource re:ean for packages

financials

  • updated flow

  • removed hard coded logic for shipping service in XML generation

wiki

  • fixes login route

  • adds verify active state

frisbo

  • adds bundle publishing ability

api

  • added logs
  • adds core-api midleware group

fetcher

  • updates gitlab ci and vue.config

  • increased the timeout limit

Upgrade steps

To upgrade:

  • run composer update
  • run yarn, yarn upgrade && yarn to ensure you have the latest package versions and patches are applied. If necessary, update your patch files.
  • php artisan enso:upgrade --before-migration
  • php artisan migrate
  • php artisan enso:upgrade to execute the upgrades
  • if you need to customize the select options sort method, you can do so by publishing the select config using php artisan vendor:publish --tag=select-config --force and updating the sortByOptions key as needed.
  • make sure permissions are properly configured for each role and then save/refresh the roles configuration files
  • update the Enso version to 4.8.1 in config/enso/config.php

4.8.0

2 years ago

4.8.0

This new release adds the possibility for back-end packages to publish their own state to the front-end as well migrates the framework & packages to PHP 8.0. Where applicable, updated packages to take advantage of the new language features.

Front-end

Most of the packages received a dependency list cleanup.

bulma

  • added enhanced progress indicator
  • added ProgressIndicator component export

charts

  • fixed labels update on structure change
  • added display function prop

enums

  • renamed the internal i18n attribute to _i18n, to avoid potention conflicts with enum keys

financials

  • fixed supplier invoice index layout

localisation

  • improved store module

products

  • improved the product form to update slug dynamically
  • improved product picture styling/layout in table & form
  • added newly computed supplier discounted price to the form

progress-indicator

  • implemented enhanced indicator; various progress indicator improvements

rating

  • updated mobile bottom position

scroll-to-top

  • updated mobile bottom position

strings

  • fixed the slug helper

tables

  • removed the already deprecated money support; templates should now use number - more details are found in the upgrade steps
  • added customizable total label via the template's totalLabel property
  • fixed page toggling

ui

  • improved store module to allow for automatic package store registration
  • small refactor and various fixes
  • added sentry spike protection

user-groups

  • removed unneeded file

Back-end

  • all packages have had the route require syntax updated to reqire __DIR__./xxx.php
  • all packages that were using money configuration for numeric formatting have been updated to use the already available number configuration
  • all packages that were including data imports, have been updated so that importers respect the new methods' signatures
  • all get_class($instance) usages refactored to $instance::class
  • seeders and factories have been updated, and where it made sense, helper methods (such as test()) were added which create a different factory state (such as for testing)

action-logger

  • code cleanup

activity-log

  • route refactor

api (new)

  • new package that provides boileplate for implementing APIs

categories

  • fixed stacked bar chart

charts

  • added contains nested scope

companies

  • extracted user state to the users package

core

  • extracted user state to the users package

currencies

  • removed FixesCurrencyApi exception
  • refactored to use the new api package

data-export

  • added data_exports.name index upgrade

data-import

  • improved error logging for local environments
  • updated interfaces to pass the import model instead of params/user
  • added avoids deletion conflicts and updated delete method
  • added notifies boolean flag in json template and notifiableIds config option
  • added params to optional attributes

files

  • improved the file resource

helpers

  • disabled algolia syncing when not in production
  • fixed searchable
  • added price computor
  • added new custom cast for Object

localisation

  • added & updated various keys & translations

measurement-units

  • added the name attribute to the rememberable keys config array
  • added MeasurementUnits enum

products

  • updated price computor use
  • updated product visibility in the supplier resource
  • added newly computed supplier discounted price
  • added generateSlug helper
  • added part_number index on product_supplier pivot
  • updated package_quantity type to int

roles

  • added config options for restricting user groups
  • improved visible scope

sentry

  • extracted sentry functionality from the Core package

services

  • made measurement unit not nullable in the table
  • improved upgrade

upgrade

  • renamed nullable Column method to isNullable
  • added isSigned, isUnsigned helpers, getPrecision and getScale for decimals

users (new)

  • extracted user functionality from the Core package
  • removed title from profile builder
  • added state provider
  • improved changeGroup policy

user-groups (new)

  • extracted user groups functionality from the Core package
  • added config options for restricting user groups
  • improved visible scope

tables

  • added customizable total label
  • removed the already deprecated money support; templates should now use number - more details are found in the upgrade steps

Upgrade steps

  • run composer update in the project's root
  • run the upgrade commands (both regular and before-migration) to ensure database & strucure is up to date, since this release cleans up a lot of package upgrades
  • upgrade your machine to php8
  • in composer.json update the following dependencies to the given versions:
    • "laravel-enso/core": "^7.0",
    • "sentry/sentry-laravel": "^2.0.0"
    • "laravel-enso/phpunit-pretty-print": "^1.0",
    • "nunomaduro/phpinsights": "^2.0",
  • search & replace in your local project (including the database folder) the following namespaces:
    • Core\Models\UserGroup -> UserGroups\Models\UserGroup
    • Core\Enums\UserGroups -> UserGroups\Enums\UserGroups
    • Core\\Enums\\UserGroups -> UserGroups\\Enums\\UserGroups
    • Core\Models\User -> Users\Models\User
    • Core\Policies\User -> Users\Policies\User
    • Core\Models\Session -> Users\Models\Session
    • Core\Http\Controllers\Administration\Users -> Users\Http\Controllers
    • Core\Http\Controllers\Administration\UserGroups -> UserGroups\Http\Controllers
    • Core\Tables\Administration\Users -> Users\Tabels
    • Core\Forms\Administration\Users -> Users\Forms
    • Core\Http\Resources\User -> Users\Http\Resources\User
    • Core\\Http\\Resources\\User -> Users\\Http\\Resources\\User
    • Core\Http\Requests\ValidateUserRequest -> Users\Http\Requests\ValidateUserRequest
    • Core\Database\Factories\UserFactory -> Users\Database\Factories\UserFactory
    • Core\Database\Seeders\UserGroupSeeder -> UserGroups\Database\Seeders\UserGroupSeeder
    • Core\Database\Seeders\UserSeeder -> Users\Database\Seeders\UserSeeder
  • remove from config/insights.php the deprecated:
use ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff;
use ObjectCalisthenics\Sniffs\Metrics\MethodPerClassLimitSniff;
use ObjectCalisthenics\Sniffs\NamingConventions\ElementNameMinimalLengthSniff;
  • run composer update in the project's root
  • update any local person/people factories and seeders and remove the title attribute as it has been dropped
  • for your local imports, for the importer & validator classes, update the following method signatures (& logic where necessary):
    • run: public function run(Obj $row, DataImport $import);
    • after: public function after(DataImport $import);
    • authorizes: public function authorizes(DataImport $import): bool;
    • before: public function before(DataImport $import);
  • for your local table JSON templates, change any money keys to number, and remove any "thousand" & "decimal" attributes. Number supports precision, symbol and template (e.g. "%v %s" - %v for value, %s for symbol)
  • local storage/app/.gitignore should be updated to ignore all and look like this
    *
    !.gitignore
    
    You may also remove .gitignore files from individual enso created, app sub-folders (except public)
  • check the local config/enso/tables.php file and if the export.path key is present, update it to export.folder
  • local state:
    • remove the local state binding from App\Providers\AppServiceProvider: CoreLocalState::class => LocalState::class,
    • remove the App\Services\LocalState class after moving any logic to one or more state builder services
    • from client/src/js/enso.js, remove the import: import './localState';
    • remove the file client/src/js/localState.js
    • if you moved logic from the old LocalState class, update the file client/src/js/store/local.js as required, otherwise you may delete it. Note that the client/src/js/store folder MUST be present.
  • compare config/enso/config.php with vendor/laravel-enso/core/config/config.php and remove any extra, deprecated keys
  • still in config/enso/config.php update the Enso version to 4.8.0
  • compare config/enso/addresses.php with vendor/laravel-enso/addresses/config/addresses.php and remove any extra, deprecated keys
  • update the password config/enso/auth.php key as follows:
    'password' => [
            'lifetime' => env('PASSWORD_LIFETIME', 0),
            'minLength' => env('PASSWORD_MIN_LENGTH', 6),
            'mixedCase' => (bool) env('PASSWORD_MIXED_CASE', 0),
            'numeric' => (bool) env('PASSWORD_NUMERIC', 0),
            'special' => (bool) env('PASSWORD_SPECIAL', 0),
    ],
    
  • from Database\Seeders\DatabaseSeeder, from the run() method's unit tests running branch, you may delete the following seeders, as the respective factories have been updated to no longer require this:
                CountrySeeder::class,
                RegionSeeder::class,
                TownshipSeeder::class,
                LocalitySeeder::class,
    
  • update/rename the following .env variables:
    • PASSWORD_LENGTH -> PASSWORD_MIN_LENGTH
    • PASSWORD_NUMERIC_CHARACTERS -> PASSWORD_NUMERIC
    • PASSWORD_SPECIAL_CHARACTERS -> PASSWORD_SPECIAL
    • PASSWORD_UPPER_CASE_CHARACTERS -> PASSWORD_MIXED_CASE
  • replace LaravelEnso\Core\Exceptions\Sentry usage and import with LaravelEnso\Sentry\Exceptions\Handler in App\Exceptions\Handler.php
  • remove bulma-rtl patch from client\patches, as is no longer needed
  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches
  • php artisan migrate
  • php artisan enso:upgrade
  • as per every release, delete any local, deprecated upgrades
  • it recommended to also run the all the enso tests to make everything is working properly; therefore, compare your local phpunit.xml with Enso's and make sure that you're not missing any package tests.

4.7.1

3 years ago

4.7.1

This is a patch release whose main purpose is to update localisation files.

Upgrade steps

  • update the Enso version to 4.7.1 in config/enso/config.php
  • run composer update in the project's root
  • publish the updated localisation assets with php artisan vendor:publish --tag=enso-localisation --force
  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches
  • php artisan enso:upgrade --before-migration
  • php artisan migrate
  • php artisan enso:upgrade
  • as per every release, delete any local, deprecated upgrades

4.7.0

3 years ago

4.7.0

This aims to be the last minor release before upgrading to PHP 8 and includes many improvements, bug fixes and also several new features.

Front-end

Most of the packages received a dependency list cleanup.

activity-log

  • moved the icons file

addresses

  • improved postcode in form

auth

  • refactored components

bulma

  • added orderable trees

calendar

  • added filter in components/CalendarFilter.vue

categories

  • updated dependencies: now uses the orderable trees package

clipboard

  • updated readme

companies

  • small fixes
  • removed unused code
  • improved people association removal

data-import

  • added back cascade of the browseFiles method which makes it easier to use the component standalone, for example in a table
  • fixed rejected import download

documents

  • added file size limit

emag

  • updated commercial form content and components

filters

  • added translatable to vue-filter

financials

  • updated dashboard chart
  • improved client filter

forms

  • hided actions in autosave mode
  • returned promises from fetch & submit; added submitting and submitted events
  • added clearErrorsControl, section-divider class, section visibility and watcher for the form path, so that the form is re-fetched if the path changes
  • fixed style and hidden fields
  • cleaned and updated CoreForm.vue
  • updated FormSection.vue
  • removed meta

inventory

  • updated product components; moved icons to src

io

  • fixed channels, small fixes

notifications

  • fixed channels, method name

orderable-trees (new)

  • facilitates creating and ordering tree structures with drag-and-drop functionality

products

  • fixed images in picture uploader
  • fixes missing dependency

rating (new)

  • simple component which facilitates star rating

scroll-to-top

  • updated mobile margins

switch

  • made label clickable
  • simplified logic

tables

  • fixed boolean classes in table cell and slot

tasks

  • used new websocket getter

toastr

  • extended HTML support for title similar to body, if html flag is set, treat title (if set) as html.

typeahead

  • made search control hidden on mobile
  • passed enso error handler
  • added taggableoption: can create when typing non existing options; emits keydown events to be used in different implementation scenarios; small internal refactor
  • cascaded the core typeahead clear method and made the query & loading values available in the controls slot

ui

  • fixed @enso-ui/auth and channels
  • improved logo display in navbar
  • small refactor

Privates

commercial

  • updated pages and components
  • integrated sale channel package
  • allow issue invoice at all times
  • reorders actions to be more natural
  • added cancellation
  • multiple fixes and enhancements

eav (new)

  • provides entity attribute value functionality for entities which require a scalable number of attributes

emag

  • added response handling for product publish
  • added sale channels and services as dependencies
  • added settings table
  • added option for manual invoice upload
  • various fixes and updates

frisbo (new)

  • provides action components for syncing, stock check and dispaching orders on Frisbo platform

inventory

  • updated overwritable products pages
  • added warehouses store

sale channels (new)

  • basic sale channels CRUD components with store functionality

webshop

  • added approve & reject action in table
  • added sale channels and services as dependencies
  • various fixes and improvements

Back-end

addresses

  • added rememberable on locality and region
  • improved store logic and label
  • added cast for addressable_id
  • allows multiple billing addresses
  • fixed test
  • added postcode to label
  • added scopes and dynamic user relation

avatars

  • updated user_id cast

calendar

  • added phpmd config
  • fixed notification queue
  • updated notification subject

categories

  • fixed logic due to illuminate collection constructor update
  • added rememberable keys in category, global scope & small changes
  • cleanup and fixes
  • improved scope by adding the table
  • updated parentTree to return only parents
  • updated tests to reflect previous changes to the parentTree method
  • added contains nested scope

charts

  • added colorsConfig setter, updates ChartCard and Chart
  • fixed chart options reactivity

cli

  • fixed package generation

comments

  • updated notification subject

companies

  • added rememberable keys in company
  • updated factory and tests

core

  • extracted impersonate policy
  • added version update
  • fixed import, style, password reset when email is wrong, notification queue and email footer
  • updated Version.php, config.phpand social media icons
  • added core version, missing key in guest state and admins & supervisors scopes on user
  • improved reset password notification and enso mail theme
  • replaced social media icons with svgs; improved publishing aliases
  • extended the reset storage command to take optional list of folders (comma separated)
  • removed deprecated googleplus and unused import
  • reworded reset password notification subject

countries

  • added rememberable keys in country for iso.
  • added name to rememberable keys
  • improved region label

data-export

  • fixed notification queue

data-import

  • fixed wrong number with restart
  • added error in console mode and validations in template export
  • updated Chunk.php
  • reseted counters to zero when data-import was restarted in all cases.
  • removed ImportTypes

departments

  • removed useless import

documentation

  • updated documentation for Search Modes

enums

  • added ability to use private constants for custom logic
  • fixed enum localisation and mapping

excel

  • refactored in export service

forms

  • flexible number of columns
  • added visibility
  • fixed wrong property, meta test, input "content" validation
  • added clearErrorsControl structure option

helpers

  • updated Sleep

impersonate

  • added gate
  • updated AuthServiceProvider.php

io

  • made event dispatchable

localisation

  • added & improved translations

notifications

  • fixed route (http verb name)
  • fixed order
  • updated test due to route update

packaging-units

  • added rememberable keys

pdf

  • enabled risky
  • updated margins and added footer font size
  • added download method

people

  • added caching feature to company() helper
  • company() always loads relation

products

  • refactored form for easier customization
  • added internal code management
  • improved internal code logic
  • added length in config for internal code
  • removed unwanted section
  • added attachPicture method and acquisition price helper
  • implemented product slug
  • added wysiwyg form field options
  • migrated towards 4 decimals and updated migration
  • updated company factory use
  • fixed product booted method

rememberable

  • added custom key
  • added tests
  • renamed config key & exception message
  • fixed key for polymorphic relation
  • raised default to 1h
  • various fixes

roles

  • updated default menu

services

  • small visual refactor
  • migrated towards 4 decimals
  • removed unneded financials dependency

tables

  • no longer added default order by clause when the base query already has order by clauses applied
  • improved raw total efficiency
  • fixed typo and enum localisation

tasks

  • fixed email path
  • updated default menu order
  • updated notification subject

upgrade

  • added nullable helper on column
  • added new hasType helper method for the Table utility class

versions

  • improved flow

Privates

api (new)

  • provides boilerplate and base functionality for implementing external apis

commercial

  • made events dispatchable; implemented the new computor; improved client stock import service
  • implemented shipping and billing address
  • added container resolve for all xlsx document generation instances
  • added payment method
  • migrated towards 4 decimals
  • added undo fullfillment
  • refactored invoice & order blades, order email, notifications
  • added enum for file formats and refactored order controllers
  • added cancelled_at and Cancel controller
  • added reservable scope
  • updated policies
  • added addresses option controller
  • multiple fixes and enchancements

discounts

  • added service clientDiscounts relation
  • removed int cast in discounts
  • fixed discount factories

eav (new)

  • provides entity attribute value functionality for entities which require a scalable number of attributes

emag

  • implemented product publish
  • added sale channels and services as dependencies
  • added settings
  • added voucher handling
  • added payment method to sale creation
  • implemented free_shipping_above
  • added emag orders fallback
  • migrated towards 4 decimals
  • added Emag courier accounts, AddAttachment action
  • added and updated enums
  • added invoice upload on sale creation flow
  • refactored and added NewOrder, OrderCancellation and awb notifications
  • multiple fixes and enchancements

fetcher

  • fixed stream closing on upload
  • updated notification subjects

financials

  • added new Computor; dropped ComputesLines, ComputesTotals, LineComputor, TotalsComputor
  • migrated towards 4 decimals
  • added discountWithVat helper
  • rewrited invoice blades
  • added pdf invoice download option
  • multiple fixes and enchancements

frisbo (new)

  • Frisbo api implementation for external order fulfillment. Provides functionality for managing products, dispaching, updating and syncing orders

inventory

  • added rememberable on position
  • improved fulfilment flow
  • added new Order contract
  • added reservable scope as needed
  • added cancel method in Warehouse model and Fulfilment contract
  • various fixes and enchancements

product-eav (new)

  • loose coupling package implementation between products and eav for avoiding unwanted dependencies

sale channels (new)

  • provides basic sale channels structure

stripe (new)

  • Stripe api implementation for processing card payments

webshop

  • added missing factory attribute and facebook fields
  • added ability to store cart in session if content is not private
  • updated stock statuses
  • implemented fast registration and free_shipping_above
  • improved cart logic
  • added google ads support
  • updated payment methods
  • added welcome_text_on_mobile to migration
  • removed external ref in orders table
  • fixed seo
  • improved ratings and reviews
  • added product repository
  • thorough layout, flow and functionality refactor
  • multiple fixes and enchancements

webshop-commercial

  • implemented the new computor, reused dynamics between product and service
  • implemented shipping & billing addresses
  • added side by side form for adding new card
  • implemented free shipping and finalize order on payment creation;
  • updated the response to support wire transfer
  • updated the Line price method to show unitary price with vat
  • refactored notifications
  • added stripe checkout
  • covered edge case when order payment method is set
  • thorough refactor
  • multiple fixes and enchancements

Upgrade steps

  • update the Enso version to 4.7.0 in config/enso/config.php
  • run composer update in the project's root
  • run yarn, yarn upgrade && yarn in /client to ensure you have the latest versions and patches are applied. If necessary, update your patches
  • php artisan enso:upgrade --before-migration
  • php artisan migrate
  • php artisan enso:upgrade
  • as per every release, delete any local, deprecated upgrades

4.6.0

3 years ago

4.6.0

This release includes improvements, bug fixes, and new features.

Front-end

io

  • used new websocket getter

money

  • improved focus & blur handling, fixed input event payload
  • added the ability to have null value

notifications

  • used new websocket getter

select

  • added debounce for addTag

tables

  • added support for numbers
  • added formatted filtered / count
  • moved pagination logic to the BE
  • added support for selection controls
  • fixed pagination when full records info is false

tasks

  • added permissions to register
  • used new websocket getter

ui

  • announce a new release on every chunk load failed error
  • added permissions to register ref enso-ui/tasks#6
  • fixed auth routes for guests
  • removed predefined websocket channels

users

  • fixed avatar display when no tooltip is needed

Back-end

addresses

  • added new addresses.created_by column; added upgrade
  • added PHPMD config
  • added factories for Township, Locality and Region

avatars

  • removed HasAvatar trait in favor of dynamic method & observer

cli

  • fixed routes stub
  • fixed UI route component imports
  • added common default for the route for the menu config

companies

  • added policy for edit page

core

  • removed HasAvatar trait
  • removed the laravel-enso/teams dependency as the package can be added if required
  • binding Faker\Generator in production to Dummy laravel-enso/data-export#10
  • added user profile policy
  • fixed import in login controller
  • added namespace to tests

data-export

  • fixed notification path
  • added sync excel attaching ability
  • updated permission description in structure

data-import

  • updated ExcelSeeder
  • fixes serializing with postgres

documentation

  • updated table docs: references to money vs number
  • other table documentation small updates

files

  • fixed file path upgrade for projects that don't use data-import

filters

  • resolves comparison operators enum from App's container for improved flexibility; ref laravel-enso/filters#4

helpers

  • added dummy

localisation

  • updated out of stock ro translation

products

  • updated test namespace
  • updated url for pictures (route name remains the same)

roles

  • rolls back ordering removal for the sync command

tables

  • improved support for numbers; moved pagination on BE
  • fixed test
  • added 'selection' ability for global controls
  • selection works only on selectable tables, and will send to the BE a selection payload with the selected rows
  • buttons that work with selection will be rendered only when a selection is made
  • fixed incorrect pages count, fixed incorrect middle pages

tasks

  • added taskable contract & factory

private packages

webshop

  • added about-us page
  • added controller import
  • added limited stock limit upgrade
  • added favorites database persistent ref laravel-enso/webshop#33
  • removed restricted/selective mfr load

emag

  • fixed file save
  • added authentication in job
  • added fetch orders job
  • added FetchOrders command to the service provider

Upgrade steps

To upgrade:

  • app/Http/Controllers/Auth was removed from enso - if not customized locally, you may remove it as well
  • websocket getter changed, and there is a channel getter instead of specific channels getter now; if you are using websocket locally, you need to change the getter(like this)
  • the teams package is no longer included with enso by default. If you require it, add it back:
    • add "laravel-enso/teams": "^3.0", to composer.json
    • add "enso-ui/teams": "^2.0", to client/package.json
  • remove Broadcast::routes(); from app/Providers/BroadcastServiceProvider.php (like this)
  • update the Enso version to 4.6.0 in config/enso/config.php
  • run composer update in the project's root
  • run yarn, yarn upgrade && yarn to ensure you have the latest versions and patches are applied. If necessary, update your patches
  • php artisan enso:upgrade --before-migration
  • php artisan migrate
  • php artisan enso:upgrade
  • as per every release, delete any local, deprecated upgrades