Add 'executed' to old batches grid view, make timestamps show "raw" by default.

This commit is contained in:
Lance Edgar 2016-03-11 11:35:00 -06:00
parent a7b73021ac
commit a22f50850f
4 changed files with 54 additions and 10 deletions

View file

@ -30,7 +30,7 @@ from .core import CustomFieldRenderer, DateFieldRenderer
from .common import (AutocompleteFieldRenderer,
DecimalFieldRenderer, CurrencyFieldRenderer,
DateTimeFieldRenderer,
DateTimeFieldRenderer, DateTimePrettyFieldRenderer,
EnumFieldRenderer, YesNoFieldRenderer)
from .people import (PersonFieldRenderer, PersonFieldLinkRenderer,

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2014 Lance Edgar
# Copyright © 2010-2016 Lance Edgar
#
# This file is part of Rattail.
#
@ -24,13 +24,13 @@
Common Field Renderers
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
import formalchemy
from formalchemy.fields import FieldRenderer, SelectFieldRenderer, CheckBoxFieldRenderer
from pyramid.renderers import render
from tailbone.util import pretty_datetime
from tailbone.util import pretty_datetime, raw_datetime
class AutocompleteFieldRenderer(FieldRenderer):
@ -77,6 +77,19 @@ class AutocompleteFieldRenderer(FieldRenderer):
class DateTimeFieldRenderer(formalchemy.DateTimeFieldRenderer):
"""
This renderer assumes the datetime field value is in UTC, and will convert
it to the local time zone before rendering it in the standard "raw" format.
"""
def render_readonly(self, **kwargs):
value = self.raw_value
if not value:
return ''
return raw_datetime(self.request.rattail_config, value)
class DateTimePrettyFieldRenderer(formalchemy.DateTimeFieldRenderer):
"""
Custom date/time field renderer, which displays a "pretty" value in
read-only mode, leveraging config to show the correct timezone.

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2014 Lance Edgar
# Copyright © 2010-2016 Lance Edgar
#
# This file is part of Rattail.
#
@ -24,7 +24,7 @@
Utilities
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
import datetime
@ -64,3 +64,33 @@ def pretty_datetime(config, value):
return HTML.tag('span',
title=value.strftime('%Y-%m-%d %H:%M:%S %Z%z'),
c=humanize.naturaltime(time_ago))
def raw_datetime(config, value):
"""
Formats a datetime as a "raw" human-readable string, with a tooltip
showing the more human-friendly "time since" equivalent.
:param config: Reference to a config object.
:param value: A ``datetime.datetime`` instance. Note that if this instance
is not timezone-aware, its timezone is assumed to be UTC.
"""
if not value:
return ''
# Make sure we're dealing with a tz-aware value. If we're given a naive
# value, we assume it to be local to the UTC timezone.
if not value.tzinfo:
value = pytz.utc.localize(value)
# Calculate time diff using UTC.
time_ago = datetime.datetime.utcnow() - make_utc(value)
# Convert value to local timezone.
local = timezone(config)
value = local.normalize(value.astimezone(local))
return HTML.tag('span',
title=humanize.naturaltime(time_ago),
c=value.strftime('%Y-%m-%d %I:%M:%S %p').lower())

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2014 Lance Edgar
# Copyright © 2010-2016 Lance Edgar
#
# This file is part of Rattail.
#
@ -24,14 +24,14 @@
Core Batch Views
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
from pyramid.httpexceptions import HTTPFound
from pyramid.renderers import render_to_response
from webhelpers.html import tags
from tailbone.forms import EnumFieldRenderer
from tailbone import forms
from ...grids.search import BooleanSearchFilter
from .. import SearchableAlchemyGridView, CrudView, View
from ...progress import SessionProgress
@ -91,6 +91,7 @@ class BatchesGrid(SearchableAlchemyGridView):
g.id.label("ID"),
g.destination,
g.description,
g.executed,
g.rowcount.label("Row Count"),
],
readonly=True)
@ -117,7 +118,7 @@ class BatchCrud(CrudView):
def fieldset(self, model):
fs = self.make_fieldset(model)
fs.action_type.set(renderer=EnumFieldRenderer(enum.BATCH_ACTION))
fs.action_type.set(renderer=forms.renderers.EnumFieldRenderer(enum.BATCH_ACTION))
fs.configure(
include=[
fs.source,