|
|
|
@ -1,12 +1,14 @@
@@ -1,12 +1,14 @@
|
|
|
|
|
import deform |
|
|
|
|
|
|
|
|
|
from datetime import datetime |
|
|
|
|
|
|
|
|
|
from pyramid.httpexceptions import HTTPFound |
|
|
|
|
from pyramid.renderers import render |
|
|
|
|
from pyramid.view import view_config |
|
|
|
|
|
|
|
|
|
from ordr2.events import OrderStatusChange |
|
|
|
|
from ordr2.models import Category, Order, OrderStatus, User |
|
|
|
|
from ordr2.schemas.orders import ConsumableSchema |
|
|
|
|
from ordr2.schemas.orders import NewOrderSchema, EditOrderSchema |
|
|
|
|
|
|
|
|
|
from . import update_column_display |
|
|
|
|
|
|
|
|
@ -34,7 +36,7 @@ def change_in_order_status(request, order, old):
@@ -34,7 +36,7 @@ def change_in_order_status(request, order, old):
|
|
|
|
|
@view_config( |
|
|
|
|
context='ordr2:resources.OrderList', |
|
|
|
|
permission='view', |
|
|
|
|
renderer='ordr2:templates/orders/order_list.jinja2' |
|
|
|
|
renderer='ordr2:templates/orders/list.jinja2' |
|
|
|
|
) |
|
|
|
|
def order_list(context, request): |
|
|
|
|
''' display the order list ''' |
|
|
|
@ -174,11 +176,178 @@ def order_delete_form(context, request):
@@ -174,11 +176,178 @@ def order_delete_form(context, request):
|
|
|
|
|
return {'orders': [context.model]} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@view_config( |
|
|
|
|
context='ordr2:resources.OrderResource', |
|
|
|
|
name='edit', |
|
|
|
|
permission='edit', |
|
|
|
|
request_method='GET', |
|
|
|
|
renderer='ordr2:templates/orders/edit.jinja2' |
|
|
|
|
) |
|
|
|
|
def order_edit_form(context, request): |
|
|
|
|
form = EditOrderSchema.as_form(request) |
|
|
|
|
order = context.model |
|
|
|
|
info = { |
|
|
|
|
'status': order.status.name |
|
|
|
|
} |
|
|
|
|
item = { |
|
|
|
|
'cas_description': order.cas_description, |
|
|
|
|
'category': order.category.name, |
|
|
|
|
'vendor': order.vendor, |
|
|
|
|
'catalog_nr': order.catalog_nr, |
|
|
|
|
'package_size': order.package_size |
|
|
|
|
} |
|
|
|
|
pricing = { |
|
|
|
|
'unit_price': { |
|
|
|
|
'amount': '%.2f' % order.unit_price, |
|
|
|
|
'currency': order.currency |
|
|
|
|
}, |
|
|
|
|
'quantity': order.amount, |
|
|
|
|
'total_price': { |
|
|
|
|
'amount': '%.2f' % order.total_price, |
|
|
|
|
'currency': order.currency |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
optional = { |
|
|
|
|
'account': order.account, |
|
|
|
|
'comment': order.comment |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
form_data = { |
|
|
|
|
'order_information': info, |
|
|
|
|
'item_information': item, |
|
|
|
|
'pricing': pricing, |
|
|
|
|
'optional_information': optional |
|
|
|
|
} |
|
|
|
|
form.set_appstruct(form_data) |
|
|
|
|
return {'form': form} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@view_config( |
|
|
|
|
context='ordr2:resources.OrderResource', |
|
|
|
|
name='edit', |
|
|
|
|
permission='edit', |
|
|
|
|
request_method='POST', |
|
|
|
|
renderer='ordr2:templates/orders/edit.jinja2' |
|
|
|
|
) |
|
|
|
|
def order_edit_form_processing(context, request): |
|
|
|
|
''' process the consumable edit form ''' |
|
|
|
|
|
|
|
|
|
form = EditOrderSchema.as_form(request) |
|
|
|
|
data = request.POST.items() |
|
|
|
|
|
|
|
|
|
if 'save' in request.POST: |
|
|
|
|
try: |
|
|
|
|
appstruct = form.validate(data) |
|
|
|
|
except deform.ValidationFailure as e: |
|
|
|
|
return {'form': form} |
|
|
|
|
|
|
|
|
|
# form validation sucessful, change order |
|
|
|
|
order = context.model |
|
|
|
|
info = appstruct['order_information'] |
|
|
|
|
item = appstruct['item_information'] |
|
|
|
|
pricing = appstruct['pricing'] |
|
|
|
|
optional = appstruct['optional_information'] |
|
|
|
|
old_status = order.status |
|
|
|
|
|
|
|
|
|
order.status = OrderStatus[info['status']] |
|
|
|
|
|
|
|
|
|
order.cas_description = item['cas_description'] |
|
|
|
|
order.category = item['category'] |
|
|
|
|
order.vendor = item['vendor'] |
|
|
|
|
order.catalog_nr = item['catalog_nr'] |
|
|
|
|
order.package_size = item['package_size'] |
|
|
|
|
|
|
|
|
|
order.unit_price = pricing['unit_price']['amount'] |
|
|
|
|
order.currency = pricing['unit_price']['currency'] |
|
|
|
|
order.amount = pricing['quantity'] |
|
|
|
|
order.total_price = order.unit_price * order.amount |
|
|
|
|
|
|
|
|
|
order.account = optional['account'] |
|
|
|
|
order.comment = optional['comment'] |
|
|
|
|
|
|
|
|
|
if old_status != order.status: |
|
|
|
|
change_in_order_status(request, order, old_status) |
|
|
|
|
|
|
|
|
|
if order.status == OrderStatus.APPROVAL: |
|
|
|
|
order.approval_date = datetime.utcnow() |
|
|
|
|
order.approval_by = request.user.user_name |
|
|
|
|
if order.status == OrderStatus.ORDERED: |
|
|
|
|
order.ordered_date = datetime.utcnow() |
|
|
|
|
order.ordered_by = request.user.user_name |
|
|
|
|
if order.status == OrderStatus.COMPLETED: |
|
|
|
|
order.completed_date = datetime.utcnow() |
|
|
|
|
order.completed_by = request.user.user_name |
|
|
|
|
|
|
|
|
|
msg = 'Order <em>{!s}</em> updated.'.format(context.model) |
|
|
|
|
request.flash('success', msg) |
|
|
|
|
|
|
|
|
|
elif 'delete' in request.POST and context.model: |
|
|
|
|
return HTTPFound(request.resource_url(context, 'delete')) |
|
|
|
|
|
|
|
|
|
return HTTPFound(context.__parent__.url()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@view_config( |
|
|
|
|
context='ordr2:resources.OrderList', |
|
|
|
|
name='new', |
|
|
|
|
permission='create', |
|
|
|
|
request_method='GET', |
|
|
|
|
renderer='ordr2:templates/orders/new.jinja2' |
|
|
|
|
) |
|
|
|
|
def order_new_form(context, request): |
|
|
|
|
form = NewOrderSchema.as_form(request) |
|
|
|
|
return {'form': form} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@view_config( |
|
|
|
|
context='ordr2:resources.OrderList', |
|
|
|
|
name='new', |
|
|
|
|
permission='create', |
|
|
|
|
request_method='POST', |
|
|
|
|
renderer='ordr2:templates/orders/new.jinja2' |
|
|
|
|
) |
|
|
|
|
def order_new_form_processing(context, request): |
|
|
|
|
''' process the consumable edit form ''' |
|
|
|
|
|
|
|
|
|
form = NewOrderSchema.as_form(request) |
|
|
|
|
data = request.POST.items() |
|
|
|
|
|
|
|
|
|
if 'save' in request.POST: |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
appstruct = form.validate(data) |
|
|
|
|
except deform.ValidationFailure as e: |
|
|
|
|
return {'form': form} |
|
|
|
|
|
|
|
|
|
# form validation sucessful, change order |
|
|
|
|
order = Order( |
|
|
|
|
status=OrderStatus.OPEN, |
|
|
|
|
created_by=request.user.user_name |
|
|
|
|
) |
|
|
|
|
item = appstruct['item_information'] |
|
|
|
|
pricing = appstruct['pricing'] |
|
|
|
|
optional = appstruct['optional_information'] |
|
|
|
|
|
|
|
|
|
order.cas_description = item['cas_description'] |
|
|
|
|
order.category = item['category'] |
|
|
|
|
order.vendor = item['vendor'] |
|
|
|
|
order.catalog_nr = item['catalog_nr'] |
|
|
|
|
order.package_size = item['package_size'] |
|
|
|
|
|
|
|
|
|
order.unit_price = pricing['unit_price']['amount'] |
|
|
|
|
order.currency = pricing['unit_price']['currency'] |
|
|
|
|
order.amount = pricing['quantity'] |
|
|
|
|
order.total_price = order.unit_price * order.amount |
|
|
|
|
|
|
|
|
|
order.account = optional['account'] |
|
|
|
|
order.comment = optional['comment'] |
|
|
|
|
|
|
|
|
|
request.dbsession.add(order) |
|
|
|
|
|
|
|
|
|
msg = 'Order <em>{!s}</em> created.'.format(context.model) |
|
|
|
|
request.flash('success', msg) |
|
|
|
|
|
|
|
|
|
return HTTPFound(context.url()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|