diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms.py | 26 | ||||
-rw-r--r-- | ishtar_common/migrations/0073_auto_20181017_1642.py | 44 | ||||
-rw-r--r-- | ishtar_common/models.py | 1 | ||||
-rw-r--r-- | ishtar_common/urls.py | 2 | ||||
-rw-r--r-- | ishtar_common/utils_migrations.py | 22 | ||||
-rw-r--r-- | ishtar_common/views.py | 24 |
6 files changed, 119 insertions, 0 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 34a50c0dd..7fed8b1c2 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -26,6 +26,7 @@ import re import types from django import forms +from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.core.urlresolvers import reverse from django.core import validators @@ -512,6 +513,31 @@ class TableSelect(IshtarForm): return self.fields.keys() +class HistorySelect(CustomForm, TableSelect): + history_modifier = forms.IntegerField( + label=_(u"Last modified by"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-user'), + associated_model=User), required=False + ) + modified_since = forms.DateField( + label=_(u"Modified since"), widget=DatePicker, + required=False) + + def __init__(self, *args, **kwargs): + super(HistorySelect, self).__init__(*args, **kwargs) + field_order = self.fields.keys() + current_fields = ["history_modifier", "modified_since"] + fields = OrderedDict() + for k in field_order: + if k in current_fields: + continue + fields[k] = self.fields[k] + for k in current_fields: + fields[k] = self.fields[k] + self.fields = fields + + def get_now(): format = formats.get_format('DATE_INPUT_FORMATS')[0] value = datetime.datetime.now().strftime(format) diff --git a/ishtar_common/migrations/0073_auto_20181017_1642.py b/ishtar_common/migrations/0073_auto_20181017_1642.py new file mode 100644 index 000000000..42e905b2c --- /dev/null +++ b/ishtar_common/migrations/0073_auto_20181017_1642.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-10-17 16:42 +from __future__ import unicode_literals + +from django.db import migrations, models +import virtualtime + +from ishtar_common.utils_migrations import reinit_last_modified + + +def migrate_codes(apps, schema_editor): + models = ['Person', 'Organization'] + reinit_last_modified(apps, 'ishtar_common', models) + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0072_auto_20181008_1117'), + ] + + operations = [ + migrations.AddField( + model_name='historicalorganization', + name='last_modified', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.AddField( + model_name='historicalperson', + name='last_modified', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.AddField( + model_name='organization', + name='last_modified', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.AddField( + model_name='person', + name='last_modified', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.RunPython(migrate_codes) + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 3e7cecf2a..c19628cf2 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1413,6 +1413,7 @@ class BaseHistorizedItem(DocumentItem, FullSearch, Imported, JsonData, history_creator = models.ForeignKey( User, related_name='+', on_delete=models.SET_NULL, verbose_name=_(u"Creator"), blank=True, null=True) + last_modified = models.DateTimeField(default=datetime.datetime.now) class Meta: abstract = True diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 91b527959..57241dd57 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -170,6 +170,8 @@ urlpatterns += [ url(r'new-person-noorga/' r'(?:(?P<parent_name>[^/]+)/)?(?:(?P<limits>[^/]+)/)?$', views.new_person_noorga, name='new-person-noorga'), + url(r'autocomplete-user/$', + views.autocomplete_user, name='autocomplete-user'), url(r'autocomplete-person(?:/([0-9_]+))?(?:/([0-9_]*))?/(user)?$', views.autocomplete_person, name='autocomplete-person'), url(r'autocomplete-person-permissive(?:/([0-9_]+))?(?:/([0-9_]*))?' diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py index 48e9e4f9b..40cdcb5cd 100644 --- a/ishtar_common/utils_migrations.py +++ b/ishtar_common/utils_migrations.py @@ -75,3 +75,25 @@ def migrate_sources(apps, base_model, source_model, item_attr): doc.authors.add(author) item = base_model.objects.get(pk=getattr(source, item_attr).pk) item.documents.add(doc) + + +def reinit_last_modified(apps, app_name, models): + for model_name in models: + model = apps.get_model(app_name, model_name) + try: + historical_model = apps.get_model( + app_name, 'Historical' + model_name) + except: + continue + for item in model.objects.all(): + q = historical_model.objects.filter( + id=item.pk).order_by('-history_date') + if not q.count(): + return + edit_date = q.all()[0].history_date + if not edit_date: + return + item.last_modified = edit_date + item.skip_history_when_saving = True + item.save() + diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 55b5fce1e..e4b55cae2 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -485,6 +485,30 @@ def autocomplete_person_permissive(request, person_types=None, is_ishtar_user=is_ishtar_user, permissive=True) +def autocomplete_user(request): + if not request.user.has_perm('ishtar_common.view_person', models.Person): + return HttpResponse('[]', content_type='text/plain') + q = request.GET.get('term') + limit = request.GET.get('limit', 20) + try: + limit = int(limit) + except ValueError: + return HttpResponseBadRequest() + query = Q() + for q in q.split(' '): + qu = (Q(ishtaruser__person__name__icontains=q) | + Q(ishtaruser__person__surname__icontains=q) | + Q(first_name__icontains=q) | + Q(last_name__icontains=q)) + query = query & qu + users = models.User.objects.filter(query)[:limit] + data = json.dumps([ + {'id': user.pk, + 'value': unicode(user.ishtaruser)} + for user in users if user and user.ishtaruser]) + return HttpResponse(data, content_type='text/plain') + + def autocomplete_person(request, person_types=None, attached_to=None, is_ishtar_user=None, permissive=False): all_items = request.user.has_perm('ishtar_common.view_person', |