== Version 2.7.8 == Developers side : ----------------- Non breaking changes : ---------------------- # An issue with global search for extended apps has been fixed (extended apps were ignored). == Version 2.7.7 == Users side : ------------ # An issue with custom-brick reloading: the brick was not reloaded when a related instance is edited (e.g. if you get an Address field in a custom-brick & edit the Address). # Fix drag-n-drop reordering in paginated table bricks : the indices of were form 0 to pagesize, ignoring the current page start index... and the items always move to the first page. # Apps : * Billing : - In the view to create a true Product/Service from a line, the form-field "category" was not required; selecting nothing caused a crash. - Fix drag-n-drop reordering in billing : moving a line at the first position didn't work every time. * Activities : - Fix a CSS issue when displaying long titles in month calendar. - Limit the size of the "more" calendar popup in month view to prevent hidding days cells. Developers side : ------------ # An exception in 'CreatorEnumerableChoiceField' has been fixed (when the ForeignKey model is declared as a string). The code 'fk.related_field.model' should return a 'Model' but in some cases it is not resolved and return a string. == Version 2.7.6 == Users side : ------------ # UserRoles should be ordered by name everywhere. # Several issues in the Job scheduler had been fixed: - Disabling then re-activating a Job was not possible; you were obliged to restart the scheduler. - Modifying a Job's configuration during it's execution did not work correctly (new configuration could be lost). # Apps : * Billing : - The VAT number of the target organisation has been added in exported PDFs ('FR' templates). Developers side : ----------------- Non breaking changes : ---------------------- # The history rendering has been improved code to manage ContentTypes badly removed. # The base class view 'creme_core.views.generic.delete.CremeModelDeletion' now manages exception with type 'creme_core.core.exceptions.SpecificProtectedError'. It will display a better error message if the method 'delete()' of a model raises one. # In 'creme_core.forms' : - An issue in 'workflows.RelationAddingTriggerField' when has been fixed. It did not happen in vanilla code. - A crash in 'creme_core.forms.fields.JSONField._clean_entity()' has been fixed. It happened with '0' as ContentType's ID. It did not happen in vanilla code. == Version 2.7.5 == Users side : ------------ # The style for notification panel with lots of notifications has been improved. # Apps : * Recurrents : - A crash when you tried to add a filter has been fixed. - The Quick-search on the field 'ct' ("Type of the recurrent resource") has been fixed. Developers side : ----------------- Non breaking changes : ---------------------- # The job which sends notification emails has been improved to remove line breaks in subject. Line breaks were avoiding the mails to be sent. == Version 2.7.4 == Users side : ------------ # Apps : * Creme_config : - In configuration for CustomForms, the removing of a fields was broken when there is a special group (like "Addresses"). - In configuration for CustomFields, the models were not ordered by name as usual. * Reports : - A user needs the permission to export a model in order to export a Report now. Developers side : ----------------- Non breaking changes : ---------------------- # An issue with 'creme_core.forms.enumerable.EnumerableSelectMultiple' has been fixed; in the context, the selected value was handled as a string instead of a list. == Version 2.7.3 == UPGRADE NOTES : - Do not forget to tun the command "generatemedia". Users side : ------------ # Some styling issue in list-view with hidden cells in last position (like 'billing' ones) have been fixed. Developers side : ----------------- Non breaking changes : ---------------------- # Some methods have been added to the class 'creme_core.gui.listview.smart_columns.SmartColumnsRegistry' to unregister things. # The context manager 'creme_core.tests.base.OverrideSettingValueContext' did not work when the SettingValue does not exist in DB. # Apps : * Creme_config : - The CSS for 'brick.GenericModelBrick' has been improved when the related model has many fields. == Version 2.7.2 == Users side : ------------ # You can now see the detail-view of a public EntityFilter which belongs to another user. It fixes some issues for Reports with filters too. # Apps : * Emails : - When an EntityEmail is created from the related emails' Brick ("Emails history") on the detail-view of an entity, if this entity is not used as recipient it's now linked to the email with a relationship "related to the email" (& so the email appears in the Brick). Developers side : ----------------- Non breaking changes : ---------------------- # The rendering of HistoryLine is now more robust with 'ContentTypes' which have been removed. # Apps : * Reports : - The class-view 'views.graph.GraphFetchSettingsForInstance' is now deprecated. Its uses have been removed. == Version 2.7.1 == Users side : ------------ # In merge view, the left & right value could not be applied with the image selector. # The display of time delta in notification panel has been fixed. Developers side : ----------------- Non breaking changes : ---------------------- # TinyMCE did not work in popups: the textarea was not synced on submit. # Apps : * Mobile : - The script 'populate' is easier to modify. == Version 2.7 == UPGRADE NOTES : - If you upgrade your MariaDB server to 10.7+, you have to convert all the UUID fields (which were just CharFields before MariaDB 10.7) to real UUID fields See "creme/creme_core/migrations/migrate_uuid.sql" ; copy it & remove the lines related to app which are not installed) before importing it. Users side : ------------ # The minimal version of Python is now '3.10'. # The version of Django has been upgraded to '5.2' ; for users it means that : - Python '3.13' is officially supported. - The minimal version of SQLite is now '3.31'. - The minimal version of MySQL is now '8.0.11'. - The minimal version of PostgreSQL is now '14'. - The minimal version of MariaDB is now '10.5' ; the UUID fields may have to be manually converted if you use MariaDB 10.7+ (see the upgrade notes above). - The URL fields assume "https" by default ; set the setting 'FORMS_URLFIELD_ASSUME_HTTPS' if you prefer "http" (this setting will be removed with Django 6.0 -- & so Creme 2.9 or something like that). # A warning is now displayed if the settings 'SITE_DOMAIN' is not correctly defined. # A new mandatory app has been added: "Custom entities". It allows users to create their own types of entity without coding. - You can create up to 20 types. - The new types have just one regular field ("name"), you can add custom-field as usual. - BEWARE: if you upgrade from a previous version of Creme, 'creme.custom_entities' must be in your 'settings.INSTALLED_APPS' (it should be OK it you did not modify it or have modified as advised). # A Workflow engine has been added; it allows to configure from the UI some automatic actions. - Current events which can trigger a Workflow : entity creation, entity edition, relationship adding, property adding. - Current available actions : - Add a property - Add a relationship - Send an email (needs the app 'emails'). Note: a new middleware has been added in the default settings 'MIDDLEWARE' : "WorkflowMiddleware". You should add it in you have your own definition of this variable. # The deletion & cloning buttons have been reworked in detailed views & list-views; they are now disabled when a rule avoids you to delete them (e.g. a Contact corresponding to a user) & the reason is displayed as tool-tip. # The deletion views have been improved : - The dependencies issues have now a better display. Example: entities are displayed as HTML links. - A Property type cannot be deleted if it is used by : - A property (i.e. one entity is tagged at least). - A RelationType (as a constraint). - A condition of EntityFilter. - A trigger of Workflow. - A Relationship type cannot be deleted if it is used by : - A Relationship (i.e. 2 entities are linked at least). - A condition of Filter. - A CustomField cannot be deleted if it is used by : - A condition of EntityFilter. - A condition of Workflow. # The HeaderFilters (views of list) & EntityFilters have been improved : - The ones without owner can now only be edited/deleted by superusers in the default configuration ; a SettingValue has been added to allow all users to edit/delete them (it was the behaviour in previous versions). - They can now be cloned. - EntityFilters are now grouped by owner in list-views, like HeaderFilters. # The Currencies have now a "Is default?" field to chose the Currency which is pre-selected in forms (Invoices, Quotes, Opportunities...). # In the notification box, the elapsed time from message creation is now updated each minute. # Apps : * Creme_config : - The buttons configuration can now be customised per role. - The property types have now a field "description" (it can be empty of course). - In the bricks configuration, the default configuration is used as initial value when it's relevant (instead of starting with an empty configuration). - In the relation types configuration, you can now edit the "minimal display" value for standard types. - A view which displays all "FileRefs" (temporary files) has been added; it's only available for staff users. - A VAT cannot be edited if it's already referenced by an instance (classically a billing Line). The VAT value is also unique now (but this is not retroactive yet). * Persons : - A new optional field has been added to 'Organisation': "code". You can use it to distinguish you managed organisations when you get several ones. Upgrade note: if you upgrade from an instance of Creme 2.6, you have to configure your blocks to display this field if you want to see it. As the field is optional, you can also hide it to remove it everywhere (notably forms). - A new optional field has been added to 'Organisation': "eori". This field stores the Economic Operators Registration and Identification number required for custom clearance regarding import and export in/out of the EU. - The Contact field "Skype" is now named "Videoconference". * Documents : - A new field, automatically filled, has been added to Document: "file_size". * Activities : - The calendar has been improved : - The JavaScript component 'FullCalendar' has been upgraded to the version "6.1.18". - The CSS of the sidebar has been improved; and it's now sticky. - In the calendar configuration, the visible hours range is added. It can be different from "business hours" which are setting constraints to Activities. - New bricks are now available : - A "card" brick for the hat of the Activities' detail-view. It's used by default by the new installations. - A brick "My Calendar" for the home page. - A field of 'Activity', "Fixed or floating?" (internal name: 'floating_type') is now visible. * Billing : - The number generation has been heavily reworked. The old number generation system took a prefix in settings, then generated numbers like "PREFIX15". The new system can be visually configured & is more powerful : - The configuration takes now a format string. There is a mandatory variable "{counter}", but other variables are also available: "{year}", "{month}" & "{code}" (which corresponds to the new field 'Organisation.code'). - The counter can be reset annually/monthly. - The counter can be manually edited (it's useful after a mass-import to keep a consistent numbering). - The manual edition of the number can be forbidden. Notice that if you upgrade from Creme2.6, your existing configuration is migrated & you should not see difference for Invoices/Quotes/Sales Orders. The numbers for Credit Notes are not automatically generated at their creation anymore. These variables in settings.py have been removed : - QUOTE_NUMBER_PREFIX - INVOICE_NUMBER_PREFIX - SALESORDER_NUMBER_PREFIX - Since always, these actions are automatically performed : - The target of a Quote becomes a prospect of the emitter. - The target of an Invoice becomes a supplier of the emitter. These behaviours are now implemented as Workflows (so you could disable them for example). - It's now forbidden by default to edit the source Organisation of a Invoice/CreditNote when a number is set. This behaviour can be changed in the configuration portal of 'billing'. - The 'Convert to ...' buttons have been reworked : - When a button is disabled, the reason is now displayed as tool-tip. - The constraints for properties & relationships are better respected. - In the list-views for Product/Service lines, lines related to deleted Invoice/Quote/... are now excluded. - The LaTex backend (for PDF export) replaced 'PDFLaTeX' with 'latexmk' and 'LuaTeX' as LaTex compiler. This change requires the additional system package 'latexmk' to be installed; see README for a better packages list if you use this backend. * Opportunities : - You can now create unsuccessful phone calls from an Opportunity's detail-view : - A button has been added (not enabled in default installations). - In the block "Linked Contacts", you can activate an new action in the configuration (idem). - Since always, the target of an Opportunity automatically becomes a prospect of the emitter. This behaviour is now implemented as Workflows. - A new behaviour has been added with a Workflow: the target of a won Opportunity becomes a customer of the emitter. - The field 'Opportunity.chance_to_win' checks now that the value is between 0 & 100. * Assistants : - The app permissions are now used by the blocks & function-fields; users which cannot access this app cannot view their content anymore (so you may have to update some roles if you have upgraded from Creme 2.6). - You cannot create Alert with a dynamic trigger date related to the field "Last modification" ('modified' in the code) anymore. The existing Alerts (& which use this field) are migrated to static trigger dates. * Crudity : - BEWARE: the date format corresponds now to your server's language (i.e. 'settings.LANGUAGE_CODE'). Developers side : ----------------- - The version of 'Django' is now "5.2". You should probably read the following releases notes for Django versions : - https://docs.djangoproject.com/en/5.2/releases/5.0/ Some important items : - The "logout" view uses now POST only. - The 'settings.py' value 'USE_L10N' has been removed. - The management of choices (models & forms fields) have been reworked ; it caused an issue during our upgrade with a strange couple form-field/form-widget which uses 3-tuples (see 'creme.emails.forms.sending.SendingConfigField' if you have an identical issue). The class 'django.forms.fields.CallableChoiceIterator' has been removed ; use 'django.utils.choices.CallableChoiceIterator' instead. - https://docs.djangoproject.com/en/5.2/releases/5.1/ - https://docs.djangoproject.com/en/5.2/releases/5.2/ - The version of 'underscorejs' is now '1.13.7'. - The version of 'fullcalendar' is now '6.1.18'. Non breaking changes : ---------------------- # Deprecations : - The settings 'ENUMERABLE_REGISTRATION_ERROR' is deprecated; it will be removed in Creme 2.8 & an exception will always be raised. - In 'creme_core.constants' : - The constant 'DEFAULT_CURRENCY_PK' is deprecated; use 'Currency.objects.default().id' instead. - The constant 'DISPLAY_CURRENCY_LOCAL_SYMBOL' is deprecated; use 'creme_core.setting_keys.currency_symbol_key.id' instead. - In 'creme_core.core' : - The method 'entity_cell.EntityCellCustomField.build()' with an integer "value" is deprecated; pass a string (ID ou UUID) instead. - These aliases are deprecated : 'EntityCellsRegistry', '_EntityFilterRegistry', '_EntityFilterSuperRegistry', '_EnumerableRegistry', '_FunctionFieldRegistry', '_ImprintManager', '_SandboxTypeRegistry', '_SettingKeyRegistry', 'ReplacersRegistry' - In 'creme_core.gui', these aliases are deprecated : 'ActionsRegistry', 'ActionsChain', 'actions_registry', '_BrickRegistry', 'BricksManager', '_BulkUpdateRegistry', 'ButtonsRegistry', '_FieldPrintersRegistry', 'field_printers_registry', 'QuickFormsRegistry', 'quickforms_registry', '_StatisticsRegistry', 'statistics_registry'. - In 'creme_core.models' : - The method 'CremePropertyTypeManager.smart_update_or_create()' is deprecated; use the classical methods 'create()' or 'update_or_create()' instead. Notice: if you still want to set the field "subject_ctypes" from models like before, you can use the new method 'CremePropertyType.set_subject_ctypes()'. - These methods of 'CremeEntity' are now deprecated (use the new module 'creme_core.core.cloning' instead) : - clone() - _clone_object() - _clone_custom_values() - _clone_m2m() - _copy_properties() - _copy_relations() - _pre_save_clone() - _post_clone() - _post_save_clone() - In 'creme_core.setting_keys', 'block_opening_key' & 'block_showempty_key' have been renamed (old names are deprecated). - The function 'creme_core.utils.translation.get_model_verbose_name()' is deprecated; use 'smart_model_verbose_name()' instead. - In 'creme_core.templatetags' : - In the module "creme_core_tags", the argument "callback_url" of '{% inner_edition_uri %}' is deprecated. - In the module "creme_ctype" : - The tag "{% ctype_for_model %}" is deprecated; use the filter "|ctype_for_instance" instead. - The tag "{% ctype_for_swappable %}" is deprecated; use the filter "|ctype_for_swappable" instead. - The tag "{% ctype_counted_instances_label %}" is deprecated; use the filter "|ctype_counted_label" instead. - Using the filter "|ctype_verbose_name without" without "count" argument is deprecated. - The filter "|ctype_can_be_mass_imported" is deprecated. - The method 'creme_core.tests.base._CremeTestCase.assertRelationCount' is deprecated; use the new methods 'assertHaveRelation()' & 'assertHaveNoRelation()' instead. - In Javascript : - The method 'Array.copy(iterable, start, end)' is deprecated; use native code 'Array.from(iterable).slice(start, end)' instead. - In 'creme.ajax' : - The class 'URL' is deprecated; use 'RelativeURL' instead. - The function 'parseUrl()' is deprecated; use '_.urlAsDict()' instead. - The function 'param()' is deprecated; use '_.encodeURLSearch()' instead. - The function 'decodeSearchData()' is deprecated; use '_.decodeURLSearchData()' instead. - In 'creme.utils' : - The function 'confirmSubmit()' is deprecated; use the new actions "creme_core-hatmenubar-update-redirect" or "delete" instead. - The functions 'showPageLoadOverlay()', 'hidePageLoadOverlay()' & 'loading()' are deprecated; use 'creme.dialog.Overlay' instead. The option "waitingOverlay" of 'creme.utils.ajaxQuery()' is deprecated. - In 'JSON' : - The method 'encode()' is deprecated; use 'JSON.stringify()' instead. - The method 'decode()' is deprecated; use 'JSON.parse()' or '_.cleanJSON()' instead. - The method 'isJSON()' is deprecated; use '_.isJSON()' instead. - The function 'clean()' is deprecated; use '_.cleanJSON()' instead. - The function 'readScriptText()' is deprecated; use '_.readJSONScriptText()' instead. - App : * Persons : - The method 'models.base.PersonWithAddressesMixin._post_save_clone()' is deprecated. - The module 'workflow' is deprecated. * Assistants : - The constant 'MIN_HOUR_4_TODO_REMINDER' is deprecated; use 'setting_keys.todo_reminder_key.id' instead. * Activities : - The constants 'NARROW', 'FLOATING_TIME' & 'FLOATING' are now deprecated; use 'Activity.FloatingType.*' instead. - The constants 'SETTING_*' are now deprecated; use 'activities.setting_keys' instead. - The forms 'CalendarForm' & 'CalendarConfigForm' are now deprecated. * Billing : - In 'models.Base' (& child classes), these methods are deprecated : 'build()', '_build_object()', '_build_relations()', '_build_properties()'. - The module 'registry' is deprecated. - The class 'views.base.BaseCreation' is deprecated. * Commercial : - The constant 'DISPLAY_ONLY_ORGA_COM_APPROACH_ON_ORGA_DETAILVIEW' is deprecated; use 'setting_keys.orga_approaches_key.id' instead. * Geolocation : - The SettingKey instances (module 'setting_keys') have been renamed; old names are deprecated. * Mobile : - In 'setting_keys', 'LOCATION_MAP_URL' is deprecated; use 'location_map_url_key' instead. * Projects : - The method 'models.AbstractProjectTask.clone_scope()' is deprecated. * Crudity : - The constant 'SETTING_CRUDITY_SANDBOX_BY_USER' is deprecated; use 'crudity.setting_keys.sandbox_key.id' instead. # A new module 'creme_core.core.snapshot' has been added to get the changes which occurred on a model since its loading; it's already used by the history system & the new workflow engine. # In 'creme_core.forms' : - In the class 'fields.GenericEntityField', the attribute "autocomplete" is now by default. - In the class 'widgets.CTEntitySelector', the attribute "autocomplete" is now by default. # In 'creme_core.models' : - The class 'django.db.models.Model' is contributed to add a method 'get_m2m_values()' which manages cached lists of instances linked by the 'ManyToManyFields'. - The model 'CremeUser' : - gets a new field 'uuid'. - gets a new method 'has_perm_or_die()' which raises exceptions with friendly error messages. - The model 'FileRef' : - gets a new optional field "description"; it's used by the new view which displays all FileRefs (so feel free to fill it in your own code). - the field 'filedata' has now a max_length equal 500 (it was 200 previously). As the previous value was smaller than 'documents.Document.filedata.max_length', it could cause issue when deleting a Document with a long name. # A new method 'creme_core.tests.base._CremeTestCase.clear_global_info()' has been added. # In 'creme_core.utils' : - The 'CremeDiscoverRunner.setup_databases' method has been updated to prevent running the 'creme_populate' command on the default test database when the test suite is launched in parallel mode. This change is done to prevent cache leaking when the test processes are forked. # In Javascript : - The method '_.pop()' has been added to work like Python 'dict.pop()'. - The class 'RelativeURL' has been added as an alternative of 'URL' which does not accept relative paths (e.g. '/list?page=1' is not a valid URL). - In 'creme.dialog' : - In the component 'FormDialog', the forms which submit error responses with HTML can either replace the default overlay content or the frame content. - A new option for 'Frame' has been added: 'fillOnError'. If it's enabled, the HTML error response replaces the content. - A new option for 'Dialog' has been added : 'fillFrameOnError'. If it's enabled, the HTML error response replaces the content. - The component 'creme.dialog.PopoverAction' works now better with HTML content (e.g. it allows usage of links) because it accepts now