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.
186 lines
5.1 KiB
186 lines
5.1 KiB
import colander |
|
import deform |
|
|
|
from ordr2.models import Category, OrderStatus |
|
|
|
from . import CSRFSchema, MoneyInputSchema |
|
|
|
CATEGORIES = [(c.name, c.value.capitalize()) for c in Category] |
|
STATI = [(s.name, s.value.capitalize()) for s in OrderStatus] |
|
|
|
# schema for user registration |
|
|
|
class ConsumableSchema(CSRFSchema): |
|
''' edit or add consumable ''' |
|
|
|
cas_description = colander.SchemaNode( |
|
colander.String() |
|
) |
|
category = colander.SchemaNode( |
|
colander.String(), |
|
widget=deform.widget.SelectWidget(values=CATEGORIES) |
|
) |
|
catalog_nr = colander.SchemaNode( |
|
colander.String() |
|
) |
|
vendor = colander.SchemaNode( |
|
colander.String() |
|
) |
|
package_size = colander.SchemaNode( |
|
colander.String() |
|
) |
|
unit_price = MoneyInputSchema( |
|
readonly=False |
|
) |
|
comment = colander.SchemaNode( |
|
colander.String(), |
|
widget=deform.widget.TextAreaWidget(rows=5), |
|
missing='' |
|
) |
|
|
|
@classmethod |
|
def as_form(cls, request, **override): |
|
is_new_consumable = override.pop('is_new_consumable', False) |
|
if is_new_consumable: |
|
settings = { |
|
'buttons': ( |
|
deform.Button(name='save', title='Add Consumable'), |
|
deform.Button(name='cancel', title='Cancel') |
|
), |
|
'css_class': 'form-horizontal', |
|
} |
|
else: |
|
settings = { |
|
'buttons': ( |
|
deform.Button(name='save', title='Save changes'), |
|
deform.Button( |
|
name='delete', |
|
title='Delete Consumable', |
|
css_class='btn-danger' |
|
), |
|
deform.Button(name='cancel', title='Cancel') |
|
), |
|
'css_class': 'form-horizontal', |
|
} |
|
settings.update(override) |
|
return super().as_form(request, **settings) |
|
|
|
|
|
class OrderInformation(colander.Schema): |
|
|
|
status = colander.SchemaNode( |
|
colander.String(), |
|
widget=deform.widget.SelectWidget(values=STATI) |
|
) |
|
|
|
|
|
class OrderItem(colander.Schema): |
|
|
|
cas_description = colander.SchemaNode( |
|
colander.String() |
|
) |
|
category = colander.SchemaNode( |
|
colander.String(), |
|
widget=deform.widget.SelectWidget(values=CATEGORIES) |
|
) |
|
catalog_nr = colander.SchemaNode( |
|
colander.String() |
|
) |
|
vendor = colander.SchemaNode( |
|
colander.String() |
|
) |
|
package_size = colander.SchemaNode( |
|
colander.String() |
|
) |
|
|
|
|
|
class OrderPricing(colander.Schema): |
|
|
|
unit_price = MoneyInputSchema( |
|
readonly=False |
|
) |
|
quantity = colander.SchemaNode( |
|
colander.Integer(), |
|
validator=colander.Range(min=1), |
|
widget=deform.widget.TextInputWidget( |
|
css_class='number' |
|
), |
|
default=1 |
|
) |
|
total_price = MoneyInputSchema( |
|
readonly=True |
|
) |
|
|
|
|
|
class OrderOptionals(colander.Schema): |
|
|
|
account = colander.SchemaNode( |
|
colander.String(), |
|
missing='' |
|
) |
|
comment = colander.SchemaNode( |
|
colander.String(), |
|
widget=deform.widget.TextAreaWidget(rows=5), |
|
missing='' |
|
) |
|
|
|
|
|
class NewOrderSchema(CSRFSchema): |
|
''' edit or add an order ''' |
|
|
|
item_information = OrderItem() |
|
pricing = OrderPricing() |
|
optional_information = OrderOptionals() |
|
|
|
@classmethod |
|
def as_form(cls, request, **override): |
|
settings = { |
|
'buttons': ( |
|
deform.Button(name='save', title='Place Order'), |
|
deform.Button(name='cancel', title='Cancel') |
|
), |
|
'css_class': 'form-horizontal' |
|
} |
|
settings.update(override) |
|
return super().as_form(request, **settings) |
|
|
|
|
|
class EditOrderSchema(CSRFSchema): |
|
''' edit or add an order ''' |
|
|
|
order_information = OrderInformation( |
|
widget=deform.widget.MappingWidget( |
|
template='order_info_mapping.pt' |
|
) |
|
) |
|
item_information = OrderItem() |
|
pricing = OrderPricing() |
|
optional_information = OrderOptionals() |
|
|
|
@classmethod |
|
def as_form(cls, request, **override): |
|
settings = { |
|
'buttons': ( |
|
deform.Button(name='save', title='Edit Order'), |
|
deform.Button( |
|
name='reorder', |
|
title='Reorder', |
|
css_class='btn-success' |
|
), |
|
deform.Button( |
|
name='delete', |
|
title='Delete Order', |
|
css_class='btn-danger' |
|
), |
|
deform.Button(name='cancel', title='Cancel') |
|
), |
|
'css_class': 'form-horizontal' |
|
} |
|
settings.update(override) |
|
form = super().as_form(request, **settings) |
|
if not 'role:purchaser' in request.user.role_principals: |
|
form['order_information']['status'].widget = \ |
|
deform.widget.TextInputWidget( |
|
template='textinput_disabled.pt' |
|
) |
|
return form
|
|
|