Creme-crm

Latest version: v2.6.6

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

Scan your dependencies

Page 4 of 5

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.

1.7

1.6

1.5

Users side :
------------
Mobile, a new app. It provides 3 views which are specifically adapted to the cellphones.
- The 'Home' page displays the Activities in progress and the Activities of the days.
- The 'Directory' page displays the favorite Contacts and Organisations (and their employees).
- The 'Activities' page displays the delayed phone calls, the activities without date and the activities planned the next day.
- You can search Contacts & Organisations, and create them.
- When you click on a phone number, and come back to the browser at the end of the call, a workflow panel allows you to
create a phonecall Activity (if it did not exist) and set its status.
- The (alternative) login view is on the URL '/mobile/login/'.
Geolocation, a new app. It adds some geolocation features for the Contact and Organisation addresses.
For the time being, it uses only GoogleMaps service. 3 new blocks are available :
- "Maps" shows the location(s) of a Contact/Organisation in a map by using their addresses ; the latitude and the longitude can be manually dragged on the map.
- "Maps By Filter" shows the locations of all Contacts or Organisations for a given filter.
- "Around this address" shows all the neighbours of a selected address ; the neighbours can be filtered.
A detail view for the PropertyTypes, which shows the tagged entities, has been added.
The inner/bulk edition has been improved :
- The widgets are the same the full form ones, and so :
- The creator widgets are now used with configurable models (e.g. Invoice.status).
- The ForeignKeys to CremeEntities are now well managed (e.g. Contact.image).
- The ManyToManyFields are now supported (e.g. Image.categories).
- The form of a specific field can be customized in order to manage correctly its business logic (see 'Apps' section).
- The support of related sub-fields (e.g. Contact.billing_address__city) has been added.
List view :
- The quick search on properties is now possible.
- The natural ordering of the models is now applied as default for listview (e.g. Organisation are ordered by their name).
When a column is selected for ordering, both column order and default order are applied.
EntityFilters :
- They can now be private ; it means that they can only be used by their owner.
- The conditions on FK fields (e.g. Invoice.status) can now use a multi-selection.
- The Empty/NotEmpty operators are enabled only when a field can be null.
- The Date fields (regular & custom ones) now supports the Empty/NotEmpty operators.
- The EntityFilters created by the 'populate' scripts (i.e. not custom) are now editable (but not deletable, and their name is not editable); their are versioned too.
Their owner is now the first super-user (in order not all users can edit them).
The versionning means that when a populate script is run again, if the script tries to create a filter which already exists (i.e. its PK exists) :
- if the new version would have the same conditions, the name of the existing filter is updated (in order to fix a potential typo).
- if the conditions are different, a new filter with the old one PK as base for its own PK (plus a version mark) is created ; the name is versioned too.
Listviews Views (HeaderFilters) :
- They can now be private ; it means that they can only be used by their owner.
- The Views created by the 'populate' scripts (i.e. not custom) are now editable (but not deletable).
So, when the scripts are run again, the existing Views are not modified anymore (in order to keep the modifications of the users).
Global search :
- The view uses now the GET method, so back button works well now.
- The results blocks are now paginated.
- The search on a model can be disabled in creme_config.
The CSV import can now set the CustomFields values.
You can now create an Entity "on the fly" with the multi-select widget for Entities.
A User and its related Contact are now synchronised (i.e. first_name, last_name & email remain equal).
The autocompletion has been added to several forms, to select a content type or a relationship type.
The non mandatory instances are not re-created anymore when the command 'creme_populate' is run.
The ordering of models has been improved: lots of models are now ordered by name/title.
Apps :
* Reports :
- A Report can (again) be created with no column.
- The download form has been improved.
- The graphs can save a default chart (bar, pie, tube...) for their next rendering.
- The number of queries computing the graph data has been reduced.
- The field Report.filter can now be inner-edited.
- The "volatile" links have been improved :
- Their name is always up to date & localized.
- When a link becomes invalid, the error is displayed in creme_config.
- They can be any valid/compatible relationship/FK, and not only the ones which correspond to a column of the related Report.
- The export view now uses GET parameters, so it can be bookmarked for example.
* Activities :
- The type of an Activity can now be edited (and not only its sub-type).
- The Organisations of the participants can be automatically added as subjects (it can be configured and it is enabled by default).
- The Activities can now be imported (i.e. CSV/Excel files).
- When a team is selected to be a participant, its teammates participate.
* Persons:
- You can now merge 2 Contacts if one of them is a user (but not 2).
- A field 'order' has been added to StaffSize.
- The field Organisation.siren is not unique anymore.
* Creme_config :
- You can not link an existing Contact when you create a User anymore.
- SettingKey & SettingValue :
- The values have a prettier display in their block (e.g. 'True' is now a localized "Yes").
- The descriptions are correctly localized.
- The permissions for the views which configure RelationTypes, PropertyTypes, Blocks... have changed from 'creme_config.can_admin' to 'creme_core.can_admin'.
The related portals do not need specific permissions anymore.
* Commercial :
- Commercial action :
- A counted entity can be directly created with a quick form, from the objectives block.
- A linked opportunity can be directly created from the 'Related opportunities' block.
* Recurrents :
- The field RecurrentGenerator.periodicity is now a DatePeriodField. It allows more accurate periodicity :
for example, you can set a real 'monthly' period, which is not equal to 30 days.
- The wizard form is now closer to other forms.
* Emails :
- The available sender address of the EmailCampaigns is now stored in a SettingValue.
* Billing :
- CSV import: in update mode, you can choose to update or not the addresses from the target.
* Products :
- The fields Product.category & Product.sub_category can now be inner-edited.
- The summary (used in the Relationships form for example) does not display the images anymore.
* Assistants :
- The minimum hour for reminder is now configurable by the users (via a SettingKey/Value).
* Tickets :
- A field 'order' has been added to Priority, Criticity & Status.
* Projects:
- A field 'order' has been added to ProjectStatus & TaskStatus.
* Polls :
- The field PollReply.person can now be inner-edited.

