CPI Ordering System (the old version)
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 

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