diff options
Diffstat (limited to 'ishtar_common/views_item.py')
| -rw-r--r-- | ishtar_common/views_item.py | 91 | 
1 files changed, 56 insertions, 35 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 26145161b..6865f3932 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -993,42 +993,63 @@ def _manage_dated_fields(dated_fields, 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 ("-", "+"): -                    sign = value[0] -                    try: -                        days = int(value[1:]) -                    except ValueError: -                        days = 0 -                    if days: -                        if sign == "-": -                            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 -        items = [] -        if "/" in value: -            items = list(reversed(value.split("/"))) -        elif "-" in value:  # already date formated -            items = value.split("-") -        if len(items) != 3: -            dct.pop(k) +        values = dct[k].split(";") +        results = [] +        for value in values: +            value = value.replace('"', "").strip() +            date_type = "eq" +            if value.startswith(">"): +                value = value[1:] +                date_type = "gte" +            elif value.startswith("<"): +                value = value[1:] +                date_type = "lte" +            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 ("-", "+"): +                        sign = value[0] +                        try: +                            days = int(value[1:]) +                        except ValueError: +                            days = 0 +                        if days: +                            if sign == "-": +                                base_date = base_date - datetime.timedelta(days=days) +                            else: +                                base_date = base_date + datetime.timedelta(days=days) +                    value = base_date.strftime("%Y-%m-%d") +                    has_today = True +                    break +            if has_today: +                results.append((date_type, value)) +                continue +            items = [] +            if "/" in value: +                items = list(reversed(value.split("/"))) +            elif "-" in value:  # already date formated +                items = value.split("-") +            if len(items) != 3: +                continue +            try: +                results.append((date_type, datetime.datetime(*map(lambda x: int(x), items)).strftime( +                    "%Y-%m-%d" +                ))) +            except ValueError: +                pass +        mins = [value for dt, value in results if dt == "gte"] +        maxs = [value for dt, value in results if dt == "lte"] +        eqs = [value for dt, value in results if dt == "eq"] +        if eqs and not mins and not maxs:  # TODO: min and max not available when using single dates +            dct[k] = ";".join(eqs)              return -        try: -            dct[k] = datetime.datetime(*map(lambda x: int(x), items)).strftime( -                "%Y-%m-%d" -            ) -        except ValueError: -            dct.pop(k) +        dct.pop(k) +        if mins: +            dct[k + "__gte"] = min(mins) +        if maxs: +            dct[k + "__lte"] = max(maxs)  def _clean_type_val(val):  | 
