Remove all deprecated use_buefy
logic
also remove some static files no longer used, etc.
This commit is contained in:
parent
01e5eee981
commit
9faaea881d
112 changed files with 2079 additions and 7039 deletions
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2022 Lance Edgar
|
||||
# Copyright © 2010-2023 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -24,10 +24,6 @@
|
|||
Base class for purchasing batch views
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import six
|
||||
|
||||
from rattail.db import model, api
|
||||
|
||||
import colander
|
||||
|
@ -230,7 +226,6 @@ class PurchasingBatchView(BatchMasterView):
|
|||
batch = f.model_instance
|
||||
app = self.get_rattail_app()
|
||||
today = app.localtime().date()
|
||||
use_buefy = self.get_use_buefy()
|
||||
|
||||
# mode
|
||||
f.set_enum('mode', self.enum.PURCHASE_BATCH_MODE)
|
||||
|
@ -278,7 +273,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
if self.request.POST.get('vendor_uuid'):
|
||||
vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor_uuid'])
|
||||
if vendor:
|
||||
vendor_display = six.text_type(vendor)
|
||||
vendor_display = str(vendor)
|
||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||
f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display, service_url=vendors_url))
|
||||
|
@ -311,14 +306,14 @@ class PurchasingBatchView(BatchMasterView):
|
|||
if self.request.POST.get('buyer_uuid'):
|
||||
buyer = self.Session.query(model.Employee).get(self.request.POST['buyer_uuid'])
|
||||
if buyer:
|
||||
buyer_display = six.text_type(buyer)
|
||||
buyer_display = str(buyer)
|
||||
elif self.creating:
|
||||
buyer = self.request.user.employee
|
||||
if buyer:
|
||||
buyer_display = six.text_type(buyer)
|
||||
buyer_display = str(buyer)
|
||||
f.set_default('buyer_uuid', buyer.uuid)
|
||||
elif self.editing:
|
||||
buyer_display = six.text_type(batch.buyer or '')
|
||||
buyer_display = str(batch.buyer or '')
|
||||
buyers_url = self.request.route_url('employees.autocomplete')
|
||||
f.set_widget('buyer_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=buyer_display, service_url=buyers_url))
|
||||
|
@ -346,11 +341,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
if len(parsers) == 1:
|
||||
f.set_default('invoice_parser_key', parsers[0].key)
|
||||
|
||||
if use_buefy:
|
||||
f.set_widget('invoice_parser_key', dfwidget.SelectWidget(values=parser_values))
|
||||
else:
|
||||
parser_values.insert(0, ('', "(please choose)"))
|
||||
f.set_widget('invoice_parser_key', forms.widgets.JQuerySelectWidget(values=parser_values))
|
||||
f.set_widget('invoice_parser_key', dfwidget.SelectWidget(values=parser_values))
|
||||
else:
|
||||
f.remove_field('invoice_parser_key')
|
||||
|
||||
|
@ -422,7 +413,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
purchase = batch.purchase
|
||||
if not purchase:
|
||||
return ""
|
||||
text = six.text_type(purchase)
|
||||
text = str(purchase)
|
||||
url = self.request.route_url('purchases.view', uuid=purchase.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
|
@ -435,7 +426,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
|
||||
def render_vendor_contact(self, batch, field):
|
||||
if batch.vendor.contact:
|
||||
return six.text_type(batch.vendor.contact)
|
||||
return str(batch.vendor.contact)
|
||||
|
||||
def render_vendor_phone(self, batch, field):
|
||||
return self.get_vendor_phone_number(batch)
|
||||
|
@ -455,7 +446,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
employee = batch.buyer
|
||||
if not employee:
|
||||
return ""
|
||||
text = six.text_type(employee)
|
||||
text = str(employee)
|
||||
if self.request.has_perm('employees.view'):
|
||||
url = self.request.route_url('employees.view', uuid=employee.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
@ -484,7 +475,7 @@ class PurchasingBatchView(BatchMasterView):
|
|||
|
||||
def get_buyer_values(self):
|
||||
buyers = self.get_buyers()
|
||||
return [(b.uuid, six.text_type(b))
|
||||
return [(b.uuid, str(b))
|
||||
for b in buyers]
|
||||
|
||||
def get_department_options(self):
|
||||
|
@ -802,13 +793,12 @@ class PurchasingBatchView(BatchMasterView):
|
|||
return app.render_cases_units(cases, units)
|
||||
|
||||
def make_row_credits_grid(self, row):
|
||||
use_buefy = self.get_use_buefy()
|
||||
route_prefix = self.get_route_prefix()
|
||||
factory = self.get_grid_factory()
|
||||
|
||||
g = factory(
|
||||
key='{}.row_credits'.format(route_prefix),
|
||||
data=[] if use_buefy else row.credits,
|
||||
data=[],
|
||||
columns=[
|
||||
'credit_type',
|
||||
'shorted',
|
||||
|
@ -837,17 +827,9 @@ class PurchasingBatchView(BatchMasterView):
|
|||
return g
|
||||
|
||||
def render_row_credits(self, row, field):
|
||||
use_buefy = self.get_use_buefy()
|
||||
if not use_buefy and not row.credits:
|
||||
return
|
||||
|
||||
g = self.make_row_credits_grid(row)
|
||||
|
||||
if use_buefy:
|
||||
return HTML.literal(
|
||||
g.render_buefy_table_element(data_prop='rowData.credits'))
|
||||
else:
|
||||
return HTML.literal(g.render_grid())
|
||||
return HTML.literal(
|
||||
g.render_buefy_table_element(data_prop='rowData.credits'))
|
||||
|
||||
# def item_lookup(self, value, field=None):
|
||||
# """
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2022 Lance Edgar
|
||||
# Copyright © 2010-2023 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -24,10 +24,6 @@
|
|||
Views for 'costing' (purchasing) batches
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import six
|
||||
|
||||
import colander
|
||||
from deform import widget as dfwidget
|
||||
|
||||
|
@ -188,14 +184,12 @@ class CostingBatchView(PurchasingBatchView):
|
|||
|
||||
# okay, at this point we need the user to select a vendor and workflow
|
||||
self.creating = True
|
||||
use_buefy = self.get_use_buefy()
|
||||
model = self.model
|
||||
context = {}
|
||||
|
||||
# form to accept user choice of vendor/workflow
|
||||
schema = NewCostingBatch().bind(valid_workflows=valid_workflows)
|
||||
form = forms.Form(schema=schema, request=self.request,
|
||||
use_buefy=use_buefy)
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
if len(valid_workflows) == 1:
|
||||
form.set_default('workflow', valid_workflows[0])
|
||||
|
||||
|
@ -208,17 +202,14 @@ class CostingBatchView(PurchasingBatchView):
|
|||
.order_by(model.Vendor.id)
|
||||
vendor_values = [(vendor.uuid, "({}) {}".format(vendor.id, vendor.name))
|
||||
for vendor in vendors]
|
||||
if use_buefy:
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
form.set_widget('vendor', forms.widgets.JQuerySelectWidget(values=vendor_values))
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
vendor_display = ""
|
||||
if self.request.method == 'POST':
|
||||
if self.request.POST.get('vendor'):
|
||||
vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor'])
|
||||
if vendor:
|
||||
vendor_display = six.text_type(vendor)
|
||||
vendor_display = str(vendor)
|
||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||
form.set_widget('vendor', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display, service_url=vendors_url))
|
||||
|
@ -226,12 +217,8 @@ class CostingBatchView(PurchasingBatchView):
|
|||
# configure workflow field
|
||||
values = [(workflow['workflow_key'], workflow['display'])
|
||||
for workflow in workflows]
|
||||
if use_buefy:
|
||||
form.set_widget('workflow',
|
||||
dfwidget.SelectWidget(values=values))
|
||||
else:
|
||||
form.set_widget('workflow',
|
||||
forms.widgets.JQuerySelectWidget(values=values))
|
||||
form.set_widget('workflow',
|
||||
dfwidget.SelectWidget(values=values))
|
||||
|
||||
form.submit_label = "Continue"
|
||||
form.cancel_url = self.get_index_url()
|
||||
|
@ -254,7 +241,6 @@ class CostingBatchView(PurchasingBatchView):
|
|||
def configure_form(self, f):
|
||||
super(CostingBatchView, self).configure_form(f)
|
||||
route_prefix = self.get_route_prefix()
|
||||
use_buefy = self.get_use_buefy()
|
||||
model = self.model
|
||||
workflow = self.request.matchdict.get('workflow_key')
|
||||
|
||||
|
@ -306,15 +292,14 @@ class CostingBatchView(PurchasingBatchView):
|
|||
# purchase
|
||||
if (self.creating and workflow == 'invoice_with_po'
|
||||
and self.purchase_order_fieldname == 'purchase'):
|
||||
if use_buefy:
|
||||
f.replace('purchase', 'purchase_uuid')
|
||||
purchases = self.handler.get_eligible_purchases(
|
||||
vendor, self.enum.PURCHASE_BATCH_MODE_COSTING)
|
||||
values = [(p.uuid, self.handler.render_eligible_purchase(p))
|
||||
for p in purchases]
|
||||
f.set_widget('purchase_uuid', dfwidget.SelectWidget(values=values))
|
||||
f.set_label('purchase_uuid', "Purchase Order")
|
||||
f.set_required('purchase_uuid')
|
||||
f.replace('purchase', 'purchase_uuid')
|
||||
purchases = self.handler.get_eligible_purchases(
|
||||
vendor, self.enum.PURCHASE_BATCH_MODE_COSTING)
|
||||
values = [(p.uuid, self.handler.render_eligible_purchase(p))
|
||||
for p in purchases]
|
||||
f.set_widget('purchase_uuid', dfwidget.SelectWidget(values=values))
|
||||
f.set_label('purchase_uuid', "Purchase Order")
|
||||
f.set_required('purchase_uuid')
|
||||
|
||||
def render_costing_workflow(self, batch, field):
|
||||
key = self.request.matchdict['workflow_key']
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2022 Lance Edgar
|
||||
# Copyright © 2010-2023 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -24,12 +24,9 @@
|
|||
Views for 'ordering' (purchasing) batches
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
import six
|
||||
import openpyxl
|
||||
from sqlalchemy import orm
|
||||
|
||||
|
@ -313,9 +310,7 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
if not order_date:
|
||||
order_date = localtime(self.rattail_config).date()
|
||||
|
||||
buefy_data = None
|
||||
if self.get_use_buefy():
|
||||
buefy_data = self.get_worksheet_buefy_data(departments)
|
||||
buefy_data = self.get_worksheet_buefy_data(departments)
|
||||
|
||||
return self.render_to_response('worksheet', {
|
||||
'batch': batch,
|
||||
|
@ -334,8 +329,8 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
|
||||
def get_worksheet_buefy_data(self, departments):
|
||||
data = {}
|
||||
for department in six.itervalues(departments):
|
||||
for subdepartment in six.itervalues(department._order_subdepartments):
|
||||
for department in departments.values():
|
||||
for subdepartment in department._order_subdepartments.values():
|
||||
for i, cost in enumerate(subdepartment._order_costs, 1):
|
||||
cases = int(cost._batchrow.cases_ordered or 0) if cost._batchrow else None
|
||||
units = int(cost._batchrow.units_ordered or 0) if cost._batchrow else None
|
||||
|
@ -433,7 +428,7 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
self.handler.update_row_quantity(row, cases_ordered=cases_ordered,
|
||||
units_ordered=units_ordered)
|
||||
except Exception as error:
|
||||
return {'error': six.text_type(error)}
|
||||
return {'error': str(error)}
|
||||
|
||||
else: # empty order quantities
|
||||
|
||||
|
@ -469,7 +464,7 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
worksheet.append([])
|
||||
worksheet.append(['vendor_code', 'upc', 'brand_name', 'description', 'cases_ordered', 'units_ordered'])
|
||||
for row in batch.active_rows():
|
||||
worksheet.append([row.vendor_code, six.text_type(row.upc), row.brand_name,
|
||||
worksheet.append([row.vendor_code, str(row.upc), row.brand_name,
|
||||
'{} {}'.format(row.description, row.size),
|
||||
row.cases_ordered, row.units_ordered])
|
||||
|
||||
|
|
|
@ -24,14 +24,11 @@
|
|||
Views for 'receiving' (purchasing) batches
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
import decimal
|
||||
import logging
|
||||
|
||||
import six
|
||||
import humanize
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
@ -302,13 +299,11 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
|
||||
# okay, at this point we need the user to select a vendor and workflow
|
||||
self.creating = True
|
||||
use_buefy = self.get_use_buefy()
|
||||
context = {}
|
||||
|
||||
# form to accept user choice of vendor/workflow
|
||||
schema = NewReceivingBatch().bind(valid_workflows=valid_workflows)
|
||||
form = forms.Form(schema=schema, request=self.request,
|
||||
use_buefy=use_buefy)
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
|
||||
# configure vendor field
|
||||
app = self.get_rattail_app()
|
||||
|
@ -325,10 +320,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
vendors = sorted(vendors.values(), key=lambda v: v.name)
|
||||
vendor_values = [(vendor.uuid, vendor_handler.render_vendor(vendor))
|
||||
for vendor in vendors]
|
||||
if use_buefy:
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
form.set_widget('vendor', forms.widgets.JQuerySelectWidget(values=vendor_values))
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
# user may choose *any* available vendor
|
||||
use_dropdown = vendor_handler.choice_uses_dropdown()
|
||||
|
@ -338,10 +330,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
.all()
|
||||
vendor_values = [(vendor.uuid, "({}) {}".format(vendor.id, vendor.name))
|
||||
for vendor in vendors]
|
||||
if use_buefy:
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
form.set_widget('vendor', forms.widgets.JQuerySelectWidget(values=vendor_values))
|
||||
form.set_widget('vendor', dfwidget.SelectWidget(values=vendor_values))
|
||||
if len(vendors) == 1:
|
||||
form.set_default('vendor', vendors[0].uuid)
|
||||
else:
|
||||
|
@ -350,7 +339,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
if self.request.POST.get('vendor'):
|
||||
vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor'])
|
||||
if vendor:
|
||||
vendor_display = six.text_type(vendor)
|
||||
vendor_display = str(vendor)
|
||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||
form.set_widget('vendor', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display, service_url=vendors_url))
|
||||
|
@ -359,12 +348,8 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
# configure workflow field
|
||||
values = [(workflow['workflow_key'], workflow['display'])
|
||||
for workflow in workflows]
|
||||
if use_buefy:
|
||||
form.set_widget('workflow',
|
||||
dfwidget.SelectWidget(values=values))
|
||||
else:
|
||||
form.set_widget('workflow',
|
||||
forms.widgets.JQuerySelectWidget(values=values))
|
||||
form.set_widget('workflow',
|
||||
dfwidget.SelectWidget(values=values))
|
||||
if len(workflows) == 1:
|
||||
form.set_default('workflow', workflows[0]['workflow_key'])
|
||||
|
||||
|
@ -427,7 +412,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
allow_truck_dump = self.batch_handler.allow_truck_dump_receiving()
|
||||
workflow = self.request.matchdict.get('workflow_key')
|
||||
route_prefix = self.get_route_prefix()
|
||||
use_buefy = self.get_use_buefy()
|
||||
|
||||
# tweak some things if we are in "step 2" of creating new batch
|
||||
if self.creating and workflow:
|
||||
|
@ -437,7 +421,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
self.request.matchdict['vendor_uuid'])
|
||||
assert vendor
|
||||
f.set_readonly('vendor_uuid')
|
||||
f.set_default('vendor_uuid', six.text_type(vendor))
|
||||
f.set_default('vendor_uuid', str(vendor))
|
||||
|
||||
# cancel should take us back to choosing a workflow
|
||||
f.cancel_url = self.request.route_url('{}.create'.format(route_prefix))
|
||||
|
@ -532,15 +516,14 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
# purchase
|
||||
if (self.creating and workflow in ('from_po', 'from_po_with_invoice')
|
||||
and self.purchase_order_fieldname == 'purchase'):
|
||||
if use_buefy:
|
||||
f.replace('purchase', 'purchase_uuid')
|
||||
purchases = self.batch_handler.get_eligible_purchases(
|
||||
vendor, self.enum.PURCHASE_BATCH_MODE_RECEIVING)
|
||||
values = [(p.uuid, self.batch_handler.render_eligible_purchase(p))
|
||||
for p in purchases]
|
||||
f.set_widget('purchase_uuid', dfwidget.SelectWidget(values=values))
|
||||
f.set_label('purchase_uuid', "Purchase Order")
|
||||
f.set_required('purchase_uuid')
|
||||
f.replace('purchase', 'purchase_uuid')
|
||||
purchases = self.batch_handler.get_eligible_purchases(
|
||||
vendor, self.enum.PURCHASE_BATCH_MODE_RECEIVING)
|
||||
values = [(p.uuid, self.batch_handler.render_eligible_purchase(p))
|
||||
for p in purchases]
|
||||
f.set_widget('purchase_uuid', dfwidget.SelectWidget(values=values))
|
||||
f.set_label('purchase_uuid', "Purchase Order")
|
||||
f.set_required('purchase_uuid')
|
||||
elif self.creating or not batch.purchase:
|
||||
f.remove_field('purchase')
|
||||
|
||||
|
@ -774,26 +757,18 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
def template_kwargs_view(self, **kwargs):
|
||||
kwargs = super(ReceivingBatchView, self).template_kwargs_view(**kwargs)
|
||||
batch = kwargs['instance']
|
||||
use_buefy = self.get_use_buefy()
|
||||
|
||||
if self.handler.has_purchase_order(batch) and self.handler.has_invoice_file(batch):
|
||||
breakdown = self.make_po_vs_invoice_breakdown(batch)
|
||||
factory = self.get_grid_factory()
|
||||
if use_buefy:
|
||||
|
||||
g = factory('batch_po_vs_invoice_breakdown', [],
|
||||
columns=['title', 'count'])
|
||||
g.set_click_handler('title', "autoFilterPoVsInvoice(props.row)")
|
||||
kwargs['po_vs_invoice_breakdown_data'] = breakdown
|
||||
kwargs['po_vs_invoice_breakdown_grid'] = HTML.literal(
|
||||
g.render_buefy_table_element(data_prop='poVsInvoiceBreakdownData',
|
||||
empty_labels=True))
|
||||
|
||||
else:
|
||||
kwargs['po_vs_invoice_breakdown_grid'] = factory(
|
||||
'batch_po_vs_invoice_breakdown',
|
||||
data=breakdown,
|
||||
columns=['title', 'count'])
|
||||
g = factory('batch_po_vs_invoice_breakdown', [],
|
||||
columns=['title', 'count'])
|
||||
g.set_click_handler('title', "autoFilterPoVsInvoice(props.row)")
|
||||
kwargs['po_vs_invoice_breakdown_data'] = breakdown
|
||||
kwargs['po_vs_invoice_breakdown_grid'] = HTML.literal(
|
||||
g.render_buefy_table_element(data_prop='poVsInvoiceBreakdownData',
|
||||
empty_labels=True))
|
||||
|
||||
kwargs['allow_edit_catalog_unit_cost'] = self.allow_edit_catalog_unit_cost(batch)
|
||||
kwargs['allow_edit_invoice_unit_cost'] = self.allow_edit_invoice_unit_cost(batch)
|
||||
|
@ -807,7 +782,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
credits_data.append({
|
||||
'uuid': credit.uuid,
|
||||
'credit_type': credit.credit_type,
|
||||
'expiration_date': six.text_type(credit.expiration_date) if credit.expiration_date else None,
|
||||
'expiration_date': str(credit.expiration_date) if credit.expiration_date else None,
|
||||
'cases_shorted': app.render_quantity(credit.cases_shorted),
|
||||
'units_shorted': app.render_quantity(credit.units_shorted),
|
||||
'shorted': app.render_cases_units(credit.cases_shorted,
|
||||
|
@ -822,7 +797,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
|
||||
def template_kwargs_view_row(self, **kwargs):
|
||||
kwargs = super(ReceivingBatchView, self).template_kwargs_view_row(**kwargs)
|
||||
use_buefy = self.get_use_buefy()
|
||||
app = self.get_rattail_app()
|
||||
products_handler = app.get_products_handler()
|
||||
row = kwargs['instance']
|
||||
|
@ -834,18 +808,17 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
elif row.upc:
|
||||
kwargs['image_url'] = products_handler.get_image_url(upc=row.upc)
|
||||
|
||||
if use_buefy:
|
||||
kwargs['row_context'] = self.get_context_row(row)
|
||||
kwargs['row_context'] = self.get_context_row(row)
|
||||
|
||||
modes = list(POSSIBLE_RECEIVING_MODES)
|
||||
types = list(POSSIBLE_CREDIT_TYPES)
|
||||
if not self.batch_handler.allow_expired_credits():
|
||||
if 'expired' in modes:
|
||||
modes.remove('expired')
|
||||
if 'expired' in types:
|
||||
types.remove('expired')
|
||||
kwargs['possible_receiving_modes'] = modes
|
||||
kwargs['possible_credit_types'] = types
|
||||
modes = list(POSSIBLE_RECEIVING_MODES)
|
||||
types = list(POSSIBLE_CREDIT_TYPES)
|
||||
if not self.batch_handler.allow_expired_credits():
|
||||
if 'expired' in modes:
|
||||
modes.remove('expired')
|
||||
if 'expired' in types:
|
||||
types.remove('expired')
|
||||
kwargs['possible_receiving_modes'] = modes
|
||||
kwargs['possible_credit_types'] = types
|
||||
|
||||
return kwargs
|
||||
|
||||
|
@ -962,7 +935,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
|
||||
def render_truck_dump_parent(self, batch, field):
|
||||
truck_dump = self.get_instance()
|
||||
text = six.text_type(truck_dump)
|
||||
text = str(truck_dump)
|
||||
url = self.request.route_url('receiving.view', uuid=truck_dump.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
|
@ -992,7 +965,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
|
||||
def configure_row_grid(self, g):
|
||||
super(ReceivingBatchView, self).configure_row_grid(g)
|
||||
use_buefy = self.get_use_buefy()
|
||||
batch = self.get_instance()
|
||||
|
||||
# vendor_code
|
||||
|
@ -1003,13 +975,13 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
if (self.handler.has_purchase_order(batch)
|
||||
or self.handler.has_invoice_file(batch)):
|
||||
g.remove('catalog_unit_cost')
|
||||
elif use_buefy and self.allow_edit_catalog_unit_cost(batch):
|
||||
elif self.allow_edit_catalog_unit_cost(batch):
|
||||
g.set_raw_renderer('catalog_unit_cost', self.render_catalog_unit_cost)
|
||||
g.set_click_handler('catalog_unit_cost',
|
||||
'catalogUnitCostClicked(props.row)')
|
||||
|
||||
# invoice_unit_cost
|
||||
if use_buefy and self.allow_edit_invoice_unit_cost(batch):
|
||||
if self.allow_edit_invoice_unit_cost(batch):
|
||||
g.set_raw_renderer('invoice_unit_cost', self.render_invoice_unit_cost)
|
||||
g.set_click_handler('invoice_unit_cost',
|
||||
'invoiceUnitCostClicked(props.row)')
|
||||
|
@ -1102,7 +1074,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
|
||||
def get_row_instance_title(self, row):
|
||||
if row.product:
|
||||
return six.text_type(row.product)
|
||||
return str(row.product)
|
||||
if row.upc:
|
||||
return row.upc.pretty()
|
||||
return super(ReceivingBatchView, self).get_row_instance_title(row)
|
||||
|
@ -1119,8 +1091,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
# first make grid like normal
|
||||
g = super(ReceivingBatchView, self).make_row_credits_grid(row)
|
||||
|
||||
if (self.get_use_buefy()
|
||||
and self.has_perm('edit_row')
|
||||
if (self.has_perm('edit_row')
|
||||
and self.row_editable(row)):
|
||||
|
||||
# add the Un-Declare action
|
||||
|
@ -1153,56 +1124,52 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
# simply invoke this method and return the result. however we're not
|
||||
# there yet...for now it's only tested for desktop
|
||||
self.viewing = True
|
||||
use_buefy = self.get_use_buefy()
|
||||
row = self.get_row_instance()
|
||||
|
||||
# things are a bit different now w/ buefy support..
|
||||
if use_buefy:
|
||||
# don't even bother showing this page if that's all the
|
||||
# request was about
|
||||
if self.request.method == 'GET':
|
||||
return self.redirect(self.get_row_action_url('view', row))
|
||||
|
||||
# don't even bother showing this page if that's all the
|
||||
# request was about
|
||||
if self.request.method == 'GET':
|
||||
return self.redirect(self.get_row_action_url('view', row))
|
||||
# make sure edit is allowed
|
||||
if not (self.has_perm('edit_row') and self.row_editable(row)):
|
||||
raise self.forbidden()
|
||||
|
||||
# make sure edit is allowed
|
||||
if not (self.has_perm('edit_row') and self.row_editable(row)):
|
||||
raise self.forbidden()
|
||||
# check for JSON POST, which is submitted via AJAX from
|
||||
# the "view row" page
|
||||
if self.request.method == 'POST' and not self.request.POST:
|
||||
data = self.request.json_body
|
||||
kwargs = dict(data)
|
||||
|
||||
# check for JSON POST, which is submitted via AJAX from
|
||||
# the "view row" page
|
||||
if self.request.method == 'POST' and not self.request.POST:
|
||||
data = self.request.json_body
|
||||
kwargs = dict(data)
|
||||
# TODO: for some reason quantities can come through as strings?
|
||||
cases = kwargs['quantity']['cases']
|
||||
if cases is not None:
|
||||
if cases == '':
|
||||
cases = None
|
||||
else:
|
||||
cases = decimal.Decimal(cases)
|
||||
kwargs['cases'] = cases
|
||||
units = kwargs['quantity']['units']
|
||||
if units is not None:
|
||||
if units == '':
|
||||
units = None
|
||||
else:
|
||||
units = decimal.Decimal(units)
|
||||
kwargs['units'] = units
|
||||
del kwargs['quantity']
|
||||
|
||||
# TODO: for some reason quantities can come through as strings?
|
||||
cases = kwargs['quantity']['cases']
|
||||
if cases is not None:
|
||||
if cases == '':
|
||||
cases = None
|
||||
else:
|
||||
cases = decimal.Decimal(cases)
|
||||
kwargs['cases'] = cases
|
||||
units = kwargs['quantity']['units']
|
||||
if units is not None:
|
||||
if units == '':
|
||||
units = None
|
||||
else:
|
||||
units = decimal.Decimal(units)
|
||||
kwargs['units'] = units
|
||||
del kwargs['quantity']
|
||||
# handler takes care of the receiving logic for us
|
||||
try:
|
||||
self.batch_handler.receive_row(row, **kwargs)
|
||||
|
||||
# handler takes care of the receiving logic for us
|
||||
try:
|
||||
self.batch_handler.receive_row(row, **kwargs)
|
||||
except Exception as error:
|
||||
return self.json_response({'error': str(error)})
|
||||
|
||||
except Exception as error:
|
||||
return self.json_response({'error': six.text_type(error)})
|
||||
|
||||
self.Session.flush()
|
||||
self.Session.refresh(row)
|
||||
return self.json_response({
|
||||
'ok': True,
|
||||
'row': self.get_context_row(row)})
|
||||
self.Session.flush()
|
||||
self.Session.refresh(row)
|
||||
return self.json_response({
|
||||
'ok': True,
|
||||
'row': self.get_context_row(row)})
|
||||
|
||||
batch = row.batch
|
||||
permission_prefix = self.get_permission_prefix()
|
||||
|
@ -1226,15 +1193,12 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
}
|
||||
|
||||
schema = ReceiveRowForm().bind(session=self.Session())
|
||||
form = forms.Form(schema=schema, request=self.request, use_buefy=use_buefy)
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
form.cancel_url = self.get_row_action_url('view', row)
|
||||
|
||||
# mode
|
||||
mode_values = [(mode, mode) for mode in possible_modes]
|
||||
if use_buefy:
|
||||
mode_widget = dfwidget.SelectWidget(values=mode_values)
|
||||
else:
|
||||
mode_widget = forms.widgets.JQuerySelectWidget(values=mode_values)
|
||||
mode_widget = dfwidget.SelectWidget(values=mode_values)
|
||||
form.set_widget('mode', mode_widget)
|
||||
|
||||
# quantity
|
||||
|
@ -1354,59 +1318,55 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
View for declaring a credit, i.e. converting some "received" or similar
|
||||
quantity, to a credit of some sort.
|
||||
"""
|
||||
use_buefy = self.get_use_buefy()
|
||||
row = self.get_row_instance()
|
||||
|
||||
# things are a bit different now w/ buefy support..
|
||||
if use_buefy:
|
||||
# don't even bother showing this page if that's all the
|
||||
# request was about
|
||||
if self.request.method == 'GET':
|
||||
return self.redirect(self.get_row_action_url('view', row))
|
||||
|
||||
# don't even bother showing this page if that's all the
|
||||
# request was about
|
||||
if self.request.method == 'GET':
|
||||
return self.redirect(self.get_row_action_url('view', row))
|
||||
# make sure edit is allowed
|
||||
if not (self.has_perm('edit_row') and self.row_editable(row)):
|
||||
raise self.forbidden()
|
||||
|
||||
# make sure edit is allowed
|
||||
if not (self.has_perm('edit_row') and self.row_editable(row)):
|
||||
raise self.forbidden()
|
||||
# check for JSON POST, which is submitted via AJAX from
|
||||
# the "view row" page
|
||||
if self.request.method == 'POST' and not self.request.POST:
|
||||
data = self.request.json_body
|
||||
kwargs = dict(data)
|
||||
|
||||
# check for JSON POST, which is submitted via AJAX from
|
||||
# the "view row" page
|
||||
if self.request.method == 'POST' and not self.request.POST:
|
||||
data = self.request.json_body
|
||||
kwargs = dict(data)
|
||||
# TODO: for some reason quantities can come through as strings?
|
||||
if kwargs['cases'] is not None:
|
||||
if kwargs['cases'] == '':
|
||||
kwargs['cases'] = None
|
||||
else:
|
||||
kwargs['cases'] = decimal.Decimal(kwargs['cases'])
|
||||
if kwargs['units'] is not None:
|
||||
if kwargs['units'] == '':
|
||||
kwargs['units'] = None
|
||||
else:
|
||||
kwargs['units'] = decimal.Decimal(kwargs['units'])
|
||||
|
||||
# TODO: for some reason quantities can come through as strings?
|
||||
if kwargs['cases'] is not None:
|
||||
if kwargs['cases'] == '':
|
||||
kwargs['cases'] = None
|
||||
else:
|
||||
kwargs['cases'] = decimal.Decimal(kwargs['cases'])
|
||||
if kwargs['units'] is not None:
|
||||
if kwargs['units'] == '':
|
||||
kwargs['units'] = None
|
||||
else:
|
||||
kwargs['units'] = decimal.Decimal(kwargs['units'])
|
||||
try:
|
||||
result = self.handler.can_declare_credit(row, **kwargs)
|
||||
|
||||
try:
|
||||
result = self.handler.can_declare_credit(row, **kwargs)
|
||||
except Exception as error:
|
||||
return self.json_response({'error': str(error)})
|
||||
|
||||
except Exception as error:
|
||||
return self.json_response({'error': six.text_type(error)})
|
||||
else:
|
||||
if result:
|
||||
self.handler.declare_credit(row, **kwargs)
|
||||
|
||||
else:
|
||||
if result:
|
||||
self.handler.declare_credit(row, **kwargs)
|
||||
return self.json_response({
|
||||
'error': "Handler says you can't declare that credit; "
|
||||
"not sure why"})
|
||||
|
||||
else:
|
||||
return self.json_response({
|
||||
'error': "Handler says you can't declare that credit; "
|
||||
"not sure why"})
|
||||
|
||||
self.Session.flush()
|
||||
self.Session.refresh(row)
|
||||
return self.json_response({
|
||||
'ok': True,
|
||||
'row': self.get_context_row(row)})
|
||||
self.Session.flush()
|
||||
self.Session.refresh(row)
|
||||
return self.json_response({
|
||||
'ok': True,
|
||||
'row': self.get_context_row(row)})
|
||||
|
||||
batch = row.batch
|
||||
context = {
|
||||
|
@ -1422,16 +1382,12 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
}
|
||||
|
||||
schema = DeclareCreditForm()
|
||||
form = forms.Form(schema=schema, request=self.request,
|
||||
use_buefy=use_buefy)
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
form.cancel_url = self.get_row_action_url('view', row)
|
||||
|
||||
# credit_type
|
||||
values = [(m, m) for m in POSSIBLE_CREDIT_TYPES]
|
||||
if use_buefy:
|
||||
widget = dfwidget.SelectWidget(values=values)
|
||||
else:
|
||||
widget = forms.widgets.JQuerySelectWidget(values=values)
|
||||
widget = dfwidget.SelectWidget(values=values)
|
||||
form.set_widget('credit_type', widget)
|
||||
|
||||
# quantity
|
||||
|
@ -1896,7 +1852,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
if cost == '':
|
||||
return {'error': "You must specify a cost"}
|
||||
try:
|
||||
cost = decimal.Decimal(six.text_type(cost))
|
||||
cost = decimal.Decimal(str(cost))
|
||||
except decimal.InvalidOperation:
|
||||
return {'error': "Cost is not valid!"}
|
||||
else:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue