creme-crm 2.7__py3-none-any.whl → 2.7.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
creme/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '2.7'
1
+ __version__ = '2.7.1'
2
2
 
3
3
 
4
4
  def get_version():
@@ -317,6 +317,7 @@ class _BillingTestCaseMixin:
317
317
  return orga
318
318
 
319
319
 
320
+ @override_settings(ENTITIES_DELETION_ALLOWED=True) # TODO: in CremeTestCase?
320
321
  class _BillingTestCase(_BillingTestCaseMixin,
321
322
  base.ButtonTestCaseMixin,
322
323
  base.MassImportBaseTestCaseMixin,
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: Creme Creme-Core 2.7\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-06-18 20:16+0200\n"
11
+ "POT-Creation-Date: 2025-10-02 14:52+0100\n"
12
12
  "Last-Translator: Hybird <contact@hybird.org>\n"
13
13
  "Language: fr\n"
14
14
  "MIME-Version: 1.0\n"
@@ -132,6 +132,9 @@ msgstr "Voulez-vous vraiment cloner cette fiche ?"
132
132
  msgid "Chose the type of entity to create"
133
133
  msgstr "Choisir le type de fiche à créer"
134
134
 
135
+ msgid "A few moments ago"
136
+ msgstr "Il y a quelques instants"
137
+
135
138
  #, javascript-format
136
139
  msgid "%d minute ago"
137
140
  msgid_plural "%d minutes ago"
@@ -247,7 +247,10 @@ creme.forms.validateHtml5Form = function(form, options) {
247
247
  noValidate: options.noValidate || form.is('[novalidate]')
248
248
  };
249
249
 
250
- $('input, select, textarea, datalist, output', form).each(function() {
250
+ var inputs = $('input, select, textarea, datalist, output', form);
251
+
252
+ inputs.filter(':not([type="submit"])').trigger('html5-pre-validate', [options]);
253
+ inputs.each(function() {
251
254
  $.extend(errors, creme.forms.validateHtml5Field($(this), fieldOptions));
252
255
  });
253
256
 
@@ -142,9 +142,11 @@ creme.notification.NotificationBox = creme.component.Component.sub({
142
142
 
143
143
  _humanizedTimeDelta: function(secondsTimedelta) {
144
144
  // TODO: use momentjs for this job
145
- var minutesTimeDelta = Math.round(secondsTimedelta / 60);
145
+ var minutesTimeDelta = Math.floor(secondsTimedelta / 60);
146
146
 
147
- if (minutesTimeDelta < 60) {
147
+ if (minutesTimeDelta < 1) {
148
+ return gettext('A few moments ago');
149
+ } else if (minutesTimeDelta < 60) {
148
150
  return ngettext(
149
151
  '%d minute ago', '%d minutes ago', minutesTimeDelta
150
152
  ).format(minutesTimeDelta);
@@ -176,15 +178,16 @@ creme.notification.NotificationBox = creme.component.Component.sub({
176
178
  return;
177
179
  }
178
180
 
181
+ var self = this;
179
182
  var now = Date.now();
180
183
 
181
184
  $('.notification-item').each(function() {
182
185
  var item = $(this);
183
- var created = item.data('created');
184
- var label = this._humanizedTimeDelta(Math.round((now - created) / 1000));
186
+ var created = parseInt(item.data('created'));
187
+ var label = self._humanizedTimeDelta(Math.round((now - created) / 1000));
185
188
 
186
189
  item.find('.notification-created').text(label);
187
- }.bind(this));
190
+ });
188
191
  },
189
192
 
190
193
  _updateItems: function(notifications) {
@@ -109,7 +109,7 @@ QUnit.test('creme.dialog.GlassPane (toggle)', function(assert) {
109
109
  equal(false, glasspane.isOpened());
110
110
  });
111
111
 
112
- QUnit.skipIf(QUnit.browsers.isChrome('<85'), 'creme.dialog.GlassPane (anchor z-index) - firefox', function(assert) {
112
+ QUnit.skipIf(!QUnit.browsers.isChrome('>=85'), 'creme.dialog.GlassPane (anchor z-index) - chrome >= 85', function(assert) {
113
113
  var glasspane = new creme.dialog.GlassPane();
114
114
 
115
115
  this.qunitFixture().css('z-index', 1000);
@@ -119,7 +119,27 @@ QUnit.skipIf(QUnit.browsers.isChrome('<85'), 'creme.dialog.GlassPane (anchor z-i
119
119
  equal(999, glasspane.pane().css('z-index'));
120
120
  });
121
121
 
122
- QUnit.skipIf(QUnit.browsers.isFirefox() || QUnit.browsers.isChrome('>=85'), 'creme.dialog.GlassPane (anchor z-index) - chrome', function(assert) {
122
+ QUnit.skipIf(!QUnit.browsers.isFirefox('>=143'), 'creme.dialog.GlassPane (anchor z-index) - firefox >= 143', function(assert) {
123
+ var glasspane = new creme.dialog.GlassPane();
124
+
125
+ this.qunitFixture().css('z-index', 1000);
126
+
127
+ glasspane.open(this.qunitFixture());
128
+ equal(true, glasspane.isOpened());
129
+ equal(999, glasspane.pane().css('z-index'));
130
+ });
131
+
132
+ QUnit.skipIf(!QUnit.browsers.isFirefox('<143'), 'creme.dialog.GlassPane (anchor z-index) - firefox < 143', function(assert) {
133
+ var glasspane = new creme.dialog.GlassPane();
134
+
135
+ this.qunitFixture().css('z-index', 1000);
136
+
137
+ glasspane.open(this.qunitFixture());
138
+ equal(true, glasspane.isOpened());
139
+ equal('auto', glasspane.pane().css('z-index'));
140
+ });
141
+
142
+ QUnit.skipIf(!QUnit.browsers.isChrome('<85'), 'creme.dialog.GlassPane (anchor z-index) - chrome < 143', function(assert) {
123
143
  var glasspane = new creme.dialog.GlassPane();
124
144
 
125
145
  this.qunitFixture().css('z-index', 1000);
@@ -276,6 +276,8 @@ QUnit.test('creme.forms.validateHtml5Form (no error)', function(assert) {
276
276
  var lastname = this.form.find('[name="lastname"]').on('html5-invalid', this.mockListener('lastname-invalid'));
277
277
  var email = this.form.find('[name="email"]').on('html5-invalid', this.mockListener('email-invalid'));
278
278
 
279
+ this.form.on('html5-pre-validate', 'input', this.mockListener('pre-validate'));
280
+
279
281
  lastname.val('Doe');
280
282
  email.val('john.doe@unknown.com');
281
283
 
@@ -291,7 +293,13 @@ QUnit.test('creme.forms.validateHtml5Form (no error)', function(assert) {
291
293
  deepEqual({
292
294
  'firstname-invalid': [['html5-invalid', [false]]],
293
295
  'lastname-invalid': [['html5-invalid', [false]]],
294
- 'email-invalid': [['html5-invalid', [false]]]
296
+ 'email-invalid': [['html5-invalid', [false]]],
297
+ 'pre-validate': [
298
+ ['html5-pre-validate', [{}]],
299
+ ['html5-pre-validate', [{}]],
300
+ ['html5-pre-validate', [{}]]
301
+ // ignore input[type="submit"] field
302
+ ]
295
303
  }, this.mockListenerJQueryCalls());
296
304
  });
297
305
 
@@ -140,7 +140,7 @@ QUnit.test('creme.NotificationBox (already active)', function() {
140
140
  this.assertRaises(function() {
141
141
  return new creme.notification.NotificationBox(element, {
142
142
  refreshUrl: 'mock/notifs/refresh',
143
- discardUrl: 'mock/notids/all'
143
+ discardUrl: 'mock/notifs/all'
144
144
  });
145
145
  }, Error, 'Error: NotificationBox is already active');
146
146
  });
@@ -153,7 +153,7 @@ QUnit.test('creme.NotificationBox (initialData)', function() {
153
153
  this.withFrozenTime('2025-01-16T17:30:00', function() {
154
154
  var box = new creme.notification.NotificationBox(element, {
155
155
  refreshUrl: 'mock/notifs/refresh',
156
- discardUrl: 'mock/notids/all'
156
+ discardUrl: 'mock/notifs/all'
157
157
  }).stopFetch();
158
158
 
159
159
  deepEqual(box.initialData(), this.defaultNotificationData());
@@ -200,7 +200,29 @@ QUnit.test('creme.NotificationBox (initialData)', function() {
200
200
  });
201
201
  });
202
202
 
203
- QUnit.test('creme.NotificationBox (fetch)', function() {
203
+ QUnit.test('creme.NotificationBox (_humanizedTimeDelta)', function(assert) {
204
+ var element = $(this.createNotificationBoxHtml()).appendTo(this.qunitFixture());
205
+ var box = new creme.notification.NotificationBox(element, {
206
+ refreshUrl: 'mock/notifs/refresh',
207
+ discardUrl: 'mock/notifs/discard'
208
+ }).stopFetch();
209
+
210
+ equal(box._humanizedTimeDelta(0), gettext('A few moments ago'));
211
+ equal(box._humanizedTimeDelta(59), gettext('A few moments ago'));
212
+
213
+ equal(box._humanizedTimeDelta(60), ngettext('%d minute ago', '%d minutes ago', 1).format(1));
214
+ equal(box._humanizedTimeDelta(60 * 35 + 59), ngettext('%d minute ago', '%d minutes ago', 35).format(35));
215
+ equal(box._humanizedTimeDelta(60 * 60 - 1), ngettext('%d minute ago', '%d minutes ago', 59).format(59));
216
+
217
+ equal(box._humanizedTimeDelta(60 * 60), ngettext('More than %d hour ago', 'More than %d hours ago', 1).format(1));
218
+ equal(box._humanizedTimeDelta(60 * 60 * 7 + 35 * 60), ngettext('More than %d hour ago', 'More than %d hours ago', 7).format(7));
219
+ equal(box._humanizedTimeDelta(60 * 60 * 24 - 1), ngettext('More than %d hour ago', 'More than %d hours ago', 23).format(23));
220
+
221
+ equal(box._humanizedTimeDelta(60 * 60 * 24), ngettext('More than %d day ago', 'More than %d days ago', 1).format(1));
222
+ equal(box._humanizedTimeDelta(60 * 60 * 24 * 7), ngettext('More than %d day ago', 'More than %d days ago', 7).format(7));
223
+ });
224
+
225
+ QUnit.test('creme.NotificationBox (fetch)', function(assert) {
204
226
  var element = $(this.createNotificationBoxHtml()).appendTo(this.qunitFixture());
205
227
  var box = new creme.notification.NotificationBox(element, {
206
228
  refreshDelay: 150,
@@ -240,10 +262,11 @@ QUnit.test('creme.NotificationBox (fetch)', function() {
240
262
  }.bind(this), 350);
241
263
  });
242
264
 
243
- QUnit.test('creme.NotificationBox (fetch, update deltas)', function() {
265
+ QUnit.test('creme.NotificationBox (fetch, update deltas calls)', function(assert) {
244
266
  var element = $(this.createNotificationBoxHtml({
245
267
  initialData: this.defaultNotificationData()
246
268
  })).appendTo(this.qunitFixture());
269
+
247
270
  var box = new creme.notification.NotificationBox(element, {
248
271
  deltaRefreshDelay: 150,
249
272
  refreshUrl: 'mock/notifs/refresh',
@@ -273,7 +296,65 @@ QUnit.test('creme.NotificationBox (fetch, update deltas)', function() {
273
296
  }, 450);
274
297
  });
275
298
 
276
- QUnit.test('creme.NotificationBox (fetch, error)', function() {
299
+ QUnit.test('creme.NotificationBox (fetch, update deltas rendering)', function(assert) {
300
+ var element = $(this.createNotificationBoxHtml({
301
+ initialData: this.defaultNotificationData()
302
+ })).appendTo(this.qunitFixture());
303
+
304
+ var box;
305
+
306
+ this.withFrozenTime('2025-01-16T17:30:00', function() {
307
+ box = new creme.notification.NotificationBox(element, {
308
+ refreshUrl: 'mock/notifs/refresh',
309
+ discardUrl: 'mock/notifs/all'
310
+ }).stopFetch();
311
+ });
312
+
313
+ this.withFrozenTime('2025-01-16T18:00:00', function() {
314
+ // Fake date does not work in a timeout (I assume that it is not the same thread).
315
+ // So we need call the internal method.
316
+ box._updateDeltas();
317
+
318
+ this.equalHtml((
319
+ '<li class="notification-item notification-item-level1" data-id="1" data-created="${timestampA}">' +
320
+ '<span class="notification-channel">A</span>' +
321
+ '<span class="notification-subject">Subject #1</span>' +
322
+ '<span class="notification-created" title="${createdTitleA}">${deltaLabelA}</span>' +
323
+ '<div class="notification-body">Content #1</div>' +
324
+ '<button type="button" class="discard-notification">${discardLabel}</button>' +
325
+ '</li>' +
326
+ '<li class="notification-item notification-item-level2" data-id="2" data-created="${timestampB}">' +
327
+ '<span class="notification-channel">A</span>' +
328
+ '<span class="notification-subject">Subject #2</span>' +
329
+ '<span class="notification-created" title="${createdTitleB}">${deltaLabelB}</span>' +
330
+ '<div class="notification-body">Content #2</div>' +
331
+ '<button type="button" class="discard-notification">${discardLabel}</button>' +
332
+ '</li>' +
333
+ '<li class="notification-item notification-item-level2" data-id="3" data-created="${timestampC}">' +
334
+ '<span class="notification-channel">B</span>' +
335
+ '<span class="notification-subject">Subject #3</span>' +
336
+ '<span class="notification-created" title="${createdTitleC}">${deltaLabelC}</span>' +
337
+ '<div class="notification-body">Content #3</div>' +
338
+ '<button type="button" class="discard-notification">${discardLabel}</button>' +
339
+ '</li>'
340
+ ).template({
341
+ discardLabel: gettext('Validate'),
342
+ timestampA: Date.parse('2025-01-15T16:30:00'),
343
+ timestampB: Date.parse('2025-01-16T08:35:00'),
344
+ timestampC: Date.parse('2025-01-16T17:12:00'),
345
+ createdTitleA: new Date('2025-01-15T16:30:00').toLocaleString(),
346
+ createdTitleB: new Date('2025-01-16T08:35:00').toLocaleString(),
347
+ createdTitleC: new Date('2025-01-16T17:12:00').toLocaleString(),
348
+ deltaLabelA: ngettext('More than %d day ago', 'More than %d days ago', 1).format(1),
349
+ // 30 minutes later : 18h - 8h35 = More than 9 hours ago
350
+ deltaLabelB: ngettext('More than %d hour ago', 'More than %d hours ago', 9).format(9),
351
+ // 30 minutes later : 18h - 17h12 = More than 48 minutes ago
352
+ deltaLabelC: ngettext('%d minute ago', '%d minutes ago', 48).format(48)
353
+ }), element.find('.notification-items'));
354
+ }.bind(this));
355
+ });
356
+
357
+ QUnit.test('creme.NotificationBox (fetch, error)', function(assert) {
277
358
  var element = $(this.createNotificationBoxHtml({
278
359
  initialData: this.defaultNotificationData()
279
360
  })).appendTo(this.qunitFixture());
@@ -130,6 +130,14 @@ creme.widget.Editor = creme.widget.declare('ui-creme-editor', {
130
130
 
131
131
  editor.render();
132
132
 
133
+ this._onPreValidate = function() {
134
+ if (this._editor) {
135
+ this._editor.save();
136
+ }
137
+ }.bind(this);
138
+
139
+ element.on('html5-pre-validate', this._onPreValidate);
140
+
133
141
  creme.object.invoke(cb, element);
134
142
  element.addClass('widget-ready');
135
143
  },
@@ -138,6 +146,8 @@ creme.widget.Editor = creme.widget.declare('ui-creme-editor', {
138
146
  if (this._editor) {
139
147
  this._editor.remove();
140
148
  }
149
+
150
+ element.off('html5-pre-validate', this._onPreValidate);
141
151
  },
142
152
 
143
153
  editor: function(element) {
@@ -1,5 +1,5 @@
1
1
  {% load i18n %}{% load jsonify from creme_core_tags %}{% translate 'Select…' as label %}
2
- <span class="{{widget.class}}" widget="{{widget.widget_type}}" labelURL="{{widget.text_url}}" label="{{label}}" popupURL="{{widget.url}}" popupSelection="{{widget.selection}}"
2
+ <span class="{{widget.class}}" widget="{{widget.widget_type}}" {% if widget.attrs.id %}id="{{widget.attrs.id}}"{% endif %} labelURL="{{widget.text_url}}" label="{{label}}" popupURL="{{widget.url}}" popupSelection="{{widget.selection}}"
3
3
  {% if widget.autoselect %}popupAuto{% endif %}
4
4
  {% if widget.qfilter %}qfilter="{{widget.qfilter|jsonify}}"{% endif %}>
5
5
  {% include widget.input.template_name with widget=widget.input %}
@@ -357,7 +357,7 @@
357
357
  </div>
358
358
  <div class="popup-form-field">
359
359
  <label for="comment">Comment</label>
360
- <textarea name="comment" autofocus rows="4"></textarea>
360
+ <textarea widget="ui-creme-editor" name="comment" class="ui-creme-editor ui-creme-widget widget-auto" basepath="tiny_mce"></textarea>
361
361
  </div>
362
362
  <div class="popup-form-field">
363
363
  <label for="image">Image</label>
creme/documents/apps.py CHANGED
@@ -37,10 +37,12 @@ class DocumentsConfig(CremeAppConfig):
37
37
  def register_entity_models(self, creme_registry):
38
38
  creme_registry.register_entity_models(self.Document, self.Folder)
39
39
 
40
- def register_actions(self, actions_registry):
40
+ # def register_actions(self, actions_registry):
41
+ def register_actions(self, action_registry):
41
42
  from . import actions
42
43
 
43
- actions_registry.register_instance_actions(
44
+ # actions_registry.register_instance_actions(
45
+ action_registry.register_instance_actions(
44
46
  actions.ExploreFolderAction,
45
47
  actions.DownloadAction,
46
48
  )
creme/mobile/populate.py CHANGED
@@ -29,11 +29,20 @@ logger = logging.getLogger(__name__)
29
29
  class Populator(BasePopulator):
30
30
  dependencies = ['creme_core', 'persons']
31
31
 
32
- def populate(self):
33
- already_populated = SettingValue.objects.exists_4_key(setting_keys.location_map_url_key)
34
-
35
- if not already_populated:
36
- SettingValue.objects.set_4_key(
37
- setting_keys.location_map_url_key,
38
- 'https://www.google.com/maps/?q={search}'
39
- )
32
+ SETTING_VALUES = [
33
+ SettingValue(
34
+ key=setting_keys.location_map_url_key,
35
+ value='https://www.google.com/maps/?q={search}',
36
+ ),
37
+ ]
38
+
39
+ # def populate(self):
40
+ # already_populated = SettingValue.objects.exists_4_key(setting_keys.location_map_url_key)
41
+ #
42
+ # if not already_populated:
43
+ # SettingValue.objects.set_4_key(
44
+ # setting_keys.location_map_url_key,
45
+ # 'https://www.google.com/maps/?q={search}'
46
+ # )
47
+ def _already_populated(self):
48
+ return SettingValue.objects.exists_4_key(setting_keys.location_map_url_key)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: creme-crm
3
- Version: 2.7
3
+ Version: 2.7.1
4
4
  Summary: A CRM software using the django web framework
5
5
  Home-page: https://www.cremecrm.com
6
6
  Author: hybird.org
@@ -28,13 +28,13 @@ Classifier: Topic :: Office/Business
28
28
  Requires-Python: >=3.10
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE.txt
31
- Requires-Dist: django~=5.2.5
31
+ Requires-Dist: django~=5.2.7
32
32
  Requires-Dist: redis~=6.2.0
33
33
  Requires-Dist: Pillow~=11.3.0
34
34
  Requires-Dist: python-dateutil~=2.8.2
35
35
  Requires-Dist: bleach[css]~=6.2.0
36
36
  Requires-Dist: django-formtools~=2.5.1
37
- Requires-Dist: cryptography~=45.0.6
37
+ Requires-Dist: cryptography~=45.0.7
38
38
  Requires-Dist: xlrd~=2.0.2
39
39
  Requires-Dist: xlwt~=1.3.0
40
40
  Requires-Dist: openpyxl~=3.1.5
@@ -1,4 +1,4 @@
1
- creme/__init__.py,sha256=OQhaw_2dC3qhIfjr311I7sofX0degiS_J3P7MdiUnXI,1076
1
+ creme/__init__.py,sha256=dYTgp6h7pSSOKsdLdSxD3sHnrSIkKkMaYxdJoXvEmKQ,1078
2
2
  creme/manage.py,sha256=9TahLBSSW_WbL1SZnDw0l1vM69w7MZ7P2BIfLLzquIw,968
3
3
  creme/settings.py,sha256=vFdSBTywLk_rJehLv643xAYJuuwY8nFcaKhUfTEwq-A,62248
4
4
  creme/urls.py,sha256=Dz1YwuwAKPpI3LmI8YdCuS3-2fZtX48xMhJajmqMe5o,2681
@@ -297,7 +297,7 @@ creme/billing/templates/billing/forms/widgets/exporter-option.html,sha256=vvu8Vg
297
297
  creme/billing/templates/billing/forms/widgets/totals-extractor.html,sha256=RrgeWTjujDsBQ4ap0z21xqSPAdLkzoHMmDW17gc5MiA,4303
298
298
  creme/billing/templates/billing/frags/lines-errors.html,sha256=cvfGnqWkl99yByYteAsj6mBLTolHe5TrVraEbxMnomg,1027
299
299
  creme/billing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
300
- creme/billing/tests/base.py,sha256=09rWVMGk6VJ0PIanPEhqGD1_vBbHMCKco-Vzzav6uFg,36621
300
+ creme/billing/tests/base.py,sha256=Nns9DLXA-GxzXBJe5vbb5ERPLhyDiY9j4go01bra5x8,36699
301
301
  creme/billing/tests/fake_exporters.py,sha256=NVzqGGvBfHqN7jV0xG0cH6xvHfjbAo9fwN6X4cXC6OM,1067
302
302
  creme/billing/tests/test_app.py,sha256=fcp06PTJ1xVKWTNjHDfoLbYUci8gqbyi-3hkG-3YkmU,16057
303
303
  creme/billing/tests/test_buttons.py,sha256=NNxqW0Q3NGXLZyW0knUn5N2FP2btV-jdeZiFhWpWXC4,8455
@@ -724,8 +724,8 @@ creme/creme_core/gui/listview/smart_columns.py,sha256=AwoPO77b6D5XLTTZuw3CPVCdYC
724
724
  creme/creme_core/gui/listview/state.py,sha256=jPf0OM2whsV6jizriUj86D03jA7qyDxkHhB8GPfGAkU,4574
725
725
  creme/creme_core/locale/fr/LC_MESSAGES/django.mo,sha256=b19hBuRaAVmraPO2kD3F5gTEsHhBGsEPYLbd5qIgOr8,120876
726
726
  creme/creme_core/locale/fr/LC_MESSAGES/django.po,sha256=r2LFrY60s2OugxfUMQ3GC-mzQNpqEOHKJG_O_Le088c,134669
727
- creme/creme_core/locale/fr/LC_MESSAGES/djangojs.mo,sha256=ph9HodCBDXBSjttrLnK0EC9SuuDQl532Dj75LfMnUUE,6460
728
- creme/creme_core/locale/fr/LC_MESSAGES/djangojs.po,sha256=d4-IgekWtx5jyvfD9oZdST4G9nT5RSXb-FXyN69M5m8,8869
727
+ creme/creme_core/locale/fr/LC_MESSAGES/djangojs.mo,sha256=Z8n0ArJPLjDQ_8LG34zxDbZ2pEPsPV8REicTRnRtr18,6519
728
+ creme/creme_core/locale/fr/LC_MESSAGES/djangojs.po,sha256=jDNznGkzeo7h_b5wkBm5Ige49apFE41d4U4PJySgoZ4,8930
729
729
  creme/creme_core/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
730
730
  creme/creme_core/management/base.py,sha256=0maNg6uqJWumQpG5s77vii1aUfxlJbZ604PtUxsgeUI,2331
731
731
  creme/creme_core/management/csv_import_example.py,sha256=0F0tLivhPq7BLaONf0IEwQvEhWHky13crO_dqc4jNfw,4042
@@ -836,7 +836,7 @@ creme/creme_core/static/creme_core/js/bricks.js,sha256=cCLwXIQ4aAmgsJlEB7QQaedM0
836
836
  creme/creme_core/static/creme_core/js/creme.js,sha256=m2dBD-oS--a3KC7CtINrGHB48j7HFU7HWusDvQTGR7Y,29
837
837
  creme/creme_core/static/creme_core/js/detailview.js,sha256=cWTq3cNsK4AkjcKq3QKpZia9nz0cY87Xs_9Edp_hyxU,4318
838
838
  creme/creme_core/static/creme_core/js/entity_cell.js,sha256=oGONtNQ-bsi0E0w9ZRX9evV0VpIpijwCl8yUvvifODU,21771
839
- creme/creme_core/static/creme_core/js/forms.js,sha256=QbV8GZShIULMy7Rh2dErhVrCuqEzI6Q4_eWoYFVJ-wc,8951
839
+ creme/creme_core/static/creme_core/js/forms.js,sha256=jATDz_Jld8rWeSZlLUnKTuuCoNjkuel8DfsEZljXFMM,9062
840
840
  creme/creme_core/static/creme_core/js/import.js,sha256=C-SHewSDW4nJ9ljXztd--1qEJLkAczkjwDx9Rq31jyA,1646
841
841
  creme/creme_core/static/creme_core/js/jobs.js,sha256=aPxvpmC8a-Rx4_YFlloFWHRP3dUyFP_NYdAGYGSuZOg,8162
842
842
  creme/creme_core/static/creme_core/js/list_view.core.js,sha256=ooJqQEuJnPbRWJnpVbAu_Lbq1WGv-dNO7WjE3BW6XDs,24193
@@ -844,7 +844,7 @@ creme/creme_core/static/creme_core/js/lv_widget.js,sha256=QUSNIkbfDgYabOZPuvus7i
844
844
  creme/creme_core/static/creme_core/js/media.js,sha256=Vezl7GdNLMZRLOcDOrJG-zvVNL6EBP56Z6YqNy4eomA,155
845
845
  creme/creme_core/static/creme_core/js/menu.js,sha256=QVOBekOb0LhvZ9yQqMotJ7EPQeAtNiA7VS9MItwdkeQ,5969
846
846
  creme/creme_core/static/creme_core/js/merge.js,sha256=j5jljOL9CAHmC5tLX5_f68FCygU6F86GcXBEyx7chUI,2819
847
- creme/creme_core/static/creme_core/js/notification.js,sha256=VnAreGYmJEMkIshW47WkbcZ0LfQBMnDuMiXwR2jdY0M,10021
847
+ creme/creme_core/static/creme_core/js/notification.js,sha256=Gf8YQlMPO8Ae1Q3i2RpR5hRDCRVEF7P-w7m7ljVHIps,10137
848
848
  creme/creme_core/static/creme_core/js/relations.js,sha256=YG2AKfX1VTjpMVNWwui20JQBsY_MpBUcOPx9e-HTJnA,4223
849
849
  creme/creme_core/static/creme_core/js/search.js,sha256=zPUL43HvjEvgCqZfswzW1DiCCVW6lwkyQyJY2rOcGgA,10655
850
850
  creme/creme_core/static/creme_core/js/utils.js,sha256=pOm28YkeM2D5xvxIW5jtBukaHl19r84CYFC5F_r17J8,10000
@@ -965,12 +965,12 @@ creme/creme_core/static/creme_core/js/tests/component/qunit-event-mixin.js,sha25
965
965
  creme/creme_core/static/creme_core/js/tests/dialog/dialog-form.js,sha256=Bbwjv0N_zRYGhLK5TknvWftEwhm_MfDjG6trlEklE3c,50351
966
966
  creme/creme_core/static/creme_core/js/tests/dialog/dialog.js,sha256=m9mZz9qRnm71VH6yYAmYEPDa_P9lJlH58j4Vy7ZIS1M,36109
967
967
  creme/creme_core/static/creme_core/js/tests/dialog/frame.js,sha256=Ydv9EEsGS9VbR_lkjSTOyDlr5w4rdaXrNIbZwP5lah4,42497
968
- creme/creme_core/static/creme_core/js/tests/dialog/glasspane.js,sha256=kLEzi9kEQzeQuFQa3Tu3YjkM0XRvSh7ylEVWRNV_xl0,6065
968
+ creme/creme_core/static/creme_core/js/tests/dialog/glasspane.js,sha256=5ZgVr113-rXb6ucaLKf-tpBDF-Z13BT32ZrGwEhxSoo,6769
969
969
  creme/creme_core/static/creme_core/js/tests/dialog/overlay.js,sha256=RYuVq9NLLx83-ich6XVOeIcEXc8Xf8YubfU3tYN_1R0,2948
970
970
  creme/creme_core/static/creme_core/js/tests/dialog/popover.js,sha256=k49RXVYtNxNqGfH6rh4EXkpxtjeHvq3qq54CBijgRQ4,21434
971
971
  creme/creme_core/static/creme_core/js/tests/dialog/qunit-dialog-mixin.js,sha256=nGkYqixDM9_qJjx4SC8-tdG7-uy0_u6pk3OyRlJkq1g,6790
972
972
  creme/creme_core/static/creme_core/js/tests/form/dropdown.js,sha256=jBwBj4dD8lJPrp2vggyDyM_RDimHLs_09h72qRecaYY,5510
973
- creme/creme_core/static/creme_core/js/tests/form/forms.js,sha256=hm4H92C8-tnijyncj02VmBH322rsQJPf4gx7t8KZ9tU,18900
973
+ creme/creme_core/static/creme_core/js/tests/form/forms.js,sha256=rnCnsMMkW_YDoHem73kIv8XYpxqoRiabU5fqRvzV8Bc,19196
974
974
  creme/creme_core/static/creme_core/js/tests/form/select2.js,sha256=v26J7T4WGLFh3pOgwpcPMuXfoBqC6tD4vwzWEhcsnc0,46963
975
975
  creme/creme_core/static/creme_core/js/tests/jquery/toggle-attr.js,sha256=RxV0iufjPmG_bwBQLY9gUi7j2k7Jr7_ejJ6wKuRwGb8,2210
976
976
  creme/creme_core/static/creme_core/js/tests/layout/textautosize.js,sha256=rm4Y5FUBM_kT17te9dXr_3p8UYaXtweXW5BuuSlB0T8,3238
@@ -1002,7 +1002,7 @@ creme/creme_core/static/creme_core/js/tests/views/import.js,sha256=gS0IZ3tF4k99G
1002
1002
  creme/creme_core/static/creme_core/js/tests/views/jobs.js,sha256=xUyXtObVoGpEZYZsnxJTqOcHo-F9yFACyxH-U2QjhzA,16224
1003
1003
  creme/creme_core/static/creme_core/js/tests/views/menu.js,sha256=0rhcZ08-Kku_Rywe9UhB5qPs9ty5bxf567swGVRom6E,12299
1004
1004
  creme/creme_core/static/creme_core/js/tests/views/merge.js,sha256=bmnLjOgTFpF-UI6iUcmga5H968m23EfguzGJ6tEMGK0,5652
1005
- creme/creme_core/static/creme_core/js/tests/views/notification.js,sha256=BOzB9KEWEEoXVxlXTgsy89_h55CT0VNR35Xr4Oh2ETM,13361
1005
+ creme/creme_core/static/creme_core/js/tests/views/notification.js,sha256=yzTzDI1lrrji6bHQvpsdPOx8URJUploNWgi2iKVel1M,18143
1006
1006
  creme/creme_core/static/creme_core/js/tests/views/qunit-detailview-mixin.js,sha256=ksHJJ90ubZG4jUte6ga0BovYo3jOkSv13xNYTEiooGU,1977
1007
1007
  creme/creme_core/static/creme_core/js/tests/views/search.js,sha256=ajVh0VsptlehD7SlFIlmpyl0Bvy8OJpJrJxGIGsr8co,26587
1008
1008
  creme/creme_core/static/creme_core/js/tests/views/utils.js,sha256=d8SjfK6grR8bUF13mw7lbh-ZkD7oV0orKZOGRLh-CAY,4258
@@ -1036,7 +1036,7 @@ creme/creme_core/static/creme_core/js/widgets/daterangeselector.js,sha256=9uXkKv
1036
1036
  creme/creme_core/static/creme_core/js/widgets/datetime.js,sha256=imP0z3Np31ErjvrqrlMTU_teNRXNGVQ7htfXBE7O1BY,7558
1037
1037
  creme/creme_core/static/creme_core/js/widgets/dinput.js,sha256=S08i2vxl01jVMX1v0o2z6Rs1aNG-AhxAALlbGiMG2lw,2410
1038
1038
  creme/creme_core/static/creme_core/js/widgets/dselect.js,sha256=l0myMhwDwkaGqaZtw7AeZDEV3wFFhN2nisnOe1IHr_E,16077
1039
- creme/creme_core/static/creme_core/js/widgets/editor.js,sha256=rFRPH5iDfhv9uW-CK9_l0Leo0q1vIypNssswNRu6aTs,5159
1039
+ creme/creme_core/static/creme_core/js/widgets/editor.js,sha256=7VWOJv45SNFvAzbNMHe3gzb5kALHGP-x3rig9c-r8lI,5437
1040
1040
  creme/creme_core/static/creme_core/js/widgets/entityselector.js,sha256=_l8gHUb7a9kmjCylU3mc6k6NqbOTZ2FRBrP1XLVybo8,6562
1041
1041
  creme/creme_core/static/creme_core/js/widgets/frame.js,sha256=xQzkln6syVL4vdPucIruld-TBtw8hl_38UyGH4WtYfg,3102
1042
1042
  creme/creme_core/static/creme_core/js/widgets/ordered.js,sha256=EhN1r2prDVnY8j0jDCJ5bM-tGUCX337XdLXOHk5X_7c,6327
@@ -1198,7 +1198,7 @@ creme/creme_core/templates/creme_core/forms/widgets/duration.html,sha256=SU2AeB9
1198
1198
  creme/creme_core/templates/creme_core/forms/widgets/dyn-select.html,sha256=3uarcLVHwpss7uuh25WBiSPk7pp31f-wNQU7oMrsqj4,206
1199
1199
  creme/creme_core/templates/creme_core/forms/widgets/efilter-condition-list.html,sha256=4z5rkpL3NN5HhqX2d2Kr9f2mYpIqjH3BwGXp-jOPspE,147
1200
1200
  creme/creme_core/templates/creme_core/forms/widgets/enhanced-option.html,sha256=018bLoL4u89zXgVnWtZ4fcDWFsBp5WRifExpJeJmZUw,385
1201
- creme/creme_core/templates/creme_core/forms/widgets/entity-selector.html,sha256=EZbDZbXn0t3m9yH-1EEbyLPNiLc9tC0Zqr_GFmir-Uo,565
1201
+ creme/creme_core/templates/creme_core/forms/widgets/entity-selector.html,sha256=linegWIeqYwbAbvBAdkTdy1lAadfSN8xNZZoGYlSBhs,625
1202
1202
  creme/creme_core/templates/creme_core/forms/widgets/enumerable.html,sha256=DdZozPpGBeeFR0YhTud9QWKeXLN8VeuxyQub01Siqu0,609
1203
1203
  creme/creme_core/templates/creme_core/forms/widgets/label.html,sha256=dYKuAsi2BuuLN9ds2ceeH7MOV5rNcZJJCxG-ph15o3c,223
1204
1204
  creme/creme_core/templates/creme_core/forms/widgets/list-editor.html,sha256=d3Qe0LUImrqdzFXC3_NLphImjQan0ujiuH7kJM6xkxk,732
@@ -1333,7 +1333,7 @@ creme/creme_core/templates/creme_core/tests/test_datefield.html,sha256=syclYq3JQ
1333
1333
  creme/creme_core/templates/creme_core/tests/test_editor.html,sha256=m8EXLrMOAaqD75h1PT1DQ1Gu3BWUAeLbexP6Ef9pU-A,349
1334
1334
  creme/creme_core/templates/creme_core/tests/test_entityselector.html,sha256=vF8PRN29yrcdstllMlYZsZprwBcdLdsM3mBwLbmzt9E,36040
1335
1335
  creme/creme_core/templates/creme_core/tests/test_filterselector.html,sha256=WN7oqmltY0xwm8sSPe9G8prjCZhbqLMZqhq-WPJW_M8,42520
1336
- creme/creme_core/templates/creme_core/tests/test_frame.html,sha256=yyMGtJnxcY4Hz-KfKXGFJXMCi2ud79r21XBzWc3_ilo,25768
1336
+ creme/creme_core/templates/creme_core/tests/test_frame.html,sha256=eF3hH-BCuemb11oRnJRzushUdkhWH5bxxGHxYayVEAo,25846
1337
1337
  creme/creme_core/templates/creme_core/tests/test_listview.html,sha256=OLb9H-Qhj4ae-6R05w1QB_cyYS3YKdf002QTJQx0NX4,4511
1338
1338
  creme/creme_core/templates/creme_core/tests/test_model.html,sha256=4Y9Y4Pc0JCr6cjI97R4PI_6-RPvGTAdON5ZZfShhyFs,9762
1339
1339
  creme/creme_core/templates/creme_core/tests/test_polymorphicselector.html,sha256=FhmlFh6TS7XGax19WLKsmH4ePjAaYnQ7gt2ZxJlybJg,9226
@@ -1725,7 +1725,7 @@ creme/custom_entities/tests/test_models.py,sha256=SI0ewt2sKUvQDIraI1Y5SZTjiwKGnQ
1725
1725
  creme/custom_entities/tests/test_views.py,sha256=Td4dxxrOJ8_YSgo_R1v_-7L6XERXd3dppUhZHgExUQs,26021
1726
1726
  creme/documents/__init__.py,sha256=7fDaALo1aZ3JlDlJNATe3aw0HUnvHeKUMwxqZq755IU,1700
1727
1727
  creme/documents/actions.py,sha256=Ufy0c0-BUvrgrY2UL3edXjBVSBtcvwz3eluej-tHIRE,2154
1728
- creme/documents/apps.py,sha256=xqxHaJD7w1Se09Mn0Kj-to5SZNkAR7du6q_mvbMl61g,6133
1728
+ creme/documents/apps.py,sha256=Tb4vAAf_GpTSOryu8Kd4fEwYY6LTTLrUrknquyfoUjQ,6237
1729
1729
  creme/documents/bricks.py,sha256=B5qb7zJ0qAn3sNy9TtI0HNKmQBFYX7Nn3--I9Z7aeNw,4717
1730
1730
  creme/documents/cloners.py,sha256=MGtR-dJAKfbiiPunjWq3YqO3jkpgi8VmyTeMqiruMTU,1882
1731
1731
  creme/documents/constants.py,sha256=lgXKOjuKwFL1l2o95ng6lPNlPKK5UKu-XIk_yA-0UFs,523
@@ -2313,7 +2313,7 @@ creme/mobile/apps.py,sha256=nQoeSXdWgj3SexxDSMRKOUCqb7MJa7KZaWIn5agPCQE,1657
2313
2313
  creme/mobile/bricks.py,sha256=hm0ftqc7BvGqMr0t1zJ-z92D-FsKnPQMnOH-TGODfXY,2543
2314
2314
  creme/mobile/forms.py,sha256=abiJfMTqQa_CGfC2gwr4iAwgZgwH7lzf_EtdTqI3zR8,4134
2315
2315
  creme/mobile/models.py,sha256=YYJ4DOfmH7I3eh_9hHZALcBELLgZmSf3znkeHaKOskE,1447
2316
- creme/mobile/populate.py,sha256=N5Fa15zbTj6bkxpJYCnuHls22F3y6joYZIdNoR5B6Lc,1574
2316
+ creme/mobile/populate.py,sha256=tnZ-7ilQYaIl5JDxI9YgQ0Xr7-KDj0d-p8qruV1ASw8,1886
2317
2317
  creme/mobile/setting_keys.py,sha256=c8Tzsc84VueI0P8T8Cyqa5G7VHC8vyWYr8byKjpbw6I,1513
2318
2318
  creme/mobile/urls.py,sha256=8Vu8DSuVIMPSBxjcGwLEQInIgA6_Yzvb1Zu7mvXwI1o,3644
2319
2319
  creme/mobile/views.py,sha256=_AZapiZ_F2cZi7eVWXAUhoHSNUf4BSqSRdbKLA48_A0,23960
@@ -3821,7 +3821,7 @@ creme/vcfs/vcf_lib/utils.py,sha256=rofX2grUVZLg1qSYrvVLQe832rX9QDDqjqSfq9_rpnA,2
3821
3821
  creme/vcfs/vcf_lib/vcard.py,sha256=EIDdegf8HC5f4j19tfJYQ1NKc_-NZO8NaYinpVwj7vQ,8275
3822
3822
  creme/vcfs/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3823
3823
  creme/vcfs/views/vcf.py,sha256=7rsRCL7U0cgwtYghN6yAAbNN_e5lJVGrLH5IpSOIPYI,3795
3824
- creme_crm-2.7.dist-info/licenses/LICENSE.txt,sha256=fvS1_rSUtxH8CO9sMpw9BQFU3nLMK6ssGpyZU6ZVPMU,1130
3824
+ creme_crm-2.7.1.dist-info/licenses/LICENSE.txt,sha256=fvS1_rSUtxH8CO9sMpw9BQFU3nLMK6ssGpyZU6ZVPMU,1130
3825
3825
  mediagenerator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3826
3826
  mediagenerator/api.py,sha256=58FqOcH2NCJVdtKN_MxyW3xydWAYPBexTDa2LQTaMsY,1883
3827
3827
  mediagenerator/base.py,sha256=2zr8DCnL48UgVM1M9LILuHTgT_xvKLMSwVnzGa47zCc,1003
@@ -3852,8 +3852,8 @@ mediagenerator/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
3852
3852
  mediagenerator/management/commands/generatemedia.py,sha256=3-uIk3h83F16n2z7vG_xBteWiq7JWoB7d0vWSxVn-po,328
3853
3853
  mediagenerator/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3854
3854
  mediagenerator/templatetags/media.py,sha256=6EeohgP8srqzNRxgGr47BARO6Vx4AMn_dQuHwEQnnHE,1495
3855
- creme_crm-2.7.dist-info/METADATA,sha256=P1dW83ewyPVtB_t_yeNuc3WH9kXB5Pbv4PaqI6ZkpX4,12179
3856
- creme_crm-2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3857
- creme_crm-2.7.dist-info/entry_points.txt,sha256=GWm5VHgyz1DROd4UbhrelZ8d581uQNOtbjPz2TWfi_A,47
3858
- creme_crm-2.7.dist-info/top_level.txt,sha256=y_WAe0QGma0mhzRFEOIVJsB-xJrvhHV6MEk862EMweA,21
3859
- creme_crm-2.7.dist-info/RECORD,,
3855
+ creme_crm-2.7.1.dist-info/METADATA,sha256=16YLfXUrfuvXSG-Dz7C5LOPZMktPLmGYJwIUIqk1xlU,12181
3856
+ creme_crm-2.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3857
+ creme_crm-2.7.1.dist-info/entry_points.txt,sha256=GWm5VHgyz1DROd4UbhrelZ8d581uQNOtbjPz2TWfi_A,47
3858
+ creme_crm-2.7.1.dist-info/top_level.txt,sha256=y_WAe0QGma0mhzRFEOIVJsB-xJrvhHV6MEk862EMweA,21
3859
+ creme_crm-2.7.1.dist-info/RECORD,,