Add logic for editing default phone/email in base master view
and refactor customer, vendor views to use it
This commit is contained in:
parent
630ffe0cf8
commit
f2a60f683c
|
@ -209,32 +209,10 @@ class CustomersView(MasterView):
|
||||||
f.set_renderer('groups', self.render_groups)
|
f.set_renderer('groups', self.render_groups)
|
||||||
f.set_readonly('groups')
|
f.set_readonly('groups')
|
||||||
|
|
||||||
# TODO: something like this should be supported for default_email, default_phone
|
def objectify(self, form, data):
|
||||||
# def after_edit(self, customer):
|
customer = super(CustomersView, self).objectify(form, data)
|
||||||
#
|
customer = self.objectify_contact(customer, data)
|
||||||
# if not self.is_readonly():
|
return customer
|
||||||
# address = self._deserialize()
|
|
||||||
# contact = self.parent.model
|
|
||||||
# if contact.emails:
|
|
||||||
# if address:
|
|
||||||
# email = contact.emails[0]
|
|
||||||
# email.address = address
|
|
||||||
# else:
|
|
||||||
# contact.emails.pop(0)
|
|
||||||
# elif address:
|
|
||||||
# email = contact.add_email_address(address)
|
|
||||||
#
|
|
||||||
# if not self.is_readonly():
|
|
||||||
# number = self._deserialize()
|
|
||||||
# contact = self.parent.model
|
|
||||||
# if contact.phones:
|
|
||||||
# if number:
|
|
||||||
# phone = contact.phones[0]
|
|
||||||
# phone.number = number
|
|
||||||
# else:
|
|
||||||
# contact.phones.pop(0)
|
|
||||||
# elif number:
|
|
||||||
# phone = contact.add_phone_number(number)
|
|
||||||
|
|
||||||
def render_default_email(self, customer, field):
|
def render_default_email(self, customer, field):
|
||||||
if customer.emails:
|
if customer.emails:
|
||||||
|
|
|
@ -2233,6 +2233,32 @@ class MasterView(View):
|
||||||
obj = form.schema.objectify(data, context=form.model_instance)
|
obj = form.schema.objectify(data, context=form.model_instance)
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
def objectify_contact(self, contact, data):
|
||||||
|
|
||||||
|
if 'default_email' in data:
|
||||||
|
address = data['default_email']
|
||||||
|
if contact.emails:
|
||||||
|
if address:
|
||||||
|
email = contact.emails[0]
|
||||||
|
email.address = address
|
||||||
|
else:
|
||||||
|
contact.emails.pop(0)
|
||||||
|
elif address:
|
||||||
|
contact.add_email_address(address)
|
||||||
|
|
||||||
|
if 'default_phone' in data:
|
||||||
|
number = data['default_phone']
|
||||||
|
if contact.phones:
|
||||||
|
if number:
|
||||||
|
phone = contact.phones[0]
|
||||||
|
phone.number = number
|
||||||
|
else:
|
||||||
|
contact.phones.pop(0)
|
||||||
|
elif number:
|
||||||
|
contact.add_phone_number(number)
|
||||||
|
|
||||||
|
return contact
|
||||||
|
|
||||||
def save_form(self, form):
|
def save_form(self, form):
|
||||||
form.save()
|
form.save()
|
||||||
|
|
||||||
|
|
61
tailbone/views/vendors/core.py
vendored
61
tailbone/views/vendors/core.py
vendored
|
@ -42,6 +42,12 @@ class VendorsView(MasterView):
|
||||||
model_class = model.Vendor
|
model_class = model.Vendor
|
||||||
has_versions = True
|
has_versions = True
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
'id': "ID",
|
||||||
|
'default_phone': "Phone Number",
|
||||||
|
'default_email': "Default Email",
|
||||||
|
}
|
||||||
|
|
||||||
grid_columns = [
|
grid_columns = [
|
||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
|
@ -56,8 +62,9 @@ class VendorsView(MasterView):
|
||||||
'special_discount',
|
'special_discount',
|
||||||
'lead_time_days',
|
'lead_time_days',
|
||||||
'order_interval_days',
|
'order_interval_days',
|
||||||
'phone',
|
'default_phone',
|
||||||
'email',
|
'default_email',
|
||||||
|
'orders_email',
|
||||||
'contact',
|
'contact',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -68,7 +75,6 @@ class VendorsView(MasterView):
|
||||||
g.filters['name'].default_verb = 'contains'
|
g.filters['name'].default_verb = 'contains'
|
||||||
g.set_sort_defaults('name')
|
g.set_sort_defaults('name')
|
||||||
|
|
||||||
g.set_label('id', "ID")
|
|
||||||
g.set_label('phone', "Phone Number")
|
g.set_label('phone', "Phone Number")
|
||||||
g.set_label('email', "Email Address")
|
g.set_label('email', "Email Address")
|
||||||
|
|
||||||
|
@ -77,22 +83,59 @@ class VendorsView(MasterView):
|
||||||
|
|
||||||
def configure_form(self, f):
|
def configure_form(self, f):
|
||||||
super(VendorsView, self).configure_form(f)
|
super(VendorsView, self).configure_form(f)
|
||||||
|
vendor = f.model_instance
|
||||||
f.set_label('id', "ID")
|
|
||||||
|
|
||||||
f.set_label('lead_time_days', "Lead Time in Days")
|
f.set_label('lead_time_days', "Lead Time in Days")
|
||||||
|
|
||||||
f.set_label('order_interval', "Order Interval in Days")
|
f.set_label('order_interval', "Order Interval in Days")
|
||||||
|
|
||||||
f.set_readonly('phone')
|
# default_phone
|
||||||
f.set_label('phone', "Phone Number")
|
f.set_renderer('default_phone', self.render_default_phone)
|
||||||
|
if not self.creating and vendor.phones:
|
||||||
|
f.set_default('default_phone', vendor.phones[0].number)
|
||||||
|
|
||||||
f.set_readonly('email')
|
# default_email
|
||||||
f.set_label('email', "Email Address")
|
f.set_renderer('default_email', self.render_default_email)
|
||||||
|
if not self.creating and vendor.emails:
|
||||||
|
f.set_default('default_email', vendor.emails[0].address)
|
||||||
|
|
||||||
|
# orders_email
|
||||||
|
f.set_renderer('orders_email', self.render_orders_email)
|
||||||
|
if not self.creating and vendor.emails:
|
||||||
|
f.set_default('orders_email', vendor.get_email_address(type_='Orders') or '')
|
||||||
|
|
||||||
f.set_readonly('contact')
|
f.set_readonly('contact')
|
||||||
f.set_renderer('contact', self.render_contact)
|
f.set_renderer('contact', self.render_contact)
|
||||||
|
|
||||||
|
def objectify(self, form, data):
|
||||||
|
vendor = super(VendorsView, self).objectify(form, data)
|
||||||
|
vendor = self.objectify_contact(vendor, data)
|
||||||
|
|
||||||
|
if 'orders_email' in data:
|
||||||
|
address = data['orders_email']
|
||||||
|
email = vendor.get_email(type_='Orders')
|
||||||
|
if address:
|
||||||
|
if email:
|
||||||
|
if email.address != address:
|
||||||
|
email.address = address
|
||||||
|
else:
|
||||||
|
vendor.add_email_address(address, type='Orders')
|
||||||
|
elif email:
|
||||||
|
vendor.emails.remove(email)
|
||||||
|
|
||||||
|
return vendor
|
||||||
|
|
||||||
|
def render_default_email(self, vendor, field):
|
||||||
|
if vendor.emails:
|
||||||
|
return vendor.emails[0].address
|
||||||
|
|
||||||
|
def render_orders_email(self, vendor, field):
|
||||||
|
return vendor.get_email_address(type_='Orders')
|
||||||
|
|
||||||
|
def render_default_phone(self, vendor, field):
|
||||||
|
if vendor.phones:
|
||||||
|
return vendor.phones[0].number
|
||||||
|
|
||||||
def render_contact(self, vendor, field):
|
def render_contact(self, vendor, field):
|
||||||
person = vendor.contact
|
person = vendor.contact
|
||||||
if not person:
|
if not person:
|
||||||
|
|
Loading…
Reference in a new issue