Creme-crm

Latest version: v2.6.3

Safety actively analyzes 682404 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 5

2.7

Users side :
------------
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.
Apps :
* Creme_config :
- The buttons configuration can now be customised per role.
- In the bricks configuration, 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.
* 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).
* Activities :
- A field of 'Activity', "Fixed or floating?" (internal name: 'floating_type') is now visible.
- A "card" brick is now available for the hat of the Activities' detail-view.
It's use by default by the new installations.
* Billing :
- The 'Convert to ...' buttons have been reworked :
- When a button is disabled, the reason is displayed as tool-tip.
- The constraints for properties & relationships are better respected.
* 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).
- The field 'Opportunity.chance_to_win' checks now that the value is between 0 & 100.

Developers side :
-----------------

Non breaking changes :
----------------------
Deprecations :
- The method 'creme_core.core.entity_cell.EntityCellCustomField.build()' with integer "value" is deprecated;
pass a string (ID ou UUID) instead.
- 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()
- The method 'creme_core.tests.base._CremeTestCase.assertRelationCount' is deprecated;
use the new methods 'assertHaveRelation()' & 'assertHaveNoRelation()' instead.
- App :
* Persons :
- The method 'models.base.PersonWithAddressesMixin._post_save_clone()' is deprecated.
* Activities :
- The constants 'NARROW', 'FLOATING_TIME' & 'FLOATING' are now deprecated;
use 'Activity.FloatingType.*' instead.
* Billing :
- In 'registry' :
- The class 'LinesRegistry' is deprecated; use 'core.line.LineRegistry' instead.
- The variable 'lines_registry' is deprecated; use 'core.line.line_registry' instead.
- The class 'views.base.BaseCreation' is deprecated.
* Projects :
- The method 'models.AbstractProjectTask.clone_scope()' is deprecated.
The model 'creme_core.models.FileRef' get a new optional field "description";
it's used by the new view which displays all FileRefs (so feel free to fill it).
Apps :
* Persons :
- The model 'Address' gets new semantic fields (like ZipCodeField) which allow to
easily customise things (like the form field, the field printer etc...).
Javascript:
* FormDialog:
- Form submit error responses with HTML can either replace the default overlay content or the frame content.
- New creme.dialog.Frame option 'fillOnError'; if enabled the html error response replaces the content.
- New creme.dialog.Dialog option 'fillFrameOnError'; if enabled the html error response replaces the content.

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- In 'creme_core.gui' :
- In 'field_printers', the function 'image_size()' & the constants MAX_HEIGHT/MAX_WIDTH has been removed.
- In the class 'mass_import.FormRegistry' :
- The methods 'get()' & 'is_registered()' have been removed.
- The class 'UnregisteredCTypeException' has been removed.
- In 'creme_core.models' :
- In the methods 'HeaderFilter.can_view()' & 'creme_core.models.EntityFilter.can_view()',
the argument "content_type" has been removed.
- Setting the class attribute 'HistoryLine.ENABLED' is now useless.
The method 'HistoryLine.disable()' has been removed.
- The function 'creme_core.utils.create_if_needed()' has been removed.
- The constant 'creme_core.core.entity_filter.EF_USER' has been removed.
- In the class-view 'creme_core.views.entity_filter.EntityFilterDeletion',
the ID of the EntityFilter cannot be passed in the POST data anymore.
- In 'creme_core.templatetags' :
- The templatetag {% has_perm_to %} has been removed.
- The templatetag {% menu_buttons_display %} (from the library "creme_menu") has been removed.
- The function 'creme_core.utils.bool_from_str()' has been removed.
- In 'creme_core.tests' :
- The module 'forms.base' has been removed.
- The class 'views.ViewsTestCase' has been removed.
- In detail-view for CremeEntities, these actions for the "instance" buttons are not available anymore :
- "creme_core-hatmenubar-addrelationships"
- "creme_core-hatmenubar-form"
- "creme_core-hatmenubar-update"
- "creme_core-hatmenubar-view"
- Apps :
* Persons :
- The form class 'forms.contact.ContactNamesForm' has been removed.
- The class-view 'views.contact.ContactNamesEdition' has been removed.
* Emails :
- The function 'utils.get_mime_image()' has been removed.
- In the constructor of 'utils.SignatureRenderer' the argument "domain" is now required.
The deletion of CremeEntities has been reworked in order to allow the customisation without having to write your own view.
- If your model could be deleted in Creme 2.6 with the generic deletion view (i.e. you did not define your own view)
you must now register your model in the new registry for deletion. In you "apps.py" :
def register_deletors(self, entity_deletor_registry):
entity_deletor_registry.register(model=MyModel)
- If you disabled the deletion with the method 'get_delete_absolute_url()' returning an empty string,
you should just remove this method to avoid some warning messages.
- If you wrote your own deletion view (i.e. your model defines 'get_delete_absolute_url()'), you should
probably use the new 'Deletor' system to write your custom rules. You'll have less code to maintain,
and your checks will be used to disabled the deletion buttons or by the trash cleaner job.
Hint: see the method 'creme.persons.apps.PersonsConfig.register_deletors()' as example.
The cloning of CremeEntities has been reworked in order to allow the customisation without having to write your own view.
- If your model could be cloned in Creme 2.6 with the generic cloning view (i.e. you did not define your own view)
you must now register your model in the new registry for cloning. In you "apps.py" :
def register_cloners(self, entity_cloner_registry):
entity_cloner_registry.register(model=MyModel)
- If you disabled the cloning with the method 'get_clone_absolute_url()' returning an empty string,
you should just remove this method to avoid some warning messages.
- If you wrote your own cloning view (i.e. your model defines 'get_clone_absolute_url()'), you should
probably use the new 'Cloner' system to write your custom rules. You'll have less code to maintain,
and your checks will be used to disabled the cloning buttons.
Hint: see the method 'creme.persons.apps.PersonsConfig.register_cloners()' as example.
The format used to store 'EntityCells' in JSON has slightly changed (si in custom Brick configuration, global search configuration...).
When the cell is related to a 'CustomField', the key "value" contains now the UUID, not the ID anymore.
You won't be impacted unless you read the JSON directly (why would you do this bro?).
In the model 'RelationBrickItem', the way ContentTypes are stored in the field "json_cells_map" has changed too;
a natural key with the pattern "app.modelname" is used instead of the ID.
The method 'creme_core.bricks.ButtonsBrick._get_buttons()' has a new mandatory argument.
In 'creme_core.core.entity_cell', in the methods 'EntityCell*.build()' :
- The second argument is now always named "name" (e.g. it was named "customfield_id" in 'EntityCellCustomField.build()').
- The extra arguments are now keyword only (.e.g. 'EntityCellRegularField' & "is_hidden").
In 'creme_core.models' :
- In the abstract class 'MinionModel' the field "is_custom" is now marked <editable=False> ;
it will at least need a migration (or a manual change in the existing migrations because
it has no consequence on the DB).
- In the model 'CremeEntity' :
- The field "extra_data" is now tagged as <clonable=False>;
use the new cloning system to clone precisely what you want.
- The method 'get_clone_absolute_url()' is not static anymore.
- The method 'BrickDetailviewLocationManager.create_if_needed()' now takes its arguments as keywords only.
In 'creme_core.views' :
- The class-view 'entity.EntityRestoration' now just checks the deletion credentials & the attribute "is_deleted".
- The mixin 'entity.EntityDeletionMixin' has been heavily reworked :
- The method 'delete_entity()' takes a new mandatory argument "deletor".
- The methods 'check_entity_for_deletion()' & 'move_to_trash()' have been removed.
In templates :
- The buttons parts of the hat bricks have changed in order to manage the new deletion & cloning systems
(good news, some {% block %} have been added) :
- "creme_core/bricks/base/hat-card.html"
- "creme_core/bricks/generic/hat-bar.html"
Apps :
* Persons :
- In the method 'bricks.NextActivitySummary.get_context()', the returned context does not contain "NARROW" anymore.
* Activities :
- The field 'Activity.floating_type' got some light changes.
It's now a 'PositiveSmallIntegerField', it ahs a 'choices' attribute & it's viewable.
- Some small changes have been made in the class 'views.buttons.UnsuccessfulPhoneCallCreation'.
* Reports :
- In the field 'report.Field.name', the CustomFields are referenced by their UUID now (see types 'RFT_CUSTOM' & 'RFT_AGG_CUSTOM').
* Billing :
- In 'buttons', the class '_ConvertToButton' (& so, the child classes) has been reworked.
- It injects a string "error" in the context.
- "creation_perm" is not injected in the template anymore.
- The attribute 'target_modelname' has been removed.
The template has been modified, of course.
- In 'core' :
- These variables have been removed : CLASS_MAP, CONVERT_MATRIX, RTYPE_MATRIX.
- The function 'get_models_for_conversion()' has been removed.
- In 'registry', the class 'RelationTypeConverterRegistry' & the variable 'relationtype_converter'
have been removed ; you can see in 'creme.opportunities.apps.OpportunitiesConfig.register_billing()'
how to code a feature similar to the old relationship conversion.
- In 'models':
- The default statuses are now initialized at models level, not view level.
- In the method 'Base.generate_number()' :
- The argument "source" has been removed.
- An exception is raised if the source (i.e. emitter Organisation) has not been set.
- In the model 'AbstractTemplateBase' :
- The field "status_id" has been replaced by the field "status_uuid".
- The method 'create_entity()' has been re-written to use a new "spawning"
system, which is derived from the new cloning system.
This new system is de-coupled from the clone & conversion systems;
it should be easier to customise from another app.
- The class view 'views.convert.Conversion' has been reworked :
- The attribute 'dest_title' has been removed.
- The method 'get_destination_model()' has been removed.

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)

The method 'creme_core.models.CremeModel._delete_stored_file()' is not static anymore.
Apps :
* Creme_config :
- The class 'bricks.ButtonMenuBrick' (& its template) has been heavily reworked.
- In 'core.exporters', the class 'CellsExporterMixin' & the function 'dump_ct()' have been removed.
- The function 'core.importers.load_ct()' has been removed.
- In the class 'function_fields.TemplateBaseVerboseStatusField',
the attribute "_cache" has been replaced by "_statuses_per_model".
- The views to configurate buttons (& their URL patterns & names) have been heavily reworked.

2.6

UPGRADE NOTES :
- You should create a all new virtual environment based on Python 3.8+ (as usual).
- Some MariaDB users encountered errors when running migrations.
The following workaround has worked for them:
First, try to run the migrations again (as long as the error is a new one).
It the same error is raised, get the raw SQL code with the command <creme sqlmigrate --settings=... app_label migration_name>
(with the name of the migration which fails of course), then execute line after line the SQL commands in a MariaDB shell.
You will get errors for things which have already be done, it's OK; then, you can run the command 'migrate' again.

Users side :
------------
A notification system has been added. The notifications are sent to channels, and users can configure
them in order to their notifications are displayed in the browser and/our received by emails.
- A new job which sends notification emails has been created.
- The reminder system (used by Alerts & ToDos) has been reworked to create notifications (instead of sending emails).
- Some events produce now a notification : the end of mass import, an administrator changed your password...
- Staffs users can sent a notification to announce a system upgrade (there is a button in the new page which display all your notifications).
A new command "creme_announce" has been created to do the same thing from the shell.
The list-views with a big number of entities & no explicit sort now works correctly (i.e. not duplicate).
The mass-export & the exploration mode now accept to be used in this case.
In the detail-view for property type, a button to delete all the properties with this type
(and related to a given entity type) has been added.
A detail-view for EntityFilter has been added; in addition to the usual information,
it displays the entities which are linked to the filter (currently only Reports).
A role "Regular user", which can do everything excepted administrating apps, is created in new installations.
Many fields of User are now viewable; it can be useful for particular filters.
The Custom-Fields with type 'URL' are not validated anymore.
You can now omit the protocol (i.e. "http://"), or use local URLs without domain;
it should avoid some annoying errors when importing from csv/xls files.
Thanks to the library "openpyxl", XLSX files should be better managed now for import, & export proposes this file format now.
BEWARE: if you use a custom list for 'IMPORT_BACKENDS' in your settings,
the value "creme.creme_core.backends.xls_import.XLSXImportBackend" is now invalid.
You should use "creme.creme_core.backends.xlsx_import.XLSXImportBackend" instead.
In global search, forbidden models are not proposed anymore.
The button menu has been reworked; it can now be reloaded dynamically
(e.g. some buttons reloaded the whole page in order to be hidden -- or change their label -- once they did their job).
Seconds are now displayed as tool-tip for datetime fields.
The command "creme_populate" now returns a correct error code if an error happened.
The JQPlot compatibility has been dropped.
Apps :
* Creme_config :
- The bricks configuration of a role can be cloned from the configuration of another role.
* Activities :
- The JavaScript component FullCalendar has been upgraded to the version "5.11.4" :
- New calendar look-n-feel.
- Week/month view changes are now in browsing history ; after a refreshing you will stay on the same view.
- Collisions between events from the same calendar are forbidden.
- The "busy" events (no collision)are displayed with a stripped background.
- A configuration system for the calendar view has been added :
- Default view can be "month" or "week".
- Which days are active.
- What hour range to use.
- ...
- Teams have a default Calendar since years, but they were unused;
now, when you select a team as a participant, the Activity is put on the team's Calendar too.
The default Calendar of a team is always public, & a data migration remove the extra Calendars.
- A new button, which can be displayed on Contacts' detail-views, is available: "Create an unsuccessful phone call".
- The configuration block for Calendars has been improved.
* Persons :
- The staff users are not related to Contacts anymore.
Note: the existing Contacts which were related to staff users are sent to the trash.
- A button to transform a Contact into a user has been added.
- The URL fields of Contacts & Organisations are not validated anymore (see remarks about URL CustomFields above).
* Reports :
- You can now create filters which are reserved to Reports.
- The Graphes using Relationships have been improved :
- the SQL queries should be more efficient.
- the entities in abscissa are now ordered by their name.
- the length of the URL to list-view remains always short (& so it avoids issue with URLs which reach the server's limit).
- The date fields of referenced models can be used for temporal filtering in the Reports
(e.g. in a report on Contacts, Photograph's fields are available).
- The fields with 'choices' (e.g. status of EntityEmails) can now be used as Graphes' abscissa.
- A new type of chart is available: 'linechart'.
- Graphs with an enumerable abscissa are now using its color if exists (e.g. billing status).
* Assistants :
- The UserMessages produce now notifications (so users can chose to be notified in their browser, emails are not the only way anymore).
* Billing :
- You can now define the default statuses (which are notably used as initial values in creation forms).
You can also define the Invoice status to use when a number ins generated.
- When you clone an Invoice, the status is not copied anymore; the new Invoice gets the default status instead.
- When you edit an Invoice/Quote/... & change the target, the addresses of the new target are copied.
In the CSV/XLS import, the options to enable the addresses overriding have been removed because they are now meaningless.
* Emails :
- The spam score of sent emails should be better :
- the header contains a "Message-ID" which matches the host domain.
- the "content-ID" of inline images matches the host domain.
- The render of inlined images has been improved.
* Geolocation :
- The bricks which use OpenStreetMap are now used in the default installation (instead of the GoogleMaps ones).

Developers side :
-----------------
- Javascript :
- The version of Leaflet has been upgraded to "1.9.4".
- The version of 'FullCalendar' is now "5.11.4".
- Some math functions have been added as underscorejs mixins: absRound, clamp, scaleRound, scaleTrunc, toRadian, toDegree & toNumber
- The version of D3js has been upgraded to "7.8.5".
- The version of jQuery is now "3.7.1" (jQuery-migrate 3.4.1).

Non breaking changes :
----------------------
Deprecations :
- In 'creme_core.core' :
- Several registries (classes & instances) have been renamed to get more naming consistency ;
the old names are still available but are deprecated.
- The constant 'entity_filter.EF_USER' is deprecated ; use 'EF_REGULAR' instead.
- In 'creme_core.gui' :
- Several registries (classes & instances) have been renamed to get more naming consistency ;
the old names are still available but are deprecated.
- In 'field_printers', the function 'image_size()' & the constants MAX_HEIGHT/MAX_WIDTH are now deprecated.
- In the class 'mass_import.FormRegistry' :
- The methods 'get()' & 'is_registered()' are now deprecated.
- The class 'UnregisteredCTypeException' is now deprecated.
- In 'creme_core.models' :
- In the methods 'HeaderFilter.can_view()' & 'creme_core.models.EntityFilter.can_view()',
the argument "content_type" is deprecated.
- Setting the class attribute 'HistoryLine.ENABLED' is deprecated.
The method 'HistoryLine.disable()' is deprecated too.
Use the new context/decorator 'creme_core.models.toggle_history' instead.
- In 'creme_core.utils' :
- The function 'bool_from_str()' is deprecated.
- The function 'create_if_needed()' is deprecated; use 'MyModel.objects.get_or_create()' instead.
- In the class-view 'creme_core.views.entity_filter.EntityFilterDeletion' (related to the URL named "creme_core__delete_efilter"),
the ID of the EntityFilter should now be passed in the URL, not the POST data.
- In 'creme_core.templatetags' :
- The templatetag {% has_perm_to %} is deprecated;
use the template-filters of the new library "creme_perms" instead.
- The templatetag {% menu_buttons_display %} (from the library "creme_menu") is deprecated;
see the new brick 'creme_core.bricks.ButtonsBrick'.
- In 'creme_core.tests' :
- The module 'forms.base' is deprecated.
Use these new methods of 'CremeTestCase' instead: assertFormfieldError() & assertValidationError().
Then stop using the base class 'FieldTestCase' & 'FieldTestCaseMixin'.
- The class 'views.ViewsTestCase' is deprecated ;
use the new method 'CremeTestCase.add_credentials()' instead.
- In Javascript :
- In detail-view for CremeEntities, these actions for the "instance" buttons are deprecated (use regular Brick actions instead) :
- "creme_core-hatmenubar-addrelationships" => "add-relationships"
- "creme_core-hatmenubar-form" => "add"/"edit"
- "creme_core-hatmenubar-update" => "update"
- "creme_core-hatmenubar-view" => "view"
Notice that the actions are not deprecated for models which do not inherit 'CremeEntity' (i.e. do not use the template "view_entity.html").
- The use of jQuery 3.x makes the following methods deprecated :
- '$.mouseover()' ; use '$.trigger("mouseover")' instead.
- '$.mouseenter()' ; use '$.trigger("mouseenter")' instead.
- '$.mouseleave()' ; use '$.trigger("mouseleave")' instead.
- '$.focusout()' ; use '$.trigger("focusout")' instead.
- Apps :
* Persons :
- The form class 'forms.contact.ContactNamesForm' is now deprecated.
- The class-view 'views.contact.ContactNamesEdition' is now deprecated.
* Billing :
- In 'models.Base' (& child classes), these methods are deprecated :
- build()
- _build_object()
- _build_relations()
- _build_properties()
* Emails :
- The function 'utils.get_mime_image()' is deprecated; use 'utils.SignatureImage' instead.
- The constructor of 'utils.SignatureRenderer' takes now an argument "domain" ;
do not fill it is deprecated.
A new setting value "POPULATORS" has been added ; it allows to
override the classes used by the command "creme_populate".
Many classes 'Populate' have been reworked to facilitate their modification by inheritance ;
the work has been split into several methods, and class attributes with declarative values have been added.
In 'creme_core.models' :
- A class attribute 'CremeEntity._DELETABLE_INTERNAL_RTYPE_IDS' has been added to avoid writing
methods '_pre_delete()' to manage the internal Relationships.
- The class 'UserRole' has 2 new fields: uuid & extra_data (a JSONField which can be used to store whatever you want).
- Some methods of 'CremeUser' accept instances of auxiliary models (i.e. with a method 'get_related_entity()')
which do not inherit 'CremeEntity': has_perm_to_view*(), has_perm_to_change*(), has_perm_to_delete*().
- The class 'EntityFilter' & 'HeaderFilter' got a JSONField "meta_data" to store custom data.
- The class 'CustomFieldEnumValue' got a UUIDField.
- A new field is available: 'fields.YearField'.
In 'creme_core.views' :
- The views which manage Bricks now display a minimal Brick (see 'creme_core.gui.bricks.ForbiddenBrick')
which contains an error message when the attribute 'Brick.permissions' does not pass the validation.
This attribute has been set for many Brick classes in order to use this new behaviour.
- The class-view 'views.entity.EntityDeletion' now accepts explicit callback URL.
In the class 'creme_core.core.setting_key.SettingKey', you can now pass :
- a custom form-field class.
- a custom renderer function.
In 'creme_core.gui' :
- In the class 'bricks._BrickRegistry', 3 methods to unregister brick classes have been added.
- In 'button_menu' :
- The classes inheriting 'Button' can now define an attribute "dependencies" (like Brick classes) to have a dynamic reloading;
their template can now use the actions available to Bricks.
- In the class 'ButtonsRegistry' :
- A method 'unregister()' has been added.
- A button class can now be registered as mandatory, to be always displayed without
having to hard code them in the detail-view template.
- A method 'bulk_update.FieldOverrider.post_save_instance()' has been added
(it's useful to manage ManyToManyFields, Relationships, CremeProperties...).
- A method 'custom_form.CustomFormDescriptorRegistry.unregister()' has been added.
- A method 'mass_import.FormRegistry.unregister()' has been added.
- A method 'merge._MergeFormRegistry.unregister()' has been added.
In 'creme_core.templatetags.creme_bricks', the tag {% brick_action %} accepts a new boolean argument 'comeback' ;
once enabled it will add a GET argument 'callback_url' with the current location (client side).
All derived tags (like {% brick_table_action %}) accept this argument too, of course.
Apps :
* Creme_config:
- In the class 'registry._ConfigRegistry', some methods to unregister brick classes have been added.
- Many portals have been reworked to store the list of displayed Brick as a class attribute.
* Persons:
- The model 'AbstractAddress' got a JSONField "meta_data" to store custom data.
* Activities:
- The models 'ActivityType' & 'ActivitySubType' now inherit 'creme_core.models.MinionModel' (see <Breaking changes> part too).
- The upgrade of FullCalendar came with the following changes :
- these views use ISO8601 format WITH timezone (e.g 2023-04-14T10:38:30+01:00) :
- activities__calendars_activities
- activities__set_activity_dates
- The timezone used is the one provided by the user information instead of the browser's one.
* Reports:
- The graphes with type 'creme.D3TubeChart' now support color field from data.
* Sketch:
- The new type of chart 'creme.D3LineChart' draws a curved line with (optional) dots and tooltips.
- The new chart component 'creme.d3Tooltip' allows to render HTML tooltips.
- New 'creme.d3BisectScale' that retrieve the value scale source value from the position in a chart.
- The type of chart 'creme.D3DonutChart' now supports color field from data.
- The new functions 'd3.axisRadialInner()' & 'd3.axisRadialOuter' draw axis for gauge meters.

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- In 'creme_core.apps.CremeAppConfig', the argument of several method have been renamed
(it won't crash because the methods are currently called with positional arguments, but you should rename in your code anyway) :
- register_actions()
- register_field_printers()
- register_quickforms()
- register_statistics()
- In 'creme_core.core' :
- In the class 'entity_cell.EntityCell' (& child classes), the methods
'render_html()' & 'render_csv()' have been removed.
- In the class 'function_field.FunctionFieldResult' (& child classes), the methods
'for_html()' & 'for_csv()' have been removed.
- In 'creme_core.forms' :
- The method 'base.HookableFormMixin.as_span()' has been removed.
- The classes 'fields.CremeUserChoiceField' & 'fields.CremeUserChoiceIterator' have been removed.
- In 'creme_core.gui' :
- In 'bricks.Brick', the attribute "id" must be filled & used instead of "id_".
- In the class 'field_printers._FieldPrintersRegistry', these method have been removed :
- 'register()'
- 'get_html_field_value()'
- 'get_csv_field_value()'
- In 'creme_core.templatetags.creme_cells', the argument "output" of '{% cell_render %} has been removed.
- The function 'creme_core.utils.dates.make_aware_dt()' has been removed.
- In templates :
- In the file "creme_core/base.html", the '{% block extrahead %}' has been removed.
- The file "creme_core/generics/error.html" has been deleted.
- In 'creme_core.tests' :
- In the class 'base._CremeTestCase' :
- The method 'login()' has been removed.
- In the method 'build_request()', the argument "user" is now mandatory.
- In the the methods 'views.base.MassImportBaseTestCaseMixin._build_*doc(), the argument "user" is now mandatory.
- In Javascript :
- JQPlot has been removed.
- The 'USE_JQPLOT' flag is no longer useful.
- The widgets 'ui-creme-jqueryplot' & 'ui-creme-plotselector' have been removed.
- The widget 'ui-creme-scrollactivator' has been removed : only used with jqplot to optimize rendering on oldest browsers.
- The component 'creme.form.Chosen' and its dependencies have been removed.
- Refactor creme.widget.DateRangeSelector widget : 'data-format' attribute replaces 'date_format'.
- jQuery 3.x :
- Do not rely on $.ajaxSettings.traditional (deprecated since jQuery 1.9+) :
- creme.ajax.param() will always use traditional mode
- creme.ajax.jqueryFormSubmit() will use traditional mode as default.
- Apps :
* Creme_config :
- The class 'forms.fields.CustomEnumChoiceField has been removed.
* Activities :
- In 'constants', 'DEFAULT_CALENDAR_COLOR' & 'COLOR_POOL' have been removed.
- In 'models.calendar', these methods have been removed :
- 'CalendarManager.new_color()'
- 'Calendar.get_color()'
* Emails :
- These variables (in 'settings.py') have been removed:
- EMAILCAMPAIGN_HOST
- EMAILCAMPAIGN_HOST_USER
- EMAILCAMPAIGN_PASSWORD
- EMAILCAMPAIGN_PORT
- EMAILCAMPAIGN_USE_TLS
* Reports :
- These class-based views have been removed:
- GraphFetching (reports__fetch_graph)
- GraphFetchingInstance (reports__fetch_graph_from_brick)
* Events :
- The class 'gui.RelatedContactsActionsRegistry' have been renamed "RelatedContactActionRegistry".
The way the Bricks' IDs are generated & used has been reworked.
These IDs have always be designed to retrieve the Bricks classes (on Python/server side), but in facts they were used for the HTML "id" attribute too.
Now these uses are more distinct ; the IDs of classes do not contain a prefix with "brick"/"block" (because it's useless),
& the prefixes of different types of brick have been reworked :
- The value of 'creme_core.constants.MODELBRICK_ID' changed from "modelblock" to "model".
- The value of 'creme_core.gui.bricks.Brick.GENERIC_HAT_BRICK_ID' changed from "hatbrick" to "hat".
- The method 'creme_core.gui.bricks.Brick.generate_id()' returns strings which start now by "regular-" (it started previously by "block_").
The values for the attributes "brick_id" stored in Data Base (see models in 'creme_core.models.bricks') are fixed by a migration.
In HTML, the Brick class' ID is now stored in the HTML attribute "data-brick-id", & the HTML attribute "id"
is created as "brick-{{brick_id}}" (see 'creme/creme_core/templates/creme_core/bricks/base/base.html').
So you'll have to fix your template files if you retrieve bricks nodes by their ID. Example :
$('.brick[id="{{brick_id}}"]') => $('.brick[data-brick-id="{{brick_id}}"]')
The way the Buttons for CremeEntities (see "view_entity.html") are managed has changed.
They are now wrapped into a Brick (the well-named "ButtonsBrick") & use brick actions.
If you defined custom actions for a CremeEntity class, the code to register your actions have to be modified in order it keeps working :
Old code :
$(document).on('hatmenubar-setup-actions', '.ui-creme-hatmenubar', function(e, actions) {...}
New code :
$(document).on('brick-setup-actions', '.creme_core-buttons-brick', function(e, brick, actions) {...}
The way the values are stored in 'creme_core.models.SettingValue' has changed.
The field "value_str" (TextField) has been replaced by "json_value" (JSONField).
- Now when you store an empty string, you retrieve an empty string, not <None>.
- If you have defined your own 'SettingKey', you have to write migration for the related 'SettingValue'
(because in migration mode, 'apps' are not initialized as usual, so the core cannot know your 'SettingKey').
You should just copy "creme/activities/migrations/0027_v2_6__settingvalue_json.py" and modify :
- The function 'fill_json()' to use your own 'SettingKeys'.
- The dependency <('activities', '0026_v2_6__fix_status_uuids')>.
In 'creme_core.core' :
- In 'entity_filter' :
- The constants 'EF_USER' & 'EF_CREDENTIALS' are now strings.
- The class 'condition_handler.PropertyConditionHandler' takes now the UUID
of the related 'CremePropertyType' instance instead of its ID (see 'creme_core.models' section) ;
the related field 'EntityFilterCondition.name' stores now the UUID of the CremePropertyType instance.
The attribute "_ptype_id" has been replaced by "_ptype_uuid".
- The class 'paginator.FlowPaginator' does not accept ForeignKeys as key anymore;
pass the corresponding "low-level" attribute (e.g. "user_id") or a sub-field (e.g. "user__username").
- In the class 'reminder.Reminder' :
- These methods have been removed : get_emails(), generate_email_subject(), generate_email_body(), send_mails().
- You have now to implement the methods 'get_users()' & 'get_notification_content()'.
- In the method 'execute()' the argument "job" has been removed.
- In the method 'search.Searcher.search()', the argument "research" has been renamed "searched".
In 'creme_core.models' :
- The model 'CremePropertyType' uses now a classical AutoField (i.e. integers) for primary key, and gets an UUIDField.
A CharField "app_label" has been added too (the app label was given is the previous string primary key).
The parameters of the method 'CremePropertyTypeManager.smart_update_or_create()' have changed ;
"str_pk" & "generate_pk" have been replaced bu "uuid". Notice that this method is now mainly useful to set the ContentType constraints
(because you can pass model, not only ContentType instances) ; use 'CremePropertyType.objects.create()' or
'CremePropertyType.objects.update_or_create()' in the other cases.
- In 'bricks' :
- The model 'CustomBrickConfigItem' uses now a classical AutoField (i.e. integers) for primary key,
and gets an UUIDField. In your "populate.py" scripts, you should probably set the "uuid" with a
hard-coded value (but you can just let the code generate a value).
- The properties 'brick_id' of the models 'CustomBrickConfigItem'/'InstanceBrickConfigItem'/'RelationBrickItem'
return different values (the prefixes contained in the attributes '_brick_id_prefix' have changed).
Idem with 'InstanceBrickConfigItem.generate_base_id()'.
- "rtype_brick" => "rtype"
- "instanceblock" => "instance"
- "customblock" => "custom"
The methods 'id_from_brick_id()' have been removed.
- The method 'SpecificRelationsBrick.generate_id()' has been removed (it was unused/useless since Creme 2.4).
- The field 'HeaderFilter.json_cells' is now a 'JSONField';
you won't have to change your code if you use the property 'cells' as advised.
- The field 'EntityFilter.filter_type' is now a CharField (see changes about the constants 'EF_*').
- In 'EntityFilterCondition' :
- The field 'name' contains now the UUID of 'CremePropertyType' & 'CustomField' when it's relevant.
- The field 'raw_value' has been renamed "value" & is now a 'JSONField';
it'll only affect direct access to the field (e.g. QuerySet), because the property (getter/setter) "value" has just been replaced.
The JSON data should always be a dictionary, so the data changed for conditions on CremeProperties
(example: 'true' became '{"has":true}' ; see 'creme_core.core.entity_filter.condition_handler.PropertyConditionHandler').
- In conditions related to 'Relation', the format of the stored JSOn has changed :
- The related 'ContentType' is now stored with the key "ct" (instead of "ct_id"), and the value is the natural-key (instead of the ID).
- The related 'CremeEntity' is now stored with the key "entity" (instead of "entity_id") and the value is the UUID (instead of the ID).
- The method 'FieldsConfig._get_hidden_field_names()' has been replaced by the property "hidden_field_names".
- The class attribute 'HistoryLine.ENABLED' has been removed, so reading it is broken
(you can still set it because it is checked dynamically, but is is deprecated -- see the deprecation section).
- The model 'reminder.DateReminder' has been removed.
In 'creme_core.forms' :
- In 'entity_filter.fields' :
- The attribute 'CustomFieldsConditionsField._non_hiddable_cfield_ids' has been replaced by "_non_hiddable_cfield_uuids".
- The attribute 'PropertiesConditionsField._non_disabled_ptype_ids' has been replaced by "_non_disabled_ptype_uuids".
- In 'merge', the CSS classes related to 'EntitiesHeaderWidget' & 'MergeWidget' has been renamed
(the templates & 'creme_core/js/merge.js' have been reworked of course) :
- "merge_entity_field" => "merge-field".
- "li_merge_entity_header*" => "merge-field-header-*".
- "li_merge_result_header" => "merge-field-header-result".
- "li_merge_entity*" => "merge-field-*".
- "li_merge_result" => "merge-field-result".
- "li_merge_button" => "merge-field-button".
In 'creme_core.gui' :
- The attribute 'listview.state.ListViewState.extra_q' has been removed.
- The method 'mass_import.FormRegistry.register()' now raises an exception when a model is registered twice.
The behaviour of the method 'creme_core.utils.meta.FieldInfo.value_from()' has changed with "low-level" attributes
related to ForeignKeys; now it return the low-level value (e.g. integer, string...), not the related model instance anymore.
Example: 'FieldInfo(Contact, 'user_id').value_from(my_contact)' returns an integer, not a CremeUser instance.
'FieldInfo(Contact, 'user').value_from(my_contact)' still returns a CremeUser instance.
In 'creme_core.views' :
- In 'bricks' :
- The attribute 'BricksReloading.check_bricks_permission' has been removed (in child classes too).
- The default value attribute 'BrickStateSetting.brick_id_arg' changed from "id" to "brick_id".
So you'll have to fix your JavaScript code if you use the URL named "creme_core__set_brick_state".
- In 'creme_property', the brick IDs have been simplified.
The method 'TaggedEntitiesBrick.parse_brick_id()' has been reworked in consequence.
- In 'search' :
- The global variable 'MIN_RESEARCH_LENGTH' has been renamed 'MIN_SEARCH_LENGTH'.
- In the class 'FoundEntitiesBrick' :
- The value of the attribute "id" have been simplified.
The method 'parse_brick_id()' has been reworked in consequence.
- The constructor argument and attribute 'research' have been rename 'searched'.
- In the class-view 'Search', teh context variable "research" has been renamed "searched".
The related template "creme_core/search_results.html" has been reworked of course.
In 'creme_core.tests' :
- The method 'base._CremeTestCase.get_propertytype_or_fail()' now takes an UUID string instead of an integer.
- In the method 'base._CremeTestCase.get_relationtype_or_fail()',
the arguments "sub_props" & "obj_props" are now iterable of <CremePropertyTypes or strings> (instead of integers).
- The method 'views.base.ButtonTestCaseMixin.iter_instance_button_nodes()' has been renamed 'iter_button_nodes()'
(because of the new method 'get_global_buttons_node()').
The template "creme_core/templates/creme_core/view_property_type.html" is now "creme_core/templates/creme_core/detail/property-type.html".
These obsolete JavaScript tools have been removed (because all browsers are supporting flexbox, table layout and ResizeObserver) :
- creme.widget.Container
- creme.layout.LayoutResizeSensor
Some icons which were unused (& not in the 2 themes) were moved in "creme/media/warehouse/" : pin.svg, print.svg, buyer.svg, training.svg...
They are not collected by the asset manager anymore, but you can copy them in your project to use them.
Apps :
* Creme_config :
- In 'registry._ConfigRegistry' :
- The way the bricks of portal & app portals are managed have changed.
BEWARE: when you register a brick with 'register_portal_bricks()'/'register_app_bricks()' (in your 'apps.py'),
the brick class must not be registered in the global brick registry anymore.
- The way the bricks of "My settings" are managed have changed :
- BEWARE: when you register a brick with 'register_user_bricks()' (in your 'apps.py'),
the brick class must not be registered in the global brick registry anymore.
- The property 'user_bricks' has been replaced by 'get_user_bricks()'.
- In 'urls' :
- The view named 'creme_config__create_detailviews_bricks' has been renamed 'creme_config__create_detailview_bricks'.
- The view named 'creme_config__delete_home_brick' has been renamed 'creme_config__delete_home_bricks'.
- In 'forms' :
- The class 'bricks._CustomBrickConfigItemBaseForm' has been removed.
- In 'creme_property_type', these classes have been removed :
- _CremePropertyTypeBaseForm
- CremePropertyTypeCreationForm
- CremePropertyTypeEditionForm
- The global dictionary 'forms.setting._FIELDS' has been removed;
see the new class attribute 'creme_core.core.setting_key._SettingKey.FORM_FIELDS' instead.
- The class-view 'views.user_settings.UserSettings' does not inject "apps_usersettings_bricks" in the context anymore.
- The template 'user_settings.html' has been renamed 'user-settings.html' to be more consistent.
* Persons :
- The UUIDs of the instances of the models 'Civility', 'Position', 'Sector', 'LegalForm' & 'StaffSize'
created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the 5 types provided by default, and stores the old UUIDs in their field "meta_data".
- In the method 'models.Address.info_field_names()' (used by several form generators for Address),
the excluded fields are just not-viewable fields (it was a hard coded list before).
- The hat-card bricks have been reworked to facilitate the modification of small summaries (activities, acts, opportunities).
A base class 'CardSummary' has been introduced. The classes 'ContactCardHatBrick' & 'OrganisationCardHatBrick' get
new attributes "intro_summary" & "summaries"; so its easier to change summaries from external code (the dependencies of the bricks
are automatically computed, summaries indicate which template to use etc...).
- The class 'Activities4Card' has been replaced by 'LastActivityIntroSummary' & 'NextActivitySummary'.
- The class 'Opportunities4Card' has been replaced by 'OpportunitiesSummary'.
- The class 'CommercialActs4Card' has been replaced by 'CommercialActsSummary'.
The related templates have changed :
- "persons/bricks/*-hat-card.html"
- "persons/bricks/frags/card-*.html"
- In the class 'buttons.CrmButton' (& in the child classes), the attribute 'relation_type_id' has been removed
(the new attribute 'Button.relation_type_deps' is used instead).
* Activities :
- The models 'ActivityType' & 'ActivitySubType' use now regular 'AutoField' (i.e. integer) for primary key,
& get an 'UUIDField' (they used custom 'CharField' as primary key).
The constant strings which allow to retrieve types by their ID have been replaced by constants UUID:
e.g. use 'UUID_TYPE_MEETING' instead of 'ACTIVITYTYPE_MEETING'.
Hint: see the files "migrations/002?_v2_6__types_uuid0?.py" to understand how to write your own migrations if you reference these types in your own models.
- The UUIDs of the instances of 'models.Status' created by the 'populate' script are now fixed (to be consistent between Creme instances).
- The constants 'STATUS_*' have been removed; you should use the new constants 'UUID_STATUS_*' instead.
- A data migration fixes the UUIDs of the 5 Statuses provided by default, and stores the old UUIDs in their field "meta_data".
- The method 'forms.fields.ParticipatingUsersField.clean()' now returns a dictionary containing the concerned Contacts & Calendars ;
the forms manipulating participants have slightly changed their internal behaviour, beware if you inherit them.
- The brick 'bricks.UserCalendarsBrick' does not inject "has_app_perm" in its context anymore.
- The class 'buttons.AddRelatedActivityButton' has been reworked to use 'ActivityType.uuid';
e.g. the class attribute "activity_type" has been replaced by "activity_type_uuid".
- In 'views' :
- In 'activity', the class-view 'ActivityCreation' has been reworked to use 'ActivityType.uuid';
e.g. the method 'get_type_id()' has been replaced by 'get_type_uuid()'.
Notice that the GET argument to fix the type must be a UUID now (if you use these URLS in your template for example).
- In 'calendar', the function '_js_timestamp_to_datetime' has been removed and replaced by 'fromRFC3339()' & 'toRFC3339()'.
- The class 'statistics.AveragePerMonthStatistics' has been reworked to use 'ActivityType.uuid';
e.g. in the class attribute 'items', the keys "type_id" have been replaced by "type_uuid".
- The upgrade of 'FullCalendar' caused some changes :
- 'creme.activities.CalendarController' has been renamed as 'creme.ActivityCalendar'.
- The Calendar view changes are now stored in URL hashes (e.g: week & month).
- We use ISO8601 format WITH timezone for queries on backend views (e.g. "2023-04-14T10:38:30+01:00").
* Assistants :
- The module 'creme_jobs' has been removed (_UserMessagesSendType etc...).
- In the model 'UserMessage', the field 'email_sent' & the method 'send_mails()' have been removed.
- In 'reminders', the attributes 'ReminderAlert.body' & 'ReminderTodo.body' have been removed.
- The UUIDs of the instances of 'models.UserMessagePriority' created by the 'populate' script are now fixed (to be consistent between Creme instances).
- The constants 'PRIO_*' & 'USERMESSAGE_PRIORITIES' have been removed; you should use the new constants 'UUID_PRIORITY_*' instead.
- A data migration fixes the UUIDs of the 3 Priorities provided by default, and stores the old UUIDs in their field "meta_data".
* Documents :
- In the context of the brick 'ChildFoldersBrick', "folder_model" is not injected anymore.
* Products :
- The UUIDs of the instances of the models 'Category' & 'SubCategory' created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the instances provided by default, and stores the old UUIDs in their field "meta_data".
* Billing :
- In 'constants' :
- 'DEFAULT_DRAFT_INVOICE_STATUS' has been removed (use 'InvoiceStatus.is_default' instead).
- 'DEFAULT_INVOICE_STATUS' has been removed (use 'InvoiceStatus.is_validated' instead).
- In 'views.base', in the class-views 'BaseCreation' & 'RelatedBaseCreation' (& so, in their child classes),
the attribute 'initial_status' has been removed.
- The method 'populate.Populator.create_reports()' has been replaced by a new one, '_populate_reports()'.
- The UUIDs of the instances of the models '*Status', 'PaymentTerms', 'SettlementTerms' & 'AdditionalInformation'
created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the instances provided by default, and stores the old UUIDs in their field "meta_data".
- The default value for the field 'models.Line.vat_value' is now dynamic & use the 'Vat' instance with <is_default=True> ;
so it will break your code which relied on an implicit "0.0" value (mainly your unit tests).
* Opportunities :
- The UUIDs of the instances of the models 'SalesPhase' & 'Origin' created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the instances provided by default, and stores the old UUIDs in their field "meta_data".
- The class 'bricks.OpportunityCardHatBrick' (& the related template) has been reworked to follow the changes in app "persons".
A new class 'ContactsSummary' has been introduced, and the class variable "displayed_contacts_number" has been move into it.
- The method 'populate.Populator.create_report_n_graphes()' has been replaced by a new one, '_populate_report_n_graphes()'.
* Emails :
- In the class 'buttons.EntityEmailLinkButton', the attribute 'rtype_ids' has been removed ('relation_type_deps' is used instead).
- The constructor of 'models.mail.EntityEmailSender' now takes only one argument (the 'EntityEmail' instance) ;
the class stored in the class attribute 'AbstractEntityEmail.email_sender_cls' uses this new signature.
- In 'utils' :
- The constructor of 'EMailSender' takes now an argument "domain".
- In the class 'SignatureRenderer', the sub-class 'Image' has been removed ;
the class 'SignatureImage' is used instead.
* Commercial :
- The value 'constants.PROP_IS_A_SALESMAN' has been replaced by 'UUID_PROP_IS_A_SALESMAN'.
- The UUIDs of the instances of 'models.ActType' created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the instances provided by default, and stores the old UUIDs in their field "meta_data".
* Sketch :
- In LineChartBrick & BarChartBrick : abscissa_title & ordinate_title default values are now '' instead of None.
* Tickets :
- The UUIDs of the instances of models 'Status', 'Priority' & 'Criticity' created by the 'populate' script are now fixed (to be consistent between Creme instances).
- In 'models.status', the constants '*_PK' & 'BASE_STATUS' have been removed.
- A data migration fixes the UUIDs of the instances provided by default, and stores the old UUIDs in their field "meta_data".
* Mobile :
- In the function-views 'persons_portal()' & 'search_person()', "contact_model" & "orga_model" are not injected in the template context anymore.
- The CSS classes referencing 'ActivityType' IDs have been renamed;
e.g. "activity-type-activities-activitytype_meeting" became "activity-type-meeting".
* Events :
- The UUIDs of the instances of 'models.EventType' created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the 4 types provided by default, and stores the old UUIDs in their field "meta_data".
* Projects :
- The UUIDs of the instances of 'models.ProjectStatus' & 'models.TaskStatus' created by the 'populate' script are now fixed (to be consistent between Creme instances).
- The constants '*_PK' & 'TASK_STATUS' (and the class 'TaskStatusDesc') have been removed.
- A data migration fixes the UUIDs of the Statuses provided by default, and stores the old UUIDs in their field "meta_data".
- The button "Close project" uses the new system for mandatory buttons;
so the template "projects/templates/projects/view_project.html" has been reworked.
* Polls :
- The UUIDs of the instances of 'models.PollType' created by the 'populate' script are now fixed (to be consistent between Creme instances).
A data migration fixes the UUIDs of the 3 types provided by default, and stores the old UUIDs in their field "meta_data".
* Crudity :
- The method 'bricks.CrudityHistoryBrick.generate_id()' has been removed.
* CTI :
- In the class-view 'views.PhoneCallCreation', some the attributes & methods have been replaced
in order to use UUIDs instead of integer IDs for statuses & types.
* SMS :
- The class 'bricks._RelatedEntitesBrick' has been renamed '_RelatedEntitiesBrick'.

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)

In 'creme_core.core.entity_filter' :
- The method '_EntityFilterSuperRegistry.unregister()' raises a new class of exception ('UnRegistrationError').
- In 'condition_handler' :
- The attribute 'BaseCustomFieldConditionHandler._custom_field_id', has been replaced by '_custom_field_uuid'.
- In the class 'RelationConditionHandler', these attributes have been replaced :
- _entity_id => _entity_uuid
- _ct_id => _ct_key
In 'creme_core.forms.entity_filter.fields', in the classes '_ConditionsField' & 'SubfiltersConditionsField' :
- The constructor parameter 'efilter_type' has been removed (the type is the registry's ID).
- The attribute 'efilter_type' is now read only.
In 'creme_core.models' :
- In the values of 'ButtonMenuItem.button_id', the prefix "button_" has been removed
(see 'creme.creme_core.gui.button_menu.Button.generate_id()').
- In the method 'EntityFilter.can_edit()', the type of filter is not checked anymore (it is checked by the views).
- In the model 'FieldsConfig' :
- The attributes "_excluded_fnames" & "_required_fnames" have been removed.
- The method 'update_form_fields()' now takes a form instance, and can set the _meta attribute (backported to 2.5.6/2.4.13).
- The method 'creme_core.models.history._HLTAuxCreation._model_info()' has been removed.
In 'creme_core.gui' :
- The method 'bricks._BrickRegistry.get_bricks()' :
- does not build 'SpecificRelationsBrick' & 'CustomBrick' when no entity is given.
- does not build 'CustomBrick' when the entity's type does not match.
- The class 'bulk_update.FieldNotAllowed' has been removed.
In 'creme_core.views' :
- In the context created by the class-view 'search.Search',
"models" is now a list of CremeEntity classes (use "verbose_names" instead).
- In the view-mixin 'entity_filter.EntityFilterMixin', the attribute 'efilter_registry' has been replaced by 'efilter_type'.
In the templatetag "{% search_form %}" (from library "creme_search")
- The argument "user" has been removed.
- A mandatory argument "models" has been added.
Apps :
* Creme_config :
- The value of class attribute "id" of several Brick classes (for bricks configuration) have changed (mainly "block" => "brick").
- In the class 'registry._ConfigRegistry' :
- The attribute '_user_brick_ids' has been replaced by '_user_brick_classes'.
- The attribute '_portal_brick_ids' has been replaced by '_portal_brick_classes'.
- In the class 'registry._AppConfigRegistry' :
- The attribute '_brick_ids' has been replaced by '_brick_classes'.
- The method '_register_bricks' now takes Brick classes.
- The view 'views.portal.Portal' injects "bricks" (in the context) instead "app_bricks".
* Assistants :
- The function 'signals._refresh_alert_reminder_job()' has been renamed.
* Billing :
- In JavaScript, the actions "billing-hatmenubar-invoice-number" & "billing-hatmenubar-add-document" have been removed.
* Report :
- The module 'core.graph.lv_url' is not imported in the parent module anymore.
* Mobile :
- The templatetag "mobile_activity_card" does not inject "STATUS_IN_PROGRESS" in the context anymore.
* Projects :
- In JavaScript, the action "projects-hatmenubar-close" has been removed.

2.5

UPGRADE NOTE :
- You should create a all new virtual environment based on Python 3.8+ .

Users side :
------------
The version of Django has been upgraded to "4.2".
A visitor mode has been added; from any list-view, you can visit all the related detail-views the one after the other.
(button "Enter the exploration mode" in list-views).
The link in the list-views selectors are now opened in other tabs automatically.
In forms :
- The custom fields with ENUM/MULTI_ENUM type are now using the Select2 combobox with lazy loading & search.
- In the form for entity-filters :
- The regular fields corresponding to foreign keys ('Sector', 'Status', ...) are now using the Select2 combobox with lazy loading & search.
- The regular fields with static choices (like 'Discount' in billing lines) are now using combobox instead of a text input.
Apps :
* Creme_config :
- Each CustomForm can now be reset (to set the fields it would have have after a fresh installation).
- In the Users' configuration page :
- The displayed name of Users can now be customised (per user);
each used can change its own displayed name by default (& you can disable this feature).
- When creating a new user, usernames which differ only in case are rejected.
- Displayed Users can be filtered (by user-name, first name, last name & new field displayed-name).
- Enumerable custom fields are using the Select2 widget in forms.
* Persons :
- The UI forbids to clone managed Organisations.
* Activities :
- A color field has been added to Status.
* Billing :
- The Product/Service lines can be reordered by drag'n drop.
- The mass-import can now import entities with their totals (a Product line is created).
- A color field has been added to Statuses.
* Emails :
- The SMTP server used to send campaign is now configured through the GUI;
indeed you can configure several ones.
These variables are not used anymore (excepted during the migrations from Creme 2.4):
- EMAILCAMPAIGN_HOST
- EMAILCAMPAIGN_HOST_USER
- EMAILCAMPAIGN_PASSWORD
- EMAILCAMPAIGN_PORT
- EMAILCAMPAIGN_USE_TLS
- The blocks for signatures (in "My settings") displays now a preview.
* Opportunities :
- A color field has been added to SalesPhase.
* Reports :
- The horizontal stacked bar chart (creme.D3TubeChart) has been improved :
- The horizontal scrolling of legend is enabled when the list is wider than the canvas.
- The text wrapping for legend text has been added.
- The bar's text is visible only on mouse hover if it is too small.
* Sketch :
- In the bar char (creme.D3BarChart), the horizontal scrolling is enabled when the bars are wider than the canvas.
- In the donut chat (creme.D3DonutChart) :
- The vertical scrolling of legend is enabled when the list is taller than the canvas.
- The slice text is visible only on mouse hover if it is too small.
* Tickets :
- A color field has been added to Status.

Developers side :
-----------------
- The version of 'Django' is now "4.2".
You should probably read the following releases notes for Django versions :

2.4

UPGRADE NOTE :
- You should create a all new virtual environment based on Python 3.7+ .
- If you used the emails synchronisation in Creme2.3, you should finish to flush the list of
untreated emails (i.e. mark them as synchronised or spam) before upgrading to Creme 2.4 .

Users side :
------------
The users can now change their own password, and reset their lost password.
These 2 features can be disabled in the new page "Configuration of the instance".
The setting 'USE_L10N' is now set to 'True' by default (previously only 'False' was working).
So, by default, the formats for dates & times depend on the user's language.
The inner-edition (i.e. edition of one field directly in the detail-view) can now handles several fields at once.
It's used for example in the relationships-blocks (the blocks displaying the entities linked by a specific relationship type)
when you configure the fields to display: all displayed fields are edited with one form (so you avoid many clicks).
In the History's block, lines related to entities from apps you cannot view are excluded.
A periodic job which removes the deprecated users' sessions has been added.
The combo-boxes with autocompletion now use the JavaScript library "Select2".
Their look'n feel has slightly changed, & for compatible models with a lot of choices, the loading & search are now done lazily.
Almost all small auxiliary models defined in apps (ticket Status, Sector…) are compatible ; 'user' model is compatible too.
The old color picker 'gccolor' has been replaced by the standard HTML5 color input (less bug, less code).
The version of the shipped Closure compiler has been upgraded (2020-01-12 => 2022-09-05).
Two new variables have been added in 'settings.py' :
- SOFTWARE_LABEL is "Creme" by default.
- ENTITIES_DELETION_ALLOWED can disable the definitive deletion of entities.
It's true by default (deletion is allowed), & staff user can always delete entities (to fix privacy issue for example).
The command "creme_start_project" has been improved to get a 'setup.py' that works
(if you want to install your project in your virtual environment).
Apps :
* Creme_config :
- The email addresses of active users must be unique.
- The menu icon can now be customised.
- The menu can be customised per role.
- The relationship types have been improved :
- Non-internal types can now be disabled.
- A new kind of constraints has been added : forbidden properties (on subject & object of course).
- An edition view for semi-fixed relationship types has been added.
- The roles can now be cloned ; you can chose to copy the configurations of bricks/menu/custom-forms/search.
- The old password is required when changing a user's password.
- The configurations of CustomForms are collapsed by default, & can be expanded separately.
* Assistants :
- The trigger date of an Alert can now be relative to a date field of the linked entity (e.g. "3 days before its birthday").
Relative trigger dates are automatically updated when the date field changes.
- The owner of Alerts & ToDos can now be dynamic, to always send emails to the entity's owner.
* Activities :
- The sub-type of Activities must now be filled.
Notice that a migration creates sub-types for types which are used in Activities with NULL sub-type.
- The relationships type "is subject of the activity" is now internal.
- In creation form, when an Alert with a trigger date relative to the Activity's start is created,
the new feature <Alert with relative trigger date> is used.
So the trigger date is finally updated when the Activity's start is modified (a very old annoying behaviour disappears).
- The inner-edition is now available for these fields: start, end, is_all_day, busy.
Notice that they are always edited all together with a composite widget.
- The iCal export has been reworked.
* Emails :
- The synchronisation of external emails has been totally reworked & separated from the app "crudity".
This feature allows Creme to fetch emails from some mailboxes to potentially create true Email entities
(e.g. you send a mail, with your usual mail client, to a customer & to the synchronisation address, then you get this mail in Creme).
- Now the mail servers are configured with a GUI (it was in 'settings.py').
- IMAP4 is supported (only POP3 was).
- Mails are in a sandbox, & entities are created only when you accept them (instead of using the status "Synchronized - Untreated").
- Attachments can be ignored, or removed before the mail is transformed into an entity.
- ...
BEWARE: if you used this feature in Creme 2.3, you'll have to remove the configuration
in your settings (it's not supported anymore) & re-create it in the GUI.
* Reports :
- The reports now are displaying new charts using the JavaScript library "D3js" which comes with many improvements :
- Performance improvements (native SVG).
- Charts are following layout changes like resizing the window.
- No longer limited for the creation of custom charts (see 'Relationship graph' brick below).
- The 'USE_JQPLOT' setting allows to fallback to JQplot if needed, and will be removed with the release of <Creme 2.5>.
* Persons :
- The Organisation's bricks "Managers" & "Employees" propose now to edit the related contacts, using the new multi-fields inner-edition feature.
* Products :
- In 'models', the fields 'Category.description' & 'SubCategory.description' are not mandatory anymore.
* Billing :
- When a Quote is converted to an Invoice, a relationship is now created between them.
* Opportunities :
- The bricks "Linked Contacts" & "Business managers" display now these fields for the related contacts: position, email, phone, mobile.
They propose to edit them too, using the new multi-fields inner-edition feature.
* Graphs :
- A new 'Relationship graph' brick is available, displaying the graph in the detail-view without having to download an image.
Notice it can be downloaded as image too.
* Mobile :
- An "owner" field is now present in forms to create Contacts & Organisations.
* Polls :
- The design of the 'Statistic' brick has changed.
* Crudity :
- The support of InfoPath files has been removed.
* Geolocation :
- Map markers now display more information when hovered: the actual address information. The title's importance has also been reduced,
as it's usually less useful on a map than the address itself.

Developers side :
-----------------
- 'jQuery' 3.6.0 migration :
- Remove 'jquery.uuid' & 'jquery.debounce' (replaced by underscore).
- New dependency 'underscorejs 1.13.2'.
- The version of 'floathead' is now "2.2.4".
- The version of 'jquery-ui' is now "1.13.1".
- 'Chosen' to 'Select2' migration :
- New dependency 'Select2 4.0.13'
- 'Sortable.js' was upgraded from "1.10.2" to "1.15.0".
- New app called "Sketch" :
- New dependency 'd3js 5.16.0'.
- New dependency 'filesaver 2.0.4' (customized).

Non breaking changes :
----------------------
Deprecations :
- In 'creme_core.forms.fields.SelectorList', the constructor's parameter & attribute "enabled" are deprecated ;
use <attrs={"disabled": True}> to disable instead (backported to Creme 2.3).
The context variable "clonelast" is deprecated too.
- In 'creme_core.gui' :
- In 'bricks.BricksManager' :
- The attribute '_dependencies_map' is deprecated.
- The method '_build_dependencies_map()' is deprecated.
- The property 'used_relationtypes_ids' is deprecated.
- In 'field_printers', these functions are now deprecated :
- print_date()
- print_datetime()
- In 'creme_core.models' :
- The method 'bricks.RelationBrickItemManager.create_if_needed()' is deprecated.
- The method 'Relation.populate_real_object_entities()'' is deprecated ;
use 'Relation.objects.prefetch_related("real_object")' instead.
- In 'creme_core.utils' :
- The function 'find_first()' is deprecated ; use the builtin 'next()' instead.
- The function 'split_filter()' is deprecated ;
use 'django.utils.functional.partition()' instead (beware the lists 'are returned in the reverse order).
- The function 'imports.import_object()' is deprecated ;
use 'django.utils.module_loading.import_string()' instead.
- Apps :
* Activities :
- In 'forms.fields', the classes 'ActivityTypeField' & 'ActivityTypeWidget' are deprecated.
- The method 'models.AbstractActivity.as_ical_event()' is deprecated.
- The view class 'views.activity.TypeChoices' (corresponding to the URL named "activities__get_types") is deprecated.
- In 'utils', the functions 'get_ical_date()' & 'get_ical' are deprecated ; use 'ICalEncoder' instead.
* Emails :
- In the class 'emails.models._Email' :
- 'Status.SYNCHRONIZED_SPAM' & 'Status.SYNCHRONIZED_WAITING' are deprecated.
- 'SYNCHRONIZATION_STATUSES' is deprecated.
* Graphs :
- The class 'bricks.GraphBarHatBrick' is deprecated ;
the related template file "graphs/bricks/graph-hat-bar.html" is deprecated too.
- In 'models' :
- The method 'AbstractGraph.generate_png()' is deprecated.
- The method 'RootNode.get_relation_types()' is deprecated.
- The function-view 'views.graph.dl_png()' is deprecated.
* Reports :
- The templatetag 'reports_graph_ordinate' is now deprecated ; use 'models.ReportGraph.verbose_ordinate()' instead.
* Products :
- In 'forms.fields', the classes 'CategoryField' & 'CreatorCategorySelector' are deprecated ;
use 'fields.SubCategoryField' instead.
- The view 'products__subcategories' is deprecated ; use the generic one 'creme_core__enumerable_choices' instead.
In the class 'creme_core.auth.entity_credentials.EntityCredentials', the methods 'filter()' & 'filter_entities()'
can now be called with a combination of permissions (like 'VIEW | CHANGE').
In 'creme_core.models' :
- A new abstract model 'base.Minion' has been created with fields uuid/is_custom/extra_data.
Most of the small models which gravitate around entities have been converted in the different apps.
- The class 'fields.RealEntityForeignKey' now have a method 'get_prefetch_queryset()' ;
so the method 'Queryset.prefetch_related()' can be called with the name of a field of this type.
- The method 'Relation.clean()' has been created ; it checks the different constraints (ContentType, CremeProperty).
- The model 'FileRef' got a new JSONField called "extra_data" which can be used by third party code.
In 'creme_core.templatetags.creme_core_tags', the tag "print_field" can now store the output inside a variable with the classical keyword "as".
In 'creme_core.fields' :
- A new 'enumerable.EnumerableChoiceField' for combo-box with both autocompletion and pagination has been added.
It's extremely useful to prevent issues with huge numbers of MinionModel/CremeUser instances in your database.
- A new 'CremeUserEnumerableField' has been added ; it replaces 'CremeUserChoiceField' when it's possible & can handle better big numbers of user instances.
In Javascript :
- Some convenience actions for the "hatbarmenu" widget have been added :
- 'creme_core-hatmenubar-view'
- 'creme_core-hatmenubar-update'
- 'creme_core-hatmenubar-form'
- A new component 'creme.form.DropDown', which decorates a <select>, has been added (it's used for new D3 bricks in 'reports') :
- It displays a toggle link if there are only 2 options.
- It displays a link which opens a popover with the unselected options.
Apps :
* Creme_config :
- A new class 'forms.enumerable.CreatorEnumerableChoiceField' has been added.
It allows the creation 'on-the-fly' of entries, & use the new lazy pagination & autocompletion.
* Activities :
- A log is made to indicate that a not custom 'ActivitySubType' should be related to a not custom 'ActivityType'.
In <Creme 2.5> an exception will be raised.
- A new class 'forms.fields.ActivitySubTypeField', which adds the queryset filtering (see "limit_choice_to") to 'CreatorEnumerableChoiceField', has been added.
* Sketch :
- This is a new app which integrates 'D3js' tools ; it's made to be used as a dependency by other apps, not as a standalone app.
- It adds some base class of bricks for the most common use-cases :
- BarChartBrick
- GroupBarChartBrick
- StackBarChartBrick
- DonutChartBrick
* The following actions for sketch bricks have been introduced :
- 'sketch-download'
- 'sketch-popover'
* Reports:
- The new app "sketch" is now a dependency.
- The following views in 'graph' have been added ; they store the graph states in D3 bricks :
- GraphFetchSettings
- GraphFetchSettingsForInstance
- A new brick 'ReportGraphChartBrick' used in graphs' detail-view has been added.
- A temporary variable has been added in "setting.py" : USE_JQPLOT. It allow to switch from D3 to JQplot for ReportGraphs.
* Graphs :
- The new app "sketch" is now a dependency.
- A new class 'GraphRelationChartBrick' has been created ; it display the relationships' graph in the browser.
- A JS component 'creme.D3GraphRelationChart', which displays the relations between nodes of a graph, has been added.
* Polls :
- The 'Statistic' brick does not use 'jQplot' anymore.

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- The files "creme/local_settings.py" & "creme/project_settings.py" are now loaded anymore.
- The folder "creme/media/upload" have been removed.
- The file "creme/django.wsgi" has been removed.
- In 'creme_core.forms' :
- The alias 'base.FieldBlocksGroup' has been removed.
- The class 'fields.AjaxModelChoiceField' has been removed.
- For 'fields.GenericEntityField' & 'fields.MultiGenericEntityField',
the compatibility with the deprecated format "{ctype: <int>, ...}" has been removed.
- In 'creme_core.models' :
- The method 'CremePropertyType.create()' has been removed.
- The method 'Job.not_finished_jobs()' has been removed.
- In 'fields_config' :
- The method 'FieldsConfigManager.is_model_valid()' has been removed.
- In 'FieldsConfig.LocalCache', the methods 'get_4_model()' & 'get_4_models()' have been removed.
- In 'history', all code related to history line rendering has been rendering.
- The method 'RelationType.create()' has been removed.
- The method 'Vat.get_default_vat()' has been removed.
- In 'creme_core.templatetags' :
- In 'history', the template filter "|history_modifications" is deprecated.
- In 'creme_widgets', the templatetag '{% widget_select_or_msg %}' & its template file have been removed.
- In Javascript :
- These functions of 'creme.ajax.*' have been removed :
- ajax(), get(), post(), submit(), reloadContent()
- json.send(), json.get(), json.post(), json.isvalid(), json.parse()
- 'creme.form.Select' has been removed.
- All 'creme.layout.Layout' classes have been removed :
Layout, ColumnSortLayout, CSSColumnLayout, SortLayout
- '$.uidGen' has been removed; use '_.uniqueId' instead.
- 'creme.utils.debounce' has been removed; use '_.debounce' instead.
- Apps :
* Persons :
- The function 'forms.base._get_address_field_names()' has been removed.
- The class 'forms.address._AuxiliaryAddressForm' has been removed.
* Commercial :
- The method 'AbstractStrategy.get_segment_category()' has been removed.
* Reports :
- The template file "reports/templatetags/report_chart.html" has been removed.
- These bricks have been renamed :
- ReportGraphBrick -> ReportGraphChartInstanceBrick
- ReportGraphsBrick -> ReportGraphChartListBrick
* Recurrents :
- The property 'registry.RecurrentRegistry.ctypes' has been removed.
* Crudity :
- The function 'crudity.utils.strip_html()' has been removed.
* Polls :
- The templatetag 'poll_stats_chart' has been removed.
There are 2 major changes in formats (dates, numbers) :
- 'USE_L10N = True' by default.
- The formats in creme/settings.py (DATE_FORMAT, DATE_INPUT_FORMATS...) have been cleared,
so the django's values are used if you set 'USE_L10N = False'.
So you may encounter some changes if you parse dates in your code & were relying of some specific formats.
In the class 'creme_core.apps.CremeAppConfig', the method 'register_sanboxes()' has been renamed 'register_sandboxes()'.
In 'creme_core.core.reminder.ReminderRegistry', the argument "reminder" has been renamed "reminder_class"
in the 2 methods 'register()' & 'unregister()'.
The method 'creme_core.core.enumerable._EnumerableRegistry._check_model()' has been renamed "_check_is_entity()".
For ForeignKey fields with the ENUMERABLE tag set to 'True', the new class 'CreatorEnumerableChoiceField' is used as default formfield instead of 'CreatorModelChoiceField'.
In 'creme_core.forms' :
- The module 'bulk' has been removed
(the class 'BulkDefaultEditForm' is useless now, use 'creme_core.gui.bulk_update.FieldOverrider' instead).
- In 'base.CremeEntityForm', the error messages with the following keys have been removed :
"missing_property_single", "missing_property_multi".
- In 'fields' :
- In 'RelationEntityField' :
- These methods have been removed :
- _get_allowed_rtypes_objects(), _get_allowed_rtypes_ids().
- _validate_ctype_constraints(), _validate_properties_constraints().
- The error messages with the following keys have been removed :
"rtypedoesnotexist", "ctypenotallowed", "nopropertymatch".
- In 'MultiRelationEntityField', these methods have been removed :
_get_cache(), _build_ctype_cache(), _build_rtype_cache().
- The class 'ColorField' :
- It used 'creme_core.forms.widgets.ColorInput' instead of 'ColorPickerWidget'.
- It accepts the 'RRGGBB' format as input.
- In 'widgets' :
- The attribute 'CalendarWidget.default_help_text' is now a format string.
- The class 'OrderedMultipleChoiceWidget' has been reworked (& its template file too) ;
- The input value has changed ; it's now a JSON list with selected choices.
So you'll have to update your unit tests for the forms using these kind of widget.
- The widget must now be used with the new class 'OrderedMultipleChoiceField'
(classical 'django.forms.OrderedMultipleChoiceField' won't work anymore).
- The class 'ColorPickerWidget' has been replaced by 'ColorInput'.
- In 'listview', these methods have been removed :
- RegularDateField._get_date()
- CustomDatetimeField._get_date()
- BaseDecimalField._sanitize_separators()
- In 'relation._RelationsCreateForm', the error messages with the following keys have been removed :
"missing_property_single", "missing_property_multi".
In 'creme_core.gui' :
- The class attribute 'button_menu.Button.id_' has been renamed "id" ;
you have to rename this attribute in your child classes.
- The class 'bulk_update._BulkUpdateRegistry' has been heavily reworked to manage several fields at once ;
the inner class 'ModelBulkStatus' has been replaced by a new class '_ModelConfig', many methods have been removed...
More important items :
- The registration of the models is now required to get inner-edition on your entity models.
It means you must write in your 'apps.py' :
def register_bulk_update(self, bulk_update_registry):
bulk_update_registry.register(MyEntityModel)
- Only models which inherit 'CremeEntity' can be registered.
- If you excluded some fields, the new way to do is :
def register_bulk_update(self, bulk_update_registry):
bulk_update_registry.register(MyEntityModel).exclude('field1', 'field2')
- If you customised the form for some of your fields (old argument "innerforms" of 'register()'),
you must use the method 'add_overriders()'. You can see examples of use in the app 'documents', 'activities', 'products' for example.
- The method 'bricks.SpecificRelationsBrick.id_is_specific()' has been removed.
In 'creme_core.models' :
- In 'bricks' :
- In CustomBrick's constructor, the argument "customblock_conf_item" has been renamed "custombrick_conf_item".
- The field 'RelationBrickItem.brick' has been removed ;
a property is used instead, but the generated value is different.
- The TextFields which were used to store JSON have been replaced by JSONFields :
- RelationBrickItem.json_cells_map
- InstanceBrickConfigItem.json_extra_data
- CustomBrickConfigItem.json_cells
- BrickState.json_extra_data
- A mandatory field "object_ctype" has been added to 'Relation' ;
but it is set automatically in 'save()' by using the value of the field 'object_entity', so your code will probably work without change.
- A mandatory field "object_ctype" has been added to 'SemiFixedRelationType'.
- In the models 'EntityJobResult' & 'MassImportJobResult', the new fields "entity_ctype" have to be
filled when the field "entity" is not NULL (hint: use the new virtual field "real_entity").
- The field 'FieldsConfig.raw_descriptions' is now a JSONField.
- The field 'CustomFormConfigItem.json_groups' is now a JSONField.
- A mandatory field "entity_ctype" has been added to 'Imprint'.
- The class 'fields.CremeUserEnumerableField' replaces 'fields.CremeUserChoiceField' as default form-field for 'CremeUserForeignKey'.
In 'creme_core.views' :
- In 'entity', the class-views 'InnerEdition' & 'BulkUpdate' have been heavily reworked (the URLs changed too).
- In the class 'search.FoundEntitiesBrick', the attribute "ctype" has been removed.
In the templatetag "menu_buttons_display" (from library "creme_menu"), the context is a fresh one for each rendered button ;
this is the same behavior as bricks rendering for example (this is made to avoid annoying side effects).
Be careful if you shared data between several buttons by storing them in the context during the rendering of buttons.
In templates :
- In "creme/templates/authent/base.html", {% block form_username %} & {% block form_password %} have been replaced by {% block form_fields %}.
- In "creme/creme_core/templates/creme_core/listview/content.html", {% block extra_buttons_hidden %} has been removed
(use {% block lv_hidden_buttons %} + {{block.super}} instead).
- The template "creme_core/frags/bulk_process_report.html" has been removed ("creme_core/bulk-update-results.html" is used instead).
In JavaScript :
- The function 'creme.forms._toDualColumnMultiSelect' & 'creme.forms.toOrderedMultiSelect' have been removed ;
the new component 'creme.widget.SelectOrInputWidget' is used instead.
- The component 'creme.component.Chosen' is now deprecated & has been renamed as 'creme.form.Chosen'.
It's no longer used in media generation but it still exists to ease migrations.
- The jQuery extension 'gccolor' has been removed.
In 'creme_core.tests' :
- In 'base._CremeTestCase' :
- The method 'build_inneredit_url()' has been replaced by 'build_inneredit_uri()'.
- The method 'build_bulkupdate_url()' has been replaced by 'build_bulkupdate_uri()'.
- In the method 'views.base.BrickTestCaseMixin.get_brick_node()', the argument "brick_id" has been renamed "brick" ;
it accepts now Brick classes too.
Apps :
* Creme_config :
- The brick 'MenuBrick' has been reworked (to manage menu per role) ; the template variable "entries" is now a list of dictionaries.
In the related JavaScript component 'creme.creme_config.MenuContainersController', the attribute '_containers' is now an 'Array' of 'Sortable' instances.
- The extra data stored in the BrickStates related to 'bricks.CustomFormsBrick' has changed from <ctype_id> to <{'ctype': ctype_id, items: [...]}>.
The view 'custom_form.CustomFormShowDetails' & the JavaScript component 'creme.FormGroupsController' have been adapted.
- The following URLs/views have been modified to take a UserRole as parameter :
- "creme_config__add_menu_container"
- "creme_config__add_menu_special_level0"
- "creme_config__reorder_menu_level0"
- The method 'core.importers.MenuConfigImporter.load_mci()' has been removed.
* Assistants :
- The method 'bricks._AssistantsBrick._populate_related_real_entities()' has been removed.
- The form 'AlertForm' has been heavily modified (the fields "trigger_date" & trigger_time" have been removed…).
- In models :
- the fields "creme_entity" have been renamed "real_entity" for consistency.
- the field 'Alert.trigger' can now be NULL.
* Documents :
- In 'bricks.LinkedDocsBrick', the template variable "predicate_id" is not injected anymore.
- In 'constants', the following items have been removed :
DOCUMENTS_FROM_ENTITIES, DOCUMENTS_FROM_ENTITIES_NAME, DOCUMENTS_FROM_EMAILS, DOCUMENTS_FROM_EMAILS_NAME.
- The class 'forms.folder.ParentFolderBulkForm' has been removed.
* Persons :
- In 'bricks' :
- In the class 'ManagersBrick' (& so 'EmployeesBrick') :
- the template variable "rtype_id" is not injected anymore.
- the method '_get_add_title()' has been removed ; use the attribute 'creation_label' instead.
- The global variable 'bricks_list' has been renamed 'brick_classes' & is now a list.
- In 'buttons.CrmButton' (& so child button classes) the template variable "rtype_id" is not injected anymore.
* Activities :
- In 'forms' :
- The class 'activity_type.BulkEditTypeForm' has been removed.
- The argument "activity_type_id" of the constructor of 'activity.BaseCreationCustomForm' has been replaced by an argument "sub_type".
- The field 'models.AbstractActivity.sub_type' is not <null=True, blank=True> anymore (the attribute "on_delete" changed too).
- The URL named "activities__create_indispo" has been renamed "activities__create_unavailability" ;
the URL changed too ("activities/activity/add_indispo" => "activities/activity/add_unavailability").
- The class 'forms.fields.ActivitySubTypeField' replaces 'ActivityTypeField' in all forms ; it could break some of your unit tests.
- In 'forms.BaseCustomForm', the method '_get_activity_type_n_subtype()' has been renamed '_get_activity_subtype()' and
returns an 'ActivitySubType' instead of a tuple (ActivityType, ActivitySubType).
- The function-view 'views.activity.download_ical()' has been replaced by the class 'ICalExport'.
- The global object 'custom_forms.UNAVAILABILITY_CREATION_FROM' has been correctly renamed "UNAVAILABILITY_CREATION_CFORM".
* Products :
- The module 'forms.product' has been renamed 'forms.bulk_update'
& the class 'ProductInnerEditCategory' has been removed.
* Opportunities :
- In 'bricks' :
- In the base class '_LinkedStuffBrick' (& so all child brick classes), the template variable "predicate_id" is not injected anymore.
- In the mixin class '_RelatedToOpportunity', the method 'get_related_contacts()' has been removed.
- The class 'TargettingOpportunitiesBrick' has been renamed 'TargetingOpportunitiesBrick'.
- The global variable 'bricks_list' has been renamed 'brick_classes' & is now a list.
* Reports :
- The class 'forms.bulk.ReportFilterBulkForm' has been removed.
* Commercial :
- In 'bricks' :
- The method 'ApproachesBrick._populate_related_real_entities()' has been removed.
- The context variable "ct_id" is not injected any more in the following bricks :
ActObjectivesBrick, SegmentDescriptionsBrick, PatternComponentsBrick.
- In 'RelatedOpportunitiesBrick', the template variable "predicate_id" is not injected anymore.
- In 'buttons.CompleteGoalButton', the template variable "predicate_id" is not injected anymore.
* Emails :
- The constants 'REL_*_MAIL_SENDED' have been renamed 'REL_*_MAIL_SENT'.
- In 'bricks' :
- The class '_RelatedEntitesBrick' has been renamed '_RelatedEntitiesBrick' (typo).
- Some variable are not injected in the context anymore :
- 'MailsHistoryBrick': "rtype_ids", "creation_perm".
- 'MySignaturesBrick': "has_app_perm".
- A mandatory field "recipient_ctype" has been added to 'models.LightWeightEmail'.
- In 'email.js', these actions have been removed :
"emailsync-link", "emailsync-action", "emailsync-delete".
* Tickets :
- In 'buttons.Linked2TicketButton', the template variable "rtype_id" is not injected anymore.
- In 'models.AbstractTicket', the attribute "old_status_id" has been removed.
* Crudity :
- All the code related to InfoPath support has been removed (.py, .html. .xml…).
* Graphs :
- A mandatory field "entity_content_type" has been added to 'models.RootNode'.
* Projects :
- In 'bricks.ProjectTasksBrick', the variable "creation_perm" is not injected in the context anymore.
* Polls :
- The class 'forms.poll_reply.InnerEditPersonForm' has been removed.

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)

The constructor of 'creme_core.forms.entity_filter.widgets.DateFieldsConditionsWidget'
does not take any argument "enabled" now (backported to Creme 2.3).
In 'creme_core.gui.last_viewed.LastViewedItem', the key "ctype_id" is now mandatory.
In 'creme_core.management.commands.i18n_overload.Command._get_catalog_paths()', the return
values are now instances of 'pathlib.Path'.
In 'creme_core.templatetags.creme_core_tags', the implementation of "print_field" has changed.
In Javascript :
- 'creme.widget.DynamicSelect' is using the new wrapper 'creme.form.Select2' instead of 'creme.form.Chosen'.
Apps :
* Creme_config :
- The class 'views.custom_form.CustomFormBrickDeletion' has been renamed "CustomFormDeletion".
* Billing :
- In 'bricks.CreditNotesBrick.detailview_display()', the variable "add_title" is not injected anymore.
- In 'models.AbstractTemplateBase', the protected attribute '_verbose_status_cache' has been removed (was useless since years).

2.3

UPGRADE NOTE :
- You should create a all new virtual environment based on Python 3.6+
(e.g. "mkvirtualenv -p /usr/bin/python3XX" if you use 'mkvirtualenv')
and populate it with "pip install -e .[mysql|pgsql]" of course.
- The layout of Creme projects has changed : Creme is a classical Python package
installed in your virtualenv & your own data are stored in another place.
Create a fresh project folder with the following command (you must be out of the Creme's tree):
> creme creme_start_project my_project
- Edit the file "my_project/settings.py" ;
copy (carefully) the values from your old files "local_settings.py/project_settings.py".
- Do not forget to set the values for LANGUAGE_CODE & TIME_ZONE (the default
values in Creme 2.2 are 'fr' & 'Europe/Paris' ; if you did not set them
in your instance of Creme 2.2, use these values explicitly with Creme 2.3).
- The hard-coded sub-folder 'upload/' has been moved to the default value of 'settings.MEDIA_ROOT' ;
so if you have set 'MEDIA_ROOT' in your personal settings, add a sub-folder "upload" at the end
(to avoid breaking the paths of all your uploaded Documents, generated PDFs etc...).
Example:
> MEDIA_ROOT = os.path.join('var', 'www', 'example.com', 'media')
becomes
> MEDIA_ROOT = os.path.join('var', 'www', 'example.com', 'media', 'upload')
- The value of 'settings.GENERATED_MEDIA_DIR' is not used anymore ; 'settings.STATIC_ROOT' is used instead.
So if you have set 'GENERATED_MEDIA_DIR' in your personal settings, rename it "STATIC_ROOT".
Example:
> GENERATED_MEDIA_DIR = os.path.join('var', 'www', 'example.com', 'static')
becomes
> STATIC_ROOT = os.path.join('var', 'www', 'example.com', 'static')
- If your old setting MEDIA_ROOT had the default value ("creme/media/"), copy the content of the
folder "creme/media/upload/" of your old installation to the destination indicated by your new
setting MEDIA_ROOT ("my_project/media/upload/" by default in the generated file "my_project/settings.py").
If your old setting MEDIA_ROOT referenced a folder out of the default, you can just
make a backup of these uploaded files (backups are a good thing).
- Execute the well known commands "migrate", "creme_populate" & "generatemedia", but in a new way:
> creme migrate --settings=my_project.settings
> creme creme_populate --settings=my_project.settings
> creme generatemedia --settings=my_project.settings
- The undocumented options "colorize" & "colors" of 'creme.utils.loggers.CremeFormatter' have been removed ;
fix your settings if you used it (probably not).
- If you used the locale overloading (generated by the command "i18n_overload.py")
- Copy the content of the old folder "creme/locale_overload/locale/" in a new
folder "my_project/locale_overload/" (beware there is no "locale/" sub-folder).
- In your project's settings, add the line:
> LOCALE_PATHS.insert(0, BASE_DIR / 'locale_overload')

Users side :
------------
The version of Django has been upgraded to "3.2".
The layout of Creme projects has changed : now Creme lives as a classical Python package
in your virtualenv, and your settings/media are well separated from Creme's code
(see the new command "creme_start_project").
Two full-python backends for the media-generator have been added ;
they are used in the default configuration (see the setting 'ROOT_MEDIA_FILTERS') in order to remove the dependency to Java by default.
- The package "csscompressor" is used to minify the CSS files.
- The package "rjsmin" is used to minify the JavaScript files.
The history has been improved :
- The messages in the history block are prettier.
- Old & new values are stored now for TextFields (e.g. description) ; they are shown in a popover dialog.
- Elements which are added & removed for ManyToManyFields are now stored.
- CustomFields are now historized too.
The global search can now search in CustomFields.
The job scheduler can now use a UNIX socket (when they are available) to
communicate with the views, instead of a Redis server.
Many blocks got descriptions, which are displayed as tool-tips.
The field "modified" of entities is updated when you use inner/bulk edition with a CustomField.
Apps :
* Creme_config :
- The main menu can now be customised ; containers can be created,
re-ordered, removed, & their entries can be chosen too.
All apps have been reworked to use the new system to provide a menu identical to the old one.
- You can add a configuration of a Custom-Form specific to a role.
- The fields can now be marked as required in fields' configuration (not ManyToManyFields for now).
- The instances of CremePropertyTypes can now be disabled (to not be proposed in forms).
- The configuration form for blocks on detailed views has been redesigned
(the pool of available blocks is now shared, blocks are draggable, descriptions are displayed).
- A portal which displays all the filters (used by list-views) has been added.
- A portal which displays all the views (of list-views) has been added.
* Persons :
- A many-to-many field "Spoken language(s)" has been added to Contacts ; it's hidden for old installations.
- The setting PERSONS_MENU_CUSTOMERS_ENABLED has been removed (you can add/remove the entry menu in 'creme_config').
* Billing :
- The field 'payment_type' ("Settlement terms") is now present in all 'billing' entity types (Quote, SalesOrder...).
Notice that if you upgrade your Creme installation, if you want to display this field in the detail-views, you
have to edit your block configuration (excepted for 'Invoice' of course).
* Reports :
- The CustomFields with type DATE can now be used as abscissa in ReportGraphs (only DATETIME was available).
* Emails :
- When you create an email from a detailed view, only one of the 2 bodies needs to be filled
(the other one is automatically filled from it).
* Assistants :
- In Alerts & ToDos bricks, the validated lines can be shown/hidden. The default behaviour is still the same.

Developers side :
-----------------
- The version of 'Django' is now "3.2".
You should probably read the following releases notes for Django versions :

2.2

- The work on class-based views continues ; lots ot new function-views have been converted, but the biggest
changes happened for list-views.
The compatibility with function-views is totally broken, but migrating the code of your own list-views should be easy in most cases.
This new class-based list-view is more stronger ; for example you can now easily customise the buttons & the actions.
- The way the registration in 'creme_config' is done has heavily changed.
Now a method in the files "apps.py" is used instead of the files "creme_config_register.py".
Lot of things can now be configured about a model :
- The forms for creation & edition can now be different ; the deletion form can be customised now.
- The creation, edition & deletion URLs can be customised.
- The creation, edition & deletion can be disabled.
- The Brick used to display its instances can be customised.

Other important changes:
- The code related to EntityFilters have been heavily reworked (but it won't be a problem if you did not modified it) :
- A lot of code from 'creme_core.models.EntityFilterCondition' has moved to a new package : 'creme_core.core.entity_filter'.
- The code of the forms has notably been split (fields/widgets/forms).
- A new registry has been created to register handlers (which contain the behaviour code which was in 'EntityFilterCondition') & operands (new name for 'EntityFilterVariable').
- The code of the search in list-views has been massively reworked.
The old code was monolithic ; the new one is more extensible & customisable : it is separated in form/fields/widgets (like regular forms, plus some specialization).
A tree-registry has been created in order to easily customise the search-fields used for each column of the list-views
(see 'AppConfig.register_search_fields()' & 'creme_core.gui.listview.search.search_field_registry').

Non breaking changes :
----------------------
Deprecations :
- In 'creme_core.models':
- The method 'CremePropertyType.get_compatible_ones()' is deprecated ; use 'CremePropertyType.objects.compatible()' instead.
- The method 'Relation.get_compatible_ones()' is deprecated ; use 'RelationType.objects.compatible()' instead.
- The method 'Relation.filter_in()' is deprecated.
- A custom object manager has been added to 'bricks.BrickDetailviewLocation' :
- The method 'config_exists()' is deprecated ; use '.objects.filter_for_model()' instead.
- The method 'create_if_needed()' is deprecated ; use '.objects.create_if_needed() instead.
- The method 'create_4_model_brick()' is deprecated ; use '.objects.create_for_model_brick()' instead.
- The method 'id_is_4_model()' is deprecated.
- A custom object manager has been added to 'bricks.BrickState' :
- The method 'get_for_brick_id()' is deprecated ; use '.objects.get_for_brick_id()' instead.
- The method 'get_for_brick_ids()' is deprecated ; use '.objects.get_for_brick_ids()' instead.
- The method 'bricks.RelationBrickItem.create()' is deprecated ; use '.objects.create_if_needed()' instead.
- In 'creme_core.forms' :
- The class 'base.CremeModelWithUserForm' is deprecated ; use 'CremeModelForm' instead.
BEWARE : if you have a "Meta.fields" in you form, you may have to add "user".
- The method 'relation._RelationsCreateForm._hash_relation()' is deprecated.
- In 'creme_core.views' :
- In 'relation', these function-views are deprecated : 'delete_all()' & 'json_entity_rtypes()'.
The constant 'JSON_PREDICATE_FIELDS' is deprecated too.
- The mixin class 'generic.wizard.PopupWizardMixin' is deprecated ; use a class inheriting the base class 'generic.wizard.AbstractWizardView' instead.
- The method 'creme_core.enumerators.EntityFilterEnumerator.efilter_as_dict()' is deprecated ; use 'instance_as_dict()' instead.
- The function 'creme_core.utils.queries.get_q_from_dict()' is deprecated ; use 'django.db.models.query.Q(my_dict)' instead.
- The templatetags "{% get_export_backends %}" & "{% get_import_backends %}" (from the lib "creme_core_tags") are deprecated.
- These template files in "creme_core/generics/blockform/" are deprecated :
- add_wizard.html (use "add-wizard.html" instead).
- add_wizard_popup.html (use "add-wizard-popup.html" instead).
- edit_wizard_popup.html (use "edit-wizard-popup.html" instead).
- wizard_popup.html (use "base-wizard.html" instead).
- In JavaScript :
- The function 'creme.utils.appendInUrl()' is deprecated; use the function 'creme.utils.goTo()' or the class 'creme.ajax.URL' instead.
- The method 'creme.lv_widget.selectedLines()' is now deprecated; Use "$(list).list_view('selectedRows')" instead.
- Apps :
* Creme_config :
- The use of a module "creme_config_register" in an app is deprecated ; add a method "register_creme_config()" in the AppConfig instead.
- The function-view 'views.creme_property_type.delete()' (URL named "creme_config__delete_ptype") is deprecated ;
use the class 'creme_core.views.creme_property.PropertyTypeDeletion' (URL named "creme_core__delete_ptype") instead.
* Persons :
- The method 'models.AbstractOrganisation.get_all_managed_by_creme()' is deprecated ; use '.objects.filter_managed_by_creme()' instead.
* Activities :
- The method 'models.AbstractActivity.is_auto_orga_subject_enabled()' is deprecated ; use the function 'utils.is_auto_orga_subject_enabled()' instead.
- The method 'models.AbstractActivity.get_title_for_calendar()' is deprecated ; use the attribute 'title' instead.
- Some class-methods of 'models.AbstractActivity' have ben moved to a new manager :
- The method 'get_future_linked()' is deprecated ; use '.objects.future_linked()' instead.
- The method 'get_future_linked_for_orga()' is deprecated ; use '.objects.future_linked_to_organisation()' instead.
- The method 'get_past_linked()' is deprecated ; use '.objects.past_linked()' instead.
- The method 'get_past_linked_for_orga()' is deprecated ; use '.objects.past_linked_to_organisation()' instead.
- Several static-methods of 'models.Calendar' are deprecated :
- get_user_calendars().
- get_user_default_calendar() (use '.objects.get_default_calendar()' instead).
- new_color() (use '.objects.new_color()' instead).
- _create_default_calendar()' (use '.objects.create_default_calendar()' instead).
* Commercial :
- The template filter "|has_quickform" (from the lib "commercial_tags") is deprecated ; use "|ctype_has_quickform" (lib "creme_ctype") instead.
* Billing :
- 'constants.DISPLAY_PAYMENT_INFO_ONLY_CREME_ORGA' is deprecated ; use 'billing.settings_keys.payment_info_key.id' instead.
- These templates are deprecated :
- billing/frags/button_convert2invoice.html
- billing/frags/button_convert2order.html
- The JavaScript function 'creme.billing.generateInvoiceNumber()' is deprecated; use the action named "billing-hatmenubar-invoice-number" instead.
* Opportunities :
- 'constants.SETTING_USE_CURRENT_QUOTE' is deprecated.
- These methods of 'models.AbstractOpportunity' are deprecated: 'get_contacts()', 'get_products()', 'get_responsibles()', 'get_services()'.
* Reports :
- The function 'views.graph.cast_order()' is deprecated ; use the class 'creme_core.utils.meta.Order' instead.
- The JavaScript function 'creme.reports.exportReport()' is deprecated.
* Mobile :
- The template filter "|employers" is deprecated ; use the method 'AbstractContact.get_employers()' (so "my_contact.get_employers" in the template) instead.
* Crudity :
- The filter "|truncate" (from the lib "crudity_tags") is deprecated ; use "|truncatewords" and "|truncatewords" instead.
* Events :
- The template file "creme/events/templates/events/lv_button_link_contacts.html" is deprecated.
A string permission has been added : 'creme_core.auth.SUPERUSER_PERM'.
In 'creme_core.models' :
- Two new values for the field attribute "on_delete" are available in 'creme_core.models.deletion' : 'CREME_REPLACE' & 'CREME_REPLACE_NULL'.
They act respectively like regular PROTECT & SET_NULL, but they indicate to 'creme_config' that a
replacement value can be proposed to the user when an instance is deleted.
- The model-fields 'fields.CTypeForeignKey' & 'fields.CTypeOneToOneField' accept now a model class directly.
- A new method 'get_4_keys()' ahs been added in the manager of 'SettingValue' to retrieve several values at once.
- The model 'BrickState' can now store extra data in a JSON field to manage specific states.
- It's now possible to check already retrieved entities with an EntityFilter (see the new method 'accept()').
In 'creme_core.views' :
- Generic/base deletion views have been added.
- The list-views (& so their popup version) have now a <no-selection> mode.
In 'creme_core.forms' :
- Two new form-fields have been added : 'fields.EnhancedMultipleChoiceField' & 'fields.EnhancedModelMultipleChoiceField'.
They are Multiple[model]ChoiceField which allow to force some values & add help text to each choice.
- The label of the creation button in selectors can now be customised.
It's now possible to clean a 'FileField' in inner-edition. 'FileFields' are always excluded from choice of field in the bulk-update form.
A shortcut function function has been added : 'creme_core.shortcuts.get_bulk_or_404()'.
A decorator for the per-request cache has been added: 'creme_core.global_info.cached_per_request'.
In 'creme_core.core' :
- A method 'paginator.FlowPaginator.get_page()' has been added.
- A new system for ordering query has been introduced : 'creme_core.core.sorter'.
- You can check if your DB server is case-sensitive with this new function : 'db.is_db_case_sensitive()'.
- The calls to 'enumerable._EnumerableRegistry.register_*()' can now be chained.
A new assertion has been added to help the unit testing of forms : 'assertFormInstanceErrors()'.
In JavaScript, a method 'creme.component.Action.stack()', that returns previous actions chained by 'after()', has been added.

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- In 'creme_core.models' :
- The class 'entity.EntityAction' has been removed.
- In 'entity.CremeEntity', these methods have been removed : 'allowed_unicode()' & 'get_entity_m2m_summary()'.
- The function 'lock.mutex_autolock()' has been removed.
- In 'creme_core.core' :
- The class 'function_field.FunctionFieldsManager' has been removed.
- The method 'reminder.ReminderRegistry.itervalues()' has been removed.
- In 'creme_core.templatetags.creme_core_tags' :
- These filters have been removed: "|get_tag", "|xrange", "|allowed_unicode".
- These tags have been removed: "{% get_field_verbose_name %}", "{% get_viewable_fields %}".
- In 'creme_core.views' :
- The argument "q_filter" of the list-view do not manage the old "dictionary" format (use 'QSerializer' instead).
- In 'generic', these functions have been removed :
- add.add_entity(), add.add_to_entity(), add.add_model_with_popup().
- edit.edit_entity(), edit.edit_related_to_entity(), edit.edit_model_with_popup().
- popup.inner_popup(), portal.app_portal()
- 'listview._clean_value()'.
- The function 'enumerable.json_list_enumerable()' has been removed.
- The function 'quick_forms.add()' has been removed.
- In 'creme_core.utils' :
- The function 'chunktools.iter_splitlinechunks()' has been removed.
- The function 'db.reorder_instances()' has been removed.
- In the function 'queries.get_q_from_dict()', the "~" feature has been removed.
- In the class 'creme_core.backends._BackendRegistry' these methods have been removed : 'iterbackends()' & 'iterkeys()'.
- The signal 'creme_core.signals.form_post_save' has been removed.
- The method 'creme_core.gui.menu.CreationFormsItem.verbose_unicode()' has been removed.
- The method 'creme_core.forms.creme_property._AddPropertiesForm._create_properties()' has been removed.
- 'creme_core.constants.MODELBLOCK_ID' has been removed.
- These template files of "creme/creme_core/templates/creme_core/" have been removed :
- generics/inner_popup.html
- generics/portal.html
- generics/blockform/add_popup.html, generics/blockform/edit_popup.html, generics/blockform/link_popup.html.
- generics/blockformset/add_popup.html, generics/blockformset/base.html.
- generics/form/add_innerpopup.html, generics/form/edit_innerpopup.html.
- templatetags/quickforms_panel.html
- In JavaScript, the function 'creme.relations.addRelationTo()' has been removed.
- Apps :
* Persons :
- In 'forms.contact.RelatedContactForm' :
- The argument "linked_orga" is mandatory.
- The attribute "rtype" can not be set with the 'initial' data any more.
- The deprecated function-views have been removed in :
- views.address
- views.contact
- views.organisation
* Documents :
- The function-views have been removed.
* Activities :
- 'constants.DISPLAY_REVIEW_ACTIVITIES_BLOCKS' has been removed.
- These methods of 'models.AbstractActivity' have been removed :
- _get_linked_for_ctypes_aux(), get_future_linked_for_ctypes(), get_past_linked_for_ctypes()
- display_review()
- The deprecated function-views of 'views.activity' have been removed.
- In 'views.bricks' :
- The function-view 'delete_participant()' has been replaced by the class 'ParticipantRemoving'.
- The function-view 'unlink_activity()' has been replaced by the class 'ActivityUnlinking'.
- The JavaScript function 'creme.activities.exportAsICal()' have been removed.
- These templates in "creme/activities/templates/activities/" : "add_popup_activity_form.html", "view_activity_popup.html" & "frags/ical_list_view_button.html".
* Products :
- The deprecated function-views have been removed in :
- views.product
- views.service
* Billing :
- 'constants.CURRENCY' has been removed.
- The method 'registry.AlgoRegistry.itervalues()' has been removed.
- In 'models.AbstractTemplateBase', the method 'get_verbose_status()' & the property 'verbose_status' have been removed.
- The deprecated function-views have been removed in :
- views.credit_note
- views.invoice
- views.line
- views.quote
- views.sales_order
- views.templatebase
- The module 'views.workflow' has been removed.
- The JavaScript function 'creme.billing.exportAs()' has been removed.
* Opportunities :
- These classes in 'forms.opportunity' have been removed : 'OpportunityEditForm' & 'OpportunityCreateForm'.
- The method 'models.AbstractOpportunity.get_weighted_sales()' has been removed.
- The function-views have been removed in 'views.opportunity'.
* Commercial :
- The class 'forms.salesman.SalesManCreateForm' has been removed.
- The method 'models.CommercialApproach.get_approaches_for_ctypes()' has been removed.
- The deprecated function-views have been removed in :
- views.act
- views.salesman
- views.strategy
* Reports :
- In 'bricks.ReportGraphBrick', the variable "instance_block_id" is not injected in the context any more.
- The method 'report_aggregation_registry.FieldAggregationRegistry.itervalues()' has been removed.
- In 'models.graph.AbstractReportGraph' :
- these methods have ben removed: 'get_fetcher_from_instance_block()' & 'create_instance_block_config_item()'.
- The nested class 'InstanceBlockConfigItemError' has been removed.
- The deprecated function-views have been removed in :
- views.graph
- views.report
- The template file "creme/reports/templates/reports/frags/report_export_filter.html" has been removed.
* Assistants :
- The methods 'models.Action.get_actions_*()' have been removed.
- The methods 'models.Alert.get_alerts*()' have been removed.
- The methods 'models.Memo.get_memos*()' have been removed.
- The methods 'models.ToDo.get_todos*()' have been removed.
- The methods 'models.UserMessage.get_messages*()' have been removed.
* Emails :
- These classes in 'forms.mail' have been removed : 'TemplateSelectionForm' & 'EntityEmailFromTemplateForm'.
- The deprecated function-views have been removed in :
- views.campaign
- views.mail
- views.mailing_list
- views.sending
- views.template
- These templates in "creme/emails/templates/emails": "popup_sending.html", "view_email.html" & "view_entity_mail_popup.html".
- Tickets :
- The method 'models.AbstractTicket.get_resolving_duration()' has been removed.
- The function-views have been removed.
* Geolocation :
- The function 'utils.get_setting()' has been removed.
* Mobile :
- The deprecated function-views have been removed.
* Events :
- In 'views.event', the deprecated function-views have been removed.
* Graphs :
- In 'views.graph', the deprecated function-views have been removed.
* Projects :
- The deprecated function-views have been removed in :
- views.project
- views.task
* Polls :
- The deprecated function-views have been removed in :
- views.campaign
- views.poll_form
- views.poll_reply
* Recurrents :
- The function-views have been removed.
* CTI :
- The deprecated function-views have been removed ('abstract_add_*()' & 'add_*()').
* SMS :
- The function-views have been removed in :
- views.campaign
- views.messaging_list
- views.template
- The template file "creme/sms/templates/sms/popup_sending.html" has been removed.
About the upgrade to 'Django 2.0' :
- In form fields constructors, positional arguments must be replaced by keyword arguments.
- The imports <from django.conf.urls import url> should be replaced by <from django.urls import re_path>.
- In custom model fields, the argument "context" of method 'from_db_value()' should be removed.
- The internal cache management of 'ForeignKey' has slightly changed ; a internal '_state' attribute has been added in instances.
About the upgrade to 'Django 2.1' :
- The function 'django.template.defaultfilters.linebreaks()' generates "<br>" instead of "<br />".
About the upgrade to 'Django 2.2'.
- The function 'django.utils.http.urlencode()' now raises TypeError if None is passed as a value to encode.
- When performing queries like '.annotate().values()' (GROUP BY), an explicit order_by() should be made.
If you have coded your own entity class with a "description" field, you should migrate it to store your data in CremeEntity table.
If you have written a creation form/view which creates some (not internal) Relations,
it can now fail because of duplicated Relationships if you don't use the safe creation methods ('Relation.objects.safe_create()' & 'Relation.objects.safe_multi_save()').
- In forms, you should use the new method 'CremeEntityForm._get_relations_to_create()'.
- In views, use the argument "forced_relations" in 'get_form_kwargs()' instead of creating the Relation in the view.
The "development" mode of the media generator has been removed. It was broken & so nobody used it.
- These settings have been removed from 'settings.py' : "MEDIA_DEV_MODE" & "DEV_MEDIA_URL".
- The middleware "mediagenerator.middleware.MediaMiddleware" is not available anymore.
The method 'creme_core.auth.entity_credentials.EntityCredentials.filter_entities()' can now raise an exception ('EntityCredentials.FilteringError')
if the credentials use an EntityFilter on specific fields (so a 'QuerySet' on 'CremeEntity' is not possible).
In 'creme_core.models' :
- The method 'base.CremeModel._delete_m2m()' has been removed.
- The argument of 'relation.RelationType.is_compatible()' is positional only now.
- In 'entity_filter.EntityFilterCondition' :
- The constructor expects the new argument "model" to be given if you don't pass the argument "filter".
- The nested class 'ValueError' has been removed.
- These attributes have been removed :
- EFC_SUBFILTER, EFC_FIELD & other type IDs (see new module 'creme_core.core.entity_filter.condition_handler').
- EQUALS, IEQUALS & other operator IDs (see new module 'creme_core.core.entity_filter.operators').
- _subfilter_cache
- _GET_Q_FUNCS, _GET_DISTINCT_FUNCS
- _OPERATOR_MAP, _FIELDTYPES_ALL, _FIELDTYPES_ORDERABLE, _FIELDTYPES_RELATED, _FIELDTYPES_NULLABLE.
- These methods have been removed :
- build_4_customfield() (use 'creme_core.core.entity_filter.condition_handler.CustomFieldConditionHandler.build_condition()' instead).
- build_4_datecustomfield() (use 'creme_core.core.entity_filter.condition_handler.DateCustomFieldConditionHandler.build_condition()' instead).
- build_4_field() (use 'creme_core.core.entity_filter.condition_handler.RegularFieldConditionHandler.build_condition()' instead).
- build_4_date() (use 'creme_core.core.entity_filter.condition_handler.DateRegularFieldConditionHandler.build_condition()' instead).
- build_4_property() (use 'creme_core.core.entity_filter.condition_handler.PropertyConditionHandler.build_condition()' instead).
- build_4_relation() (use 'creme_core.core.entity_filter.condition_handler.RelationConditionHandler.build_condition()' instead).
- build_4_relation_subfilter() (use 'creme_core.core.entity_filter.condition_handler.RelationSubFilterConditionHandler.build_condition()' instead).
- build_4_subfilter() (use 'creme_core.core.entity_filter.condition_handler.SubFilterConditionHandler.build_condition()' instead).
- _get_q_*(), _load_daterange(), _build_daterange_dict().
- In 'entity_filter.EntityFilter', these methods have been removed : 'resolve_variable()' & 'get_variable()'.
- In 'entity_filter', these classes have been removed :
- EntityFilterVariable & _CurrentUserVariable (see new module 'creme_core.core.entity_filter.operands').
- _ConditionOperator, _IsEmptyOperator, _RangeOperator (see new module 'creme_core.core.entity_filter.operators').
In 'creme_core.core' :
- The class 'entity_cell.EntityCell' has been reworked (some parts are now useless) :
- These attributes of have been removed : 'editable', 'filter_string', 'has_a_filter', 'sortable'.
- The class attribute 'EntityCellCustomField._CF_PATTERNS' has been removed.
- In 'function_field.FunctionField' :
- The method 'populate_entities()' is now a regular method (it was a 'classmethod').
- The class attributes "has_filter" & "choices" have been removed.
- The class method "filter_in_result()" has been removed ; use the new class attribute "search_field_class" instead.
In 'creme_core.views' :
- In 'generic.listview' :
- The constants 'MODE_SINGLE_SELECTION' & 'MODE_MULTIPLE_SELECTION' has been removed (see the enum 'SelectionMode').
- The function-views 'list_view()' has been replaced by the class 'EntitiesList'.
- The function-views 'list_view_popup()' has been replaced by the class 'BaseEntitiesListPopup'.
- These functions have been removed : 'list_view_content()', '_build_entities_page()', '_build_entity_queryset()', '_build_extrafilter()', '_select_entityfilter()', '_build_rowscount()'.
- The GET/POST argument "sort_field" has been renamed "sort_key".
- The GET/POST argument "sort_order" value should be "ASC"/"DESC" (instead of ""/"-") ("" -- for ASC -- still works by the way).
- The GET/POST argument "o2m" has been renamed "mode" & accept only "single", "multiple" & "none" values.
- These views of 'entity' are now class-based :
- 'clone()' has been replaced by the class 'Clone'.
- 'delete_related_to_entity()' has been replaced by the class 'RelatedToEntityDeletion'.
- 'list_view_popup()' has been replaced by the class 'EntitiesListPopup'.
- 'search_and_view()' has been replaced by the class 'SearchAndView'.
- 'select_entity_for_merge()' has been replaced by the class 'EntitiesToMergeSelection'.
- 'merge()' has been replaced by the class 'Merge'.
- These views of 'creme_property' are now class-based :
- 'delete_from_type()' has been replaced by the class 'PropertyFromFieldsDeletion'.
- 'delete_type()' has been replaced by the class 'PropertyTypeDeletion'.
- The function-view 'bricks.set_state()' has been replaced by the class 'BrickStateSetting'.
- These views of 'entity_filter' are now class-based :
- 'delete()' has been replaced by the class 'EntityFilterDeletion'.
- 'get_for_ctype()' has been replaced by the class 'EntityFilterChoices'.
- These views of 'header_filter' are now class-based :
- 'delete()' has been replaced by the class 'HeaderFilterDeletion'.
- 'get_for_ctype()' has been replaced by the class 'HeaderFilterChoices'.
- The function-view 'job.delete()' has been replaced by the class 'JobDeletion'.
- These views of 'relation' are now class-based :
- 'select_relations_objects()' has been replaced by the class 'RelationsObjectsSelectionPopup'.
- 'delete()' has been replaced by the class 'RelationDeletion'.
- 'delete_similar()' has been replaced by the class 'RelationFromFieldsDeletion'.
- The function-view 'search.light_search()' has been replaced by the class 'LightSearch'.
- In 'enumerable' :
- The function-view 'json_list_enumerable_custom()' has been replaced by the class 'CustomFieldEnumsView'.
- The function-view 'json_list_userfilter()' has been replaced by the class 'creme_core.views.entity_filter.UserChoicesView'.
- The method 'ChoicesView.get_model()' has been removed.
- The URL named "creme_core__efilter_user_choices" has changed (no change if you used 'reverse()' of course).
- The view which exports the data from list-views as CSV/XLS has changed :
- The function-view 'list_view_export.dl_listview()' has been replaced by the class-based view 'mass_export.MassExport'.
- The URL "creme_core/list_view/download" (named "creme_core__dl_listview") has been replaced by the URL "creme_core/mass_export" (named "creme_core__mass_export").
Only GET arguments are used for filter, search ...etc (i.e. stored state is not used any more) ; the GET argument "list_url" is not used anymore.
In 'creme_core.gui' :
- The function 'field_printers.print_integer()' returns always a string now (it could return an integer).
- The method 'gui.bricks._BrickRegistry.register_4_model()' does not accept brick class with <id_ != constants.MODELBRICK_ID> (tips: inherit the class 'EntityBrick').
- In the class 'listview.ListViewState' :
- The attribute "sort_field" has been renamed "sort_cell_key".
- These methods have been removed: 'set_sort()', '_get_default_sort()', '_get_sortfield()', '_get_regular_sortfield()'.
- The internal class '_OrderedField' has been removed.
In 'creme_core.forms' :
- The class 'base.CremeEntityForm' injected the "help_text" in widgets ; it's an old un-documented behaviour which has been removed (because it seems useless now).
- In 'entity_filter', the forms now use a registry to know available handlers & operators.
- The fields '*_conditions' have been removed & replaced by fields added in the constructor (with new names).
- The constructor has a new mandatory argument: "efilter_registry".
- The fields & widgets have now an attribute "efilter_registry" which should be filled to get a satisfactory behaviour (e.g. classical operators are proposed).
- In 'header_filter' :
- The class 'FieldConditionWidget' has been renamed 'FieldConditionSelector'.
- The class 'CustomFieldConditionWidget' has been renamed 'CustomFieldsConditionsWidget'.
In 'creme_core.utils.date_period.SimpleValueDatePeriod' (& child classes), the method '_ungettext()' has benn renamed '_ngettext()'.
In 'creme_core.templatetags' :
- The template-filter "|isiterable" (from "creme_core_tags") has been renamed "|is_iterable".
- In the library "creme_listview" :
- The tag "{% get_listview_entity_filters %}" has been replaced by "{% listview_entity_filters %}" (the related template file has changed too).
- The tag "{% get_listview_headerfilters %}" has been replaced by "{% listview_header_filters %}" (the related template file has changed too).
- The tag "{% get_listview_columns_header %}" has been removed (and the related template file too).
- These template-tags take only keyword-arguments now :
- From the lib "creme_history" : "{% history_summary %}".
- From the lib "creme_listview" :
- {% listview_entity_actions %}
- {% listview_header_actions %}
- {% listview_header_colspan %}
- {% listview_td_action_for_cell %}
From the lib "creme_query" : "{% query_entities_count %}".
From the lib "creme_search" : "{% search_form %}".
In 'creme_core.templates' :
- These template files have been removed :
- creme_core/generics/list_entities.html
- creme_core/frags/list_view.html
- creme_core/frags/list_view_content.html (see "creme_core/listview/content.html")
- "creme_core/forms/widgets/efilter-cfield-conditions.html" has been replaced by "creme_core/forms/widgets/efilter-conditions-list.html".
- In the template "creme_core/generics/blockform/base.html", the "persist" inputs have been removed.
- The structure of several pages has changed :
- In "creme_core/base.html", the node '<div id="sub_content">' has been removed.
- In "creme_core/detailview.html", the node '<div class="detailview">' has been removed.
- In "creme_core/my_page.html", the node '<div class="my_page">' has been removed.
- In "creme_config/portal.html", the node '<div class="portal ...">' has been removed.
In JavaScript :
- The signature of 'creme.utils.goTo()' has changed ; the argument are now (url, data, target) instead of (url, target).
- The class 'creme.ajax.Query' now sends an "error" event instead of a "cancel" one when an empty URL is given.
- The actions of 'creme.widget.ActionList' have been renamed :
- 'creme.widget.ActionButton' became 'creme.widget.SelectorAction'.
- 'creme.widget.ResetActionButton' became 'creme.widget.ResetSelectorAction'.
- 'creme.widget.CreateActionButton' became 'creme.widget.CreateSelectorAction'.
- The constructor of 'creme.search.SearchBox' has been completely reworked ;
'creme.search.SearchBox(<element query string>, <search url>, <advanced search url>)' is replaced by 'creme.search.SearchBox({searchUrl: <search url>, advancedSearchUrl: <advanced search url>).bind(<element>)'
- The main menu controller has been reworked ; theses functions has been removed 'creme.menu.bindEvents', 'creme.menu.openQuickForm' & 'creme.menu.openCreateAnyDialog'.
- There are several changes in 'creme.component.Action' :
- In the method 'Action.after()', the arguments "done" of an action are given to the following one only if the option "passArgs" is <true>.
- The "source" action is no longer given as first 'Action.start()' argument to the following action.
- 'creme.entity_cell.EntityCellsWidget(<element_id>, <samples JSON>)' is replaced by 'creme.entity_cell.EntityCellsWidget({samples: <samples dict>}).bind(<element>)'
- In 'creme.jobs', the functions 'decorateJobStatus()' & 'checkJobManager()' have been removed ; use components '*JobsMonitor' instead.
- In 'list_view.core' :
- "list_view('options', <...>)" no longer exists and is replaced by "list_view('prop', <...>)".
- These methods have been removed :
- The method 'countEntities()' (renamed to 'selectedRowsCount()').
- 'getSelectedEntities()' & 'getSelectedEntitiesAsArray()' (use 'selectedRows()' instead).
- 'getKdSubmit()' & 'setKdSubmit()'
- 'setSubmit' & 'getSubmit' (see new method 'submitState()').
- 'serializeMe()' (renamed to 'state()').
- 'setReloadUrl()' & 'getReloadUrl()' (use "list_view('prop', 'reloadUrl', [<url>])" ).
- 'isLoading()' (use "list_view('prop', 'isLoading')" ).
- 'getActionBuilders()' (use "list_view('prop', 'actionBuilders', [<builders>])" ).
- These options have been removed :
- "o2m" (renamed to "multiple").
- "reload_url" (renamed to "reloadUrl").
- "selected_rows", "selectable_class", "selected_class", "checkbox_selector", "all_boxes_selector" & "entity_separator".
- "kd_submitHandler".
- "beforeSubmit", "afterSubmit" & "submitHandler".
- "user_page" & "id_container".
- In 'creme.lv_widget' :
- 'creme.lv_widget.initialize()' has moved to 'creme.lv_widget.ListViewLauncher._initController'.
- 'creme.lv_widget.listViewAction' has been replaced by 'creme.lv_widget.ListViewDialogAction'.
- Theses function have been removed : 'deleteFilter()', 'findList()' & 'handleSort()'.
- In 'creme.utils', these old inner-popup functions have been removed :
- innerPopupUUID()
- showInnerPopup()
- reloadDialog()
- innerPopupFormAction()
- closeDialog()
- handleDialogSubmit()
The class 'creme_core.tests.views.base.CSVImportBaseTestCaseMixin' has been renamed 'MassImportBaseTestCaseMixin'.
Apps :
* Creme_config :
- in 'urls' :
- The URL "creme_config__edit_home_bricks" takes now an argument.
- The URL "creme_config__delete_home_brick" has a different behaviour ; the argument "id" has been replaced by the argument "role".
- The URL "creme_config__delete_instance" has changed ; it takes an argument "object_id", & returns a form.
- In 'creme_config.views' :
- Almost all function-views have been replaced by class-based views.
- All the wizard-views now inherit 'creme_core.views.generic.wizard.CremeWizardView' ;
so the attribute "wizard_title" became "title", & "permission" became "permissions".
- The nested class 'views.bricks.RelationCTypeBrickWizard._FieldsStep' has been removed.
- The nested class 'views.fields_config.FieldsConfigWizard._ConfigStep' has been removed.
- In 'views.user_role' :
- The class 'CredentialsAdding' has been replaced by 'CredentialsAddingWizard'.
- The class 'CredentialsEdition' has been replaced by 'CredentialsEditionWizard'.
- The nested classes 'RoleCreationWizard._CredentialsStep' & 'RoleEditionWizard._ExportableCTypesStep' have been removed.
- In 'forms.user_role' :
- The function 'forms.user_role.EmptyMultipleChoiceField()' has been removed.
- Theses classes have been removed : 'CredentialsGeneralStep', 'UserRoleCredentialsStep' & 'AddCredentialsForm'.
- The method '_UserRoleWizardFormStep.partial_save()' has been removed.
- The class 'forms.bricks.BrickHomeLocationsForm' has been removed.
- In 'bricks' :
- Many changes in the class 'BrickHomeLocationsBrick' & its template.
- In 'GenericModelBrick', the variable "model_name" is not injected in the context anymore.
- The template-filter "|is_custom" has been renamed "|config_is_custom".
* Persons :
- The method 'AbstractContact.get_employers()' now returns Organisations managed by the Contact too, and excludes deleted Organisations.
- The templatetag "{% persons_contact_first_employer %}" now excludes deleted Organisations.
- In the form 'forms.contact.RelatedContactForm', the fields "orga_overview" & "relation" have been removed.
* Documents :
- The template "documents/frags/previous.html" has been replaced by "documents/lv-button-previous.html".
* Activities :
- The function-view 'views.activity.get_types()' has been replaced by the class 'TypesChoices'.
- The function-view 'views.calendar.delete_user_calendar()' has been replaced by the class 'CalendarDeletion'.
- These function-views in 'views.calendar' have been removed :
- update_activity_date() (use the class 'ActivityDatesSetting' instead).
- user_calendar() (use the class 'CalendarView' instead -- beware, the template context has changed).
- get_users_activities() (use the class 'ActivitiesData' instead -- beware, it's now a GET view & the JSON has slightly changed).
- 'constants.MAX_ELEMENT_SEARCH' has been removed ; use these attributes of 'CalendarView' instead : 'calendars_search_threshold' & 'floating_activities_search_threshold'.
* Products :
- The function-view 'views.product.remove_image()' has been replaced by the class 'ImageRemoving'.
* Billing :
- In the class 'function_fields._BaseTotalFunctionField' (& child classes), the class-attribute "cache_attr" has been removed.
- The view named "billing__delete_related_cnote" now accepts only POST requests.
- The function-view 'views.convert.convert()' has been removed ; use the class 'Conversion' instead.
- The function-view 'views.credit_note.delete_related_credit_note()' has been replaced by the class 'CreditNoteRemoving'.
- The function-view 'views.payment_information.set_default()' has been replaced by the class 'PaymentInformationAsDefault'.
- The conversion matrix has changed. These cases have been removed (they were not used in the UI):
- CreditNote => Invoice
- Invoice => SalesOrder
* Opportunities :
- The function-view 'views.billing.current_quote()' has been replaced by the class 'CurrentQuoteSetting'.
- The function-view 'views.billing.generate_new_doc()' has been replaced by the class 'BillingDocGeneration'.
- The dict 'views.billing._GEN_BEHAVIOURS' has been removed.
* Commercial :
- The function-view 'views.strategy.delete_evalorga()' has been replaced by the class 'OrganisationRemoving'.
* Reports :
- The registrations are made in "apps.py" now & the method 'FieldAggregationRegistry.register()' has only one argument now.
- The function-view 'views.graph.fetch_graph()' has been replaced by the class 'GraphFetching'. Beware this new view does not return the "graph_id" any more (because it was useless).
- The function-view 'views.graph.fetch_graph_from_instancebrick()' has been replaced by the class 'GraphFetchingForInstance'.
- The class 'ReportGraphForm' does not inherit 'CremeEntityForm' any more ('CremeModelForm' instead).
* Assistants :
- The function-view 'views.user_message.delete()' has been replaced by the class 'UserMessageDeletion'.
* Emails :
- The function-view 'views.campaign.delete_ml()' has been replaced by the class 'MailingListRemoving'.
- In 'views.mail':
- The class 'EntityEmailWizard' now inherits 'AbstractWizardView' (so "permission" became "permissions" etc...).
- The nested class 'EntityEmailWizard._EmailCreationFormStep' has been removed.
- In 'views.mailing_list':
- The function '_delete_aux()' has been removed.
- These function-views has been removed :
- delete_contact() (replaced by the class 'ContactRemoving').
- delete_organisation() (replaced by the class 'OrganisationRemoving').
- delete_child() (replaced by the class 'ChildRemoving').
- The function-view 'views.signature.delete()' has been replaced by the class 'SignatureDeletion'.
- The function-view 'views.template.delete_attachment()' has been replaced by the class 'AttachmentRemoving'.
- The form class 'forms.mail.EntityEmailForm' inherits 'CremeModelForm' and not 'CremeEntityForm' anymore.
- In 'bricks.EmailRecipientsBrick' & 'bricks.SendingsBrick', "ct_id" is not injected in the context anymore.
- In 'buttons.EntityEmailLinkButton', "entity_email_ct_id" is not injected in the context anymore.
* Events :
- The constants 'INV_STATUS_MAP' & 'PRES_STATUS_MAP' have moved from 'views.event' to 'constants'.
* Graphs :
- The function-view 'views.graph.delete_relation_type()' has been replaced by the class 'RelationTypeRemoving'.
- The function-view 'views.root_node.delete()' has been replaced by the class 'RootNodeDeletion'.
* Polls :
- The function-view 'views.poll_form.get_choices()' has been replaced by the class 'LineChoices'.
- In 'forms.poll_reply.PollRepliesCreateForm' :
- The attribute "instance" has been removed.
- The special behaviour (removing related field & keeping the value fixed) of initial data for "pform", "campaign" & "persons" has been removed.
* Projects :
- The function-view 'views.resource.delete()' has been replaced by the class 'ResourceDeletion'.
- The function-view 'views.task.delete_parent()' has been replaced by the class 'ParentRemoving'.
- The function-view 'views.task.delete_activity()' has been replaced by the class 'ActivityDeletion'.
- The class 'forms.resource.ResourceCreateForm' does not inherit 'CremeEntityForm' any more.
* SMS :
- The function-view 'views.campaign.delete_messaging_list()' has been replaced by the class 'MessagingListRemoving'.
- The function-views 'views.messaging_list._delete_aux()/delete_contact()' have been replaced by the class 'ContactRemoving'.
- The templatetags "phonenumber" & "formatphone" have been renamed "sms_phonenumber" & "sms_formatphone".

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)

'creme.urls.handler403' is now a function (it was a string).
In 'creme_core.models' :
- The method 'auth.SetCredentials.set_value()' uses now keyword-arguments only.
- In 'entity_filter' :
- There were some changes in the JSON of 'EntityFilterCondition' for 'CustomFields':
- The key "value" became "values".
- The values are now always a list (old data generated by an old form which are not using list have been migrated).
- These functions have been removed : '_delete_relationtype_efc()' & '_delete_customfield_efc()'.
The return value of 'creme_core.forms.fields.MultiRelationEntityField._build_rtype_cache()' has changed : the IDs of CremePropertyTypes are now stored in a list.
In 'creme_core.views.entity_filter' these mixins have been removed : 'FilterCreationMixin' & 'FilterEditionMixin'.
About the module 'creme_core.gui.listview' :
- It has been split in several .py files.
- These methods of 'ListViewState' have been removed: 'clear_research()', 'handle_research()', 'get_q_with_research()', '_build_condition()', '_build_date_range_dict()', '_date_or_None()'.
- The function 'simple_value()' has been removed.
The list-views no longer support "whoami" in both POST & GET requests.
In the templatetag library "creme_listview", these functions have benn removed: '_build_bool_search_widget()', '_build_date_search_widget()' & '_build_select_search_widget()'.
In JavaScript, the class 'creme.action.ActionBuilderRegistry' has been renamed/moved as 'creme.component.FactoryRegistry'.
Apps :
* Creme_config :
- There are many changes in 'registry'.
- These functions of 'views.user_settings' have been removed : '_set_usersetting()', 'set_theme()' & 'set_timezone()'.
* Activities :
- These method of 'models.AbstractActivity' are deprecated : '_get_linked_aux()' & '_get_linked_for_orga()'.
- These functions of 'views.calendar' have been removed : '_activity_2_dict()', '_filter_authorized_calendars()', '_get_datetime()' & '_get_one_activity_per_calendar()'.
- There are some changes in the template "activities/templates/activities/calendar.html" (see the new 'CalendarView' context).
- In JavaScript :
- Some changes which follow the changes of "calendar.html".
- There are some changes to use the view 'ActivitiesData': GET instead of POST, "color" key instead of "calendar_color".
- The function 'creme.activities.calendar.loadCalendarEventListeners()' takes an additional argument ("select_calendars_url").
* Mobile :
- The instances of 'MobileFavorite' are now unique for the couple ('entity', 'user').
* Crudity :
- In JavaScript, the class 'creme.crudity.CrudityHatController' replaces the function 'refreshWaitingActions()'.

Page 2 of 5

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.