def fedex_address_validation(self, cr, uid, ids, context=None): partneraddr_obj = self.pool.get('res.partner') shippingfedex_obj = self.pool.get('shipping.fedex') status = None shippingfedex_id = shippingfedex_obj.search(cr, uid, [('active', '=', True)]) for sales_order in self.browse(cr, uid, ids): partner_id = sales_order.partner_shipping_id if not shippingfedex_id: raise osv.except_osv(_('Error'), _('Default Fedex settings not defined')) else: shippingfedex_id = shippingfedex_id[0] shippingfedex_ptr = shippingfedex_obj.browse( cr, uid, shippingfedex_id) account_no = shippingfedex_ptr.account_no key = shippingfedex_ptr.key password = shippingfedex_ptr.password meter_no = shippingfedex_ptr.meter_no is_test = shippingfedex_ptr.test CONFIG_OBJ = FedexConfig(key=key, password=password, account_number=account_no, meter_number=meter_no, use_test_server=is_test) connection = FedexAddressValidationRequest(CONFIG_OBJ) # The AddressValidationOptions are created with default values of None, which # will cause WSDL validation errors. To make things work, each option needs to # be explicitly set or deleted. ### Get Address from sale order cust_name = partner_id.name or '' cust_id = partner_id.id or '' street = partner_id.street or '' street2 = partner_id.street2 or '' city = partner_id.city or '' postal_code = partner_id.zip or '' phone = partner_id.phone or '' email = partner_id.email or '' receipient = Address(cust_name or cust_id, street, city, partner_id.state_id.code or '', postal_code, partner_id.country_id.code, street2 or '', phone or '', email or '', partner_id.company_id.name or '') ## Set the flags we want to True (or a value). connection.RequestTimestamp = datetime.datetime.now().isoformat() #connection.AddressValidationOptions.CheckResidentialStatus = True #connection.AddressValidationOptions.VerifyAddresses = True #connection.AddressValidationOptions.RecognizeAlternateCityNames = True #connection.AddressValidationOptions.MaximumNumberOfMatches = 3 ## Delete the flags we don't want. #del connection.AddressValidationOptions.ConvertToUpperCase #del connection.AddressValidationOptions.ReturnParsedElements ## *Accuracy fields can be TIGHT, EXACT, MEDIUM, or LOOSE. Or deleted. #connection.AddressValidationOptions.StreetAccuracy = 'LOOSE' #del connection.AddressValidationOptions.DirectionalAccuracy #del connection.AddressValidationOptions.CompanyNameAccuracy ## Create some addresses to validate ### Shipper cust_address = sales_order.company_id if not cust_address: raise osv.except_osv( _('Error'), _('Shop Address not defined!'), ) shipper = Address(cust_address.name or cust_address.id, cust_address.street, cust_address.city, cust_address.state_id.code or '', cust_address.zip, cust_address.country_id.code, cust_address.street2 or '', cust_address.phone or '', cust_address.email, cust_address.name) source_address = connection.create_wsdl_object_of_type( 'AddressToValidate') source_address.Address.StreetLines = shipper.address1 # ['320 S Cedros', '#200'] source_address.Address.City = shipper.city # 'Solana Beach' source_address.Address.StateOrProvinceCode = shipper.state_code # 'CA' source_address.Address.PostalCode = shipper.zip # 92075 source_address.Address.CountryCode = shipper.country_code # 'US' connection.add_address(source_address) sale_order_destination_address = connection.create_wsdl_object_of_type( 'AddressToValidate') #sale_order_destination_address.CompanyName = receipient.company_name sale_order_destination_address.Address.StreetLines = receipient.address1 #['155 Old Greenville Hwy', 'Suite 103'] sale_order_destination_address.Address.City = receipient.city #'Clemson' sale_order_destination_address.Address.StateOrProvinceCode = receipient.state_code #'SC' sale_order_destination_address.Address.PostalCode = receipient.zip #29631 sale_order_destination_address.Address.CountryCode = receipient.country_code #'US' sale_order_destination_address.Address.Residential = False connection.add_address(sale_order_destination_address) try: ## Send the request and print the response connection.send_request() sales_order.is_test = True self.write(cr, uid, ids, { 'is_test': True, 'valid_note': 'Address is Valid' }, context) cr.commit() except Exception, e: sales_order.invalid_addr = False self.write(cr, uid, ids, { 'is_test': False, 'valid_note': 'Address is InValid' }, context) cr.commit() raise osv.except_osv( _('Error'), _('Invalid address, Please fill correct shipping address')) results = len(connection.response.AddressResults)