diff --git a/tailbone_corepos/templates/corepos-util.mako b/tailbone_corepos/templates/corepos-util.mako
index b258751..961d175 100644
--- a/tailbone_corepos/templates/corepos-util.mako
+++ b/tailbone_corepos/templates/corepos-util.mako
@@ -1,18 +1,22 @@
## -*- coding: utf-8; -*-
+<%def name="render_xref_button()">
+
+ View in CORE Office
+
+%def>
+
<%def name="render_xref_helper()">
Cross-Reference
-
- View in CORE Office
-
+ ${self.render_xref_button()}
%def>
diff --git a/tailbone_corepos/templates/products/view.mako b/tailbone_corepos/templates/products/view.mako
index dda4626..fb3ddec 100644
--- a/tailbone_corepos/templates/products/view.mako
+++ b/tailbone_corepos/templates/products/view.mako
@@ -1,13 +1,26 @@
## -*- coding: utf-8; -*-
<%inherit file="tailbone:templates/products/view.mako" />
-<%namespace file="/corepos-util.mako" import="render_xref_helper" />
+<%namespace name="corepos" file="/corepos-util.mako" />
<%def name="object_helpers()">
${parent.object_helpers()}
- ${render_xref_helper()}
+ ${self.render_xref_helper()}
+%def>
+
+<%def name="render_xref_helper()">
+ ${corepos.render_xref_helper()}
+%def>
+
+<%def name="render_xref_button()">
+ ${corepos.render_xref_button()}
%def>
<%def name="extra_main_fields(form)">
+ ${parent.extra_main_fields(form)}
+ ${self.extra_main_fields_corepos(form)}
+%def>
+
+<%def name="extra_main_fields_corepos(form)">
${form.render_field_readonly('corepos_id')}
%def>
diff --git a/tailbone_corepos/views/products.py b/tailbone_corepos/views/products.py
index 5f08a39..2eefc70 100644
--- a/tailbone_corepos/views/products.py
+++ b/tailbone_corepos/views/products.py
@@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
-# Copyright © 2010-2020 Lance Edgar
+# Copyright © 2010-2021 Lance Edgar
#
# This file is part of Rattail.
#
@@ -40,23 +40,35 @@ class ProductView(base.ProductsView):
@property
def form_fields(self):
fields = super(ProductView, self).form_fields
- return fields + [
+ return self.corepos_add_form_fields(fields)
+
+ def corepos_add_form_fields(self, fields):
+ fields.extend([
'corepos_id',
- ]
+ ])
+ return fields
def query(self, session):
query = super(ProductView, self).query(session)
+ return self.corepos_modify_query(query)
+
+ def corepos_modify_query(self, query):
model = self.rattail_config.get_model()
return query.outerjoin(model.CoreProduct)
def configure_grid(self, g):
super(ProductView, self).configure_grid(g)
+ self.corepos_configure_grid(g)
+
+ def corepos_configure_grid(self, g):
model = self.rattail_config.get_model()
g.set_filter('corepos_id', model.CoreProduct.corepos_id)
def configure_form(self, f):
super(ProductView, self).configure_form(f)
+ self.corepos_configure_form(f)
+ def corepos_configure_form(self, f):
f.set_required('corepos_id', False)
if self.creating:
f.remove('corepos_id')
@@ -65,28 +77,35 @@ class ProductView(base.ProductsView):
if data is None:
data = form.validated
product = super(ProductView, self).objectify(form, data)
+ return self.corepos_objectify(product)
+ def corepos_objectify(self, product):
# remove the corepos extension record outright, if we just lost the ID
if product._corepos and not product.corepos_id:
self.Session.delete(product._corepos)
self.Session.flush()
-
return product
def get_version_child_classes(self):
+ classes = super(ProductView, self).get_version_child_classes()
+ return self.corepos_add_version_classes(classes)
+
+ def corepos_add_version_classes(self, classes):
model = self.rattail_config.get_model()
- return super(ProductView, self).get_version_child_classes() + [
+ classes.extend([
model.CoreProduct,
- ]
+ ])
+ return classes
def template_kwargs_view(self, **kwargs):
- """
- Supplements the default logic as follows:
+ kwargs = super(ProductView, self).template_kwargs_view(**kwargs)
+ return self.corepos_template_kwargs_view(**kwargs)
+ def corepos_template_kwargs_view(self, **kwargs):
+ """
Adds the URL for viewing the product within CORE Office, or else the
reason for lack of such a URL.
"""
- kwargs = super(ProductView, self).template_kwargs_view(**kwargs)
product = kwargs['instance']
# CORE Office URL