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
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)}
|
|
|