From 6b466bb90fd0d190a2aa68681c73e28526196790 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 14 Jun 2022 13:51:00 -0500 Subject: [PATCH] Add start date support for "future" pricing batch --- .../templates/batch/pricing/configure.mako | 22 ++++++++++++++ tailbone/views/batch/pricing.py | 30 ++++++++++++++++++- tailbone/views/products.py | 20 +++++++++++-- 3 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 tailbone/templates/batch/pricing/configure.mako diff --git a/tailbone/templates/batch/pricing/configure.mako b/tailbone/templates/batch/pricing/configure.mako new file mode 100644 index 00000000..8b5a90bb --- /dev/null +++ b/tailbone/templates/batch/pricing/configure.mako @@ -0,0 +1,22 @@ +## -*- coding: utf-8; -*- +<%inherit file="/configure.mako" /> + +<%def name="form_content()"> + +

Options

+
+ + + + Allow "future" pricing + + + +
+ + + +${parent.body()} diff --git a/tailbone/views/batch/pricing.py b/tailbone/views/batch/pricing.py index 1f054e61..18a4ea90 100644 --- a/tailbone/views/batch/pricing.py +++ b/tailbone/views/batch/pricing.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2021 Lance Edgar +# Copyright © 2010-2022 Lance Edgar # # This file is part of Rattail. # @@ -52,6 +52,7 @@ class PricingBatchView(BatchMasterView): bulk_deletable = True rows_editable = True rows_bulk_deletable = True + configurable = True labels = { 'min_diff_threshold': "Min $ Diff", @@ -62,6 +63,7 @@ class PricingBatchView(BatchMasterView): grid_columns = [ 'id', 'description', + 'start_date', 'created', 'created_by', 'rowcount', @@ -75,6 +77,7 @@ class PricingBatchView(BatchMasterView): 'id', 'input_filename', 'description', + 'start_date', 'min_diff_threshold', 'min_diff_percent', 'calculate_for_manual', @@ -147,8 +150,24 @@ class PricingBatchView(BatchMasterView): 'status_text', ] + def allow_future_pricing(self): + return self.batch_handler.allow_future() + def configure_form(self, f): super(PricingBatchView, self).configure_form(f) + app = self.get_rattail_app() + batch = f.model_instance + + if self.creating or self.editing: + if self.allow_future_pricing(): + f.set_type('start_date', 'date_jquery') + f.set_helptext('start_date', "Only set this for a \"FUTURE\" batch.") + else: + f.remove('start_date') + else: # viewing or deleting + if not self.allow_future_pricing(): + if not batch.start_date: + f.remove('start_date') f.set_type('min_diff_threshold', 'currency') @@ -349,6 +368,15 @@ class PricingBatchView(BatchMasterView): return xlrow + def configure_get_simple_settings(self): + return [ + + # options + {'section': 'rattail.batch', + 'option': 'pricing.allow_future', + 'type': bool}, + ] + def includeme(config): PricingBatchView.defaults(config) diff --git a/tailbone/views/products.py b/tailbone/views/products.py index a5706a25..6cdb001a 100644 --- a/tailbone/views/products.py +++ b/tailbone/views/products.py @@ -1892,14 +1892,15 @@ class ProductView(MasterView): return {'product': data} def get_supported_batches(self): + app = self.get_rattail_app() + pricing = app.get_batch_handler('pricing') return OrderedDict([ ('labels', { 'spec': self.rattail_config.get('rattail.batch', 'labels.handler', default='rattail.batch.labels:LabelBatchHandler'), }), ('pricing', { - 'spec': self.rattail_config.get('rattail.batch', 'pricing.handler', - default='rattail.batch.pricing:PricingBatchHandler'), + 'spec': pricing.get_spec(), }), ('delproduct', { 'spec': self.rattail_config.get('rattail.batch', 'delproduct.handler', @@ -2003,7 +2004,9 @@ class ProductView(MasterView): """ Return params schema for making a pricing batch. """ - return colander.SchemaNode( + app = self.get_rattail_app() + + schema = colander.SchemaNode( colander.Mapping(), colander.SchemaNode(colander.Decimal(), name='min_diff_threshold', quant='1.00', missing=colander.null, @@ -2014,6 +2017,17 @@ class ProductView(MasterView): colander.SchemaNode(colander.Boolean(), name='calculate_for_manual'), ) + pricing = app.get_batch_handler('pricing') + if pricing.allow_future(): + schema.insert(0, colander.SchemaNode( + colander.Date(), + name='start_date', + missing=colander.null, + title="Start Date (FUTURE only)", + widget=forms.widgets.JQueryDateWidget())) + + return schema + def make_batch_params_schema_delproduct(self): """ Return params schema for making a "delete products" batch.