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
					
				
					 3 changed files with 82 additions and 35 deletions
				
			
		| 
						 | 
				
			
			@ -209,32 +209,10 @@ class CustomersView(MasterView):
 | 
			
		|||
            f.set_renderer('groups', self.render_groups)
 | 
			
		||||
            f.set_readonly('groups')
 | 
			
		||||
 | 
			
		||||
    # TODO: something like this should be supported for default_email, default_phone
 | 
			
		||||
    # def after_edit(self, customer):
 | 
			
		||||
    #
 | 
			
		||||
    #     if not self.is_readonly():
 | 
			
		||||
    #         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 objectify(self, form, data):
 | 
			
		||||
        customer = super(CustomersView, self).objectify(form, data)
 | 
			
		||||
        customer = self.objectify_contact(customer, data)
 | 
			
		||||
        return customer
 | 
			
		||||
 | 
			
		||||
    def render_default_email(self, customer, field):
 | 
			
		||||
        if customer.emails:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2233,6 +2233,32 @@ class MasterView(View):
 | 
			
		|||
        obj = form.schema.objectify(data, context=form.model_instance)
 | 
			
		||||
        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):
 | 
			
		||||
        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
 | 
			
		||||
    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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue