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.

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>';
}

 

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