Our custom ordering system
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
1.8 KiB

from sqlalchemy import func
from pyramid.csrf import get_csrf_token
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from .. import events, models, services
@view_config(
context="ordr3:resources.VendorList",
permission="view",
request_method="GET",
renderer="ordr3:templates/vendors/list.jinja2",
)
def vendor_list(context, request):
vendors = (
request.repo.session.query(models.Vendor.name)
.distinct(models.Vendor.name)
.order_by(func.lower(models.Vendor.name))
.all()
)
return {"vendors": vendors}
@view_config(
context="ordr3:resources.Vendor",
permission="edit",
request_method="GET",
renderer="ordr3:templates/vendors/edit.jinja2",
)
def vendor_edit_form(context, request):
return {"form_error": False, "csrf_token": get_csrf_token(request)}
@view_config(
context="ordr3:resources.Vendor",
permission="edit",
request_method="POST",
renderer="ordr3:templates/vendors/edit.jinja2",
)
def vendor_edit(context, request):
if "change" not in request.POST:
return HTTPFound(request.resource_url(context.__parent__))
vendor = request.POST.get("vendor", "").strip()
terms = request.POST.get("terms", "").strip()
if vendor and terms:
terms = set(terms.lower().splitlines())
canonical_name = services.canonical_vendor_name(vendor)
terms.add(canonical_name.lower())
request.repo.update_vendors(context.model, vendor, terms)
request.emit(
events.FlashMessage.info(
f"The autocorrect for {vendor} was updated."
)
)
return HTTPFound(request.resource_url(context.__parent__))
return {"form_error": True, "csrf_token": get_csrf_token(request)}