Developers side :
-----------------
Non breaking changes :
----------------------
Deprecations :
- creme_core.utils.meta.get_model_field_info() (see FieldInfo)
- creme_core.utils.meta.get_verbose_field_name() (see FieldInfo)
- creme_core.utils.meta.get_date_fields()
- HeaderFilter.can_edit_or_delete() (use can_edit()/can_delete() methods instead)
- EntityFilter.can_edit_or_delete() (use can_edit()/can_delete() methods instead)
- CremeEntity.get_real_entity_by_id()
- creme_core.models.lock.mutexify()
- Apps :
* Persons :
- Contact.get_user_contact_or_mock().
- Address._get_info_fields() (use Address.info_fields instead).
* Creme_config:
- The auto increment of 'order' field in creme_config is deprecated (use a BasicAutoField instead).
A new model field has been added: BasicAutoField ; it's a PositiveIntegerField which uses an autoincremented value when no value is given
A new class, FieldInfo, has been added in order to replace the function get_model_field_info().
2 new SettingKey types have been added : HOUR, EMAIL.
A new DatePeriod system has been added (with a related model & form fields).
A new decorator for the view is available : creme.creme_core.auth.decorators.permission_required
It raises a 403 error (django.contrib.auth.decorators.permission_required redirects to login).
Notice that login_required is available in creme.creme_core.auth.decorators too.
The database mutex tools have been improved :
- A new decorator has been added : creme.creme_core.models.lock.mutex_autolock.
- A new Context Manager (for "with" statement) has been added : creme.creme_core.models.lock.MutexAutoLock.
The logging configuration has been improved. See LOGGING* properties in settings.py for more information.
A new assertion, assertDatetimesAlmostEqual(), is available.
The ForeignKeys have 2 new methods : get_null_label() & set_null_label(). The null_label allows a pretty display of null values.
A new collection is available: ClassKeyedMap ; it is kind of dictionary where key must be classes and which manages inheritage.
The file 'requirements.txt' has been cleaned, and the recommended versions of these packages
have been upgraded: Pillow, xlrd, south, pycrypto & restkit.
Apps :
* Reports :
- A registry for types of charts (which allows to add custom ones) has been created.

