コード例 #1
0
ファイル: sale.py プロジェクト: BMA-Projects/Dard
    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)