def WSObtenerCCBB(self):
        if not self:
            raise UserError(
                _("You need to select a picking to calculate the estimated shipping cost."
                  ))

        config = self.env['autoradio.config'].search([('soap_url', '!=', None)
                                                      ])
        config = self.env['autoradio.config'].browse(config.id)

        client, history = config.create_client()
        if client:
            try:
                header = config.getWSRequestHeader(client)

                obtenerCCBB = {
                    'LoginCliente': config.soap_persona_ordena,
                    'RefEnvio': self.carrier_tracking_ref
                }

                res = client.service.WSObtenerCCBB(**obtenerCCBB,
                                                   _soapheaders=[header])

                if res:
                    print("{}".format(res))

            except Exception as e:
                raise AccessError(_("Access error message: {}".format(e)))
        else:
            raise AccessError(_("Not possible to establish a client."))
    def WSObtenerDatosEtiqueta(self):
        if not self:
            raise UserError(
                _("You need to select a picking to calculate the estimated shipping cost."
                  ))

        config = self.env['autoradio.config'].search([('soap_url', '!=', None)
                                                      ])
        config = self.env['autoradio.config'].browse(config.id)

        client, history = config.create_client()
        if client:
            try:
                header = config.getWSRequestHeader(client)

                obtenerDatosEtiqueta = {
                    'LoginCliente': config.soap_persona_ordena,
                    'RefEnvio': self.carrier_tracking_ref
                }

                res = client.service.WSObtenerDatosEtiqueta(
                    **obtenerDatosEtiqueta, _soapheaders=[header])

                if res:
                    if history.last_received["envelope"][0][0][0] is not None:
                        response = history.last_received["envelope"][0][0][0]
                    else:
                        raise AccessError(
                            _("No existen datos para este envío."))

                    response_content = etree.tostring(response,
                                                      encoding="unicode",
                                                      pretty_print=True)
                    root = etree.fromstring(response_content)
                    datosEtiqueta = root.findall('.//datosEtiqueta')
                    if not datosEtiqueta:
                        raise AccessError(
                            _("No existen datos para este envío."))
                    tag_dict = self.elem2dict(datosEtiqueta[0])
                    return tag_dict

            except Exception as e:
                raise AccessError(_("Access error message: {}".format(e)))
        else:
            raise AccessError(_("Not possible to establish a client."))
    def WSBorrarEnvio(self):
        if not self:
            raise UserError(
                _("You need to select a picking to calculate the estimated shipping cost."
                  ))

        config = self.env['autoradio.config'].search([('soap_url', '!=', None)
                                                      ])
        config = self.env['autoradio.config'].browse(config.id)

        client, history = config.create_client()
        if client:
            try:
                header = config.getWSRequestHeader(client)

                borrarEnvio = {
                    'RefEnvio': self.carrier_tracking_ref,
                    'LoginCliente': config.soap_persona_ordena,
                    'CodCliente': config.soap_client_code,
                    'CodCentro': config.soap_center
                }

                res = client.service.WSBorrarEnvio(**borrarEnvio,
                                                   _soapheaders=[header])

                if res and res[0] == 1:
                    self.update({
                        'carrier_tracking_ref': False,
                        'autoradio_ccbb': False,
                        'autoradio_channelling': False,
                        'autoradio_ccbb_type': False,
                        'state': 'not_sent'
                    })
                    self._compute_carrier_id()

            except Exception as e:
                raise AccessError(_("Access error message: {}".format(e)))
        else:
            raise AccessError(_("Not possible to establish a client."))
    def WSEditarEnvioTAR(self):
        if not self:
            raise UserError(
                _("You need to select a picking to calculate the estimated shipping cost."
                  ))

        config = self.env['autoradio.config'].search([('soap_url', '!=', None)
                                                      ])
        config = self.env['autoradio.config'].browse(config.id)

        client, history = config.create_client()
        if client:
            try:
                header = config.getWSRequestHeader(client)

                editarEnvioTAR = {
                    'RefEnvio':
                    self.carrier_tracking_ref,
                    'LoginCliente':
                    config.soap_persona_ordena,
                    'CodCliente':
                    config.soap_client_code,
                    'CodCentro':
                    config.soap_center,
                    'Fecha':
                    self.delivery_date.strftime('%Y/%m/%d %H:%M'),
                    'CodServicio':
                    self.carrier_id.autoradio_service_code,
                    # Sender
                    'Remitente':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.name,
                    'CifRemi':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.vat,
                    'DireccionRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **"{}, {}".format(self.company_id.street, self.company_id.street2),
                    'PoblacionRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.city,
                    'CodPosRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.zip.zfill(5),
                    'CodPosPorRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **000,
                    'PaisRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **'ESP' if self.company_id.country_id.code == 'ES' else 'POR' if self.company_id.country_id.code == 'PT' else False,
                    'MailRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.email or '',
                    'TlfRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **self.company_id.phone or '',
                    'MovilRem':
                    '',  # Si se envía un string vacío lo rellena Autoradio de la ficha de cliente. **'',
                    # Recipient
                    'Destinatario':
                    self.partner_id.name,
                    'CifDes':
                    self.partner_id.vat or '',
                    'DireccionDes':
                    "{}, {}".format(self.partner_id.street or '',
                                    self.partner_id.street2 or ''),
                    'PoblacionDes':
                    self.partner_id.city,
                    'CodPosDes':
                    self.partner_id.zip.zfill(5)
                    if self.partner_id.country_id.code == 'ES' else
                    self.partner_id.zip.split("-")[0].zfill(0)
                    if self.partner_id.country_id.code == 'PT' else False,
                    'CodPosPorDes':
                    '000' if self.partner_id.country_id.code == 'ES' else
                    self.partner_id.zip.split("-")[1].zfill(0)
                    if self.partner_id.country_id.code == 'PT' else False,
                    'PaisDes':
                    'ESP' if self.partner_id.country_id.code == 'ES' else 'POR'
                    if self.partner_id.country_id.code == 'PT' else False,
                    'MailDes':
                    self.partner_id.email or '',
                    'TlfDes':
                    self.partner_id.phone or '',
                    'MovilDes':
                    self.partner_id.mobile or '',
                    'ContactoDes':
                    self.partner_id.name,
                    # Other data
                    'Bultos':
                    self.number_of_packages,
                    'Kilos':
                    self.shipping_weight,
                    'TipoPorte':
                    self.autoradio_type,  # P for paid, D for debt
                    'Reembolso':
                    self.autoradio_refund_amount,  # Amount in EUR
                    'TipoComision':
                    self.autoradio_refund_type,  # P for paid, D for debt
                    'Obser':
                    self.autoradio_obs
                    if self.autoradio_obs else '',  # Comments
                    'AmpliaObser':
                    self.autoradio_obs_extra
                    if self.autoradio_obs_extra else '',
                    'RefCliente':
                    self.
                    autoradio_picking_reference,  # ref client - changed from picking.partner_id.ref 
                    'InstOp':
                    self.autoradio_delivery_instructions,
                    'PersonaOrdena':
                    config.soap_persona_ordena,
                    'FlagEnviarHoy':
                    1 if self.autoradio_close_shipping
                    or self.autoradio_send_today else 0,  # send today = 1.
                    'Cierre':
                    1 if self.autoradio_close_shipping else
                    0,  # 0 or 1. Cerrar envío.
                    'FormaCobroReembolso':
                    self.autoradio_cash_on_delivery_payment
                    if self.autoradio_cash_on_delivery_payment else
                    9,  # 9 - Efectivo, 10 - Cheque/Pagaré, 11 - Cheque a la vista, 12- Indiferente.
                    'Cheque1':
                    self.autoradio_check_1_amount
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    0.0,  # Se rellena si FormaCobroReembolso es 10
                    'Fecha1':
                    self.autoradio_check_1_date.strftime('%Y/%m/%d %H:%M')
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    '',  # Se rellena si FormaCobroReembolso es 10
                    'Cheque2':
                    self.autoradio_check_2_amount
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    0.0,  # Se rellena si FormaCobroReembolso es 10
                    'Fecha2':
                    self.autoradio_check_2_date.strftime('%Y/%m/%d %H:%M')
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    '',  # Se rellena si FormaCobroReembolso es 10
                    'Cheque3':
                    self.autoradio_check_3_amount
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    0.0,  # Se rellena si FormaCobroReembolso es 10
                    'Fecha3':
                    self.autoradio_check_3_date.strftime('%Y/%m/%d %H:%M')
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    '',  # Se rellena si FormaCobroReembolso es 10
                    'Cheque4':
                    self.autoradio_check_4_amount
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    0.0,  # Se rellena si FormaCobroReembolso es 10
                    'Fecha4':
                    self.autoradio_check_4_date.strftime('%Y/%m/%d %H:%M')
                    if self.autoradio_cash_on_delivery_payment in [10] else
                    '',  # Se rellena si FormaCobroReembolso es 10
                    'Desembolso':
                    self.autoradio_payment,  # Importe de los portes?
                    'Referencia':
                    self.name
                }

                res = client.service.WSEditarEnvioTAR(**editarEnvioTAR,
                                                      _soapheaders=[header])

                if res:
                    self.update({
                        'autoradio_ccbb': res[1],
                        'autoradio_channelling': res[2],
                        'autoradio_ccbb_type': res[3],
                        'state': 'requested'
                    })
                    self._compute_carrier_id()

            except Exception as e:
                raise AccessError(_("Access error message: {}".format(e)))
        else:
            raise AccessError(_("Not possible to establish a client."))