diff --git a/tailbone/templates/products/read.mako b/tailbone/templates/products/read.mako
index 8f9bcae8..1bdac00b 100644
--- a/tailbone/templates/products/read.mako
+++ b/tailbone/templates/products/read.mako
@@ -33,6 +33,7 @@
<%def name="render_price_fields(form)">
${render_field_readonly(form.fieldset.regular_price)}
${render_field_readonly(form.fieldset.current_price)}
+ ${render_field_readonly(form.fieldset.current_price_ends)}
${render_field_readonly(form.fieldset.deposit_link)}
${render_field_readonly(form.fieldset.tax)}
%def>
@@ -46,6 +47,10 @@
${render_field_readonly(form.fieldset.deleted)}
%def>
+<%def name="render_movement_fields(form)">
+ ${render_field_readonly(form.fieldset.last_sold)}
+%def>
+
Vendor Sources
diff --git a/tailbone/views/products.py b/tailbone/views/products.py
index 8d46ae28..3f7b80ec 100644
--- a/tailbone/views/products.py
+++ b/tailbone/views/products.py
@@ -32,8 +32,8 @@ import re
from sqlalchemy import and_
from sqlalchemy.orm import joinedload, aliased
+import formalchemy
from webhelpers.html.tags import link_to
-
from pyramid.httpexceptions import HTTPFound
from pyramid.renderers import render_to_response
@@ -54,7 +54,7 @@ from rattail.pod import get_image_url, get_image_path
from tailbone.views import SearchableAlchemyGridView, CrudView
from tailbone.views.continuum import VersionView, version_defaults
-from tailbone.forms import EnumFieldRenderer
+from tailbone.forms import EnumFieldRenderer, DateTimeFieldRenderer
from tailbone.db import Session
from tailbone.forms import GPCFieldRenderer, BrandFieldRenderer, PriceFieldRenderer
from tailbone.progress import SessionProgress
@@ -249,6 +249,12 @@ class ProductCrud(CrudView):
fs.unit_of_measure.set(renderer=EnumFieldRenderer(enum.UNIT_OF_MEASURE))
fs.regular_price.set(renderer=PriceFieldRenderer)
fs.current_price.set(renderer=PriceFieldRenderer)
+
+ fs.append(formalchemy.Field('current_price_ends'))
+ fs.current_price_ends.set(value=lambda p: p.current_price.ends if p.current_price else None)
+ fs.current_price_ends.set(renderer=DateTimeFieldRenderer(self.request.rattail_config))
+
+ fs.last_sold.set(renderer=DateTimeFieldRenderer(self.request.rattail_config))
fs.configure(
include=[
fs.upc.label("UPC"),
@@ -266,6 +272,7 @@ class ProductCrud(CrudView):
fs.report_code,
fs.regular_price,
fs.current_price,
+ fs.current_price_ends,
fs.deposit_link,
fs.tax,
fs.organic,
@@ -273,6 +280,7 @@ class ProductCrud(CrudView):
fs.special_order,
fs.not_for_sale,
fs.deleted,
+ fs.last_sold,
])
if not self.readonly:
del fs.regular_price