diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-10 00:34:08 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-10 00:34:08 +0200 |
commit | 412e1567c453509ca980ea1350f20e89db612f7a (patch) | |
tree | 800d34322bdecea118fbbb62db376b1d0bbf4e05 | |
parent | 00993b14812e6cc97b1e268e986884e92523f05e (diff) | |
download | Ishtar-412e1567c453509ca980ea1350f20e89db612f7a.tar.bz2 Ishtar-412e1567c453509ca980ea1350f20e89db612f7a.zip |
Show history in sheets (refs #349)
-rw-r--r-- | ishtar/furnitures/models.py | 25 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 2 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 16 | ||||
-rw-r--r-- | ishtar/templates/sheet_file.html | 10 |
4 files changed, 47 insertions, 6 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 2fe65b598..de519076f 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -174,15 +174,32 @@ class BaseHistorizedItem(models.Model): super(BaseHistorizedItem, self).save(*args, **kwargs) return True - def get_previous(self, step, strict=True): + def get_previous(self, step=None, date=None, strict=True): """ Get a "step" previous state of the item """ + assert step or date historized = self.history.all() - assert len(historized) > step - assert not hasattr(historized, '_step') - item = historized[step] + item = None + if step: + assert len(historized) > step + item = historized[step] + else: + for step, item in enumerate(historized): + if item.history_date == date: + break + # ended with no match + if item.history_date != date: + return item._step = step + if len(historized) != (step + 1): + item._previous = historized[step + 1].history_date + else: + item._previous = None + if step > 0: + item._next = historized[step - 1].history_date + else: + item._next = None model = self.__class__ for k in model._meta.get_all_field_names(): field = model._meta.get_field_by_name(k)[0] diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index 2342d4027..5a155b5b5 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -111,6 +111,8 @@ urlpatterns += patterns('ishtar.furnitures.views', name='get-file'), url(BASE_URL + r'show-file/(?P<pk>.+)?/(?P<type>.+)?$', 'show_file', name='show-file'), + url(BASE_URL + r'show-historized-file/(?P<pk>.+)?/(?P<date>.+)?$', + 'show_file', name='show-historized-file'), url(BASE_URL + r'autocomplete-operation/$', 'autocomplete_operation', name='autocomplete-operation'), url(BASE_URL + r'get-operation/(?P<type>.+)?$', 'get_operation', diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 0320ce5c9..43e663267 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -212,9 +212,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], items = items.order_by(sign + k) datas = [] if old: - print [item.pk for item in items] items = [item.get_previous(old) for item in items] - print [item.pk for item in items] for item in items: data = [item.pk] for k in model.TABLE_COLS: @@ -286,9 +284,23 @@ def show_item(model, name): except ObjectDoesNotExist: return HttpResponse(None) doc_type = 'type' in dct and dct.pop('type') + date = 'date' in dct and dct.pop('date') dct['item'], dct['item_name'] = item, name dct['window_id'] = "%s-%d-%s" % (name, item.pk, datetime.datetime.now().strftime('%M%s')) + if date: + try: + date = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S.%f') + item = item.get_previous(date=date) + assert item != None + except (ValueError, AssertionError): + return HttpResponse(None, mimetype='text/plain') + dct['previous'] = item._previous + dct['next'] = item._next + else: + historized = item.history.all() + if len(historized) > 1: + dct['previous'] = historized[1].history_date context_instance = RequestContext(request) context_instance.update(dct) n = datetime.datetime.now() diff --git a/ishtar/templates/sheet_file.html b/ishtar/templates/sheet_file.html index 8a004b0a5..b161a8e22 100644 --- a/ishtar/templates/sheet_file.html +++ b/ishtar/templates/sheet_file.html @@ -1,6 +1,16 @@ {% extends "sheet.html" %} {% load i18n %} {% block content %} +{% if previous or next %} +<div class='tool'> +{%if previous%} +<a href="#" onclick='load_window("{% url show-historized-file item.pk previous %}");$("#{{window_id}}").hide();return false;'>{%trans "Previous version"%} ({{previous}})</a> +{% endif %} +{%if next%} + - <a href="#" onclick='load_window("{% url show-historized-file item.pk next %}");$("#{{window_id}}").hide();return false;'>{%trans "Next version"%} ({{next}})</a> +{% endif %} +</div> +{% endif %} <div class='tool'>{%trans "Export as:"%} <a href='{% url show-file item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-file item.pk "pdf" %}'>{%trans "PDF file"%}</a></div> <h3>{% trans "General"%}</h3> <p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.year }}</span></p> |