Add logic for editing default phone/email in base master view

and refactor customer, vendor views to use it
This commit is contained in:
Lance Edgar 2018-02-22 12:27:08 -06:00
parent 630ffe0cf8
commit f2a60f683c
3 changed files with 82 additions and 35 deletions

View file

@ -42,6 +42,12 @@ class VendorsView(MasterView):
model_class = model.Vendor
has_versions = True
labels = {
'id': "ID",
'default_phone': "Phone Number",
'default_email': "Default Email",
}
grid_columns = [
'id',
'name',
@ -56,8 +62,9 @@ class VendorsView(MasterView):
'special_discount',
'lead_time_days',
'order_interval_days',
'phone',
'email',
'default_phone',
'default_email',
'orders_email',
'contact',
]
@ -68,7 +75,6 @@ class VendorsView(MasterView):
g.filters['name'].default_verb = 'contains'
g.set_sort_defaults('name')
g.set_label('id', "ID")
g.set_label('phone', "Phone Number")
g.set_label('email', "Email Address")
@ -77,22 +83,59 @@ class VendorsView(MasterView):
def configure_form(self, f):
super(VendorsView, self).configure_form(f)
f.set_label('id', "ID")
vendor = f.model_instance
f.set_label('lead_time_days', "Lead Time in Days")
f.set_label('order_interval', "Order Interval in Days")
f.set_readonly('phone')
f.set_label('phone', "Phone Number")
# default_phone
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')
f.set_label('email', "Email Address")
# default_email
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_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):
person = vendor.contact
if not person: