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 3 of 5

2.1

2.0

UPGRADE NOTE :
- You should create a all new virtual environment based on Python 3.5+
(e.g. "mkvirtualenv -p /usr/bin/python3XX" if you use 'mkvirtualenv')
and populate it with "pip install -r creme/requirements.txt" of course.
- Execute the well known commands "migrate", "generatemedia" & "creme_populate".

Users side :
------------
A list-view action has been added : "clone" (for entities which support cloning of course).
The style of the popup-dialogs has been improved (title & icon always in the header).
The image viewer has been improved.
Apps:
* Persons :
* A statistic has been added : count of prospects & suspects.
* Activities :
- A statistic has been added : average number of meetings/phone calls per month (since one year).
- The list-view button "Download as iCalendar" has been converted to a bulk action.
* Reports :
- You can now see the instances bricks related to a graph directly from the "Graphs" brick.
- A list-view action for Reports has been added : "export".
- The quick-search (in list-view) on the field <Report.filter> groups the filters by apps.
* Emails :
- Sendings have now a true detail-view :
- The template used for a sending can now be viewed.
- A link to the entity related to a mail has been added in the emails's brick.
- A list-view action & a bulk-action have been added for Emails : "resend".
* Tickets :
- A statistic has been added : count of not closed tickets.
* Opportunities :
- The statistics of 'opportunities' have been improved.
* Documents :
- A list-view action has been added for Documents: "download".
* Billing :
- A list-view action has been added for Invoice & Quote : "download".
* Events :
- The view to link contact has been improved.
The user is redirected to the event's contacts list-view (& not the event detail-view any more) ; there are better title, submission label & icon too.
* Assistants :
- The Alerts/ToDos/... which are related to a deleted entity are not displayed on their home bricks any more.

Developers side :
-----------------
In this version, there are 2 main changes for developers :
- We now use <Python 3.5> instead of <Python 2.7>.
You can find the complete release notes of Python versions here :
https://docs.python.org/3/whatsnew/3.0.html
https://docs.python.org/3/whatsnew/3.1.html
https://docs.python.org/3/whatsnew/3.2.html
https://docs.python.org/3/whatsnew/3.3.html
https://docs.python.org/3/whatsnew/3.4.html
https://docs.python.org/3/whatsnew/3.5.html
The code has not been fixed to "just work" ; lots of changes have been done to be more consistent.
For example, several methods called 'itervalues()' have been deprecated because their name was referencing the old dictionary API.
Lots of <%s-format> string have been converted to <{}-format">.
- Views are going to class :
- Almost all generic views of 'creme_core' are now class-based (but not list-views yet) ; the generic function-views are now deprecated.
All apps have been updated to use these new classes ; the function-views using old generic views have been deprecated (or sometimes removed).
- Lots of function-based views have been converted.
NB: removed functions are indicated in this changelog ; for the deprecated ones there are warnings.

