diff --git a/ordr3/events.py b/ordr3/events.py index 182c965..a323c8e 100644 --- a/ordr3/events.py +++ b/ordr3/events.py @@ -95,7 +95,8 @@ def notify_user(event): @subscriber(BeforeRender) def add_global(event): request = event["request"] - event.rendering_val["new_user_badge"] = request.repo.count_new_users() + if not request.is_xhr: + event.rendering_val["new_user_badge"] = request.repo.count_new_users() def emit(request, event): diff --git a/ordr3/schemas/orders.py b/ordr3/schemas/orders.py index 25f21d4..124ce81 100644 --- a/ordr3/schemas/orders.py +++ b/ordr3/schemas/orders.py @@ -63,7 +63,8 @@ class OrderItem(colander.Schema): widget=deform.widget.TextInputWidget( item_css_class="row", label_css_class="col-sm-3 col-form-label o3-form-copy", - css_class="col-sm-9", + css_class="col-sm-9 o3-vendor", + attributes={"data-url": "",}, # noqa: E231 ), ) package_size = colander.SchemaNode( @@ -192,4 +193,10 @@ class EditOrderSchema(CSRFSchema): label_css_class="col-sm-3 col-form-label", css_class="col-sm-9", ) + + # set the url for vendor check + vendor_url = request.resource_url(request.context.__parent__, "vendor") + vendor_widget = form["item"]["vendor"].widget + vendor_widget.attributes["data-url"] = vendor_url + return form diff --git a/ordr3/static/script.js b/ordr3/static/script.js index 30496ba..d20bdde 100644 --- a/ordr3/static/script.js +++ b/ordr3/static/script.js @@ -112,7 +112,6 @@ $(function() { $temp.val($(target).html()).select(); document.execCommand("copy"); $temp.remove(); - //$(target).fadeOut( 100 ).delay( 100 ).fadeIn( 100 ); $(target).fadeTo(100, 0).delay(100).fadeTo(100, 1); }); @@ -136,7 +135,6 @@ $(function() { // set status to multiple items var target = $(event.delegateTarget); var selects = $(".o3-data-edit-multiple select"); - console.log(target.attr("data-multi-value")) selects.val(target.attr("data-multi-value")) }); @@ -178,7 +176,40 @@ $(function() { }); - $('label.o3-form-copy').attr('title', 'copy to clipboard'); + $("label.o3-form-copy").attr("title", "copy to clipboard"); + + $(".o3-vendor").on("blur", function(event) { + // autocorrect vendor + var target = $(event.delegateTarget); + var input_value = target.val() + var url = target.attr("data-url") + $.post( url, { vendor: input_value }, function( data ) { + var corrected_name = data["name"]; + if (data["found"] && (corrected_name != input_value)) { + info = $('.o3-vendor-cancel') + if( info.length) { + info.find("a").text('"' + input_value + '"') + } else { + info = $(''); + info.addClass("o3-vendor-cancel col-sm-9 offset-sm-3 small text-secondary"); + info.html('Use "' + input_value + '" instead.'); + target.parent().append(info); + link = info.find("a"); + link.on("click", function() { + var link_text = link.text(); + var vendor = link_text.substring(1, link_text.length-1); + target.val(vendor) + info.remove() + return false; + }); + } + target.val(corrected_name); + } else { + var info = $('.o3-vendor-cancel'); + info.remove(); + } + }); + }); var infinite = new Waypoint.Infinite({ element: $('.infinite-container')[0] diff --git a/ordr3/templates/deform/textinput.pt b/ordr3/templates/deform/textinput.pt index af994e8..c05c0f5 100644 --- a/ordr3/templates/deform/textinput.pt +++ b/ordr3/templates/deform/textinput.pt @@ -9,7 +9,7 @@ tal:omit-tag=""> diff --git a/ordr3/templates/deform/textinput_disabled.pt b/ordr3/templates/deform/textinput_disabled.pt index 5166524..f1282ec 100644 --- a/ordr3/templates/deform/textinput_disabled.pt +++ b/ordr3/templates/deform/textinput_disabled.pt @@ -7,7 +7,7 @@ " tal:omit-tag=""> diff --git a/ordr3/templates/orders/view.jinja2 b/ordr3/templates/orders/view.jinja2 index 26b2eab..afe2a8b 100644 --- a/ordr3/templates/orders/view.jinja2 +++ b/ordr3/templates/orders/view.jinja2 @@ -36,10 +36,10 @@

 

{% if request.has_permission("reorder", context) %} - Reorder + Reorder Item {% endif %} {% if request.has_permission("delete", context) %} - Delete + Delete Order {% endif %} Go Back

diff --git a/ordr3/views/orders.py b/ordr3/views/orders.py index 28f5fa1..a08ecc7 100644 --- a/ordr3/views/orders.py +++ b/ordr3/views/orders.py @@ -238,6 +238,21 @@ def batch_edit_confirm(context, request): return HTTPFound(request.resource_url(context)) +@view_config( + context="ordr3:resources.OrderList", + name="vendor", + permission="add", + request_method="POST", + xhr=True, + require_csrf=False, + renderer="json", +) +def check_vendor_name(context, request): + vendor = request.POST.get("vendor", "") + result = services.check_vendor_name(request.repo, vendor) + return result._asdict() + + @view_config( context="ordr3:resources.Order", permission="view", @@ -251,8 +266,8 @@ def view_order(context, request): @view_config( context="ordr3:resources.Order", - permission="edit", name="edit", + permission="edit", request_method="GET", renderer="ordr3:templates/orders/edit.jinja2", ) @@ -292,8 +307,8 @@ def edit_order(context, request): @view_config( context="ordr3:resources.Order", - permission="edit", name="edit", + permission="edit", request_method="POST", renderer="ordr3:templates/orders/edit.jinja2", ) @@ -351,8 +366,8 @@ def do_edit_order(context, request): @view_config( context="ordr3:resources.Order", - permission="delete", name="delete", + permission="delete", request_method="GET", renderer="ordr3:templates/orders/delete.jinja2", ) @@ -362,8 +377,8 @@ def delete_order(context, request): @view_config( context="ordr3:resources.Order", - permission="delete", name="delete", + permission="delete", request_method="POST", ) def delete_confirmed(context, request): diff --git a/ordr3/views/root.py b/ordr3/views/root.py index 9cc1d76..47fa1de 100644 --- a/ordr3/views/root.py +++ b/ordr3/views/root.py @@ -9,8 +9,8 @@ from pyramid.view import ( from pyramid.httpexceptions import HTTPFound -@forbidden_view_config() -@notfound_view_config() +# @forbidden_view_config() +# @notfound_view_config() @view_config( context="ordr3:resources.Root", permission="view", )