== Version 2.8 Work in progress (not released -- this is a draft) == Users side : ------------ # A detail-view for RelationType has been created; an interesting feature is the display of all entities linked by the concerned type, mixing all entity types. # The management of recent entities has been rework. They are now stored in their own table (their were stored in the user's session) & so their are shared between the different sessions of a user. The setting value 'MAX_LAST_ITEMS' has been removed; use the new values 'LAST_ENTITIES_SIZE' & 'LAST_ENTITIES_MENU_SIZE' instead. A block "Recent entities" is now available for Home; it displays more entities than the menu entry. # A user can now pin its favorite entities (up to 9 in the default configuration, see 'settings.PINNED_ENTITIES_SIZE'). Pinned entities are displayed in the new menu entry "Quick access" which displayed the recent entities too. A block "Pinned entities" is now available for Home. # Apps : * Creme_config : - The regular Users can now have several roles. Only one role is active (to compute the current permissions), but they can switch their current role to another one. - The Users store now the date of their deactivation. - The Roles get a new permission: listable models (i.e. it allows you to access the list-views of a model). The existing roles are migrated to keep the old behaviour: they get list permissions for all models belonging to allowed apps. - The Roles can now have special permissions. Two special permissions have been introduced : "User management" & "Role configuration". - The Roles can now be disabled. - In the fields' configuration, fields can now be set as required but only at creation. - The CustomFields can now get: - a description, which is used as help text in forms. - a default value, which is used as initial value in creation forms. * Documents : - You can now download several Documents at once, as a .zip archive. * Billing : - Invoices, Quotes & Sales Order got a "card" hat-block, which is used by default by new installations. - You can now export several Invoices or Quotes at once, as a .zip archive. - In list-views, the columns for "Total with VAT" & "Total without VAT" display the Sum & Average values for these fields (on all entities related to the list). * Opportunities : - In list-views, the columns for "Estimated sales" & "Made sales" display the Sum & Average values for these fields (on all entities related to the list). Developers side : ----------------- - The version of 'QUnit' is now '2.24.1'. If you have implemented some javascript unit tests, you should probably read the upgrade guide to QUnit 2.x : - https://qunitjs.com/upgrade-guide-2.x/ Non breaking changes : ---------------------- # Deprecations : - The context processor "creme_core.context_processors.get_entities_deletion_allowed" is now deprecated (it injected "ENTITIES_DELETION_ALLOWED" in contexts) ; it has been removed from the default settings. - In 'creme_core.bricks', these classes have been moved : - 'JobResultsBrick', 'JobErrorsBrick' & 'EntityJobErrorsBrick' to 'creme_core.gui.job'. - 'MassImportJobErrorsBrick' to 'creme_core.creme_jobs.mass_import'. - 'TrashCleanerJobErrorsBrick' to 'creme_core.creme_jobs.trash_cleaner'. - The method 'creme_core.core.meta.Order.reverse()' is deprecated; use the method 'reversed()' instead. - In 'creme_core.models' : - The method 'header_filter.HeaderFilterManager.create_if_needed() is deprecated; use the method 'proxy()' instead. - The method 'search.SearchConfigItemManager.create_if_needed()' is deprecated; use the method 'builder()' instead. # The declarative possibilities of 'creme_core.management.commands.creme_populate.BasePopulator' have been extended; new class attributes are : - BUTTONS - HEADER_FILTERS - RELATION_TYPES - SEARCH Note: you should probably use 'RelationType.objects.builder()' instead of 'RelationType.objects.smart_update_or_create()' when it's possible, because the last method will be removed in a futur version. # The models which can be used by EntityFilters (i.e. CremeEntity gets a ForeignKey/ManyToManyField to the model) should have a method 'portable_key()', & their default manager should have a method 'get_by_portable_key()'. See the doc-string of 'CremeEntity.portable_key()' for more details. # In 'creme_core.gui' : - New 'menu.TemplateEntry' that allows usage of Django template for rendering. - New 'menu.ActionEntry' helper entry to build custom action links. # In 'creme_core.models' : - The models 'CremePropertyType' & 'RelationType' get a JSON field "extra_data" which can be used by third party code. - The models 'EntityFilter', 'HeaderFilter' & 'UserRole' got fields "created" & "modified". - The models 'CremeProperty' got a field "created". - The models 'CremeUser' got a field "modified". # In Javascript : - 'creme.ajax.jqueryAjaxSend' now support the option `{redirect: 'follow'}` : Enables page redirection to the XMLHttpRequest 'responseURL' (if different from the current url). - Add 'creme.menu.MenuActionBuilders' action registry for menu; Use 'setup-menu-actions' to register custom actions. # App : * Persons : - The model 'Address' got new fields: 'created', 'modified'. * Activities : - The model 'Calendar' got new fields: 'uuid', 'created', 'modified'. - The JavaScript component 'creme.ActivityCalendar' has been improved : - The property 'rendererDelay' (number) has been added; Improve performances by limiting the calls to the rendering methods. (see https://fullcalendar.io/docs/rerenderDelay) * Assistants : - Some fields 'creation_date' & 'modification_date' have been added in models. * Assistants : - The model 'EmailSending' got new fields: 'created', 'modified'. Breaking changes : ------------------ # Deprecated stuffs which have been removed : - The settings 'ENUMERABLE_REGISTRATION_ERROR' has been removed. - In 'creme_core.constants', 'DEFAULT_CURRENCY_PK' & 'DISPLAY_CURRENCY_LOCAL_SYMBOL' have been removed. - In 'creme_core.core' : - The method 'entity_cell.EntityCellCustomField.build()' does not accept integer "value" anymore. - These aliases have been removed : 'EntityCellsRegistry', '_EntityFilterRegistry', '_EntityFilterSuperRegistry', '_EnumerableRegistry', '_FunctionFieldRegistry', '_ImprintManager', '_SandboxTypeRegistry', '_SettingKeyRegistry', 'ReplacersRegistry' - In 'creme_core.gui', these aliases have been removed : '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()' has been removed. - These methods of 'CremeEntity' (& sub-classes) have been removed : - 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 removed. - The function 'creme_core.utils.translation.get_model_verbose_name()' has been removed. - In 'creme_core.templatetags' : - In the module "creme_core_tags", the argument "callback_url" of '{% inner_edition_uri %}' has been removed. - In the module "creme_ctype" : - These tags have been removed : - {% ctype_for_model %} - {% ctype_for_swappable %} - {% ctype_counted_instances_label %} - The filter "|ctype_can_be_mass_imported" has been removed. - The filter "|ctype_verbose_name" must take a "count" argument. - The method 'creme_core.tests.base._CremeTestCase.assertRelationCount' has been removed. - In Javascript : - The method 'Array.copy()' has been removed. - In 'creme.ajax' : - The class 'URL' has been removed. - These functions have been removed : 'parseUrl()', 'param()' & 'decodeSearchData()'. - In 'creme.utils' : - The function 'confirmSubmit()' has been removed. - The option "waitingOverlay" of 'ajaxQuery()' has been removed. - The functions 'showPageLoadOverlay()', 'hidePageLoadOverlay()' & 'loading()' have been removed. - In 'JSON', these methods have been removed : 'encode()', 'decode()', 'isJSON()', 'clean()', 'readScriptText()'. - App : * Persons : - The module 'workflow' has been removed. * Assistants : - The constant 'MIN_HOUR_4_TODO_REMINDER' has been removed. * Activities : - These constants have been removed: 'NARROW', 'FLOATING_TIME', 'FLOATING', 'SETTING_*'. - The forms 'CalendarForm' & 'CalendarConfigForm' have been removed. * Billing : - In 'models.Base' (& child classes), these methods have been removed : 'build()' '_build_object()', '_build_relations()', '_build_properties()'. - The module 'registry' has been removed. - The class 'views.base.BaseCreation' has been removed. * Commercial : - The constant 'DISPLAY_ONLY_ORGA_COM_APPROACH_ON_ORGA_DETAILVIEW' has been removed. * Geolocation : - The SettingKey names 'NEIGHBOURHOOD_DISTANCE' & 'GOOGLE_API_KEY' have been removed. * Mobile : - In 'setting_keys', the alias 'LOCATION_MAP_URL' has been removed. * Projects : - The method 'models.AbstractProjectTask.clone_scope()' has been removed. * Crudity : - The constant 'SETTING_CRUDITY_SANDBOX_BY_USER' has been removed. # In 'creme_core.models' : - In the abstract base Model 'base.MinionModel', 2 auto datetime fields have been added: "created" & "modified". If some of your models inherit this model, you'll have to create a schema migration which adds these fields (you should also fill the fields of the existing instances with an "epoch" value, see the file "creme/activities/migrations/0034_v2_8__minions_created_n_modified01.py" as example). - The model 'UserRole' is now ordered by 'name' (it could break some unit tests). - The method 'CremeUser.clean()' now raises more errors ("A regular user must have a role."). - In the model 'FieldsConfig' : - The methods 'is_field_required()' & 'is_fieldname_required()' get a new mandatory arguent: "creation". - The method 'update_form_fields()' uses the attribute 'form.instance'; it should not break anything because using it on a non-model form would be strange. # In many apps, the attributes 'SEARCH' of Populator classes have changed (because they implemented their own API before the new generic one). # In 'creme_core.bricks' : - In the class 'StatisticsBrick', the attribute 'statistics_registry' has been renamed "statistic_registry". - The class 'JobBrick' has been removed (see 'creme_core.views.job.JobInfoBrick' instead). # In 'creme_core.core' : - In the class 'entity_cell.EntityCellActions' the constructor argument 'actions_registry' has been renamed "action_registry". - In the class 'paginator.FlowPaginator' : - The 'key' cannot be set anymore; so the constructor argument & the setter have been removed. - The attribute 'queryset' cannot be changed anymore. # In 'creme_core.forms.fields' : - The attribute 'EntityCredsJSONField.quickforms_registry' has been renamed "quickform_registry". - In the classes 'EnhancedMultipleChoiceField' & 'EnhancedModelMultipleChoiceField', the attribute 'initial' is not a set anymore (the value you assign is not changed). # In 'creme_core.gui' : - The method 'button_menu.Button.ok_4_display()' has been replaced by the method 'is_displayed()'. - The method 'bricks.Brick._render()' uses now the "template_name" found in the passed argument 'template_context', and not the attribute "template_name" directly anymore. The attribute is now injected in this context by '_build_template_context()', & so you don't have to change your code, excepted if you override 'self.template_name' after building the context. - The module 'last_viewed' has been removed. # The class 'creme_core.menu.RecentEntitiesEntry' has been replaced by 'QuickAccessEntry'. # In 'creme_core.views' : - The method 'creme_core.views.generic.base.BricksMixin.get_bricks()' now returns a dictionary instead of a list (to group Bricks per zone). All inheriting views have been modified, & their related templates too (typically "{% brick_declare bricks %}" became "{% brick_declare bricks.main %}"). Notice that reloading views still use a list (because zones have no meaning in reloading context). - In the class 'generic.listview.EntitiesList': - the attribute 'actions_registry' has been renamed "action_registry". - the method 'get_actions_registry()' has been renamed "get_action_registry". - In the class 'quick_forms.QuickCreation', the attribute 'quickforms_registry' has been renamed "quickform_registry". # In 'creme_core/templates' : - In "creme_core/base.html", the CSS class "main_content" of the main
has been removed (use "main-content" instead). - There is no "back" button in the template "creme_core/detailview.html" anymore. - Beware if you have overridden 'creme_core/bricks/frags/hat-card-title-indicators.html' because the new "Pinned" indicator has been added in it. # Apps : * Reports : - The entity model 'ReportGraph' has been replaced by the new simple model 'ReportChart' (because it was not very relevant to use an CremeEntity & because the name was confusing). NB: The new model have globally the same fields, but "chart" is now called "plot_name". - The settings 'REPORTS_GRAPH_MODEL' have been removed. - The whole app have been reworked to use the new name (core, views, bricks, templates, cloners...). - The module 'graph_fetcher_registry.py' has been removed (see 'core.chart.fetcher.ChartFetcherRegistry' instead). - The module 'report_chart_registry.py' has been removed (see the new module 'core.chart.plot' instead). - The templatetags have been removed (they were useless). * Documents : - The methods 'populate.Populator._populate_header_filters_for_*()' have been removed. * Persons : - In the class 'populate.Populator' : - The content of the class attribute 'BUTTONS' has changed (it now contains 'ButtonMenuItemProxy' instances). - The methods '_populate_header_filters_for_*()' have been removed. * Activities : - The content of the class attribute 'populate.Populator.BUTTONS' has changed (it now contains 'ButtonMenuItem' instances). - In the following Brick classes, "is_home" is not injected in the template's context anymore: FutureActivitiesBrick, PastActivitiesBrick, MyActivitiesCalendarBrick * Billing : - The class 'actions.ExportAction' has been renamed '_ExportAction'. - These methods of 'populate.Populator' have been removed : - _populate_buttons_config_for_*() - _create_header_filter_for_line() - _populate_header_filters_for_*() - The module 'views.convert' has been renamed "conversion". * Commercial : - The methods 'populate.Populator._populate_header_filters_for_*()' have been removed. * Emails : - These Brick classes are not registered anymore (so they can only be reloaded by their specific view): SendingBrick, SendingHTMLBodyBrick, MailsBrick. - The class attribute 'views.sending.SendingBricksReloading.allowed_bricks' has been replaced by the new attribute 'bricks'. * CTI : - The class bricks.CallersBrick is not registered anymore (so it can only be reloaded by its specific view). * SMS : - The class 'bricks.MessagingListsBlock' has been renamed 'MessagingListsBrick'. Internal breaking changes : --------------------------- (they should not cause problem if you have not deeply modified the source code of Creme) # In the class 'creme_core.gui.button_menu.ButtonRegistry', the methods 'get_buttons()' & 'mandatory_buttons()' get keywords arguments only now, an get a new mandatory argument "request". # The method 'creme_core.bricks.ButtonsBrick._get_buttons()' get a new mandatory argument "request". # Apps : * Creme_config : - In 'forms.custom_field', these classes have been removed: CustomFieldBaseForm, FirstCustomFieldCreationForm, CustomFieldCreationForm. - In 'views.custom_field' these view-classes have been removed: FirstCTypeCustomFieldCreation, CustomFieldCreation. == 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