Breaking changes :
------------------
Python 2.7 is now the only supported version.
Deprecated stuffs which have been removed :
- The function creme_core.utils.Q_creme_entity_content_types().
- Two methods in Opportunity: get_target() & get_source().
- All the deprecated credentials methods in CremeEntity :.
- can_change() & can_change_or_die()
- can_delete() & can_delete_or_die()
- can_link() & can_link_or_die()
- can_unlink() & can_unlink_or_die()
- can_view() & can_view_or_die()
- populate_credentials()
- The form fields _EntityField/CremeEntityField/MultiCremeEntityField and the associated widget ListViewWidget.
- JavaScript:
- creme.utils.simpleConfirm()
- creme.utils.postNReload()
The 'user' argument was removed from several methods :
- Relation.populate_real_object_entities()
- CremeEntity.populate_relations()
- EntityCell.populate_entities()
- HeaderFilter.populate_entities()
The method CremeEntity.get_edit_absolute_url() now returns '' (and not an invalid URL anymore) which means 'No edition' ;
the base templates/templatetags use this official behaviour (view_entity.html, {% get_edit_button ... %}).
_BulkUpdateRegistry.register() args have changed. It is not anymore a list of tuples (model, list_of_field_names),
but now it allows to register only a model at once, an optional list of field names, and an optional dict of custom forms.
ManyToManyFields are now inner-editable by default ; so you have to manage them with bulk_update_registry.register(MyModel, ...)
if it causes a business logic problem (by excluding them, or adding a custom form for them).
SettingKey & SettingValue :
- The SettingKey class is not a model anymore ; the SettingKey instances should be created
in a setting_keys.py file and registered in your creme_core_register.py (see setting_key_registry).
- The model SettingValue :
- It has moved to creme_core (creme_core.models.setting_value.py).
- The field 'key' (ForeignKey) has been replaced by a 'key_id' field (CharField) ;
so you could have to change some of your queries (e.g. '.filter(key=MY_KEY)' --> '.filter(key_id=MY_KEY)').
HeaderFilter.create() :
- It does not modify an existing HeaderFilter anymore.
- The owner cannot be a staff user.
EntityFilter.create() :
- If the argument 'is_custom' is False, you have to give the conditions as argument too (this is a new argument) ;
a new filter is created if the conditions (or the 'use_or' field) are different ; if there are identitical, the name is updated.
- The owner cannot be a staff user anymore.
- The characters '[]' are now forbidden in the PK (ValueError).
- The 'ct' & the 'is_custom' value can not be changed if there is already an existing filter (ValueError).
_FieldPrintersRegistry :
- The functions registered as field printers take now an additional 'field' argument.
- The attributes css_default_listview & css_default_header_listview have been removed.
- The method get_listview_css_class_for_field() & get_header_listview_css_class_for_field() can not take 'None' as argument anymore.
Templatetags :
- 'enumerate' has been removed.
- 'print_boolean' always returns a boolean widget (it does not check if the argument is a boolean anymore).
CSV import : ImportForm._post_instance_creation() takes now an additional argument 'updated'.
Reminders :
- The Reminder class has changed :
- The attribute 'id_' has been renamed 'id'.
- The attribute 'model_' has been renamed 'model'.
- The models which can be reminded must have a boolean field called 'reminded' (so assistants.ToDo & assistants.Alert have been updated).
The class creme.creme_core.core.entity_cell.EntityCellRegularField has changed : the property 'field_info' returns now a FieldInfo instance.
The variable settings.SHOW_HELP has been removed.
Apps :
* Recurrents :
- The forms given to the registry must take a new 'ct' argument ; the 'initial' argument is not set anymore.

