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 = ' <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.pe.