Other important changes:
- The list-view action (for single & bulk actions) system has been totally reworked (Python & JavaScript sides).
Actions are now classes inheriting 'creme_core.gui.actions.UIAction', & are registered with 'CremeAppConfig.register_actions()' in your 'apps.py'.
So it's easier to add/override/remove them from another app.
- The registration of FunctionFields has been reworked. It's now external to the models (done in files 'apps.py' with 'CremeAppConfig.register_function_fields()') ;
so it's easier to add/override/remove them from another app.
- A new module, 'creme_core.core.enumerable', allows to retrieve & customise the choices related to a model-field.
It's used by list-views, filter form or ReportGraph.
- The old popup system is almost ready to be removed ; it's now only used by list-views & deprecated generic views ;
beware to use the new templates for popup when you use the new generic class-based views for popup
(if you don't set the attribute "template_name", the default value will be OK).
- The "qfilter" argument for list-view uses a new format, more powerful than the old one.
It's a true serialization of Q objects ; so 'OR' combinations can be used for example (only 'AND' were possible with the old format).

Non breaking changes :
----------------------
Deprecations :
- In 'creme_core.models' :
- The method 'entity.CremeEntity.allowed_unicode()' is deprecated ; use 'allowed_str()' instead.
- The class 'entity.EntityAction' is deprecated ; use 'creme_core.gui.actions.UIAction' and its registration mechanism instead.
- The function 'lock.mutex_autolock()' is deprecated ; use 'MutexAutoLock' as decorator instead.
- In 'creme_core.views' :
- The function-view 'generic.detailview.view_entity()' is deprecated ; use the class-based view 'EntityDetail' instead.
- In 'generic.add' :
- The function-view 'add_entity()' is deprecated ; use the class-based views 'CremeModelCreation' & 'EntityCreation' instead.
- The function view 'add_to_entity()' is deprecated ; use the class-based view 'AddingToEntity' instead.
- The function view 'add_model_with_popup()' is deprecated ; 'use the class-based view 'CremeModelCreationPopup' instead.
- In 'generic.edit' :
- The function-view 'edit_entity()' is deprecated ; use the class-based views 'CremeModelEdition' & 'EntityEdition' instead.
- The function-view 'edit_related_to_entity()' is deprecated ; use the class-based view 'RelatedToEntityEdition' instead.
- The function-view 'edit.edit_model_with_popup()' is deprecated ; use the class-based views 'CremeModelEditionPopup' & 'EntityEditionPopup' instead.
- In 'generic.listview' :
- In 'list_view()' & 'list_view_popup()', the format for the argument "qfilter" corresponding to 'get_q_from_dict()' is deprecated ;
use the new format which uses 'creme_core.utils.queries.Qserializer.dumps()' instead.
- The function '_clean_value()' is deprecated.
- The function-view 'generic.popup.inner_popup()' is deprecated ; use a class-based view instead.
- The function-view 'generic.portal.app_portal()' is deprecated.
- The function-view 'enumerable.json_list_enumerable()' is deprecated ; use the class-based view 'ChoicesView' instead.
- The function-view 'quick_forms.add()' is deprecated.
- The method 'creme_core.forms.creme_property._AddPropertiesForm._create_properties()' is deprecated.
- In the templatetag library "creme_core_tags" :
- {% get_field_verbose_name %} is deprecated ; use {% cell_4_regularfield %} from the lib "creme_cells" instead.
- {% get_viewable_fields %} is deprecated.
- The filter "|get_tag" is deprecated.
- The filter "|allowed_unicode" is deprecated ; use "|allowed_str" instead.
- The filter "|xrange" is deprecated ; use "|range" instead.
- The method 'creme_core.gui.menu.CreationFormsItem.verbose_unicode()' is deprecated ; use 'verbose_str()' instead.
- In 'creme_core.utils' :
- The function 'db.reorder_instances()' is deprecated ; use the class based-view 'creme_core.views.generic.order.ReorderInstances' instead.
- In 'queries.get_q_from_dict()', the "~" feature is deprecated ; use a 'django.db.models.query.Q' instead.
- The function 'chunktools.iter_splitlinechunks()' is deprecated (& broken if you pass bytes instead of str) ;
you can use the method 'django.core.files.base.File.__iter__()' instead for example.
- In 'creme_core.core' :
- The method 'reminders.ReminderRegistry.itervalues()' is deprecated ; use '__iter__()' instead.
- The class 'function_fields.FunctionFieldsManager' is deprecated ; use the new method 'CremeAppConfig.register_function_fields()' instead.
- 'creme_core.constants.MODELBLOCK_ID' is deprecated ; use 'MODELBRICK_ID' instead.
- The signal 'creme_core.signals.form_post_save' is deprecated.
- In 'creme_core.backends' :
- The method '_BackendRegistry.iterkeys()' is deprecated ; use the property '_BackendRegistry.extensions' instead.
- The method '_BackendRegistry.iterbackends()' is deprecated ; use the property '_BackendRegistry.backends' instead.
- These template files are deprecated :
- creme_core/generics/blockform/add_popup.html
- creme_core/generics/blockform/edit_popup.html
- creme_core/generics/blockform/link_popup.html
- creme_core/generics/blockformset/add_popup.html
- creme_core/generics/blockformset/base.html
- creme_core/generics/form/add_innerpopup.html
- creme_core/generics/form/edit_innerpopup.html
- creme_core/generics/inner_popup.html
- creme_core/generics/portal.html
- JavaScript:
- The function 'creme.utils.handleDialogSubmit()' is deprecated.
- The function 'creme.relations.addRelationTo' is now deprecated ; use 'creme.relations.AddRelationToAction' instead.
- Apps :
* Activities :
- These methods of 'models.AbstractActivity' are deprecated :
- display_review() (use <SettingValue.objects.get_4_key(setting_keys.review_key).value> instead)
- _get_linked_for_ctypes_aux()
- get_future_linked_for_ctypes()
- get_past_linked_for_ctypes()
- 'constants.DISPLAY_REVIEW_ACTIVITIES_BLOCKS' is deprecated ; use 'SETTING_DISPLAY_REVIEW' instead.
- The JavaScript function 'creme.activities.exportAsICal()' is deprecated ; use 'ExportAsICalAction' instead.
- These template files are deprecated :
- activities/view_activity_popup.html (use "activity-popup.html" instead).
- activities/add_popup_activity_form.html (use "forms/add-activity-popup.html" instead).
- activities/frags/ical_list_view_button.html
* Persons :
- In 'forms.contact.RelatedContactForm' :
- The use of initial values to fill "linked_orga" & "rtype" is deprecated ; use constructor argument instead.
- Leaving "linked_orga" argument empty is deprecated.
* Billing :
- 'constants.CURRENCY' is deprecated.
- The property 'models.AbstractTemplateBase.verbose_status' is deprecated.
- The method 'models.AbstractTemplateBase.get_verbose_status()' is deprecated ; use 'function_fields.TemplateBaseVerboseStatusField' instead.
- The method 'registry.AlgoRegistry.itervalues()' is deprecated ; use 'AlgoRegistry.algorithms' instead.
- The JavaScript function 'creme.billing.exportAs()' is deprecated ; use the action 'ExportDocumentAction' instead.
* Emails :
- The function 'views.sending.reload_mails_brick()' is deprecated ; use 'reload_sending_bricks()' instead.
- In 'forms.mail', the classes 'TemplateSelectionForm' & 'EntityEmailFromTemplateForm' are deprecated.
- These template files are deprecated :
- emails/popup_sending.html
- emails/view_email.html
- emails/view_entity_mail_popup.html
* Assistants :
- In the model 'Action' : the methods 'get_actions*()' are deprecated.
- In the model 'Alert' : the methods 'get_alerts*()' are deprecated.
- In the model 'Memo' : the methods 'get_memos*()' are deprecated.
- In the model 'ToDo' : the methods 'get_todos*()' are deprecated.
- In the model 'UserMessage' : the methods 'get_messages*()' are deprecated.
* Opportunities :
- The method 'models.AbstractOpportunity.get_weighted_sales()' is deprecated ; use 'function_fields.TurnoverField' instead.
- In 'forms.opportunity' :
- The class 'OpportunityCreateForm' is deprecated ; use 'OpportunityCreationForm' instead.
- The class 'OpportunityEditForm' is deprecated ; use 'OpportunityEditionForm' instead.
* Reports :
- The method 'report_aggregation_registry.FieldAggregationRegistry.itervalues()' is deprecated ; use the property 'FieldAggregationRegistry.aggregations' instead.
- The template file "reports/frags/report_export_filter.html" is deprecated ; use "forms/report-export-filter.html" instead.
* Commercial :
- The method 'models.CommercialApproach.get_approaches_for_ctypes()' is deprecated.
- The class 'forms.salesman.SalesManCreateForm' is deprecated.
* Geolocation :
- The function 'utils.get_setting()' is deprecated ; use 'SettingValue.objects.get_4_key()' instead.
* Tickets :
- The method 'models.AbstractTicket.get_resolving_duration()' is deprecated ; use 'function_fields.ResolvingDurationField' instead.
* SMS :
- The template file "sms/popup_sending.html" is deprecated.
A new hint, indicating when a swapped URL has never been defined, has been added (see 'creme.creme_core.conf.urls.Swappable') ;
it could "break" an existing application (because the code stops on a fatal error at starting), but it would indicate an existing bug.
The model 'creme_core.models.Relation' now explicitly avoids duplicates.
A new manager has been added, with 3 methods to handle this smoothly: safe_create(), safe_get_or_create() & safe_multi_save()
A new models field has been created : EntityCTypeForeignKey.
It looks like a GenericForeignKey, but it references only CremeEntities ; it uses a true ForeignKey for the entities, so it's possible to use classical filtering on FKs.
A specific manager has ben added to 'creme_core.models.SettingValue', with a method which keeps retrieved instances in a (per-request) cache.
A generic view to help the disabling of a URL has been added : the class-based view 'creme_core.views.generic.placeholder.ErrorView'.
A new collection has been added : 'creme_core.utils.collections.InheritedDataChain'.
It facilitates the writing of registries by models when data from parent classes are used too.
Two templatetags to store safely JSON data have been added : {% jsondata %} & {% blockjsondata %}.
A simple HTTP server has been added in unit tests to serve static files.
The command "i18n_empty" has been improved :
- The context is now used.
For example, an empty entry with a context is not ignored because an entry with he same 'msgid' (but without context) is filled.
- The line numbers in the PO files are now displayed.

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- The app 'activesync' is not available any more (its code is still in the repository but has not been ported to Python 3).
- In all apps :
- The configurable portal views (i.e. not 'mobile', not 'creme_config') & their templates have been removed.
- The methods 'portal_display()' of Bricks have been removed.
- The method 'register_setting_key()' of classes inheriting 'CremeAppConfig' is not called automatically anymore.
- The middleware class 'creme_core.middleware.exceptions.Beautiful403Middleware' has been removed.
- In 'creme_core.models.bricks' :
- In 'BlockDetailviewLocation', the methods 'create()'/'create_empty_config()' & the attribute 'ZONES' have been removed.
- In 'BlockPortalLocation', the method 'create()' & 'create_empty_config()' have been removed.
- The method 'BlockMypageLocation.create()' has been removed.
- In 'creme_core.views' :
- The functions 'bricks.reload_portal()' & 'bricks.render_portal_brick()' have been removed.
- The function 'exceptions.server_error()' has been removed.
- The function 'file_handling.fetch_resources()' has been removed.
- In 'creme_core.forms.widgets' :
- These functions have been removed : widget_render_input(), widget_render_hidden_input(), widget_render_context().
- The method 'EnhancedSelectOptions.render_label()' has been removed.
- In 'creme_core.gui' :
- The old API (activated by 'settings.OLD_MENU == True') in 'menu' has been removed.
- In 'bricks' :
- In 'BricksManager', the methods 'get_dependencies_map()' & '_get_dependencies_ids()' have been removed.
- The method '_BrickRegistry.get_compatible_portal_blocks()' has been removed.
- The attribute 'Brick.target_apps' has been removed.
- In 'buttons.ButtonsRegistry.register()', registering 'Button' instances is no more possible.
In all apps the global buttons instances have been removed.
- In 'creme_core.utils.dates', these deprecated functions have been removed :
- get_dt_to_iso8601_str()
- get_dt_from_iso8601_str()
- get_dt_from_json_str()
- dt_to_json_str()
- get_dt_from_str()
- get_date_from_str()
- These constants of 'creme_core.constants' have been removed :
- SETTING_BLOCK_DEFAULT_STATE_IS_OPEN
- SETTING_BLOCK_DEFAULT_STATE_SHOW_EMPTY_FIELDS
- In 'creme_core.core.reminders.ReminderRegistry.register()', registering an instance is not possible anymore.
- In 'creme_core.registry' :
- The exception class 'NotRegistered' has been removed.
- In 'CremeRegistry', the methods 'register()' & 'get()' have been removed.
- In 'bricks.HistoryBrick', the method '_populate_users()' has been removed.
- In 'creme_core.templatetags' :
- These templatetags have been removed : {% timedelta_pprint %}, {% ctype_is_registered_for_import %}, {% get_button_menu %}.
- In 'creme_bricks', about the tag {% brick_display %}, the option "render='portal'" has been removed.
- The templatetag 'creme_listview.get_listview_columns_header' does not inject the variable "can_merge_entities" in the context any more.
- In 'creme_menu' :
- The old menu API has been removed.
- The tags {% get_prefered_menu %} & {% get_last_items_menu %} have been removed with their templates.
- In 'creme_search', the tag {% get_search_panel %} has been removed.
- The templatetags library "creme_quickforms" has been removed (its only templatetag was deprecated).
- In JavaScript :
- In 'creme.utils', the functions 'openQuickForms()' & 'confirmBeforeGo()' have been removed.
- In 'creme.menu' :
- The global variable 'actions' has been removed.
- The functions 'NavIt()' & 'HNavIt()' have been removed ; the lib "jquery.navIt.0.0.6.js" has been removed too.
- The function 'creme.menu.sideMenu()' has been removed ; the related lib "fg.menu" has been removed too.
- Apps :
* Creme_config :
- In 'views.bricks' :
- The class 'PortalBricksWizard' has been removed.
- The function 'edit_portal()' & 'delete_portal()' have been removed.
- In 'forms.bricks' :
- The method '_BrickLocationsForm._build_portal_locations_field()' has been removed.
- These classes have been removed: _BlockPortalLocationsForm, BlockPortalLocationsAddForm & BlockPortalLocationsEditForm.
- The function 'utils.generate_portal_url()' has been removed.
* Documents :
- In 'views.ajax', the functions 'get_child_documents()' & 'get_child_documents()' have been removed.
* Activities :
- In the view 'calendar.get_users_activities()', the URL argument "calendar_ids" has been removed.
- In 'bricks', the methods 'FutureActivitiesBrick._get_queryset_for_ctypes()' & 'PastActivitiesBrick._get_queryset_for_ctypes()' have been removed.
* Assistants :
- The method 'bricks._AssistantsBrick._get_contenttype_id()' has been removed.
- All the methods '_get_queryset_for_portal()' of the Bricks have been removed.
- The global variables 'reminders.reminder_alert' & 'reminders.reminder_todo' have been removed.
* Emails :
- The class 'bricks.SignaturesBrick' has been removed.
The settings "OLD_MENU" & "LOGO_URL" have been removed.
In the credentials system, the hack with the fake app "my_page" (access was always allowed) has been removed.
In 'creme_core.models' :
- The classes 'entity.CremeEntity' & 'relation.Relation' now inherit 'base.CremeModel'.
- The class 'base.CremeAbstractEntity' has been removed.
- The global constant 'base._SEARCH_FIELD_MAX_LENGTH' has been moved to 'entity'.
- In the model 'Relation' :
- These fields have been removed : entity_type, header_filter_search_field, is_deleted, modified.
- These attributes have been removed : _real_entity, function_fields.
- These methods have been removed : _get_real_entity(), get_real_entity(), populate_real_entities().
- The method 'CremeEntity.get_actions()' has been removed ; use the new action system ('creme_core.gui.actions') instead.
- The attribute 'CremeEntity.function_fields' has been removed ; use 'creme_core.core.function_fields.function_field_registry' instead.
- The class 'entity._PrettyPropertiesField' has moved to 'creme_core.function_fields.PropertiesField'.
- The model 'relation.Relation' has now a UNIQUE constraint on ('type', 'subject_entity', 'object_entity') ;
a data migration removes duplicated relations, so beware to custom code which (accidentally) relies on duplicated Relation (e.g. with internal RelationType).
- The field 'creme_property.CremePropertyType.is_custom' is <editable=False> now.
- These models of 'bricks' have been renamed :
- BlockDetailviewLocation => BrickDetailviewLocation
- BlockPortalLocation => BrickPortalLocation
- BrickMypageLocation => BrickMypageLocation
- RelationBlockItem => RelationBrickItem
- InstanceBlockConfigItem => InstanceBrickConfigItem
- CustomBlockConfigItem => CustomBrickConfigItem
- BlockState => BrickState
- The field 'bricks.BrickPortalLocation.app_name' has been removed.
- The method 'bricks.BrickPortalLocation.create_or_update()' has been removed.
- The model 'PreferedMenuItem' has been removed.
In 'creme_core.views' :
- These function-views have been replaced by class-based views :
- creme_property : type_detailview(), add_to_entity(), add_properties_bulk(), add_type(), edit_type()
- entity : inner_edit_field(), bulk_update_field(), trash()
- entity_filter : add(), edit()
- header_filter : add(), edit()
- index : home(), my_page()
- job : detailview(), edit(), list_all(), list_mine()
- quick_forms.add_from_widget()
- relation : add_relations(), add_relations_bulk()
- search.search()
In 'creme_core.forms' :
- In 'fields' :
- The method 'CreatorEntityField._check_qfilter()' has been removed.
- Some error messages in 'RelationEntityField' get an argument.
- The class 'header_filter.HeaderFilterForm' has been removed ; use the 'HeaderFilterCreationForm' & 'HeaderFilterEditForm' instead.
- In 'entity_filter' :
- The constructor of 'EntityFilterCreateForm' takes a additional mandatory argument "ctype" (& it does not use the initial data to get the content type).
- The constructors of 'FieldConditionWidget' & 'RegularFieldsConditionsWidget' take now an additional first argument "model" (default: CremeEntity).
In 'creme_core.gui' :
- With the method 'quick_forms.QuickFormsRegistry.register()' : if a form is already registered for the given model, an exception is raised (there was just a log).
- The method 'button_menu.ButtonsRegistry.get_buttons()' is now a generator.
In 'creme_core.utils' :
- The decorator 'jsonify' has moved to the module 'creme_core.views.decorators'.
- A new default JSON encoder has been added : 'creme.creme_core.utils.serializers.json_encode()'.
The output of "jsonify", "{% ...|jsonify %}" & "{% brick_action %}" has slightly changed for date/datetime/time formatting.
- The function 'safe_unicode_error()' has been removed.
- In 'collections.ClassKeyedMap', the methods 'items()', 'keys()' & 'values()' now return 'views' like regular Python3 dictionaries.
- The method 'date_range.DateRangeRegistry.register()' now raises an Exception for duplicates (previously it was just a log message).
- In 'date_period' :
- The method 'DatePeriodRegistry.register()' now raises an Exception for duplicates (previously it was just a log message).
- The method 'SimpleValueDatePeriod._ungettext()' must now return a '{number}' format string (it was a '%s' format).
- The function 'secure_filename.secure_filename()' uses only 'str' (not 'bytes').
- The module 'unicode_csv' has been removed ; use the standard module 'csv' instead.
About context processors :
- The function 'creme_core.context_processors.get_old_menu()' & 'creme_core.context_processors.get_logo_url()' have been removed.
- The variable 'DEFAULT_THEME' is not injected in the templates context anymore (see processor 'get_css_theme()').
In 'creme_core.core' :
- The constructor of 'entity_cell.EntityCellActions' takes an additional argument : "actions_registry".
- In the class 'reminders.ReminderRegistry' :
- The method 'register()' now raises a 'ReminderRegistry.RegistrationError' when an ID is duplicated (it was just a log message).
- The method 'unregister()' now raises a 'ReminderRegistry.RegistrationError' when an ID des not exist (it was just a log message).
- The method '__iter__()' now returns instances of Reminders (it was tuples (ID, instance_of_reminder)) like 'itervalues()'.
- The method 'setting_key._SettingKeyRegistry.unregister()' now raises an exception in an ID is not registered (it was a simple log message).
The templatetag {% get_entity_actions %} (from "creme_widgets") has been removed ;
use {% listview_entity_actions %} & {% listview_header_actions %} (from "creme_listview") instead.
In the template 'creme_core/view_property_type.html', the variable for bricks is now "bricks" (it was still "blocks").
JavaScript :
- The function 'creme.dialogs.image()' now returns a 'creme.dialog.ImagePopover' instance.
- Use the event "brick-setup-actions" for custom brick action registration instead of "brick-before-bind".
- The method 'creme.widget.EntitySelector.multiple()' has been removed ; used 'isMultiple()' instead.
- The jQuery extension 'imageMagnifier' is not used any more and has been removed from the default configuration.
Apps :
* Creme_config :
- Some URLs have changed (no problem if named URLs are used):
- "creme_config/blocks/relation_block/*" => "creme_config/bricks/rtype/*"
- "creme_config/blocks/instance_block/*" => "creme_config/bricks/instance/*".
- "creme_config/blocks/*" => "creme_config/bricks/*".
- In 'views':
- Many function-views have been replaced by Class-Based Views.
- The class 'user_role.UserRoleCreationWizard' has been renamed 'RoleCreationWizard'.
- The class 'user_role.UserRoleEditionWizard' has been renamed 'RoleEditionWizard'.
- The function 'bricks._edit_mypage()' has been removed.
- In 'forms' :
- The constructor of 'custom_fiels.CustomFieldsAddForm' takes an additional mandatory argument "ctype".
- The constructor of 'search.SearchAddForm' takes an additional mandatory argument "ctype".
- The method 'user.UserAssignationForm.save()' does not lock any more (this is done by the view 'UserDeletion', with another lock name).
- In 'bricks' :
- The forms do not use "self.initial" to initialize their attributes ("content_type", "role" & "superuser").
- In the class 'BrickMypageLocationsForm', the field "blocks" has been renamed "bricks".
- In 'user_role' :
- The constructor of 'AddCredentialsForm': the argument "role" has been replaced by an argument "instance".
- About 'UserRoleDeleteForm' :
- The constructor takes an additional argument "instance", & does not use the initial value "role_to_delete" any more.
- The method 'save()' does not use a lock (this is done by the view 'RoleDeletion', with another lock name).
- All views/forms/bricks/templates about 'PreferedMenuItem' have been removed.
- The class 'brick.BlockPortalLocationsBrick' has been removed with its related template.
- In 'templates'
- The template file "creme_config/portal.html" has changed (e.g. suppression of {% block before_statistics %}).
- The template "creme_config/generics/app_portal.html" has been replaced by "app-portal.html" to make some changes (e.g. use the variable "bricks" instead of "app_config_bricks").
- The template "creme_config/generics/model_portal.html" has been replaced by "model-portal.html" to make some changes (e.g. use the variable "bricks" instead of "model_brick").
- In 'bricks', these classes have been renamed :
- BlockDetailviewLocationsBrick => BrickDetailviewLocationsBrick
- BlockHomeLocationsBrick => BrickHomeLocationsBrick
- BlockDefaultMypageLocationsBrick => BrickDefaultMypageLocationsBrick
- BlockMypageLocationsBrick => BrickMypageLocationsBrick
- RelationBlocksConfigBrick => RelationBricksConfigBrick
- InstanceBlocksConfigBrick => InstanceBricksConfigBrick
- CustomBlocksConfigBrick => CustomBricksConfigBrick
* Persons :
- In the models 'Address' :
- The field "object_id" (PositiveIntegerField) have been replaced by the field "object" (EntityCTypeForeignKey).
- The field "owner" is not a 'GenericForeignKey' anymore ; it's a 'RealEntityForeignKey'.
- The related name for the field "content_type" has been removed.
- The URL "persons/contact/add_with_relation/" has been replaced by "persons/contact/add_related/" (but the name did not change) ;
the argument "callback_url" is not used any more.
- The function 'views.organisation.set_managed()' has been removed ; use the class-based view 'ManagedOrganisationsAdding' instead.
* Documents :
- In 'views' :
- The function-views 'document.abstract_add_related_document()' & 'add_related()' has been removed ; use the class-based view 'RelatedDocumentCreation' instead.
- The function-views 'folder.abstract_add_child_folder()' & 'add_child()' has been removed ; use the class-based view 'ChildFolderCreation' instead.
- In 'forms' :
- The class 'document.RelatedDocumentCreateForm' constructor takes an additional argument "entity" (& does not use the initial value with key="entity" any more).
- The class 'folder.ChildFolderForm' constructor takes an additional argument "entity" (& does not use the initial value with key="parent" any more).
- In the class 'fields.(Multi)ImageEntityField', the property "q_filter" is now a Q() instance (even if you set a dictionary).
* Activities :
- These function-views have been removed & replaced by class-based views :
- bricks.add_participant()
- bricks.add_subject()
- calendar.add_user_calendar()
- edit_user_calendar()
- link_user_calendar()
- The method 'forms.mass_import.RelatedExtractor._searched_contact()' returns now a Contact instance, & not a tuple anymore.
* Assistants :
- In 'models' Action/Alert/Memo/ToDo/UserMessage :
- The PositiveIntegerFields "entity_id" have been replaced by EntityCTypeForeignKeys "entity".
- The fields 'creme_entity' are not 'GenericForeignKeys' anymore ; they are 'RealEntityForeignKeys' now.
- The related names for the fields 'entity_content_type' have been removed.
- The class 'models.alert._GetAlerts' has moved to 'function_fields.AlertsField'.
- The class 'models.memo._GetMemos' has moved to 'function_fields.GetMemosField'.
- The class 'models.todo._GetTodos' has moved to 'function_fields.GetTodosField'.
- All views using 'creme_core.views.generic.add_to_entity()' has been removed & replaced by Class-Based Views.
The function-view 'user_message.add()' has been replaced too.
* Products :
- The function 'views.product.add_images()' has been removed ; use the class-based view 'ImagesAdding' instead.
- The function 'views.service.add_images()' has been removed ; use the class-based view 'ImagesAdding' instead.
* Billing :
- The URL for the list-view of CreditNotes has change (but its name did not change, so no breaking with 'reverse()').
- The class 'models.templatebase._VerboseStatusField' has moved to 'function_fields.TemplateBaseVerboseStatusField'.
- The function 'views.payment_information.add()' has been removed ; use the class-based view 'PaymentInformationCreation' instead.
- The function 'views.line.add_to_catalog()' has been removed ; use the class-based view 'AddingToCatalog' instead.
- The function 'views.payment_information.edit()' has been removed ; use the class-based view 'PaymentInformationEdition' instead.
- The method 'registry.AlgoRegistry.register()' now raises an Exception on duplicated IDs (it was a simple log message).
- The templates "billing/frags/button_convert2invoice.html" & "billing/frags/button_convert2order.html" do not use the variable "has_perm" any more.
* Opportunities :
- The class 'models._TurnoverField' has moved to 'function_fields.TurnoverField'.
- The JavaScript function 'creme.opportunities.setCurrentQuote()' has been removed.
* Emails :
- The URL for the views "emails__view_sending" has changed (the prefix "campaign/" has been removed) ; there is no breaking if you use 'reverse()'.
- The field 'models.LightWeightEmail.body' contains now JSON data instead of pickled data.
- These function views have been replaced by class-based views :
- campaign.add_ml()
- crudity.synchronisation()
- mail.view_lightweight_mail()
- mailing_list : add_contacts(), add_contacts_from_filter(), add_children(), add_organisations(), add_organisations_from_filter()
- recipient : add(), add_from_csv()
- sending : add(), detailview()
- signature : add(), edit()
- template.add_attachment()
* Commercial :
- The URL named "commercial__edit_segment_desc" has changed & takes only one argument now.
- In the model 'CommercialApproach' :
- The field 'ok_or_in_futur' has been removed.
- The PositiveIntegerField 'entity_id' has been replaced by the EntityCTypeForeignKey 'entity'.
- The field 'creme_entity' is not a 'GenericForeignKey' anymore ; it's a 'RealEntityForeignKey'.
- The related name for the field 'entity_content_type' has been removed.
- The static method 'get_approaches()' does not return instances related to deleted (i.e. in the trash) entities when not entity PK is given.
- In views, these function-views have been removed & replaced by class-based views :
- act : add_pattern_component(), add_objective(), add_objectives_from_pattern(), _add_objective(), edit_objective()
add_child_pattern_component(), add_parent_pattern_component(), create_objective_entity().
- strategy : add_segment(), edit_segment(), link_segment(), add_asset(), edit_asset(), add_charm(), edit_charm(), add_evalorga(), orga_evaluation(), orga_synthesis()
- market_segment : add(), edit(), delete(), listview()
- The function 'views.strategy._orga_view()' has been removed.
- The function 'views.act._add_subpattern_component()' has been removed.
- The constructor of 'forms.market_segment.SegmentReplacementForm' takes an additional argument "instance".
* Reports :
- In 'views' :
- In 'report.set_selected()', a new POST argument is mandatory: "report_id".
So the JavaScript function 'creme.reports.expandSubReport()' takes an additional argument "report_id".
- The function-view 'report.edit_fields' has been removed ; use the class-based view 'FieldsEdition' instead.
- The function-view 'report.reorder_field()' has been removed ; use the class-based view 'MoveField' instead.
The related URL has changed (the name remains the same, but the report's ID must be added in arguments).
- The function-view 'export.preview()' has been removed ; use the class-based-view 'Preview' instead.
- In the constructor of 'forms.report.ReportFieldsForm', the argument "entity" has been renamed "instance".
- The attribute 'report_aggregation_registry.FieldAggregation.pattern' must now be a {}-format string.
- In the class 'core.graph.ReportGraphHand' (& so child classes), the methods 'fetch()' & '_fetch()' take a mandatory argument "user".
- In JavaScript:
- These functions have been removed : creme.reports.load(), creme.reports.loadHeaderFilters() & creme.reports.loadEntityFilters().
- The signature of 'creme.reports.exportReport(filterform_url, preview_url, export_url)' has changed to 'creme.reports.exportReport(filterform_url)'.
- The signature of 'creme.reports.PreviewController(preview_url, export_url)' has changed to 'creme.reports.PreviewController({previewUrl: ..., exportUrl: ...})'.
* Geolocation :
- In 'bricks.GoogleDetailMapBrick', the context variable "geoaddresses" is not JSON-ified any more.
* Tickets :
- The class 'models._ResolvingDurationField' has moved to 'function_fields.ResolvingDurationField'.
- The button 'buttons.Linked2TicketButton' does not inject the variable "ticket_ct" any more.
* Crudity :
- In the class 'models.WaitingAction', the methods 'get_data()' & 'set_data()' have been removed ; use the property 'WaitingAction.data' instead.
- The function-view 'views.actions.portal()' has been removed ; use the class-based view 'Portal' instead.
- The function-view 'views.history.history()' has been removed ; use the class-based view 'History' instead.
- The function 'utils.strip_html_()' has been removed ; use 'strip_html()' instead.
- The unused function 'utils.unescape()' has been removed.
* Graphs :
- The function 'views.graph.add_relation_types()' has been removed ; use the class-based view 'RelationTypesAdding' instead.
- The function 'views.root_nodes.add()' has been removed ; use the class-based view 'RootNodesAdding' instead.
- The function 'views.root_node.edit()' has been removed ; use the class-based view 'RootNodeEdition' instead.
* Projects :
- These function-views have been replaced by class-based views :
- resource : add(), edit()
- task : abstract_add_activity(), add_activity(), task.add_parent()
- In 'forms.task.RelatedActivityCreateForm', the constructor takes an argument "entity" now.
* Polls :
- These function views have been replaced by class-based views :
- poll_form : add_line(), add_section(), add_line_to_section(), add_section_child(),
edit_line_conditions(), edit_line(), edit_section(), stats()
- poll_preply : link_to_person(), edit_line()
- In 'forms.poll_form':
- The method 'PollFormSectionCreateForm.save()' does not use <self.initial['parent']> any more ; use the constructor argument "line" instead.
- The constructor of 'PollFormLineCreateForm' takes now an optional argument "section" & does not use <self.initial['line']> any more.
- The constructor of 'poll_form.PollFormLineEditForm' does not raise a 404 error when the related line is disabled any more.
- The constructor of 'PollFormLineConditionsForm' takes an additional argument "line" & does not use <self.initial['line']> any more.
- In the class 'core.EnumPollLineType', the attributes '_description' & '_description_del' use now '{foo}' format.
* Events :
- The constructor of 'forms.event.RelatedOpportunityCreateForm' takes 2 additional arguments "event" & "contact" ; the initial values with keys "event" & "contact" are not used any more.
* Vcfs :
- In 'forms.vcf', 'VcfImportForm.HOME_ADDR_PREFIX' & 'VcfImportForm.WORK_ADDR_PREFIX' moved at the root of the module.
* CTI :
- The function-view 'views.respond_to_a_call()' has been removed ; use the class-based view 'AnswerToACall' instead.
- In 'views._build_related_phonecall()', the title format in now a '{entity}' format string.
* SMS :
- The function-view 'views.sending.detailview()' has been removed ; use the class-based view 'Messages' instead.

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

In 'creme_core.models' :
- In 'history', the attributes '_HLTPropertyCreation._fmt' & '_HLTRelation._fmt' use now {}-format strings.
- In 'entity_filter._ConditionOperator', "key_pattern" (argument and property) is now a {}-format string.
In 'creme_core.views' :
- The functions 'entity_filter._set_current_efilter()' & 'header_filter._set_current_hf()' have been removed.
- The function 'index._render_home()' has been removed.
In 'creme_core.forms': 'base._CUSTOM_NAME' & 'bulk._CUSTOMFIELD_FORMAT' are now {}-format strings.
In the attribute 'creme_core.core.entity_cell.EntityCellCustomField._CF_PATTERNS', values are now {}-format strings.
The class 'creme_core.backends.csv_import.CSVImportBackend' does not inherit 'UnicodeReader' any more.
In the constructor of 'creme_core.gui.bricks.SpecificRelationsBrick', the argument "relationblock_item" has been renamed "relationblock_item".
In 'creme_core.templatetags' :
- The return of 'creme_bricks.brick_action()' has slightly changed ("data" key is now a dict/None, not a string any more).
- In the function 'creme_listview._build_select_search_widget()' : the argument "choices" uses the new dictionary format
for choices (see 'creme_core.core.enumerable.Enumerator') & the "values" of the widget context uses a new format adapted for grouped choices ;
the template 'creme_core/templatetags/listview_columns_header.html' has changed to use this new format.
The functions 'python_subprocess()' in 'creme_core.utils.system.nt' & 'creme_core.utils.system.posix' have been removed (replaced by the one in 'creme_core.utils.system').
The signal with uid "creme_core-blockmypagelocation._copy_default_config" is now "creme_core-brickmypagelocation._copy_default_config".
Some patterns in 'creme_core.utils.url.TemplateURLBuilder' have changed to be {}-format strings.
In JavaScript, all "_action_*" methods in 'ListViewActionBuilders' have been renamed to "_build_*" (see 'ActionBuilderRegistry' API).
Apps :
* Creme_config :
- The function 'views.bricks._get_configurable_ctype()' has been removed.
- The function 'views.generics_views._popup_title()' has been removed.
- In the constructor of 'registry._ConfigRegistry', the argument "block_registry" has been renamed "brick_registry".
* Persons :
- The method 'forms.merge._PersonMergeForm._save_address()' has been replaced by '_handle_addresses()'.
* Billing :
- The function 'function_fields.hook_organisation()' has been removed.
* Emails :
- The function 'views.sending._get_sending()' is deprecated.
- The template "emails/bricks/html-body.html" needs a context variable "body_url" now.
* Crudity :
- The field 'models.WaitingAction.raw_data' is now a BinaryField.
- The global variable 'builders.infopath.XSL_VIEW_FIELDS_TEMPLATES_PATH' is now a {}-format string.
- The method 'builders.infopath.InfopathFormBuilder._render()' is not a generator anymore & takes a mandatory argument "file_name".
- In JavaScript, the brick-actions no longer use the argument "__selector".
* Assistants :
- In 'signals' : 'MODELS', 'dispose_instances()' & 'handle_merge()' have been removed.
* Commercial :
- In 'signals', the function 'dispose_comapps()' & 'handle_merge()' have been removed.
* Geolocation :
- The method 'management.commands.geolocation.CSVPopulator._open()' has been removed.

1.11

Non breaking changes :
----------------------
Deprecations :
- From Django 1.10 :
- The module 'django.core.urlresolvers' is deprecated (use 'django.urls' instead).
- In 'creme_core.models.CremeUser', 'is_authenticated()' & 'is_anonymous()' as method are deprecated (use them as property).
- The direct assignment to the forward side of a many-to-many set is deprecated (use the method 'set()' instead).
- From Django 1.11 :
- The view 'django.contrib.auth.views.login()' is now deprecated ; so we use the class-based view 'LoginView'.
- The middleware class 'creme_core.middleware.exceptions.Beautiful403Middleware' is deprecated.
- In 'creme_core.views' :
- The function 'exceptions.server_error()' is deprecated (use 'django.views.defaults.server_error()' instead).
- The function 'file_handling.fetch_resources()' is deprecated (it was not used for a long time).
- The functions 'bricks.reload_portal()' & 'bricks.render_portal_brick()' are deprecated.
- In 'creme_core.models' :
- In 'bricks.BlockDetailviewLocation' :
- The methods 'create_empty_config()' & the attribute 'ZONES' are deprecated.
- The method 'create()' is deprecated (use create_if_needed() instead).
- In 'bricks.BlockPortalLocation' :
- The method 'create()' is deprecated (use create_or_update() instead).
- The method 'create_empty_config()' is deprecated.
- The method 'bricks.BlockMypageLocation.create()' is deprecated (use 'bricks.BlockMypageLocation.objects.create()' instead).
- In 'creme_core.forms.widgets' :
- These functions are now deprecated : widget_render_input(), widget_render_hidden_input(), widget_render_context().
- The method 'EnhancedSelectOptions.render_label()' is deprecated.
- In 'creme_core.gui' :
- The old menu API is deprecated.
- In 'bricks' :
- In 'BricksManager', the methods 'get_dependencies_map()' & '_get_dependencies_ids()' are now deprecated.
- The attribute 'Brick.target_apps' is deprecated.
- The method '_BrickRegistry.get_compatible_portal_blocks()' is deprecated.
- In 'buttons.ButtonsRegistry.register()', registering 'Button' instances is deprecated (register classes instead).
In all apps with global buttons instances, these ones are deprecated.
- The method 'HistoryBrick._populate_users()' is deprecated (use 'HistoryLine.populate_users()' instead).
- In 'creme_core.core.reminders.ReminderRegistry.register()', registering an instance is deprecated; register a class instead.
- In 'creme_core.registry' :
- The exception class 'NotRegistered' is now deprecated.
- The methods 'register()' & 'get()' of 'CremeRegistry' are now deprecated.
- In 'creme_core.templatetags' :
- {% timedelta_pprint %} is deprecated (use {% date_timedelta_pprint %} instead).
- In the library 'creme_bricks', in {% brick_display %}, the option "render='portal'" is deprecated.
- In the library 'creme_menu' :
- The tags activated by <settings.OLD_MENU = True> are deprecated.
- {% get_last_items_menu %} & {% get_prefered_menu %} are deprecated (their template too).
- {% get_button_menu %} is deprecated (use {% menu_buttons_display %} instead).
- {% ctype_is_registered_for_import %} (use the filter "ctype_can_be_mass_imported" (from the library 'creme_ctype') instead).
- In the library 'creme_search', the tag {% get_search_panel %} (& is template) is deprecated.
- The templatetags library "creme_quickforms" is deprecated.
- In JavaScript :
- The function 'creme.utils.confirmBeforeGo()' is deprecated.
- In 'creme.menu' :
- The variable 'actions' is deprecated.
- The functions 'sideMenu()', 'NavIt()' & 'HNavIt()' are deprecated.
- In all apps, the methods 'portal_display()' of Bricks are deprecated.
- Apps :
* Creme_config :
- The function 'utils.generate_portal_url()' is deprecated.
- In 'views.bricks' :
- The class-view 'PortalBricksWizard' is deprecated.
- The function-views 'delete_portal()' & 'edit_portal()' are deprecated.
- In 'forms.bricks' :
- The classes '_BlockPortalLocationsForm', 'BlockPortalLocationsAddForm' & 'BlockPortalLocationsEditForm' are deprecated.
- The method '_BrickLocationsForm._build_portal_locations_field()' is deprecated.
* Documents :
- In 'views.ajax', the function 'get_child_documents()' & 'get_child_documents()' are deprecated.
* Activities :
- In the view 'calendar.get_users_activities()', the URL argument "calendar_ids" is deprecated (use the GET parameter "calendar_id" instead).
- In 'bricks', the methods 'FutureActivitiesBrick._get_queryset_for_ctypes()' & 'PastActivitiesBrick._get_queryset_for_ctypes()' are deprecated.
* Assistants :
- The method 'bricks._AssistantsBrick._get_contenttype_id()' is deprecated.
- All the methods '_get_queryset_for_portal()' of the Bricks are deprecated.
- The global variables 'reminders.reminder_alert' & 'reminders.reminder_todo' are deprecated.
* Emails :
- 'bricks.SignaturesBrick' is deprecated.
Django 1.11 raises UnorderedObjectListWarning warnings when the pagination is made on a unordered queryset ; some models were missing a Meta.ordering.
A model FileRef has been added ; it provides a way to remove an old bug with deletion of model referencing files.
The related files were automatically delete when instances were deleted, so it caused problems when the DB deletion was rollbacked.
Now a FileRef, which references the file, is created at deletion (so it's creation is cancelled on a rollback) and the new file cleaner Job will delete these FileRef instance (& the related file).
FileRef will be useful in the future for files created dynamically (like in export views).
Some template filters have been added in 'creme_core_tags' : lt, lte, gt, gte, eq.
The test runner now creates a mock/temporary 'settings.MEDIA_ROOT' directory. So the files created in unit tests (e.g. uploaded files) are not spoiling the real 'upload/' directory.
This temporary directory is removed at the end of tests ; there is no need to take care about deleting only the tests files any more.
In JavaScript :
- The option "validator" in 'creme.dialog.FormDialog' now accepts the value "innerpopup" to continue to handle old-styled-popup HTML (<div class="in-popup" ...>)

Breaking changes :
------------------
Deprecated stuffs which have been removed :
- In all apps, the modules 'blocks' have been removed, & the related template files too.
- The setting 'DEFAULT_THEME' has been removed.
- 'creme_core.constants.PROP_IS_MANAGED_BY_CREME' & 'creme_core.constants.ICON_SIZE_MAP' have been removed.
- The method 'CremeAppConfig.register_blocks()' is no called automatically anymore.
- These modules have been removed: gui.block, gui.icon_registry, models.block & views.blocks.
- The variable 'creme_core.urls.blocks_patterns' has been removed
- In 'creme_core.models' :
- The field 'SettingValue.user' has been removed.
- These methods have been removed : CremeEntity.populate_fk_fields(), BlockDetailviewLocation.create_4_model_block(),
CustomBlockConfigItem.id_from_block_id(), BlockState.get_for_block_id(), BlockState.get_for_block_ids() & SettingValue.create_if_needed().
- These properties have been removed : BlockMypageLocation.block_verbose_name, InstanceBlockConfigItem.block & BlockState.classes.
- In 'creme_core.views' :
- These functions have been removed :
- generic.listview.list_view_popup_from_widget().
- creme_property.reload_block().
- entity.bulk_edit_field() (use 'bulk_update_field()' instead).
- list_view_export.dl_listview_header().
- quick_forms.json_quickform_response().
- relation.objects_to_link_selection().
- search.reload_block().
- These arguments have been removed :
- "entity1_id" in 'entity.select_entity_for_merge()'.
- "entity1_id" & "entity2_id" in 'entity.merge()'.
- "ct_id" & "include_all" in 'entity_filter.get_for_ctype()'.
- "ct_id" in 'header_filter.get_for_ctype()'.
- "ct_id" & "doc_type" in 'list_view_export.dl_listview()'.
- "count" in 'quick_forms.add_from_widget()'.
- "relations_types" in 'relation.add_relations_bulk()'.
- In 'creme_core.forms' :
- The fields 'CremeDateField', 'CremeTimeField' & 'CremeDateTimeField' have been removed.
- The support for non-iterable values as "allowed_models" argument for the property '[Multi]GenericEntityField.allowed_models' has been removed.
- The argument "choices" of 'fields.DatePeriodField.__init__()' has been removed.
- The method 'merge.MergeField.set_merge_initial()' has been removed.
- In 'creme_core.gui' :
- In 'bricks':
- The method 'get_block_template_context()' of 'Brick/PaginatedBrick/QuerysetBrick' has been removed.
- The method 'BricksManager.block_is_registered()' has been removed.
- In _BrickRegistry :
- These methods have been removed : get_blocks(), get_block_4_instance(), get_block_4_object(), get_compatible_blocks().
- The possibility to register instances with 'register()' & register_4_model()' has been removed.
- The possibility to register a brick class which has an ID with 'register_4_model()' has been removed.
- In 'fields_config.FieldsConfigRegistry', the method 'is_model_valid()' & the property 'ctypes' have been removed.
- In 'field_printers' these methods have been removed: simple_print(), print_image(), print_boolean(), print_urlfield(), print_foreignkey(), print_many2many().
- The method 'icons.IconRegistry.get()' has been removed.
- In 'creme_core.templatetags' :
- The libraries 'creme_block' & 'creme_queryset' have been removed.
- In the library 'creme_widgets' :
These tags have been removed : {% get_image_for_ctype ... %}, {% get_image_path_for_ctype ... %} & {% get_image_for_object ... %}.
These tags (& their related template file) have been removed :
{% get_add_button %}, {% get_edit_button %}, {% get_delete_button %}, {% get_restore_button %}, {% get_clone_button %}.
- The functions '_get_image_path_for_model()' & '_get_image_for_model()' have been removed.
- In the library 'creme_listview', the tag {% get_listview_cell %} have been removed.
- In bricks.PropertiesBrick, the variable "ct_id" is not injected anymore in the template context.
- These template files of 'creme_core' have been removed :
templatetags/blocks_dependencies.html, generics/blockform/add_popup2.html, batch_process_report.html, importing_report.html .
- The context processor 'creme.creme_core.context_processor.get_blocks_manager' has been removed.
- These functions of 'creme_core.utils' have been removed:
is_testenvironment(), imports.find_n_import(), media.get_current_theme_vb(), meta.get_instance_field_info().
- The button 'creme_core.buttons.MergeEntitiesButton' (& the related template too) have been removed.
- In JavaScript :
- These functions have been removed : creme.component.is(), creme.object.isempty(), creme.object.isnone().
- In 'creme.utils', these functions have been removed :
innerPopupNReload(), toggleCheckallState(), autoCheckallState(), decorateSearchResult(), getBlocksDeps().
- The module 'creme.blocks' has been removed.
- In 'creme.exports.exportAs()' the URL cannot be a format string anymore.
- In 'creme.lv_widget', these functions have been removed : deleteEntityFilter(), deleteHeaderFilter().
- The function 'creme.merge.selectOtherEntityNRedirect()' has been removed.
- In 'creme.relations.addRelationTo()', the option "blockReloadUrl" & the hard-coded URLs support have been removed.
- In 'creme_core.tests.base._CremeTestCase', the methods 'populate()' & 'build_bulkedit_url()' have been removed.
- Apps :
* Creme_config :
- In registry.AppConfigRegistry, the method 'register_block()' & the property 'blocks' have been removed.
- In registry._ConfigRegistry :
- The methods 'register_blocks()' & 'register_userblocks()' & property 'userblocks' have been removed.
- In the methods 'register_bricks()' & 'register_user_bricks()', the support of registering instances (instead of classes) has been removed.
- The modules 'views.blocks' & 'forms.blocks' have been removed.
- These views has been removed :
- bricks.add_portal(), bricks.add_custom_block() & bricks.add_ctypes_2_relation_block().
- button_menu.add().
- fields_config.add().
- generics_views.reload_block() & generics_views.swap_order().
- user_role.add() & user_role.edit().
- setting.reload_block().
- The form classes 'user_role.UserRoleCreateForm' & 'user_role.UserRoleEditForm' have been removed.
- The function 'forms.fields_config._get_fields_enum()' has been removed.
- The templatetags {% import_usersettings_blocks %} & {% do_usersettings_blocks_displayer %} have been removed.
- These template files have been removed : creme_config/custom_fields/*.html & creme_config/blocks_portal.html.
- The variable 'urls.blocks_patterns' has been removed.
* Documents :
- The argument 'count' has been removed in these views of 'quick_forms' : 'abstract_add_doc_from_widget()', 'add_csv_from_widget()'.
- In Bricks, these variable are not injected anymore : FolderDocsBrick (variable "ct_id"), LinkedDocsBrick (variable "ct_doc").
* Persons :
- The function 'models.contact._create_linked_contact()' has been removed.
- In ManagersBrick, the variable "ct" is not injected anymore.
* Activities :
- These modules have been removed : 'views.blocks' & 'forms.blocks'.
- These template files have been removed : 'templatetags/activity_date.html' & 'templatetags/activity_relations_field.html'.
- The method 'AbstractActivity.count_lines_display_block()' has been removed.
- The templatetag library 'activities_tag' has been removed.
- In the view function of views.activity.download_ical(), the argument "ids" has been removed.
- In JavaScript :
- The function 'creme.activities.calendar.filterEvents()' has been removed.
- In 'creme.activities.exportAsICal()' & 'fullCalendar()', the support of implicit "url" has been removed.
* Assistants :
- The JavaScript function 'creme.assistants.validateEntity()' has been removed.
- In all Bricks, the variable "ct_id" is not injected anymore.
* Products :
- The class 'forms.fields.CategorySelector' has been removed.
* Billing :
- These methods of 'models.Base' have been removed : product_lines(), service_lines(), _build_lines(), get_*_lines_total_price_*_of_tax().
- The method 'models.TemplateBase.build()' has been removed.
- The template file 'frags/generic_billing_line_frag.html' has been removed.
- The templatetag library 'latex' has been removed.
- In these Bricks, some variable are not injected anymore : CreditNotesBrick (variable "ct"), PaymentInformationBrick (variable "ct_id"), BillingPaymentInformationBrick (variable "ct_id").
- The 'billing_register' feature has been removed.
- These JavaScript functions have been removed : multiSaveLines(), selectDefaultPayment(), convertAs(), redirect(), reload().
* Commercial :
- These functions in 'views.strategy' have been removed : _reload_matrix(), reload_assets_matrix(), reload_charms_matrix(), reload_assets_charms_matrix().
- These templatetags have been removed :
- {% get_segments_for_category %}, {% widget_segment_category %}, {% widget_asset_score %} & {% widget_charm_score %}.
- In these bricks, the variable "ct_id" is not injected anymore : AssetsBrick, CharmsBrick & ActObjectivesBrick.
- These templates files have been removed : 'templatetags/widget_score.html', 'templatetags/widget_category.html'.
- These JavaScript functions have been removed : postCategory(), increaseObjectiveCounter() & postScore().
* Opportunities :
- In these Bricks, the variable "ct" is not injected anymore : _LinkedStuffBrick (& child classes), TargettingOpportunitiesBrick.
- In _LinkedStuffBrick (& child classes), the class attribute "_model" has been removed.
* Reports :
- The modules have been removed: 'views.blocks' & 'forms.blocks'.
- These functions have been removed : views.report.change_field_order() & views.graph._check_order().
- The "order" parameter has been removed in these views: graph.fetch_graph() & graph.fetch_graph_from_instanceblock().
- These JavaScript functions have been removed : changeOrder(), unlink_report(), setSelected(), doAjaxAction() & openGraphEdition()
* Emails :
- In views:
- The functions 'crudity.reload_sync_blocks()' & 'sending.reload_block_mails()' have been removed.
- In 'crudity.synchronisation()' the template variable "entityemail_ct_id" is not injected anymore.
- These template files have been removed : 'templatetags/_block_synchronization.html' & 'frags/ajax/synchronize.html'.
- In these Bricks, the variable "ct_id" is not injected anymore : EmailRecipientsBrick & MailsBrick.
- These JavaScript functions have been removed: allowExternalImages(), confirmResend() & resend().
* Geolocation :
- These arguments of views have been removed :
- set_address_info() (the argument "address_id").
- get_addresses_from_filter() (the argument "filter_id").
- get_neighbours() (the arguments "address_id" & "filter_id").
- In JavaScript, the fallback to hard-coded URLs have been removed in : AddressesBlock, PersonsNeighborhoodBlock & GoogleMapController.
* Crudity :
- The setting CREME_GET_EMAIL_JOB_USER_ID has been removed.
- These functions in 'views' have been removed: actions.fetch(), actions._fetch(), actions.reload_block(), history.reload().
- In views.history.history(), the context variable "blocks" is not injected anymore.
- The method registry.FetcherInterface.add_fetcher() has been removed.
- These global variables have been removed :
- In 'buttons' : infopath_create_form_button & email_template_create_button.
- In 'fetchers.pop' : pop_fetcher.
- in 'inputs.email' : create_email_input & create_infopath_input.
- These template files has been removed : 'frags/ajax/waiting_actions.html' & 'waiting_actions.html'.
* Polls :
- The templatetag {% print_node_chart %} has been removed.
- In these Bricks, some variables are not injected anymore :
- PollFormLinesBrick ("line_ct_id" & "section_ct_id").
- PollRepliesBrick ("ct_reply").
- _RelatedRepliesBrick & its child classes ("ct_reply").
- The template file 'polls/templatetags/stats_pollreply_chart.html' has been removed.
* Projects :
- The module 'views.utils' has been removed.
- The template files 'projects/frag_task_delay_td.html' has been removed.
* Sms :
- The function 'views.sending.reload_block_messages()' has been removed.
- In RecipientsBrick, the variable "ct_id" is not injected anymore.
Changes caused by Django 1.9 :
- If a 'simple_tag' returns HTML, the result will be escaped if it is not mark_safe()'ed. The best way is to use 'format_html()' & 'format_html_join()' (the result is escaped, so marked as safe).
- In templates, using _() on a classical-format string (with "%s") does not work like before, & should be avoided (because it returns a string with "%%s").
The new way is to use {% trans %}/{% blocktrans %}, & regenerate the related PO files
(notice that in the .po file, 'msgid/msgstr' will use "%%s", but the string returned by 'gettext()' will contain a simple "%s").
- CharFields in forms strip their content by default.
- The import of some models is done later (ie import in function code, not module root).
- If you create your own model field inheriting ForeignKey/OneToOneField, you cannot set a model during migration for 'to' attribute.
- If you import the module 'creme_config.registry', the import should be done after all the app configs are ready (e.g. importing within a view function) in order to avoid errors.
- Django 1.9 does not like '/' at the beginning of URL regex (it says it's useless, but it can be useful in some rare cases).
- The MIMEtype of email attachments is now set.
Changes caused by Django 1.10 :
- The method 'Command.execute()' will crash if all arguments do not receive a value (use 'django.core.management.call_command()' instead).
- The variable 'django.utils.http.PROTOCOL_TO_PORT' has been removed (seems not documented).
Changes caused by Django 1.11 :
- The rendering of form-widgets has changed ; the compatibility with existing 'render()' methods does not always work.
So you should use the new template-based system instead (it's what have been done in Creme -- see below).
- The method 'Widget.format_output()' has been removed (a custom widget template should be used instead).
- The arguments of 'creme_core.forms.bulk.BulkFieldSelectWidget.build_attrs()' have changed to follow the Django 1.11 signature.
- In unit tests, (fake) emails are not sent when the recipient is empty anymore.
Most of libraries have been upgraded :
- 'bleach' 1.4.X => 2.1.X.
- 'xlrd' : 0.9.X => 1.1.X
- 'xlwt' 1.0.X => 1.3.X.
- 'Pillow' : 3.4.X => 5.X.
- 'pygraphviz' : 1.1.X => 1.3.X.
In settings :
- 'MIDDLEWARE_CLASSES' has been removed & replaced by 'MIDDLEWARE'.
- The default settings 'LOGIN_REDIRECT_URL' & 'LOGIN_URL' use now named URLs.
- The setting 'LOGOUT_URL' has been removed, because Django (1.10) removed it too (it was unused anyway).
- The settings which were tuples are now lists (like in Django 1.9 global_settings), excepted 'COPY_MEDIA_FILETYPES' which is now a 'set'.
- The middleware "django.middleware.security.SecurityMiddleware" has been added in the default configuration ; it probably won't be a problem excepted on very specific install.
- Beware 'formtools' has been added in 'INSTALLED_DJANGO_APPS'.
- The logging configuration have slightly changed (formats of messages are different).
Using a method 'register_setting_key()' in a class inheriting CremeAppConfig is deprecated ; rename it 'register_setting_keys()'.
In views of all apps, the content-type of the response have been cleaned ; it probably does not break anything (or only unit tests).
- In views which return JSON data with "text/javascript" as content_type, the content_type is now "application/json" (many of these views use creme_core.utils.jsonify()).
- Lots of responses, with "text/javascript" as content_type, & which return a empty/string/HTML-fragment content, have now "text/html' as content_type.
It probably only break unit tests.
In 'creme_core.models' :
- The class attribute 'CremeModel._delete_files' has been removed ; override the methods _delete_stored_file()/_delete_stored_files() to customise the behaviour.
- The field 'CremeAbstractEntity.is_actived' has been removed (so it's removed from 'CremeEntity' & 'Relation').
- The fields "block_id" of the following models (in 'bricks') have been renamed to "brick_id" :
BlockDetailviewLocation, BlockPortalLocation, BlockMypageLocation, RelationBlockItem, InstanceBlockConfigItem, BlockState.
- In the method 'BlockDetailviewLocation.id_is_4_model()', the argument "block_id" is renamed "brick_id".
In 'creme_core.views' :
- The view 'search.search()' injects now a variable "bricks" instead of "blocks" ;
the related template 'creme_core/search_results.html' has changed to use "bricks".
- In 'list_view_export.dl_listview()' (backported to 1.7.3) :
- The GET argument "hfilter" is now mandatory (last list-view state is no longer used as fallback).
- The attribute "extra_q" of the list-view state is not read any more ; the GET argument "extra_q" is used instead.
- The view 'batch_process.batch_process()' does not use the GET argument "list_url" anymore ; it uses the GET argument "efilter" instead.
In 'creme_core.forms' :
- The method 'mass_import.ImportForm.append_error()' only takes the argument "err_msg" now (there were 3 arguments).
- The behaviour of the merge form with ManyToManyFields has been fixed ; the many to many data are changed during the save(), & not during the clean() anymore.
- The behaviour of the bulk/inner edition with ManyToManyFields has been fixed ; the many to many data are changed during the save(), & not during the clean() anymore.
- The rendering of widgets have been heavily reworked to use templates :
- The methods 'format_output()' have been removed in the following class of 'widgets' : DatePeriodWidget, DurationWidget, OptionalWidget, DateRangeWidget.
- In 'widgets.DateRangeWidget.render()', passing an attributes "render_as" not in {'table', 'ul'} will raise an exception ("template not found"). You can define your own type of render by creating a template file.
- These methods of 'widgets.UnorderedMultipleChoiceWidget' have been removed: _render_header_filter(), _render_header(), _render_body(), _render_counter(), _render_viewless(), _render_footer().
- If you inherit 'widgets.EnhancedSelectOptions' :
- It should be before the parent Widget class in the parents list.
- These methods have been removed : render_enchanced_option(), is_choice_selected(), render_enhanced_choice().
- The method 'header_filter.EntityCellsWidget._build_render_context()' has been removed.
- In 'mass_import.ExtractorWidget' :
- The base class changed from 'SelectMultiple' to the new class 'BaseExtractorWidget' (which inherits directly Widget).
- The method '_render_select()' has been removed.
- In 'mass_import.EntityExtractorWidget', the methods '_render_line()' & '_render_column_select()' have been removed.
- The attribute 'filtertype' of 'widgets.UnorderedMultipleChoiceWidget' now raises a ValueError if the given value was invalid (so a breaking indicates an existing bug).
The constructors of the following classes take an additional argument "model" : EntityCellActions, EntityCellFunctionField, EntityCellRelation, EntityCellVolatile.
The arguments of 'creme_core.utils.html.filter_img_src()' have change (to follow the API changes in 'bleach').
In 'creme_core.gui' :
- The different registries from sub-modules are not imported in the package anymore.
- In the method 'buttons.ButtonsRegistry.register()', when an ID is duplicated, an exception is raised now (there was only a log message).
- In 'bricks' :
- The method 'Brick.get_template_context()' does not inject "base_url" in the context anymore.
- About the method 'Brick._build_template_context()' :
- It does not inject "block_name" in the context anymore (use "brick_id" instead).
- These arguments have been renamed :
- 'block_name' became 'brick_id'.
- 'block_context' became 'brick_context'.
- In 'SpecificRelationsBrick', the context variable "colspan" is not injected anymore.
- About the class 'InstanceBlockConfigItem' :
- In the method 'generate_id()', the argument "block_class" is renamed "brick_class".
- In the methods 'id_is_specific()' & 'get_base_id()', the (only) argument has been renamed 'brick_id'.
The templatetag {% verbose_modifications %} (from 'creme_core_tags') has been renamed/moved as {% history_modifications %} (in 'creme_history').
In the templates of 'creme_core' :
- In the template file 'detailview.html' (& so in 'generics/view_entity.html'):
- The {% block %} "button_tab" & "extra_menu_buttons" have been removed (use {% block instance_buttons %} instead).
- The CSS class "is_deleted" is not set anymore (it's done in 'generics/view_entity.html').
- Some template files have been renamed :
- 'batch_process.html' has moved to 'forms/batch-process.html'.
- 'entity_filter_form.html' has moved to 'forms/entity-filter.html'.
- 'header_filter_form.html' has moved to 'forms/header-filter.html'.
- 'merge.html' has moved to 'forms/merge.html'.
- The template 'creme_core/entity_cells_widget.html' has been removed (replaced by 'creme_core/forms/widgets/entity-cells.html').
In the following apps, the buttons template files have been moved (from 'templatetags/' to 'buttons/') & renamed :
activities, billing, commercial, emails, opportunities, persons, tickets, vcfs.
Some unused images have been removed.
Lots of useless CSS rules have been removed.
In JavaScript :
- The functions 'creme.utils.blocks_deps()' & 'creme.blocks.bindEvents()' have been removed.
- The function 'creme.forms.toImportField()' takes now a second argument (the query to get the element to hide).
- The option "compatible" of 'creme.dialog.Dialog' has been removed.
In 'creme_core.tests' :
- The class attribute '_CremeTestCase.clean_files_in_teardown' has been removed ; you should remove it from your own TestCase classes because it is not used anymore.
- These fields of test models have been renamed :
- 'FakeDocument.folder' is now "linked_folder".
- 'FakeInvoiceLine.invoice' is now "linked_invoice".
Apps :
* Creme_config :
- The validation of Users passwords is now stronger by default in the forms ; it could break some unit tests, or external programs which create users.
- The URL '/creme_config/my_settings' has changed to '/creme_config/my_settings/portal'(internally you should use its name "creme_config__user_settings" anyway).
* Documents :
- The field 'models.AbstractDocument.folder' has been renamed "linked_folder".
- The related name of 'AbstractFolder.parent_folder' has been changed from "parent_folder_set" to "children".
* Activities :
- In 'forms.mass_import' :
- The classes 'ParticipantsExtractorWidget' & 'SubjectsExtractorWidget' inherit now the new class 'BaseExtractorWidget'.
- In the method 'SubjectsExtractorWidget.value_from_datadict()', the key "column_index" has been replaced by "selected_column".
- In 'ParticipantsExtractorWidget' :
- In the POSTed values '{name}_colselect' became '{name}_pattern_colselect'.
- In the return value of the method 'value_from_datadict()' "column_index" became "pattern_column_index".
- The JavaScript function 'creme.activities.calendar.fullCalendar()' has been modified to pass calendar IDs as GET arguments.
* Assistants :
- The argument "user" of 'bricks._AssistantsBrick._populate_related_real_entities()' has been removed.
* Products:
- The class 'forms.base._BaseCreateForm' has been removed ; the classes 'forms.product.ProductCreateForm' & 'forms.service.ServiceCreateForm' have been adapted.
- The class 'forms.mass_importCategoriesExtractorWidget' now inherits 'BaseExtractorWidget'.
* Billing :
- In JavaScript :
- The function 'creme.billing.updateBlockTotals()' has been renamed "updateBrickTotals()".
- In tne function 'creme.billing.markDelete()' :
- The second (on 3) argument "ct_id" has been removed.
- The CSS class "block_header_line_dark" is not set anymore.
* Reports :
- The field 'models.AbstractReportGraph.report' has been renamed "linked_report".
- The field 'models.FakeReportsDocument.folder' has been renamed "linked_folder".
- The method 'forms.report.ReportHandsWidget._build_render_context()' has been removed.
- The template 'reports_hands_widget.html' has been removed (replaced by 'forms/widgets/report-hands.html').
* Geolocation :
- The templatetag library 'geolocation' has been renamed 'geolocation_tags'.
- The templatetag 'format_distance' has been renamed 'geolocation_distance'.
- The CSS rules "block-geoaddress-*" have been renamed "brick-geoaddress-*" in HTML/CSS/JavaScript.
- The following JavaScript classes have been renamed :
- 'creme.geolocation.PersonsBlock' became 'creme.geolocation.PersonsBrick'.
- 'creme.geolocation.AddressesBlock' became 'creme.geolocation.AddressesBrick'.
- 'creme.geolocation.PersonsNeighborhoodBlock' became 'creme.geolocation.PersonsNeighborhoodBrick'.
* Emails :
- The following models fields are now 'blank=False' (blank was useless because these fields are not editable):
_Email.reads, _Email.sending_date, _Email.reception_date, AbstractEntityEmail.identifier, EmailSending.signature.
* Crudity :
- The field 'models.WaitingAction.data' has been renamed "raw_data".
- The method 'models.WaitingAction.set_data()' now assigns the data & returns nothing.
- The method 'registry.CRUDityRegistry.get_backend()' raises now 'CRUDityRegistry.RegistrationError' exceptions (it raised 'creme_core.registry.NotRegistered').
- In 'backends.models.CrudityBackend' :
- The methods 'get_rendered_buttons()' & 'add_buttons()' have been removed.
- The attribute 'buttons' has been removed.
- The class attribute 'blocks' has been replaced by 'brick_classes' (which has a different default value).
- In 'inputs.base.CrudityInput' :
- The method 'register_buttons()' has been removed.
- The attribute '_buttons' has been removed.
- The attribute 'backends' has been renamed '_backends'.
- In 'bricks.WaitingActionsBrick' & 'bricks.CrudityHistoryBrick', the variable "title" is not injected in the context anymore.
- The classes in 'buttons' have been removed (InfopathCreateFormButton, EmailTemplateCreateButton).
* Events :
- In the dictionary returned by 'AbstractEvent.get_stats()', the id "invations_count" has been renamed "invitations_count".
* Polls :
- These templatetags have been renamed :
- print_line_condition -> poll_line_condition
- print_node_number -> poll_node_number
- print_node_css -> poll_node_css
* Projects :
- The field 'models.AbstractProjectTask.project' has been renamed "linked_project".

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

The method 'CremeCoreConfig.hook_widget_render()' has been removed.
In 'creme_core.constants' SETTING_BLOCK_DEFAULT_STATE_IS_OPEN & SETTING_BLOCK_DEFAULT_STATE_SHOW_EMPTY_FIELDS are now deprecated
(use SETTING_BRICK_DEFAULT_STATE_IS_OPEN & SETTING_BRICK_DEFAULT_STATE_SHOW_EMPTY_FIELDS instead).
The middleware classes (in 'creme_core.middleware' & 'mediagenerator.middleware') now inherit 'django.utils.deprecation.MiddlewareMixin'.
In 'creme_core.models' :
- The fields 'bricks.RelationBlockItem.json_cells_map' & 'CustomBlockConfigItem.json_cells' cannot be 'null' anymore (a default value has been added).
- The attribute 'bricks.InstanceBlockConfigItem._block' has been renamed to "_brick".
In 'creme_core.views' :
- The method 'search.FoundEntitiesBrick.parse_block_id()' is replaced by 'parse_brick_id()'.
- The method 'creme_property.TaggedEntitiesBrick.parse_block_id()' is replaced by 'parse_brick_id()'.
In 'creme_core.forms.widgets' :
- These methods of 'SelectorList' have been removed: _render_action(), _render_actions().
- The method '_render_inputs()' of 'ChainedInput' & 'PolymorphicInput' have been removed.
- The class 'CremeRadioFieldRenderer' has been removed (because 'django.forms.widgets.RadioFieldRenderer' has been removed).
The attribute 'creme_core.buttons.ButtonsRegistry._buttons' has been renamed to "_button_classes".
The JavaScript widget 'creme.widget.DateRange' has been entirely reworked.
Apps :
* Creme_config :
- The variable 'templatetags.creme_config_tags._USER_SETTINGS_BLOCK' has been removed.
* Activities :
- The function 'views.calendar._get_one_activity_per_calendar()' is now a generator.
* Reports :
- The global variable 'views.report._order_direction' has been removed.
- The tag 'templatetags.reports_tags.report_chart_json()' does not take the context any more.
- In 'forms.report', the constructors of the following classes take an additional argument "model" :
_EntityCellRelated, _EntityCellAggregate, _EntityCellCustomAggregate.

1.10

1.9

1.8

Non breaking changes :
----------------------
Deprecations :
- From Django 1.5 :
- In Response* objects, using 'mimetype' keyword argument is now deprecated ; use 'content_type' instead.
- From Django 1.6 :
- transaction.commit_on_success() (use atomic() instead).
- transaction.commit_manually() (use atomic() instead ; set_autocommit() is an option too, but we avoid it when we can).
- transaction.savepoint*() (use atomic() instead).
- From Django 1.7 :
- django.contrib.contenttypes.generic (use "from django.contrib.contenttypes.fields import GenericForeignKey").
- request.REQUEST (use GET & POST instead).
- The methods south_field_triple() are now useless (the South library is not used anymore).
- django.utils.importlib (use the standard importlib instead).
- django.utils.unittest (use the standard module 'unittest').
- From Django 1.8 :
- Django 1.8 comes with a new Meta API. Several Meta methods are deprecated (get_field_by_name, get_all_field_names, get_all_related_many_to_many_objects).
- The function django.conf.urls.patterns() is deprecated.
- Views as strings in the files urls.py are deprecated ; use real function objects.
- The templates instances returned by the function get_template() are backend-based, and take a dictionary as context (giving a Context instance is deprecated).
- SubfieldBase.
- creme_core.autodiscover() (useless now).
- creme_core.utils.queries.get_first_or_None() (use the method QuerySet.first() instead).
- creme_core.utils.create_or_update() (use QuerySet.update_or_create() instead).
- creme_core.views.generic.detailview.view_real_entity() (use view_entity() instead).
- In creme_core.views.generic.detailview.view_entity(): the 'path' argument is deprecated.
- In the templatetag creme_widgets.get_add_button: the template variable 'path' is deprecated.
- (Multi)GenericEntityField.allowed_models property : the argument 'allowed models' should be an iterable (giving a not-iterable value is deprecated).
- JSONField._build_widget() (set a class attribute 'widget' in your field instead).
- AdaptiveWidget.
- In _CremeTestCase :
- assertFormSetError() (use assertFormsetError() instead).
- autodiscover() (useless now).
- create_image() (use creme.media_managers.tests import create_image() instead).
- Apps :
* Emails :
- _Email.get_status_str() (use get_status_display() instead).
- EmailSending.get_type_str() (use get_type_display() instead).
- EmailSending.get_state_str() (use get_state_display() instead).
- The block EntityEmailBlock and so its template 'emails/templatetags/block_mail.html'. It is now registered or used anymore.
- The methods _Email.get_body(), AbstractEntityEmail.get_body() & LightWeightEmail.get_body().
- LightWeightEmail.get_body_html().
- The view mail.get_entity_mail_body() (use the core view get_sanitized_html instead).
* Billing :
- views.workflow._add_with_relations() (use workflow.generic_add_related() instead).
- creme.billing.linkToDocument() (JavaScript).
- Templatebase.get_generator().
* Creme_config :
- AppConfigRegistry.get_model_conf(): 'ct_id' argument is deprecated ; use the 'model' argument instead.
The entity models are now swappable (excepted media_managers.Image).
It's now possible to totally disable the History in the code (i.e. no new HistoryLine is created).
You can now clearly forbid a CremeEntity model to be cloned, with the new static method get_clone_absolute_url().
The view decorator creme_core.auth.decorators.permission_required() can take a list of permissions.
A new method CremeEntity.get_html_attrs() has been added : you can customise the display of lines in listview.
The support of custom labels for default dialog buttons has been added.
A file "project_settings.py" has been added ; it should contain the setting shared by all your team (e.g. INSTALLED_APPS).
The settings has been improved in order to add other JS/CSS bundles ; see CREME_OPT_MEDIA_BUNDLES.
Several blocks templatetags can now take a URL (in order to give them reversed URLs) :
- get_line_adder
- get_line_linker
- get_line_viewer
- get_line_deletor
- get_line_unlinker
2 signals have been added ; they provide a way to customize the uninstall.
Test models (i.e. models which only exist when tests are run) are used when it is possible (creme_core, reports).
Several ForeignKey fields are now OneToOneFields (RelationBlockItem.relation_type, HistoryConfigItem.relation_type) ;
a new model field has been added: CTypeOneToOneField.
Apps :
* Creme_config :
- Models can now be unregistered from the registry.
* Activesync :
- CremeClient.user is now a OneToOneField.

Breaking changes :
------------------
Changes caused by Django 1.5 :
- Accessing reverse one-to-one relations fetched via select_related() now raises DoesNotExist instead of returning None.
- In URLField, the argument 'verify_exists' has been deleted.
- The commands should use self.stdout.write() & self.stderr.write() instead of 'print'.
- django.utils.simplejson has been replaced by 'json'.
- The methods Paginator.next_page_number() & Paginator.previous_page_number() raise InvalidPage exception, instead of returning '0'.
So the footer of the listview (template) has been fixed.
- The function django.utils.timezone.localtime() crashes if its arg is None.
- The django validation message "Enter a valid e-mail address." has changed (now it's "Enter a valid email address.") ; some unit tests could fail.
- _CremeTestCase.assertXMLEqual() has been renamed assertXMLEqualv2() to avoid the shadowing of the Django's method.
Changes caused by Django 1.6 :
- The forms' Meta should have a 'fields' attribute (or an 'exclude' one).
- The session is now serialized as JSON, so stored objects must be serializable.
- The test runner & the test files layout have changed.
For example, the old command "python manage test persons" has become "python manage test creme.persons.tests".
- The python files 'foo.py' must be renamed 'test_foo.py'.
- CSVImportBaseTestCaseMixin has moved to 'creme.creme_core.tests.views.base'.
- The command 'test_creme' has been removed ('test creme' is OK).
- BooleanField default is now 'None' (so 'False' should be set explicitly).
- The entry Field.default_error_messages['invalid'] has been removed.
- The CONTENT_TYPE key in test response is not available anymore (-> QUERY_STRING can be used instead with different value).
- XViewMiddleware has been removed from settings.py.
- There was a low level change in the SQLite backend + date format of dates as group key.
- The error messages should use mapping keys instead of positional formatting. Some django error messages has changed, so some tests could fail.
Changes caused by Django 1.7 :
- With the new AppConfig system, the files "creme_core_register.py" are not loaded anymore
at startup & should not be used anymore; use CremeAppConfig instead.
- Some imports have to be done lazily in order to avoid AppRegistryNotReady exceptions at startup.
- The loading of models has changed, and errors caused by loop imports could happen.
- django.forms.util has been renamed django.forms.utils.
- The new migrations system caused many changes :
- The model auth.User is not used anymore ; Creme has its own CremeUser model
Use the function get_user_model() or settings.AUTH_USER_MODEL to get it.
- The old South migrations do not work anymore ; generate new migration files with the new command 'makemigrations'.
BEWARE : if you use ForeignKeys/ManyToManyFields/... to the old 'User' model, you'll have to rework the generated migrations (see vanilla apps)
- You have to add a deconstruct() method to your custom model fields.
- Do not use settings.INSTALLED_APPS in your code ; use django.apps.apps instead.
Do not use settings.INSTALLED_CREME_APPS ; use django.apps.apps or creme_registry instead.
- The commands which inherit AppCommand should implements handle_app_config() instead of handle_app().
- The middleware configuration has been improved :
- django.contrib.auth.middleware.SessionAuthenticationMiddleware has been added.
- django.middleware.clickjacking.XFrameOptionsMiddleware has been added.
- The order is the same than in the Django 1.7 settings template.
Changes caused by Django 1.8 :
- The method QuerySet.select_related() now validates that the given fields actually exist.
Previously, non-existent fields were silently ignored. Now, an error is raised.
- The result of the method Meta.get_all_related_objects() has changed ; it's deprecated too.
- ContentType.name is not a real field anymore ; you cannot perform query on it.
- The module django.contrib.formtools has been removed ; it's a third party app now.
- The module django.core.context_processors has moved to 'django.template.context_processors'.
- Some private classes move from django.template to django.template.base, like VariableNode.
- The method URLField.to_python() no longer adds a trailing slash to pathless URLs (it made some unit tests fail in 'vcfs').
- The super methods setUpClass()/tearDownClass)() must be called in test cases.
- The instances of RequestContext are not filled by the context processors when they are built anymore, but only before the template rendering.
So you'll probably need the new creme.creme_core.views.blocks.build_context() function for your own block reloading views.
- The length of EmailFields is now 254 by default. CremeUser/Contact/Organisation have been migrated.
- The commands should now use the method add_arguments(), based on 'argparse' (not 'optparse' anymore).
- Some changes in the session implementation can make some low level tests fail.
- Some changes in the DB management in unit tests can make some tests fail.
- The settings for the templates configuration have changed.
The setting TEMPLATES replace the settings TEMPLATE_* (e.g. TEMPLATE_LOADERS...) which are now deprecated.
Upgrade of several JavaScript libraries :
- "Jquery" (1.11.2).
- For 'checked' property use the prop() method instead of attr() (see jquery doc).
- Tip: add the plugin jquery-migrate (1.2.1) whichs prevents compatibilities issues with previous jquery releases
and show deprecation warnings (see https://github.com/jquery/jquery-migrate/blob/master/warnings.md).
- "Jquery-ui" (1.11.4).
- "Form" (3.51) (the changes written for 2.94 have been ported too).
- "Chosen" (0.9.15) (the changes written for 0.9.8 have been ported too).
- "Fullcalendar" (1.6.7).
- "Qunit" (1.18).
The CremeEntity sub-classes should now have a method get_create_absolute_url() (excepted auxiliary ones).
The module 'creme_core.utils.contribute_to_model' has been removed (use model swapping instead).
In creme_core.utils.meta :
- The function get_related_field() has been removed (its behaviour was very different with the underlying Django fields changes).
- The function get_model_field_info() has been removed (it was deprecated).
- The function get_verbose_field_name() has been removed (it was deprecated).
The template "creme_core/generics/blockform/add_popup.html" has been removed.
The tag 'enumerable' tag is now True by default in ManyToManyFields.
The constructor BasePopulator.init() takes 2 additional arguments ('stdout' & 'style').
The 'extra_q' argument of generic.listview.list_view_content (and so list_view() & list_view_popup_from_widget() which use it)
can not contains a sub-queryset condition anymore (you'll get SerializationError) ; convert them into list.
GenericEntityField & MultipleGenericEntityField need the "user" attribute (for creation permissions).
In (Multi)CreatorEntityField, the hack which consisted to write "myfield.create_action_url = myfield.create_action_url" in order
to activate the creation button on fields with q_filter does not work anymore. Use "myfield.force_creation = True" instead.
About RelationEntityField.allowed_rtypes (ie the setter & the constructor's attribute) : if an object evaluated to False was passed,
all RelationTypes were allowed. This behaviour has been removed ; use RelationType.objects.all() instead.
In FilteredEntityTypeField, 'None' is not a valid parameter anymore for the constructor (but the default behavior did not change).
The widget Label displays its 'empty_label' if its value is evaluated to False (before: only if it was 'None').
When a Q() is used as 'limit_choices_to' attribute of a RelatedField in a CremeEntity, hide the field or set a custom form for inner-edition
or it will cause a ValueError exception. The other cases are handled.
SearchConfigItem :
- create_if_needed(): the argument 'user' has been replaced by the argument 'role'.
- get_4_model() has been removed (it was deprecated).
The following JavaScript functions have been removed (they were deprecated).
- creme.utils.bindShowHideTbody().
- creme.utils.handleResearch().
- creme.lv_widget.handleSelection().
- creme.lv_widget.delete_a_value().
The view "/creme_core/enumerable/<content_type>/json" now returns a list of dicts instead of a list of tuples.
The middleware LogImportedModulesMiddleware has been removed.
Apps :
* Billing :
- The classes Base (parent of Invoice, Quote...) and Line (parent of ProductLine & ServiceLine) are now abstract classes.
- The listview for Lines ('/billing/lines') has been removed.
- The related names for FK in Base ('*_address', 'currency', 'additional_info', 'payment_terms', 'payment_info') have been removed.
- The block ReceivedBillingDocumentBlock has been removed (replaced by ReceivedQuotesBlock/ReceivedSalesOrdersBlock/ReceivedCreditNotesBlock).
- The field Line.type has been removed and also the related stuff :
- The method Line.get_verbose_type().
- The constants PRODUCT_LINE_TYPE, SERVICE_LINE_TYPE & LINE_TYPES.
- The FunctionField '_LineTypeField'.
- The views invoice.add_from_detailview() & invoice.add_with_relations() have been removed & replaced by invoice.add_related().
- The view quote.add_with_relations() has been removed & replaced by quote.add_related().
- The view sales_order.add_with_relations() has been removed & replaced by sales_order.add_related().
- The method Base.get_lines() cannot be called with Line parameter anymore (use ProductLine or ServiceLine).
* Projects :
- The model ProjectTask does not inherit from Activity anymore (it inherits CremeEntity directly).
The fields 'title', 'start', 'end' & 'duration' have been copied from the Activity part.
- The block TaskWorkingPeriodsBlock has been replaced by TaskActivitiesBlock.
The template file 'block_working_periods.html' has been renamed to 'block_activities.html'.
- The model WorkingPeriod, the form WorkingPeriodForm & the views form views/workingperiod.py have been removed.
The method ProjectTask.get_working_periods() has been removed too ; use the property 'related_activities' instead.
- In the Resource model:
- The field 'hourly_cost' is not nullable anymore, with 0 as default.
- The fields 'task' & 'linked_contact' are not editable anymore.
- About ProjectTask views :
- The detailview()'s argument 'object_id' has been renamed to 'task_id'.
- The function delete() has been removed (the generic view is used).
* Persons:
- The ContactForm block ID 'coordinates' became 'details'.
- The method Contact.get_user_contact_or_mock() has ben removed (it was deprecated).
- In the view contact.add_with_relation(), the argument 'predicate_id' has been renamed 'rtype_id'.
- Address._INFO_FIELD_NAMES has been removed.
- The following 'persons' blocks are deprecated: ContactBlock, ContactCoordinatesBlock, OrganisationBlock, OrgaCoordinatesBlock.
They are no more used or registered.
- The field 'name' is excluded in BillingAddressForm/ShippingAddressForm.
- The related names for billing & shipping addresses have been removed ('billing_address_orga_set', ...).
- The view contact.add_with_relation() has been renamed to add_related_contact().
- _PersonCSVImportForm._save_address() & _PersonMergeForm._save_address() take an additional argument 'name'.
* Creme_config :
- In forms.field.CreatorModelChoiceField: the methods _build_create_action_url() & _build_widget() have been removed.
The property 'create_action_url' now returns the real used URL (i.e. even it has not been set manually); the empty value is now '' (not <None> anymore).
* Documents :
- Folders are not unique by 'title' anymore ; the constraint is now: unique_together = ('title', 'parent_folder', 'category').
* Geolocation :
- The IDs of the blocks have been fixed.
* Emails :
- The view mail.get_lightweight_mail_body() returns now sanitized HTML.
* Mobile:
- The widget forms.EmailInput has been removed.
* Activesync :
- In the command 'activesync_options', the '-v' option is now like the other command ones :
it's an integer, & the long name is now '--verbosity'.

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)
Caused by Django 1.6 :
- Last viewed items are now stored as a list of dicts.
- The method Block.__get_context() has been removed.
- The method _BlockContext.update() does not take 'modified' argument anymore.
- The _BlockContext child classes should implement the method as_dict().
Caused by Django 1.7 :
- BasePopulator.dependencies now remains like ['creme_core', 'persons'] (there were dynamically transformed to ['creme.creme_core', 'creme.persons'])
- The keys of _BlockRegistry._object_blocks are classes, not ContentType IDs anymore ;
the method _generate_modelblock_id() takes now a class.
Lots of form fields have been reworked in order to be more Django compliant (principally the fields inheriting JSONField).
- The method BatchActionsField._create_widget() has been removed.
- The attribute BatchActionsWidget.fields is now a classical iterable of tuples (ie not a dict-like anymore).
- The following (Multi)CreatorEntityField methods have been removed: _create_widget, get_ctype, _update_actions, _clear_actions, _add_action, _add_create_action.
- The attribute MultiCreatorEntityField._widget_item removed.
- The method FilteredEntityTypeField._create_widget() has been removed.
- The methods RelationEntityField._create_widget() & MultiRelationEntityField._create_widget() have been removed.
- The methods GenericEntityField._create_widget() & MultiGenericEntityField._create_widget() have been removed.
- The method GenericEntityField._get_ctypes_options() has no 'ctypes' argument anymore.
- There was many changes in EntityFilter form fields & widgets.
- The method RelationExtractorField._create_widget() has been removed.
History:
- HistoryLine.verbose_modifications property has been removed (replaced by get_verbose_modifications()).
- _HistoryLineType.verbose_modifications() & _HistoryLineType._verbose_modifications_4_fields() take an additional 'user' argument.
forms.entity_filter.{RegularFieldsConditionsField|DateFieldsConditionsField}._build_related_fields(): there is an additional argument 'fconfigs'.
Now "/creme_core/entity/delete/multi" returns a list of errors (rendered in popup) instead of a simple string.
The template parameter 'hide_submit' has been removed and a 'is_inner_popup' (more useful) is added.
The forms & views which create/edit the detailviews blocks configuration have changed a lot.
core.search.Searcher.search() can now return 'None' (it means that all fields are hidden).
DateRangeWidget's choices are now empty by default (they are set by DateRangeField).
The function creme_core.views.generic.listview.list_view_content() does not set the key 'list_view_template' in the context anymore.
Templatetag creme_core.templatetags.creme_blocks.LineCreatorNode/LineSuppressorNode: the 'url' argument (a string) has been replaced by 'url_var' (a evaluable node).
Apps :
* Persons:
- persons.forms.merge.get_merge_form_builder() takes now a 'model' argument.
- persons.forms.lv_import.get_csv_form_builder() takes now a 'model' argument.
- persons.forms.base._BasePersonForm._init_address_fields takes now a 'fconfig' argument.
- persons.forms.{merge|lv_import}._FIELD_NAMES & persons.blocks._ADDRESS_FIELD_NAMES have been removed.
* Activities :
- The view activity.add_fixedtype has been removed.
- The method ActivityTypeField._create_widget() has been removed.
- The JS function calendar.fullCalendar() takes one additional argument.
- The JS function calendar.positionNavigationWidget() has been removed. The header positioning is now done in CSS.
* Billing :
- The JavaScript function creme.billing.generateInvoiceNumber() takes now a URL (not an ID anymore).
- The block billing.blocks.BillingBlock is deprecated ; it is no more used or registered.
- The view credit_note.add_related_credit_note() has been renamed link_to_credit_notes().
- The JavaScript function creme.billing.multi_save_lines() has been renamed to multiSaveLines().
* Creme_config :
- _ConfigRegistry.get_app() :
- The argument's name is now "app_label".
- It raises a creme.creme_core.registry.NotRegistered exception instead of KeyError with unknown apps.
* Vcfs:
- VcfGenerator._INFO_FIELD_NAMES has been removed.
- VcfGenerator.address_equality() is not a static method anymore.
- VcfGenerator.generate_address() is not a static method anymore.
- VcfGenerator.generate_name() has been removed.
- There are a lot of changes in VcfImportForm.
* Products :
- In CategoryField, the following methods have been removed: _get_categories_options, _get_categories_objects, _create_widget.
* Reports:
- The JavaScript function creme.reports.openGraphEdition() takes an additional argument (URL).
* Tickets :
- AbstractTicket has been renamed TicketMixin (& there's a new AbstractTicket class).
* Commercial :
- The form strategy._AuxForm has no attribute '_strategy' anymore.
* Documents :
- _DocumentsTestCase._create_doc() returns the created Document (& not the response anymore).
* Media_managers :
- The template 'media_managers/view_image_popup.html' has been removed ; it was not used anymore.
* Emails :
- The method _SynchronizationMailsBlock.detailview_ajax()' has been removed.
* Polls :
- The method PollFormLineConditionsField._create_widget() has been removed.
* Activesync:
- The function activesync.etutils.get_ns() has been removed (seems useless).
* CTI :
- The JS function creme.cti.phoneCall() takes one additional argument.

Page 3 of 5

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.