Internal breaking changes :
---------------------------
(they should not cause problem if you have not deeply modified the source code of Creme)
The view creme_core.views.clean.clean() has been removed.
The old bulk edition URLs have been removed :
/creme_core/bulk_update/[...]
/creme_core/edit/[...]/[...]/field/[...]
Use now:
bulk edition : /creme_core/edit/bulk/[...]/[...]/field/[...]
inner edition : /creme_core/edit/inner/[...]/[...]/field/[...]
The old bulk widget URL has been removed : /creme_core/get_widget/[...]
The bulk edition forms EntitiesBulkUpdateForm & EntityInnerEditForm have been removed
and replaced by BulkForm and BulkDefaultEditForm.
The useless template file creme_core/templatetags/widgets/block_listview_field_editor.html has been removed.
The listview popup URL /creme_core/lv_popup/[...] has been changed to /creme_core/list_view/popup/[...].
The model SearchField has been removed, & replaced by the new TextField SearchConfigItem.field_names.
The attribute ImportForm4CremeEntity.columns4dynrelations has been removed (there is an ImportForm.choices attribute instead).
The HeaderFilterList's constructor takes now a mandatory 'user' argument.
The EntityFilterList's constructor takes now a mandatory 'user' argument.
Global search :
- The view ('/creme_core/search') uses now the GET method and returns a complete page.
- The method SearchConfigItem.get_4_model() is deprecated; use SearchConfigItem.get_4_models() instead.
- The templatetag {% get_search_panel %} does not take argument anymore.
- The JavaScript function creme.utils.handleResearch() is deprecated.
The view creme_core.views.enumerable.json_list_enumerable() returns now tuples (id, label, group) for EntityFilter (instead of tuples (id, label) ).
The inner classes PolymorphicInput.Model & ChainedInput.Model have been removed.
The method Relation._collect_sub_objects() has been removed.
JavaScript :
- The function creme.lv_widget.init_widget() has been removed.
- The methods creme.lv_widget.handleSelection() and creme.lv_widget.delete_a_value() are now deprecated.
- Move some methods from utils.js to block.js :
- creme.utils.tableExpandState -> creme.blocks.tableExpandState
- creme.utils.tableIsCollapsed -> creme.blocks.tableIsCollapsed
- creme.utils.tableExpand -> creme.blocks.tableExpand
- creme.utils.bindTableToggle -> creme.blocks.bindTableToggle
Apps :
* Reports :
- The ReportField has change, in order to separate the aggregates on regular fields & custom fields.
- RFT_AGGREGATE has been replaced by RFT_AGG_FIELD.
- RFT_AGG_CUSTOM has been added.
- The form report.DateReportFilterForm has been removed.
- The export URLs have changed :
/reports/report/preview/[...] became /reports/export/preview/[...]
/reports/report/export/[...]/[...] became /reports/export/filter/[...]
- The function reports.core.graph.fetch_graph_from_instance_block has been replaced by the static method ReportGraph.get_fetcher_from_instance_block().
- The templatetags report_[barchart|piechart|tubechart]_json have been replaced by the generic one report_chart_json.
* Opportunities :
- In the forms.lv_import module, SalesPhaseExtractor, SalesPhaseExtractorWidget & SalesPhaseExtractorField have been removed.
* Activities :
- _ActivityForm.participants is now a set (it was a list).
- ParticipantCreateForm.participants is now a set too.
* Assistants :
- The field ToDo.has_deadline has been removed.
* Activesync :
- The function create_or_update_function() has been renamed create_or_update_position().
- The class wbxml.Accessor has been removed.
* Recurrents :
- The field RecurrentGenerator.periodicity is now a DatePeriodField.
- The fields RecurrentGenerator.ct & RecurrentGenerator.template are not editable anymore.
- The fields RecurrentGenerator.first_generation & RecurrentGenerator.last_generation are not nullable anymore.
- The Periodicity model has been removed.
- The method RecurrentRegistry.get_all_templates() has been replaced by the property RecurrentRegistry.ctypes.
- The deprecated wizard-view function has been replaced by a class based view.

1.4

