diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 16 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 78 | 
2 files changed, 58 insertions, 36 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c9a66f861..e5235f808 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1866,6 +1866,21 @@ class BaseHistorizedItem(FullSearch, Imported, JsonData, FixAssociated):      last_modified = models.DateTimeField(auto_now=True)      history_m2m = JSONField(default={}, blank=True) +    ALT_NAMES = { +        'history_creator': SearchAltName( +            pgettext_lazy("key for text search", u"created-by"), +            'history_creator__ishtaruser__person__cached_label__iexact' +        ), +        'history_modifier': SearchAltName( +            pgettext_lazy("key for text search", u"modified-by"), +            'history_modifier__ishtaruser__person__cached_label__iexact' +        ), +        'modified_since': SearchAltName( +            pgettext_lazy("key for text search", u"modified-since"), +            'last_modified__gte' +        ), +    } +      class Meta:          abstract = True @@ -4531,6 +4546,7 @@ class Document(BaseHistorizedItem, OwnPerms, ImageModel, ValueGetter, MainItem):              'warehouses__name__iexact'          ),      } +    ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES)      objects = ExternalIdManager()      RELATIVE_SESSION_NAMES = [ diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 96190f083..d54c7d15b 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -661,43 +661,47 @@ for language_code, language_lbl in settings.LANGUAGES:  def _manage_dated_fields(dated_fields, dct): +    keys = list(dct.keys())      for k in dated_fields: -        if k in dct: -            if not dct[k]: -                dct.pop(k) -                continue -            value = dct[k].replace('"', '').strip() -            has_today = False -            for today in TODAYS: -                if value.startswith(today): -                    base_date = datetime.date.today() -                    value = value[len(today):].replace(' ', '') -                    if value and value[0] in (u"-", u"+"): -                        sign = value[0] -                        try: -                            days = int(value[1:]) -                        except ValueError: -                            days = 0 -                        if days: -                            if sign == u"-": -                                base_date = base_date - datetime.timedelta( -                                    days=days) -                            else: -                                base_date = base_date + datetime.timedelta( -                                    days=days) -                    dct[k] = base_date.strftime('%Y-%m-%d') -                    has_today = True -                    break -            if has_today: -                continue -            try: -                items = value.split('/') -                assert len(items) == 3 -                dct[k] = virtualtime.datetime(*map(lambda x: int(x), -                                              reversed(items))) \ -                    .strftime('%Y-%m-%d') -            except AssertionError: -                dct.pop(k) +        res = [j for j in keys if j.startswith(k)] +        if not res: +            continue +        k = res[0] +        if not dct[k]: +            dct.pop(k) +            continue +        value = dct[k].replace('"', '').strip() +        has_today = False +        for today in TODAYS: +            if value.startswith(today): +                base_date = datetime.date.today() +                value = value[len(today):].replace(' ', '') +                if value and value[0] in (u"-", u"+"): +                    sign = value[0] +                    try: +                        days = int(value[1:]) +                    except ValueError: +                        days = 0 +                    if days: +                        if sign == u"-": +                            base_date = base_date - datetime.timedelta( +                                days=days) +                        else: +                            base_date = base_date + datetime.timedelta( +                                days=days) +                dct[k] = base_date.strftime('%Y-%m-%d') +                has_today = True +                break +        if has_today: +            continue +        try: +            items = value.split('/') +            assert len(items) == 3 +            dct[k] = virtualtime.datetime(*map(lambda x: int(x), +                                          reversed(items))) \ +                .strftime('%Y-%m-%d') +        except AssertionError: +            dct.pop(k)  def _clean_type_val(val): @@ -1180,6 +1184,7 @@ def _get_data_from_query_old(items, query_table_cols, request,  DEFAULT_ROW_NUMBER = 10  # length is used by ajax DataTables requests  EXCLUDED_FIELDS = ['length'] +BASE_DATED_FIELDS = ['last_modified']  def get_item(model, func_name, default_name, extra_request_keys=None, @@ -1288,6 +1293,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,              my_dated_fields = model.DATED_FIELDS[:]          else:              my_dated_fields = dated_fields[:] if dated_fields else [] +        my_dated_fields += BASE_DATED_FIELDS          if not associated_models and hasattr(model, 'ASSOCIATED_MODELS'):              my_associated_models = model.ASSOCIATED_MODELS[:]          else: | 
