Campos de Woocommerce boleta-factura

A continuación se visualiza el código que se debe copiar y pegar en el Code Snippets para que el cliente pueda seleccionar Boleta o Factura en Woocommerce.

En caso de no tener descargado el plugin, lo puede descargar desde la siguiente pagina Code Snippets.

 

Este código agrega los siguientes campos en el checkout:

  • Tipo de documento (boleta/factura)
  • RUT
  • Razón social
  • Giro
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields($fields)
{
  echo '<style> #billing_rzn_social.hidden { display:none; }</style>';
  echo '<style> #billing_giro.hidden { display:none; }</style>';
   $fields['billing']['billing_documento'] = array(
      'type'        => 'select',
      'label'       => __('Tipo Documento', 'woocommerce'),
'options'     => array(39=>39, 33=>33),
      'required'    => true,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
   $fields['billing']['billing_rut'] = array(
      'label'       => __('RUT', 'woocommerce'),
      'required'    => true,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
   $fields['billing']['billing_rzn_social'] = array(
      'label'       => __('Razón social <abbr class="required" title="obligatorio">*</abbr>', 'woocommerce'),
      'required'    => false,
      'class'       => array('form-row-wide','billing_rzn_social_label'),
      'clear'       => true,
   );
   $fields['billing']['billing_giro'] = array(
      'label'       => __('Giro <abbr class="required" title="obligatorio">*</abbr>', 'woocommerce'),
      'required'    => false,
      'class'       => array('form-row-wide','billing_giro_label'),
      'clear'       => true,
   );
   return $fields;

}

add_action( 'woocommerce_after_checkout_form', 'fontcl_conditionally_hide_show_new_field', 9999 );
function fontcl_conditionally_hide_show_new_field() {
  wc_enqueue_js( "
      jQuery('#customer_details').on('change', function() {
$('#billing_documento option:eq(0)').text('Boleta electrónica');
$('#billing_documento option:eq(1)').text('Factura electrónica');
      var values = $('#billing_documento :selected').val();
      if ( values === '39' ){

$('#billing_rzn_social').prop('required', false);
          $('#billing_rzn_social').fadeOut();
          $('#billing_rzn_social input').val(' ');
          $('.billing_rzn_social_label').hide();

          $('#billing_giro').prop('required', false);
          $('#billing_giro').fadeOut();
          $('#billing_giro input').val(' ');
            $('.billing_giro_label').hide();

        }else{

$('#billing_rzn_social').prop('required', true);
          $('#billing_rzn_social').fadeIn();
          $('.billing_rzn_social_label').show();

            $('#billing_giro').prop('required', true);
          $('#billing_giro').fadeIn();
            $('.billing_giro_label').show();

          }
      }).change();
  ");
}

add_filter( 'woocommerce_form_field' , 'fontcl_remove_checkout_optional_text', 10, 4 );
  function fontcl_remove_checkout_optional_text( $field, $key, $args, $value ) {
      if( is_checkout() && ! is_wc_endpoint_url() ) {
          $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
          $field = str_replace( $optional, '', $field );
      }
  return $field;
}

add_action('woocommerce_after_checkout_validation', 'fontcl_custom_validation_billing_city', 10, 2);
function fontcl_custom_validation_billing_city($fields, $error)
{
if('IN' != $fields['billing'] && empty($fields['billing_documento'])) {
      $error->add('validation', '<strong>Tipo documento</strong> es un campo requerido.');
  }

  if('IN' != $fields['billing'] && empty($fields['billing_rzn_social']) && $fields['billing_documento'] == '33' ) {
      $error->add('validation', '<strong>Razón social</strong> es un campo requerido.');
  }
  if('IN' != $fields['billing'] && empty($fields['billing_giro']) && $fields['billing_documento'] == '33' ) {
      $error->add('validation', '<strong>Giro</strong> es un campo requerido.');
  }
}

add_action('woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1);
function my_custom_checkout_field_display_admin_order_meta($order)
{
  $documentos = [33=>'Factura electrónica', 39=>'Boleta electrónica'];
  echo '<h3>Datos DTE</h3>';
  echo '<p><strong>'.__('Tipo Documento').':</strong><br/>'.$documentos[get_post_meta($order->get_id(), '_billing_documento', true)].'</p>';
  echo '<p><strong>'.__('RUT').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rut', true).'</p>';
echo '<p><strong>'.__('Razón social').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rzn_social', true).'</p>';
  echo '<p><strong>'.__('Giro').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_giro', true).'</p>';
}

 

Importante:

Woocommerce al ser una plataforma personalizable, hay temas que afectan al código anterior en el campo "Tipo documento", generando que visualmente se muestre un valor numérico (39 y 33) en lugar del nombre del tipo de documento (Boleta y Factura).

En caso de visualizar el valor numérico, debe reemplazar el código anterior, por el siguiente:

add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields($fields)
{
   $fields['billing']['billing_documento'] = array(
      'type'        => 'select',
      'label'       => __('Tipo Documento', 'woocommerce'),
'options'     => array(39=>'Boleta electrónica', 33=>'Factura electrónica'),
      'required'    => true,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
   $fields['billing']['billing_rut'] = array(
      'label'       => __('RUT', 'woocommerce'),
      'required'    => true,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
   $fields['billing']['billing_rzn_social'] = array(
      'label'       => __('Razón social', 'woocommerce'),
      'required'    => false,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
   $fields['billing']['billing_giro'] = array(
      'label'       => __('Giro', 'woocommerce'),
      'required'    => false,
      'class'       => array('form-row-wide'),
      'clear'       => true,
   );
     return $fields;

}

add_action('woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1);
function my_custom_checkout_field_display_admin_order_meta($order)
{
  $documentos = [33=>'Factura electrónica', 39=>'Boleta electrónica'];
  echo '<h3>Datos DTE</h3>';
  echo '<p><strong>'.__('Tipo Documento').':</strong><br/>'.$documentos[get_post_meta($order->get_id(), '_billing_documento', true)].'</p>';
  echo '<p><strong>'.__('RUT').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rut', true).'</p>';
echo '<p><strong>'.__('Razón social').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rzn_social', true).'</p>';
  echo '<p><strong>'.__('Giro').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_giro', true).'</p>';
}

 

Woocommerce 9.8.5

Woocommerce ha implementado ciertos cambios en la versión 9.8.5, los cuales afectan el funcionamiento de los códigos anteriores utilizados para la selección del tipo de documento durante el proceso de compra.

Para ello, si se tiene la versión 9.8.5 de Woocommerce y el carrito de compras es del tipo woocommerce_checkout (el que funciona en woocommerce 9.8) se debe reemplazar el código anterior, por el siguiente:

add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields($fields) {
$fields['billing']['billing_documento'] = array(
'type' => 'select',
'label' => __('Tipo Documento', 'woocommerce'),
'options' => array('39' => 'Boleta electrónica', '33' => 'Factura electrónica'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
);
$fields['billing']['billing_rut'] = array(
'label' => __('RUT', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
);
$fields['billing']['billing_rzn_social'] = array(
'label' => __('Razón social <abbr class="required" title="obligatorio">*</abbr>', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide billing_rzn_social_label'),
'clear' => true,
);
$fields['billing']['billing_giro'] = array(
'label' => __('Giro <abbr class="required" title="obligatorio">*</abbr>', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide billing_giro_label'),
'clear' => true,
);
return $fields;
}

add_action( 'woocommerce_after_checkout_form', function() {
wc_enqueue_js("
jQuery('#billing_documento').on('change', function() {
var value = jQuery(this).val();
if (value == '39') {
jQuery('#billing_rzn_social, .billing_rzn_social_label').hide();
jQuery('#billing_giro, .billing_giro_label').hide();
jQuery('#billing_rzn_social input').val('');
jQuery('#billing_giro input').val('');
} else {
jQuery('#billing_rzn_social, .billing_rzn_social_label').show();
jQuery('#billing_giro, .billing_giro_label').show();
}
}).change();
");
});


add_action('woocommerce_after_checkout_validation', function($fields, $error) {
if (empty($fields['billing_documento'])) {
$error->add('validation', '<strong>Tipo documento</strong> es un campo requerido.');
}
if ($fields['billing_documento'] == '33') {
if (empty($fields['billing_rzn_social'])) {
$error->add('validation', '<strong>Razón social</strong> es un campo requerido.');
}
if (empty($fields['billing_giro'])) {
$error->add('validation', '<strong>Giro</strong> es un campo requerido.');
}
}
}, 10, 2);

add_filter( 'woocommerce_form_field' , 'fontcl_remove_checkout_optional_text', 10, 4 );
function fontcl_remove_checkout_optional_text( $field, $key, $args, $value ) {
if( is_checkout() && ! is_wc_endpoint_url() ) {
$optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}

add_action('woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1);
function my_custom_checkout_field_display_admin_order_meta($order)
{
$documentos = [33=>'Factura electrónica', 39=>'Boleta electrónica'];
echo '<h3>Datos DTE</h3>';
echo '<p><strong>'.__('Tipo Documento').':</strong><br/>'.$documentos[get_post_meta($order->get_id(), '_billing_documento', true)].'</p>';
echo '<p><strong>'.__('RUT').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rut', true).'</p>';
echo '<p><strong>'.__('Razón social').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_rzn_social', true).'</p>';
echo '<p><strong>'.__('Giro').':</strong><br/>'.get_post_meta($order->get_id(), '_billing_giro', true).'</p>';
}

 

 

Si tienes más preguntas o necesitas asistencia adicional, no dudes en contactarnos a través de contacto@relbase.cl.