Users side :
------------
The HeaderFilter (listviews Views) form has a new UI :
- You can now choose the order for all columns.
- The UI is more compact and friendly (filter, search, drag n' drop).
Customisable object & relation blocks. You can choose the same fields as in HeaderFilter form (& the UI is very close too).
EntityFilter :
- A new condition is available for ForeignKeys to User : current user.
- The operators are now filtered according to the selected field's type (regular & custom fields).
- Enumerable field choices are now displayed in a combobox (instead of a simple text field).
CSV import can now update existing entities instead of always creating them ; you can select several fields that act as a key.
The 'Ice cream' theme has been improved again : better contrast, separation lines, drop shadows...
There are some User management enhancements :
- The superusers can now deactivate common users from creme_config (i.e. in a graphical manner).
- The field User.is_staff is now used by Creme : the staff users are hidden from other users, and they cannot be selected to own entities for example.
The staff users are used to help the other users, but they should not participate in the business.
Staff users are created by the django command 'createsuperuser' (but the first superuser created after the syncdb command is not a staff user).
Minor UI improvements in forms :
- Labels for submit buttons are now better ; for example 'Save the contact' instead of 'Submit' in the Contact creation form.
- A 'Cancel' button is available in lots of forms.
- A new JavaScript widget (CheckListSelect) is now used for multi-selecting without ordering : it uses check boxes and allows filtering/searching.
- The order of the buttons in popups is now : OK/Cancel.
- A new field to select several entities MultiCreatorEntityField replaces MultiCremeEntityField (but it does not allow inline creation yet).
Improved CSS for list views (fields are aligned differently according to their type).
A new pager for blocks has been added ; it manages large numbers of pages better.
A new command, called 'creme_uninstall', has been added : it can uninstall a Creme app in the good way.
A Unicode Collation Algorithm (derived from pyuca) is used to sort :
- The apps in the menu, the creme_config portal, the UserRoles configuration.
- The fields in the HeaderFilter form & in the search configuration.
- The ContentTypes in <select>.
- ...
JavaScript : some fallbacks for IE8 & 9 have been added. The support of IE 7 has been dropped.
The column titles in the list views are always up-to-date (before, they were computed during columns edition).
The error handling in inner popups has been improved.
A view for 409 errors has been created.
Apps :
* Polls, a new app :
- You can create a PollForm, which contains questions organised in sections, sub-sections etc...
- Questions have a type (string, integer, boolean, enumeration...).
- Questions can have conditions on previous questions : a question is activated only if its conditions are filled.
- You can create several PollReplies from a PollForm, which snapshot the questions of the form.
- A PollReply can be filled with a wizard, and answers can be edited later.
- The PollReplies can be grouped by PollCampaigns.
* Reports :
* When you create a new Report, you can only select the columns from an existing HeaderFilter.
* A new UI for the columns edition has been added, and it uses the work on the new HeaderFilter form.
* ReportGraphs :
- The form has been improved. Example : the field 'Is count' is already checked if there is no available aggregable field.
- Only the ForeignKeys related to enumerable models are available (see the notes on 'enumerable' tag below) for the abscissa.
- CustomFields are now available for abscissa & ordinate.
- The graph design has been heavily enhanced. The data is emphasized by a clearer display :
many useless/annoying visual elements were removed, legends are better, many glitches were fixed...
* Several behaviours have been fixed :
- The column titles are now always up-to-date (before, they were computed during columns edition).
- The 1st level entities are filtered by credentials ('view' permission).
- When a FK field is linked to a sub-report, if a related entity does not pass the subfilter, the line is not dropped any more (related values are just empty).
- The flattened sub-reports (ie not expanded, see 'selected' attribute) in columns associated to ManyToManyField/ForeignKey/related fields are now used.
- The flattened sub-reports manage now all types of columns.
- The aggregates are computed in a scope (so result may be different with an aggregate in a sub-report).
* Invalid columns are automatically removed (e.g. removed CustomField).
* Activities, the calendar has been heavily improved :
* The version of fullcalendar.js has been updated from 1.4.5 to 1.4.7.
* A new menu has been created, with :
- Floating activities ; they can be drag n' dropped on the calendar, and filtered by their name.
- All your calendars & the public calendars of all the other users.
Several calendars can be shown together (they have different colors) and they can be filtered by their name, or the first name and last name of their owner.
* Billing :
- The creation and the edition of billing lines have been redesigned, in order to use more client side computation.
- A new field 'acceptation_date' (DateField) has been added to the Quote model.
- A new field 'pending_payment' (BooleanField) has been added to the InvoiceStatus model.
- 3 function fields are dynamically added by the 'billing' app to the models Organisation and Contact :
- Total of pending payment.
- Total number of won quotes this year.
- Total number of won quotes last year.
* Opportunities :
- Opportunity.target field is now editable.
* Products:
- 'images' are now displayed in a true block (Products & Services).
* Projects :
- The Project.name field is not nullable anymore.

Developers side :
-----------------
Non breaking changes :
----------------------
A new field tag has been created : 'enumerable'. When a ForeignKey is tagged as enumerable, it means that the related model
can be enumerated, ie there are a limited number of instances. Eg : persons.models.Position are enumerable, but not persons.models.Address.
JavaScript :
* A basic object derivation support (see creme.component.Component) has been added.
* A simple event handling tool (creme.component.EventHandler) has been added.
* The 'disabled' attribute now works with widgets.
* The following widgets use collection models and new rendering tools :
- CheckListSelect.
- PolymorphicSelect.
- DynamicSelect.
* The popup system has been refactored :
- creme.utils.simpleConfirm() is deprecated ; use creme.dialogs.confirm() instead.
- You should use creme.utils.showInnerPopup() only for compatibility with actual popup templates (see creme_core/templates/creme_core/inner_popup.html)
- creme.dialog.Dialog is the new base dialog object.
- creme.dialog.ConfirmDialog shows a message and has OK/Cancel buttons.
- creme.dialog.FormDialog has Save/Cancel buttons and handles form errors.
- creme.dialog.SelectDialog has OK/Cancel buttons and an API to return a value when it is closed.
- Many helper functions were added in creme.dialogs.
* The AJAX actions have been improved :
- creme.utils.postNReload() is deprecated ; use creme.blocks.ajaxPOSTQuery() instead.
- A new API for requests has been added : creme.ajax.Query.
- Many helper functions were added in creme.utils and creme.blocks for AJAX actions with confirmation, reloading and error dialogs.
New form fields were added : MultiCTypeChoiceField & MultiEntityCTypeChoiceField. They use the cache of ContentType.
CremeEntityField & MultiCremeEntityField form fields are now deprecated ; ListViewWidget too.
use CreatorEntityField & MultiCreatorEntityField instead.
The function creme_core.utils.Q_creme_entity_content_types() is now deprecated.
The old migration scripts have been folded.
Apps :
* Activities :
- Calendar now has a field 'color'.
* Billing:
- The following constants are deprecated : PERCENT_PK, AMOUNT_PK & DISCOUNT_UNIT.
* Opportunities:
- The methods Opportunity.get_target() & Opportunity.get_source() are now deprecated.
* Reports :
- The code has been heavily refactored, and a lot of work is now done in the new reports.core module.

Breaking changes :
------------------
The model HeaderFilterItem has been removed, & HeaderFilter now stores the columns in a new field called 'json_cells'.
It contains a JSON serialisation of instances of the new class EntityCell (which is used by new configurable blocks too).
So the HeaderFilter.create() static method has changed : it takes EntityCells instances now.
The global_info 'username' (string) has been replaced by 'user' (User instance).
The JavaScript function creme.utils.loadBlock() has been removed ; use creme.blocks.reload() instead.
3 useless views in creme_core have been removed :
- /creme_core/entity/get_fields
- /creme_core/entity/get_function_fields
- /creme_core/entity/get_custom_fields
The method Relation.update_links() has been removed (it was deprecated).
2 Relation URLs have been modified :
- /creme_core/relation/entity/.../predicates/json ==> /creme_core/relation/entity/.../rtypes/json
- /creme_core/relation/predicate/.../content_types/json ==> /creme_core/relation/type/.../content_types/json
The function creme_core.utils.currency_format.currency() can now take a Currency instance instead of a Currency ID ;
idem with the templatetag 'format_amount'.
API breaking : 'currency_id' argument changed to 'currency_or_id'.
The unused form field _CommaMultiValueField has been removed.
Several elements in creme_core.utils.meta have been deleted :
* The exception class NotDjangoModel.
* The functions :
- get_function_field_verbose_name.
- get_related_field_verbose_name.
- filter_entities_on_ct.
- get_fk_entity.
- get_m2m_entities.
- _get_entity_column.
In titles of blocks (inside {%get_block_header%}) the "collapser" css class is no longer needed and will cause issues.
Apps :
* Activities :
- The field ActivityType.color has been removed.
- The JS function creme.activities.calendar.setReadableColor() has been removed.
* Media_managers :
- ImageM2MWidget has been removed.
* Billing :
- The Vat model has been moved to creme_core.
* Reports :
* About the reports.Field model :
- The field 'report' has been renamed to 'sub_report'.
- The field 'title' has been removed.
- A new ForeignKey field 'report' has been added in order to replace the field Report.columns (ManyToManyField).
* Several useless templatetags were removed :
- get_report_chart.
- get_report_chart_selectors.
- verbose_abscissa.
- verbose_ordinate.
* Emails :
* Lots of changes in its JS file :
- creme.reload_synchronisation() has moved to creme.ajax.reloadContent().
- creme.emails.mass_action() was replaced by creme.blocks.massAction() (arguments are different).
- creme.emails.mass_relation() was replaced by creme.blocks.massRelation() (arguments are different).
- creme.emails._processDone() has been removed.
- creme.emails.resend() & creme.emails.confirmResend() have no 'url' & 'complete_cb' arguments anymore.

Page 4 of 5

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.