', {
class: "font-window-message"
, html: data.mensaje
});
modalMensaje.dialog({
modal: true
, width: innerWidth * 0.4
, height: innerHeight * 0.35
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
$( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
modalMensaje.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalMensaje.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message" ); // para manejar el estilo de la letra de los botones
}
, close: function() {
modalMensaje.parent().find( ".ui-dialog-buttonset" ).removeClass( "font-window-message" );
modalMensaje.dialog( "destroy" );
}
, buttons: [
{
text: "Cerrar"
, click: function() {
modalMensaje.dialog( "close" );
return;
}
}
]
});
if ('arrayProductsInformative' in data) {
var linesInformative = data.arrayProductsInformative
if (linesInformative.length > 0) {
// Se adicionan los productos informativos al carro de compras
$.each(linesInformative, function(key, lineInformative) {
var shoppingCartRightDocLineInformativeDiv = createProductDetailElementInformative(lineInformative);
$( ".cointainer-shopping-cart-doc-detail" ).append(shoppingCartRightDocLineInformativeDiv);
});
}
$( "#nom_producto, #qty_producto, #remise_percent").val('');
$( "#price_select" ).empty();
}
}
else {
// Se inicializa la sección de busqueda de producto
$( "#nom_producto, #qty_producto, #remise_percent").val('');
$( "#price_select" ).empty();
console.log('Se adiciona la linea al carro: ', data.totales.num_lineas);
$( ".operation-select" ).data( 'numLines', data.totales.num_lineas );
// Se revisa si la adición requirió una inserción. Por ejemplo si el producto ya estaba en el carro de compras no es necesario insertarlo
if (data.datos.insert == 1) {
// Se construye el contenedor correspondiente a la nueva linea y se adiciona al final
line = data.datos
var shoppingCartRightDocLineDetailDiv = createProductDetailElement(line);
var elementoPadreInformativo = $( ".cointainer-shopping-cart-body-line-detail:has(.cointainer-shopping-cart-body-etiqueta:contains('Producto Informativo'))" );
if (elementoPadreInformativo.length > 0) {
// Se encontró un elemento .cointainer-shopping-cart-doc-detail que contiene la etiqueta 'Producto Informativo'
$(shoppingCartRightDocLineDetailDiv).insertBefore(elementoPadreInformativo);
} else {
// No se encontró el elemento padre con la etiqueta informativa, se agrega al final del contenedor principal (asumiendo que hay un contenedor principal común)
// Debes especificar cuál es el contenedor principal si este no es el comportamiento deseado.
$( ".cointainer-shopping-cart-doc-detail:last" ).append(shoppingCartRightDocLineDetailDiv);
console.warn("No se encontró el padre con la etiqueta 'Producto Informativo'. Se agregó al final del último .cointainer-shopping-cart-doc-detail.");
}
//$( ".cointainer-shopping-cart-doc-detail" ).append(shoppingCartRightDocLineDetailDiv);
// Se actualiza el consecutivo dentro del carro
var labels = $(".label-rang");
var index = 1;
labels.each(function(index) {
$(this).text(index + 1);
});
}
else {
fkShoppingCartDet = data.datos.rowid
var datoActualiza = $('[data-fk_shopping_cartdet="' + fkShoppingCartDet + '"]');
datoActualiza.find('.cointainer-shopping-cart-body-qty').text(data.datos.qty);
datoActualiza.find('.cointainer-shopping-cart-body-price').text(data.datos.subpricef);
datoActualiza.find('.cointainer-shopping-cart-body-total').text(data.datos.total_htf);
datoActualiza.find('.cointainer-shopping-cart-body-pu').find( '.edit-price-level' ).data( "fk_price", data.datos.fk_price);
datoActualiza.closest('.cointainer-shopping-cart-body-line-detail').data( "fk_price", data.datos.fk_price);
}
/*****
* Se define que, para los bonos por KPIs, se muestren avisos que indiquen al vendedor si aún puede seguir
* incluyendo productos en el carro de compras, o si por el contrario debe quitarlos para que se pueda
* redimir el bono.
* dbonilla. 8/mar/2025
*****/
actualiza_msg_saldo_bonos_kpis();
update_totales_shopping_cart(data);
inactiva_add_product();
muestra_info_adicional();
shopping_cart_bottom_options();
}
$('.icon-doc-shopping-cart-selected').trigger('click');
}
function add_product_to_cart_line_modal(data) {
console.log("add_product_to_cart_line data: ", data);
return false;
$( '#btn_tipo_pago' ).css( 'color', 'var(--rojo-wurth)')
$( '#btn_tipo_pago' ).removeClass( 'icono-inactivo')
var elementType = $( ".operation-select" ).data("element_type")
// Si al adicionar el producto se genera un error de proceso (error >= 500) se presenta el mensaje y se abandona la operación
if (data.error >= 500) {
// Crea un diálogo con el mensaje
var modalMensaje = $('
', {
class: "font-window-message"
, html: data.mensaje
});
modalMensaje.dialog({
modal: true
, width: innerWidth * 0.4
, height: innerHeight * 0.35
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
$( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
modalMensaje.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalMensaje.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message" ); // para manejar el estilo de la letra de los botones
}
, close: function() {
modalMensaje.parent().find( ".ui-dialog-buttonset" ).removeClass( "font-window-message" );
modalMensaje.dialog( "destroy" );
}
, buttons: [
{
text: "Cerrar"
, click: function() {
modalMensaje.dialog( "close" );
return;
}
}
]
});
if ('arrayProductsInformative' in data) {
var linesInformative = data.arrayProductsInformative
if (linesInformative.length > 0) {
// Se adicionan los productos informativos al carro de compras
$.each(linesInformative, function(key, lineInformative) {
var shoppingCartRightDocLineInformativeDiv = createProductDetailElementInformative(lineInformative);
$( ".cointainer-shopping-cart-doc-detail" ).append(shoppingCartRightDocLineInformativeDiv);
});
}
$( "#nom_producto, #qty_producto, #remise_percent").val('');
$( "#price_select" ).empty();
}
}
else {
// Se inicializa la sección de busqueda de producto
$( "#nom_producto, #qty_producto, #remise_percent").val('');
$( "#price_select" ).empty();
console.log('Se adiciona la linea al carro: ', data.totales.num_lineas);
$( ".operation-select" ).data( 'numLines', data.totales.num_lineas );
// Se revisa si la adición requirió una inserción. Por ejemplo si el producto ya estaba en el carro de compras no es necesario insertarlo
if (data.datos.insert == 1) {
// Se construye el contenedor correspondiente a la nueva linea y se adiciona al final
line = data.datos
var shoppingCartRightDocLineDetailDiv = createProductDetailElement(line);
var elementoPadreInformativo = $( ".cointainer-shopping-cart-body-line-detail:has(.cointainer-shopping-cart-body-etiqueta:contains('Producto Informativo'))" );
if (elementoPadreInformativo.length > 0) {
// Se encontró un elemento .cointainer-shopping-cart-doc-detail que contiene la etiqueta 'Producto Informativo'
$(shoppingCartRightDocLineDetailDiv).insertBefore(elementoPadreInformativo);
} else {
// No se encontró el elemento padre con la etiqueta informativa, se agrega al final del contenedor principal (asumiendo que hay un contenedor principal común)
// Debes especificar cuál es el contenedor principal si este no es el comportamiento deseado.
$( ".cointainer-shopping-cart-doc-detail:last" ).append(shoppingCartRightDocLineDetailDiv);
console.warn("No se encontró el padre con la etiqueta 'Producto Informativo'. Se agregó al final del último .cointainer-shopping-cart-doc-detail.");
}
//$( ".cointainer-shopping-cart-doc-detail" ).append(shoppingCartRightDocLineDetailDiv);
// Se actualiza el consecutivo dentro del carro
var labels = $(".label-rang");
var index = 1;
labels.each(function(index) {
$(this).text(index + 1);
});
}
else {
fkShoppingCartDet = data.datos.rowid
var datoActualiza = $('[data-fk_shopping_cartdet="' + fkShoppingCartDet + '"]');
datoActualiza.find('.cointainer-shopping-cart-body-qty').text(data.datos.qty);
datoActualiza.find('.cointainer-shopping-cart-body-price').text(data.datos.subpricef);
datoActualiza.find('.cointainer-shopping-cart-body-total').text(data.datos.total_htf);
datoActualiza.find('.cointainer-shopping-cart-body-pu').find( '.edit-price-level' ).data( "fk_price", data.datos.fk_price);
datoActualiza.closest('.cointainer-shopping-cart-body-line-detail').data( "fk_price", data.datos.fk_price);
}
/*****
* Se define que, para los bonos por KPIs, se muestren avisos que indiquen al vendedor si aún puede seguir
* incluyendo productos en el carro de compras, o si por el contrario debe quitarlos para que se pueda
* redimir el bono.
* dbonilla. 8/mar/2025
*****/
actualiza_msg_saldo_bonos_kpis();
update_totales_shopping_cart(data);
inactiva_add_product();
muestra_info_adicional();
shopping_cart_bottom_options();
}
}
/**
* Función para mostrar aviso que indique al vendedor si para el canje de bonos por KPIs, aun puede agregar más
* productos, o si por el contrario debe quitarlos para poder redimir el bono, dado que el saldo del bono es o
* no suficiente.
* @author: Diego Bonilla
* @date: 08/mar/2025
**/
function actualiza_msg_saldo_bonos_kpis() {
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
var fkShoppingCart = $( ".icon-doc-shopping-cart-selected" ).data( "fk_shopping_cart" );
var elementType = $( ".operation-select" ).data("element_type")
if (elementType == 'bonoskpis') {
const fd = new FormData();
fd.append('action', 'view_bonus_detail');
fd.append('token', '');
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('tipo_bono', tipoBono=3 );
fd.append('fk_soc', fkSoc);
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (request) => {
if (request.error == 0) {
// Si el número de bonos es cero, se debe desactivar la sección que permite adicionar productos al carro de compras
$( '.cointainer-shopping-cart-doc-header' ).hide();
if (request.numBonos == 0) {
$( '.saldo-bonos-icono' ).html( 'No hay bonos por redimir' )
$( '#btn_saldo_bonos' ).css( 'border', '1px solid var(--rojo-wurth)');
$( '#btn_saldo_bonos' ).css( 'background', 'var(--rojo-wurth-tx)');
}
else if (request.saldoCompra <= 0 ) {
$( '.cointainer-shopping-cart-doc-header' ).show();
$( '.saldo-bonos-icono' ).html( 'Aun puedes agregar algo más al carrito para completar tu bono' )
$( '#btn_saldo_bonos' ).css( 'border', '1px solid var(--verde-wurth)');
$( '#btn_saldo_bonos' ).css( 'background', 'var(--verde-wurth-tx)');
}
else {
$( '.cointainer-shopping-cart-doc-header' ).show();
$( '.saldo-bonos-icono' ).html( 'Excediste el valor del bono, por favor saca alguno de los productos del carro' )
$( '#btn_saldo_bonos' ).css( 'border', '1px solid var(--rojo-wurth)');
$( '#btn_saldo_bonos' ).css( 'background', 'var(--rojo-wurth-tx)');
}
}
})
}
}
function update_doc_type(data, elemento, doctype, options, fkShoppingCart, modalSelect) {
actualiza_iconos_shopping_cart(elemento, doctype, options, fkShoppingCart);
// Si el documento que se selecciona es una cotización se ocultan los atributos del pedido y sólo se deja activo el campo para la nota pública
muestra_info_adicional();
selectedCard = $( '.icon-doc-shopping-cart-selected').data('fk_shopping_cart', fkShoppingCart);
selectedCard.trigger( 'click' );
modalSelect.dialog('close');
}
function muestra_info_adicional() {
doctype = $( ".operation-select" ).data( "element_type");
console.log("en muestra_info_adicional el doctype: ", doctype);
$( ".cointainer-shopping-cart-order-note-public" ).show();
switch (doctype) {
case 'propal':
$( '.tipo-pago-container' ).hide();
$( ".cointainer-shopping-cart-order-factura-especial" ).hide();
$( "#factura_especial" ).hide();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).hide();
$( "#solo_remisionar" ).hide();
$( ".cointainer-shopping-cart-order-orden-compra" ).hide();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).hide();
$( ".cointainer-shopping-cart-order-quien-solicita" ).hide();
$( ".cointainer-shopping-cart-order-observa-guia" ).hide();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-doc-customer .information' ).show();
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'visible');
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
case 'commande':
$( '.tipo-pago-container' ).show();
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$( ".cointainer-shopping-cart-order-requiere-firma" ).show();
$( "#requiere_firma" ).show();
$( "#tienda_fisica" ).show();
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-doc-customer .information' ).show();
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'visible');
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
case 'muestra':
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr');
$( '.tipo-pago-container' ).hide();
$( '.cointainer-shopping-cart-doc-customer .information' ).hide();
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'hidden');
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
case 'reposicion':
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-body-line-detail' ).css( 'grid-template-columns', '5% 5% 5fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr');
$( '.cointainer-shopping-cart-doc-header' ).css( 'grid-template-columns', '5% 5% 5fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr');
//cointainer-shopping-cart-doc-header
$(".cointainer-shopping-cart-body-etiqueta").hide();
$( '#down_qty' ).hide();
$( '#up_qty' ).hide();
$( '#qty_producto' ).hide();
$( '.cointainer-shopping-cart-header-product-input-add-qty' ).hide();
$( '.cointainer-shopping-cart-header-product-input-clear-qty' ).hide();
$( '.tipo-pago-container' ).hide();
//$( '#select_reposicion' ).hide();para ocultar el select
$( '.cointainer-shopping-cart-doc-customer .information' ).show();
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'hidden');
$( ".cointainer-shopping-cart-order-factura-especial" ).hide();
$( "#factura_especial" ).hide();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).hide();
$( "#solo_remisionar" ).hide();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).hide();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).hide();
$( ".cointainer-shopping-cart-body-stock" ).remove();
$( ".cointainer-shopping-cart-body-pu" ).remove();
break;
case 'obsequio':
$( '.tipo-pago-container' ).hide();
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$( '.cointainer-shopping-cart-doc-customer .information' ).show();
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'hidden');
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
case 'canjebono':
$( '.tipo-pago-container' ).hide();
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$( '.cointainer-shopping-cart-doc-customer .information' ).show();
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr 2fr');
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'visible');
// $( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'hidden');
// $( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'hidden');
// $( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'visible');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'hidden');
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
case 'bonoskpis':
$( '.cointainer-shopping-cart-doc-customer' ).css( 'grid-template-columns', '2fr 2fr 2fr');
$( '.tipo-pago-container' ).hide();
$( '.cointainer-shopping-cart-doc-customer .information' ).hide();
$( '.cointainer-shopping-cart-header-niv-precio' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-pu' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-price-select.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-price' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-price' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.edit' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-discount' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-discount.add' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-total' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-total-ttc' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-total-ttc' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-header-product-add-gift.add' ).css('visibility', 'hidden');
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
break;
default: // Propal
$( '.cointainer-shopping-cart-body-input-attachment' ).css('visibility', 'hidden');
$( '.cointainer-shopping-cart-body-attachment' ).css('visibility', 'hidden');
$( ".cointainer-shopping-cart-order-factura-especial" ).show();
$( "#factura_especial" ).show();
$( ".cointainer-shopping-cart-order-solo-remisionar" ).show();
$( "#solo_remisionar" ).show();
$( ".cointainer-shopping-cart-order-orden-compra" ).show();
$( ".cointainer-shopping-cart-order-condiciones-pago" ).show();
$( ".cointainer-shopping-cart-order-acompa-orsy" ).show();
$(".cointainer-shopping-cart-body-fecha-reposicion").hide();
}
}
$(document).off("click", ".cointainer-shopping-cart-body-attachment-checkbox").on("click", ".cointainer-shopping-cart-body-attachment-checkbox", function () {
const fkShoppingCartDet = $(this).closest('.cointainer-shopping-cart-body-line-detail').data('fk_shopping_cartdet');
console.log("fkShoppingCartDet: ", fkShoppingCartDet);
let isCheckedInput = $(this).is(":checked") ? 1 : 0;
let attachment = $(this).closest('.cointainer-shopping-cart-body-line-detail').find('.cointainer-shopping-cart-body-attachment');
mark_attach_reposicion(fkShoppingCartDet, isCheckedInput)
.then(() =>{
if (isCheckedInput) {
attachment.css('visibility', 'hidden');
} else {
attachment.css('visibility', 'visible');
}
})
.catch((error) => {
console.error("Error al markar linea:", error);
});
});
function shopping_cart_bottom_options() {
$( ".master-bottom-section" ).empty();
var fkShoppingCart = $( ".icon-doc-shopping-cart-selected" ).data( "fk_shopping_cart" );
var fkStatut = $( ".icon-doc-shopping-cart-selected" ).data( "fk_statut" );
var elementtype = $( ".icon-doc-shopping-cart-selected" ).data( "elementtype" );
var fkSoc = $( ".top-section-info-current .current-customer-info" ).data( "fk_soc" );
var valorHT = $( "#current_valor_total_ht" ).text();
var valorTTC = $( "#current_valor_total_ttc" ).text();
console.log("shopping_cart_bottom_options fkShoppingCart: ", fkShoppingCart);
console.log("shopping_cart_bottom_options fkStatut: ", fkStatut);
console.log("shopping_cart_bottom_options fkSoc: ", fkSoc);
console.log("shopping_cart_bottom_options valorHT: ", valorHT);
console.log("shopping_cart_bottom_options valorTTC: ", valorTTC);
console.log("el numero de lineas de pedidos del dia son",numLineasPedido);
$( ".master-bottom-section .options-customer .options .options-icons .icon.option-shopping-cart" ).empty();
if (typeof fkShoppingCart === 'undefined' || typeof fkSoc === 'undefined' || typeof fkStatut === 'undefined')
return;
var divMasterBottomOptions =
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
' ' +
'
' +
'
' +
' ' +
'
' +
'
' +
' ' +
'
' +
'
' +
' ' +
'
' +
'
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// '
' +
// 'Pedidos gestionados' +
// '
' +
// '
' +
// 'Atributos adicionales' +
// '
' +
// '
' +
// 'Validar' +
// '
' +
// '
' + Ya hay 0 imagen(es). Solo puede agregar 3 más.
'
' +
'
' +
' ' +
'
' +
'
';
// Se construye la estructura que se muestra en la barra inferior
var divMasterBottomSection = $( ".master-bottom-section" );
divMasterBottomSection.empty();
divMasterBottomSection.append(divMasterBottomOptions);
divMasterBottomSection.css( "background", "rgb(74, 74, 74)" );
$( "#add_attachment_reposicion" ).hide();
// $(".cointainer-shopping-cart-body-fecha-reposicion").css("visibility", "hidden");
// Si no hay un valor del documento se ocultan lo relacionado con la validación del documento
// Si el estatus del documento es 1=> validado, se oculta la opcion de validar
// if (valorTTC === '0' || fkStatut == 1) {
// $( "#valid_document, #help_valid_document" ).hide();
// }
if ((valorTTC === '0' && elementtype !== 'reposicion') || fkStatut == 1) {
$("#valid_document, #help_valid_document").hide();
}
if (elementtype === 'propal') {
// $( "#view_orders_managed, #help_view_orders_managed" ).hide();
$( "#view_orders_managed, #help_view_orders_managed" ).empty();
}
if (elementtype === 'reposicion') {
$( "#view_orders_managed, #more_attributes" ).hide();
$( "#add_attachment_reposicion" ).show();
}
if (fkStatut == 1) {
$( "#add_attachment_reposicion" ).hide();
$( ".cointainer-shopping-cart-body-attachment" ).hide();
$( ".cointainer-shopping-cart-body-input-attachment" ).hide();
$(".cointainer-shopping-cart-body-fecha-reposicion").css("visibility", "hidden");
}
function toggleBottomSection(e) {
console.log("el e.target", e.target);
if ($(e.target).is(".fa.fa-ellipsis-h") || $(e.target).is("#toggle_customer_options")) {
divMasterBottomSection.toggleClass('expandir-bottom-section');
$("#toggle_customer_options").toggleClass('expandir-bottom-section');
$(".options-customer .options .options-help").toggle();
} else {
divMasterBottomSection.removeClass('expandir-bottom-section');
$("#toggle_customer_options").removeClass('expandir-bottom-section');
$(".options-customer .options .options-help").hide();
}
}
// Verificar si ya se ha agregado el manejador de eventos al documento
if (!divMasterBottomSection.data("clickHandler")) {
$(document).on("click", function(e) {
toggleBottomSection(e);
});
divMasterBottomSection.data("clickHandler", true);
}
// Se contruye el evento de clic sobre las opciones
$( ".option-shopping-cart" ).on( "click", function() {
console.log("Se dió clic sobre una opción")
var optionId = $( this ).attr('id');
if (typeof optionId !== 'undefined') {
switch (optionId) {
case 'valid_document':
prevalid_document();
break;
case 'more_attributes':
more_attributes();
break;
case 'view_orders_managed':
view_orders_managed();
break;
case 'consulta_pedidos_dia':
view_orders_managed();
break;
default:
console.log("es otra opción");
}
}
});
}
function prevalid_document() {
// var fkShoppingCart = $( ".icon-doc-shopping-cart-selected" ).data( "fk_shopping_cart" );
var fkShoppingCart = $( ".operation-select" ).data( "fk_shopping_cart" );
var fkSoc = $( ".top-section-info-current .current-customer-info" ).data( "fk_soc" );
var elementType = $( ".operation-select" ).data( "element_type" );
const algunoVisible = $(".cointainer-shopping-cart-body-stock")
.filter(function () {
return $(this).css("visibility") === "visible";
}).length > 0;
let mark_stock = 0;
if (algunoVisible) {
mark_stock = 1;
} else {
mark_stock = 0;
}
validarDatosMinimosRecaudo(fkSoc, (request) => {
if (request.datosMinimosRecaudo) {
console.log( "validaremos el documento con id: ", fkShoppingCart);
const fd = new FormData();
fd.append('action', 'prevalid_document');
fd.append('element_type', elementType);
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('fk_soc', fkSoc);
fd.append('mark_stock', mark_stock);
fd.append('token', fkSoc);
fd.append('token', '');
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (data) => {
if (data.error == 0) {
console.log("El data es: ", data)
noAlerts = data.no_alerts;
noBlocks = data.no_blocks;
requiereFirma = data.requiere_firma;
var alertsDiv;
var blocksDiv;
var ConfirmValidateDiv;
let isChecked = false; /*Se utiliza para validar descuento por pronto pago */
// Se evaluan las alertas a mostrar:
if ((noAlerts + noBlocks) > 0) {
if (noAlerts > 0) {
// Se define el contenedor donde se mostrarán las alertas
alerts = data.alertsArray
alertsDiv = $( "
", {
class: "alerts-container"
})
tituloP = $( "
", {
class: "alerts-message-title-validate"
, text: 'Alertas'
})
alertsDiv.append(tituloP);
$.each(alerts, function(key, value) {
console.log("key: ", key);
console.log("value: ", value);
mensajeP = $( " ", {
class: "alerts-message-validate"
, html: value
})
alertsDiv.append(mensajeP);
});
}
// Si el cliente es un cliente prospecto y tiene su pdf de vinculación se desestima el bloqueo por documentos anexos requeridos
let esProspecto = $( ".current-customer-info" ).data( "es_prospecto" );
let tienePDFVinculacion = $( ".current-customer-info" ).data( "tienePDFVinculacion" );
console.log("esProspecto:", esProspecto);
console.log("tienePDFVinculacion:", tienePDFVinculacion);
var blocksArray = data.blocksArray;
console.log("blocksArray:", blocksArray);
blocks = {};
$.each(blocksArray, function(key, value) {
if (esProspecto == 1 && tienePDFVinculacion == 1 && key == 11) {
noBlocks--;
return true;
}
blocks[key] = value;
});
console.log("blocks:", blocks);
// Se evaluan los bloqueos a mostrar:
if (noBlocks > 0) {
// Se define el contenedor donde se mostrarán las alertas
blocksDiv = $( "
", {
class: "blocks-container"
})
tituloP = $( "
", {
class: "blocks-message-title-validate"
, html: 'Bloqueos'
})
blocksDiv.append(tituloP);
$.each(blocks, function(key, value) {
console.log("block key: ", key);
console.log("block value: ", value);
mensajeP = $( " ", {
class: "blocks-message-validate"
, html: value
})
blocksDiv.append(mensajeP);
});
}
}
else {
ConfirmValidateDiv = $( "
", {
class: "confirm-validate-container"
})
tituloP = $( "
", {
class: "confirm-message-title-validate"
, text: 'Confirmación'
})
ConfirmValidateDiv.append(tituloP);
tipoDocumento = $( ".operation-select" ).data("element_type");
var mensajeP;
if (tipoDocumento == 'canjebono') {
// var fkShoppingCart = $( ".icon-doc-shopping-cart-selected" ).data( "fk_shopping_cart" );
var fkShoppingCart = $( ".operation-select" ).data( "fk_shopping_cart" );
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
const fd = new FormData();
fd.append('action', 'distribute_total_in_bonus');
fd.append('token', '');
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('fk_soc', fkSoc);
/*****
* Se incluye parámetro de tipo de bono, para poder manejar en una sola acción
* 'determine_bonus_balance' los bonos de marketing y los bonos por KPIs
* dbonilla. 5/mar/2025
*****/
tipoBono = (tipoDocumento=='canjebono'?2:3);
fd.append('tipo_bono', tipoBono);
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (request) => {
if (request.error == 0) {
mensajeP = $( "", {
class: "confirm-message-validate"
});
var distribucionContainer = $( "
", {
class: "bonus-distribution-container"
, html: '
' + 'Al validar el pedido, los bonos serán redimidos con la siguiente distribución:' + '
'
});
// Se crea contenedor para los titulos
var contenedor = $( '
', {
class: 'bonus-distribution-header-container'
})
.append( $( '
', {
html: 'Fecha'
}))
.append( $( '', {
html: 'Observacion'
}))
.append( $( '', {
html: 'Monto'
}))
.append( $( '', {
html: 'Utilizado'
}))
distribucionContainer.append(contenedor);
$.each(request.distribucionBonos, function(key, bono) {
// Se crea el contenedor para la linea de detalle
var contenedor = $( '', {
class: 'bonus-distribution-body-container'
})
.append( $( '
', {
'etiqueta': 'fecha'
, html: bono.fecha
}))
.append( $( '', {
'etiqueta': 'observacion'
, html: bono.observacion
}))
.append( $( '', {
'etiqueta': 'monto'
, html: bono.montof
}))
.append( $( '', {
'etiqueta': 'utilizado'
, html: bono.distribuirf
}))
distribucionContainer.append(contenedor);
});
}
mensajeP.append(distribucionContainer);
ConfirmValidateDiv.append(mensajeP);
});
}
else {
mensajeP = $( "", {
class: "confirm-message-validate"
, text: '¿Está seguro de querer validar el documento?'
})
ConfirmValidateDiv.append(mensajeP);
}
}
var modalMensaje = $('
', {
class: "font-window-message-validate"
});
/******
* Se valida si el pedido tiene condición de firma y de ser así se genera el espacio para que se haga la firma correspondiente
* Si hay bloqueos no se pide la firma
* dbonilla. 27/mar/2025
*****/
var elementType = $( ".operation-select" ).data("element_type");
if (elementType == 'commande' && data.requiere_firma == 1 && noBlocks == 0) {
var modalSing = $('
', {
id: "modalFirma",
class: "sing-main-container"
});
// Agregar el título
var descripcionFirma = $('
', {
text: "Este Pedido requiere firma para poder ser validado"
});
modalSing.append(descripcionFirma);
// Crear el área de firma del cliente
var customerSign = $('
', {
class: "customer-sign-commande"
});
modalSing.append(customerSign);
var guardarContainer = $( '
', {
class: "customer-sign-btn-container"
})
modalMensaje.append(modalSing);
}
/*Realiza la validación para la validacion de aplicacion de descuento por pronto pago */
if (data.discount && Array.isArray(data.discount) && data.discount.length > 0) {
// Div para validación de descuento
var descuento = $('
', {
class: "discount-container"
});
// Agregar un título o descripción para los descuentos
var labelDescuento = $('
', {
text: 'Seleccione un descuento por pronto pago:'
});
descuento.append(labelDescuento);
// Crear los radio buttons dinámicamente
data.discount.forEach(function(value, index) {
var radioId = 'descuentoRadio_' + index;
var additionalText = '';
// Asignar texto adicional según el valor del descuento
switch (value) {
case 2:
additionalText = '15 días';
break;
case 3:
additionalText = '10 días';
break;
case 5:
additionalText = '5 días';
break;
default:
additionalText = '';
}
// Crear un radio button
var radioButton = $(' ', {
type: 'radio',
id: radioId,
name: 'descuento', // Nombre común para agrupar
value: value
});
// Crear el label asociado al radio button
var radioLabel = $('', {
for: radioId,
text: value + '% - ' + additionalText
});
// Crear un contenedor para el radio button y su label
var radioContainer = $('', {
class: "radio-container"
});
// Agregar el radio button y el label al contenedor
radioContainer.append(radioButton, radioLabel);
// Agregar el contenedor al div de descuentos
descuento.append(radioContainer);
});
// Agregar el contenedor al modal
modalMensaje.append(descuento);
}
/*****
* Se requiere agregar un indicador de descuento del 5% cuando se cumpla que es un pedido y que tiene más de 7 productos
* dbonilla. 02/dic/2025
****/
applyDiscount = data.applyDiscount;
discountForMinNumLines = data.discountForMinNumLines;
discountForMinNumLinesF = data.discountForMinNumLinesF;
vlrDiscountF = data.vlrDiscountF;
if (applyDiscount > 0) {
var indicadorDescuentoXLineas = $(`
¿Aplicar al pedido descuento del ${discountForMinNumLinesF}% - (Equivale a $${vlrDiscountF} )?
`);
modalMensaje.append(indicadorDescuentoXLineas);
}
/***
* Beneficio por flete Wmax - dbonilla 19/mar/2026
**/
if (data.flete_benefit) {
var fb = data.flete_benefit;
var labelFlete = '¿Aplicar beneficio al flete? (Ahorro:
$' + fb.ahorroF + ' )';
var indicadorFleteBenefit = $('
', { class: 'flete-benefit-container' })
.append($('
', { for: 'chk_flete_benefit', class: 'flete-benefit-label' })
.html(labelFlete))
.append($(' ', {
type: 'checkbox',
id: 'chk_flete_benefit',
class: 'flete-benefit-checkbox',
checked: true,
'data-ahorro' : fb.ahorro,
'data-total-full' : fb.total_full,
'data-total-neto' : fb.total_neto,
'data-desc-efectivo': fb.desc_efectivo,
'data-max-desc' : fb.max_desc,
'data-vr-flete' : fb.vr_flete
}));
modalMensaje.append(indicadorFleteBenefit);
// Recalculo dinamico cuando usuario elige descuento de pronto pago
// DESACTIVADO - dbonilla 2026-04-09: los descuentos de pronto pago
// ya no deben impactar el beneficio por flete. Se deja comentado por
// si en el futuro se requiere reactivar.
/*
$(document).off('change.flete').on('change.flete', 'input[name="descuento"]', function() {
var chk = $('#chk_flete_benefit');
var ppPct = parseFloat($(this).val()) || 0;
var totalFull = parseFloat(chk.data('total-full'));
var totalNeto = parseFloat(chk.data('total-neto'));
var descEf = parseFloat(chk.data('desc-efectivo'));
var maxDesc = parseFloat(chk.data('max-desc'));
var vrFlete = parseFloat(chk.data('vr-flete'));
var descPpFull = ppPct * totalNeto / totalFull;
var margen = maxDesc - descEf - descPpFull;
var beneficioRaw = margen > 0 ? margen * totalFull / 100 : 0;
var ahorro = Math.floor(Math.min(beneficioRaw, vrFlete) / 100) * 100;
if (ahorro <= 0) {
chk.prop('checked', false).prop('disabled', true);
chk.closest('.flete-benefit-container').hide();
} else {
chk.data('ahorro', ahorro).prop('disabled', false);
chk.closest('.flete-benefit-container').show();
chk.closest('.flete-benefit-container').find('label')
.html("¿Aplicar beneficio al flete? (Ahorro: $" + price(ahorro, ".", 0, false) + " )");
}
});
*/
}
modalMensaje.append(alertsDiv, blocksDiv, ConfirmValidateDiv);
modalMensaje.dialog({
modal: true
, width: (window.innerWidth * 0.4)
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
$( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
modalMensaje.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message-validate" ); // para manejar el estilo de la letra de los botones
if (noBlocks > 0) {
$( "#btn_validate_document" ).hide(); // Ocultar el botón validar si hay bloqueos
}
else if (requiereFirma == 1){
$( "#btn_validate_document" ).attr('disabled', true); // Ocultar el botón validar si hay bloqueos
}
$( "#btn_close" ).focus(); // Establecer el foco en el botón "btn_cancel_send_mail"
modalMensaje.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalMensaje.closest( ".ui-dialog-content" ).css("max-height", (window.innerHeight * 0.8)); // borde redondo del modal
}
, close: function() {
modalMensaje.dialog( "destroy" );
}
, buttons: [
{
text: "Validar"
, id: "btn_validate_document"
, click: function() {
fkShoppingCart = $( ".cointainer-shopping-cart-doc-customer .operation" ).data("fk_shopping_cart");
elementType = $( ".operation-select" ).data( "element_type" );
console.log("Del documento : ", fkShoppingCart);
// Obtener el valor del descuento por pronto pago
var selectedDiscount = $("input[name='descuento']:checked").val();
// Validar si el valor seleccionado es válido, de lo contrario asignar 0
if (!selectedDiscount) {
selectedDiscount = 0; // Si no se seleccionó ningún valor, asignamos 0
}
// Mostrar el valor del descuento
console.log("Descuento seleccionado: " + selectedDiscount + '%');
tipoDocumento = $( ".operation-select" ).data("element_type");
const fd = new FormData();
fd.append('action', 'valid_document');
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('descuento_pronto_pago', selectedDiscount);
fd.append('token', '');
/*****
* Se incluyen las variables que determinan si se hace un descuento por número de líneas
* dbonilla. 02/dic/2025
*****/
let lineDiscount = 0;
if ($('#line_discount').is(':checked')) {
lineDiscount = 1;
}
fd.append('line_discount', lineDiscount);
if (lineDiscount == 1) {
fd.append('discount_for_min_numlines', discountForMinNumLines);
}
// Beneficio por flete Wmax - dbonilla 19/mar/2026
if ($('#chk_flete_benefit').is(':checked')) {
fd.append('flete_benefit', $('#chk_flete_benefit').data('ahorro'));
}
/*****
* Se incluye parámetro de tipo de bono, para poder manejar en una sola acción
* 'determine_bonus_balance' los bonos de nmarketing y los bonos por KPIs
* dbonilla. 5/mar/2025
*****/
tipoBono = (tipoDocumento=='canjebono'?2:3);
fd.append('tipo_bono', tipoBono);
/******
* Se incluye el objeto donde se guarda la firma del pedido
* dbonilla. 11/abr/2025
*****/
Object.keys(firmas).forEach((idFirma, index) => {
if (firmas[idFirma] !== null) {
fd.append(idFirma, firmas[idFirma]);
}
});
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
fd.append('fk_soc', fkSoc);
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (data) => {
if (data.error == 0) {
modalMensaje.dialog( "close" );
console.log("volvio de crear la cotización");
view_shopping_cart(fkShoppingCart, 1);
}
else {
// Se muestra modal con el error
var modalError = $('', {
html: data.mensaje
});
modalError.dialog({
modal: true
, width: (window.innerWidth * 0.4)
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
modalError.closest( ".ui-dialog" ).css( 'border-radius', '10px' );
modalError.closest( ".ui-dialog" ).css( 'border', '3px solid grey' );
$( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .5;");
}
, buttons: {
Ok: function() {
$(this).dialog('close');
return;
}
}
});
}
});
}
}
, {
text: "Cerrar"
, click: function() {
modalMensaje.dialog( "close" );
}
}
]
});
crearFirma('.customer-sign-commande', 'customer', 'Firma del Cliente', (nameFirma, fileFirma) => {
$( '#btn_validate_document' ).button( 'option', 'disabled', true);
$( '#btn_validate_document' ).attr( 'disabled', true);
if (nameFirma != '') {
$( '#btn_validate_document' ).button( 'option', 'disabled', false);
$( '#btn_validate_document' ).attr( 'disabled', false);
}
}, $( '.font-window-message-validate' ).closest( '[role="dialog"]' ));
}
else if (data.error == 510) {
// Crea un diálogo con el mensaje de confirmación
var modaExceptionOrderLines = $('
', {
class: "modal-exception-order-lines font-window-message"
});
var exceptionOrderLinesContainer = $('
', {
class: "exception-order-lines-container"
});
var exceptionOrderLinesDescription = $('
', {
class: "exception-order-lines-description"
, html: 'Se presentan las siguientes excepciones sobre las líneas del pedido, que impiden su validación:'
});
// Se crea el elelemnto que mostrará las excepciones encontradas en las lineas del Pedido
if (data.numExceptions > 0) {
var exceptionOrderLinesUL = $('
', {
class: "exception-order-lines-ul"
});
$.each(data.arrayExceptions, function(key, value) {
console.log("arrayExceptions key: ", key);
console.log("arrayExceptions value: ", value);
var exceptionOrderLinesLI = $('', {
class: "exception-order-lines-li"
, html: 'El producto: ' + value.ref + ' - ' + value.label + '' + value.mensaje + ' '
});
exceptionOrderLinesUL.append( exceptionOrderLinesLI );
});
}
exceptionOrderLinesContainer.append( exceptionOrderLinesDescription );
exceptionOrderLinesContainer.append( exceptionOrderLinesUL );
modaExceptionOrderLines.append( exceptionOrderLinesContainer );
modaExceptionOrderLines.dialog({
modal: true
, position: {
my: 'center'
, at: 'center'
, of: $( window )
}
, width: 'auto'
, height: 'auto'
, open: function() {
modaExceptionOrderLines.prev( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
modaExceptionOrderLines.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modaExceptionOrderLines.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message" ); // para manejar el estilo de la letra de los botones
modaExceptionOrderLines.prev( ".ui-dialog-titlebar" ).find( ".ui-dialog-title" ).addClass( "font-window-message" ); // para manejar la letra del titulo
}
, close: function() {
modaExceptionOrderLines.parent().find( ".ui-dialog-buttonset" ).removeClass( "font-window-message" );
modaExceptionOrderLines.dialog( "destroy" );
}
, buttons: [
{
text: "Cerrar"
, click: function() {
modaExceptionOrderLines.dialog( "close" );
}
}
]
});
}
else if (data.error == 520) {
mensaje = data.mensaje
msjStandard(mensaje);
}
});
}
});
}
function more_attributes() {
var fkShoppingCart = $( ".icon-doc-shopping-cart-selected" ).data( "fk_shopping_cart" );
var fkSoc = $( ".top-section-info-current .current-customer-info" ).data( "fk_soc" );
var fkRubro = $( ".top-section-info-current .current-customer-info" ).data( "fk_rubro" );
var fkFormeJuridique = $( ".top-section-info-current .current-customer-info" ).data( "fk_forme_juridique" );
var esProspecto = $( ".top-section-info-current .current-customer-info" ).data( "es_prospecto" );
console.log( "fkSoc: ", fkSoc);
console.log( "fkShoppingCart: ", fkShoppingCart);
console.log( "fkRubro: ", fkRubro);
console.log( "fkFormeJuridique: ", fkFormeJuridique);
console.log( "esProspecto: ", esProspecto);
// Crea un diálogo para sobre el mostrar los demás atributos del documento
var modalMoreAttributes = $('', {
class: "font-window-message"
, id: 'modal-more-attributes'
});
// Se construye sección para incluir la captura de los datos adicionales de un pedido
/************************* inicia sección de datos adicionales pedidos ****************************/
var shoppingCartDocOrderAditionalInfoDiv = $( "
", {
class: "cointainer-shopping-cart-order-aditional-info"
});
// Documentos de cliente prospecto. Aplica sólo para cuando el cliente es un prospecto (client = 2 y prospeco = 1)
var docsProspectDiv = $( "
", {
class: "cointainer-shopping-cart-docs-prospect aditional-info-order"
})
.append( $( "
", {
text: "Docs. Cliente prospecto"
}))
.append( $( "", {
class: "fa fa-list"
, id: "view_docs_prospecto"
}))
;
// Nota pública
var notePublicDiv = $( "", {
class: "cointainer-shopping-cart-order-note-public aditional-info-order"
})
.append( $( "
", {
text: "Nota pública"
}))
.append( $( "", {
text: "Texto de la nota parcial..."
}))
;
// Factura especial
var facturaEspecialDiv = $( "
", {
class: "cointainer-shopping-cart-order-factura-especial aditional-info-order"
})
.append( $( "
", {
text: "Factura especial"
}))
.append( $( " ", {
type: "checkbox"
, id: "factura_especial"
}))
;
// Solo remisionar
var soloRemisionarDiv = $( "", {
class: "cointainer-shopping-cart-order-solo-remisionar aditional-info-order"
})
.append( $( "
", {
text: "Solo remisionar"
}))
.append( $( " ", {
type: "checkbox"
, id: "solo_remisionar"
}))
;
// Orden de compra
var ordenCompraDiv = $( "", {
class: "cointainer-shopping-cart-order-orden-compra aditional-info-order",
css: {
overflow: "auto", // Scroll automático si el contenido se desborda
}
})
.append( $( "
", {
text: "Orden de compra"
}))
.append( $( "", {
text: "No. orden compra"
}))
// .append( $( "
", {
// class: "action-icons"
// })
// .append( $( "
", {
// class: "fa fa-search"
// , id: "view_orden_compra_attach"
// }))
// .append( $( "", {
// class: "fa fa-trash"
// , id: "delete_orden_compra"
// }))
// )
;
// Condiciones pago
var condicionesPagoDiv = $( "", {
class: "cointainer-shopping-cart-order-condiciones-pago aditional-info-order"
})
.append( $( "
", {
html: "Condiciones de pago"
}))
.append( $( "", {
text: "A la recepción"
}))
;
// Acompañamiento Orsy
var acompaOrsyDiv = $( "
", {
class: "cointainer-shopping-cart-order-acompa-orsy aditional-info-order"
})
.append( $( "
", {
text: "Acompañamiento Orsy"
}))
.append( $( ""))
;
// Quién solicita
var quienSolicitaDiv = $( "
", {
class: "cointainer-shopping-cart-order-quien-solicita aditional-info-order"
})
.append( $( "
", {
text: "Quién solicita"
}))
.append( $( "", {
text: "Texto de quien solicita..."
}))
;
// Observaciones guía
var observaGuiaDiv = $( "
", {
class: "cointainer-shopping-cart-order-observa-guia aditional-info-order"
})
.append( $( "
", {
text: "Observaciones guía"
}))
.append( $( "", {
text: "Texto de observaciones guia..."
}))
;
// Requiere firma
var requiereFirmaDiv = $( "
", {
class: "cointainer-shopping-cart-order-requiere-firma aditional-info-order"
})
.append( $( "
", {
text: "Requiere Firma"
}))
.append( $( " ", {
type: "checkbox"
, id: "requiere_firma"
}))
;
/*****
* Se incluye contenedor para captura de marcació de tienda física (Campaña)
* dbonilla. 18/jun/2025
*****/
// Tienda física
var tiendaFisicaDiv = $( "", {
class: "cointainer-shopping-cart-order-tienda-fisica aditional-info-order"
})
.append( $( "
", {
text: "Tienda física"
}))
.append( $( " ", {
type: "checkbox"
, id: "tienda_fisica"
}))
;
// Se obtienen los atributos adicionales del documento que se está seleccionando
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
const fd = new FormData();
fd.append('action', 'get_shopping_cart_document');
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('token', '');
fd.append('fk_soc', fkSoc);
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (data) => {
valor = data.moreAttributes;
const attachArray = data.attach;
docStatus = valor.fk_statut;
if (esProspecto == 1 && valor.elementtype == 'commande') { // Solo si es un pedido y el cliente es prospecto
shoppingCartDocOrderAditionalInfoDiv.append(docsProspectDiv, notePublicDiv, facturaEspecialDiv, soloRemisionarDiv, condicionesPagoDiv, ordenCompraDiv, acompaOrsyDiv, quienSolicitaDiv, observaGuiaDiv);
}
else {
shoppingCartDocOrderAditionalInfoDiv.append(notePublicDiv, facturaEspecialDiv, soloRemisionarDiv, condicionesPagoDiv, ordenCompraDiv, acompaOrsyDiv, quienSolicitaDiv, observaGuiaDiv);
}
/*****
* Se incluye la posibilidad de que se determine si requiere firma, sólo para pedidos
* dbonilla. 27/mar/2025
*****/
if (valor.elementtype == 'commande') {
shoppingCartDocOrderAditionalInfoDiv.append(requiereFirmaDiv);
/*****
* Se incluye marcación de tienda física (Camapaña)
* dbonilla. 18/jun/2025
*****/
shoppingCartDocOrderAditionalInfoDiv.append(tiendaFisicaDiv);
}
modalMoreAttributes.append(shoppingCartDocOrderAditionalInfoDiv);
modalMoreAttributes.dialog({
modal: true
, width: innerWidth * 0.6
, height: innerHeight * 0.5
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
// $( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-dialog-titlebar" ).text('ATRIBUTOS ADICIONALES');
$( ".ui-dialog-titlebar" ).css("text-align", "center");
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
modalMoreAttributes.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalMoreAttributes.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message" ); // para manejar el estilo de la letra de los botones
$( ".ui-dialog-titlebar-close").hide();
// Documentos de cliente prospecto. Aplica sólo para cuando el cliente es un prospecto (client = 2 y prospeco = 1)
$atributo = $( "#view_docs_prospecto" );
$atributo.on( "click", function(e) {
e.stopPropagation();
console.log("Se cargamodal para visualizar o administrar los documentos anexos del cliente prospecto");
// contenedor de la lista de documentos del cliente prospecto que se vayan anexando al pedido
var docsProspectoContainer = $( "", {
class: "container-docs-prospecto"
})
.append( $( "
", {
class: "title-list-docs-prospecto"
})
.append( $( "
", {
text: "Lista de documentos del cliente prospecto"
}))
.append( $( "", {
class: "fa fa-plus-circle"
, id: "add_docs_prospecto"
}))
)
.append( $( "", {
class: "list-docs-prospecto"
}))
// Se levanta modal con posibilidad de visualizar y modificar los anexos
var modalDocsProspecto = $('', {
class: "view-docs-prospecto font-window-more-attributes"
})
;
$(document).off("click", "[id^='view_attach_file_prospecto_'], [id^='delete_attach_file_prospecto_']");
modalDocsProspecto.append(docsProspectoContainer);
modalPadre = modalMoreAttributes.closest(".ui-dialog"); // Esto es clave para que el modal hijo pueda moverse libremente en la ventana
modalDocsProspecto.dialog({
modal: true
, appendTo: modalPadre
, width: window.innerWidth * 0.6
, height: window.innerHeight * 0.6
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
modalDocsProspecto.prev(".ui-dialog-titlebar").hide()
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
$( "#btn_cerrar" ).focus(); // Establecer el foco en el botón "btn_cancel_send_mail"
modalDocsProspecto.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalDocsProspecto.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-more-attributes" ); // para manejar el estilo de la letra de los botones
// se generan los elementos li que corresponden a los documentos anexos que tenga el carro de compras correspondientes a los anexos del clientes prospecto
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
const fd = new FormData();
fd.append('action', 'list_docs_prospecto');
fd.append('fk_shopping_cart', fkShoppingCart);
fd.append('token', '');
fd.append('fk_soc', fkSoc);
// Si se requiere que la funcion callbak maneje más parametros
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (lista) => {
var numAttachFiles = lista.numAttachFiles;
if (numAttachFiles > 0) {
var attachFiles = lista.attachFiles;
var $listDocs = $(".list-docs-prospecto");
$.each(attachFiles, function (consecutivoDocs, attachFile) {
consecutivoDocs++;
var liDocsProspecto = createLiElement(consecutivoDocs, attachFile);
$listDocs.append(liDocsProspecto);
$( "#view_attach_file_prospecto_" + attachFile.rowid).data("fk_attach_document", attachFile.rowid);
$( "#view_attach_file_prospecto_" + attachFile.rowid).data("filename", attachFile.filename);
$( "#view_attach_file_prospecto_" + attachFile.rowid).data("filepath", attachFile.filepath);
$( "#delete_attach_file_prospecto_" + attachFile.rowid).data("fk_attach_document", attachFile.rowid);
});
// Evento delegado para visualizar o eliminar el documento anexo
$(document).on("click", "[id^='view_attach_file_prospecto_'], [id^='delete_attach_file_prospecto_']", function (e) {
e.stopPropagation();
var action = $(this).hasClass("view-attach-file-prospecto") ? 'view_attach_prospecto' : 'delete_attach_prospecto';
if (action == 'view_attach_prospecto') {
preview_attachment($( this ).data("filename"), '/'+ $( this ).data("filepath"), $('#modal-more-attributes').closest('.ui-dialog'), userCanDownloadAttachment=false, maxHeightVisor=80)
}
else if (action == 'delete_attach_prospecto') {
var elementoUl = $( this ).parent();
var thisElement = $( this);
elementoUl.css( "outline", "4px solid red");
// se genera modal para validar confirmar la eliminación del anexo
var modalDeleteDocsProspecto = $('
', {
class: "font-window-message"
, text: '¿Está seguro de querer eliminar el anexo?'
});
modalPadre = $(".view-docs-prospecto").closest(".ui-dialog");
modalDeleteDocsProspecto.dialog({
modal: true
, width: innerWidth * 0.5
, appendTo: modalPadre
, position: { my: 'center', at: 'center', of: $( window ) }
, open: function() {
modalDeleteDocsProspecto.prev( ".ui-dialog-titlebar" ).hide(); // Para ocultar la barra de título
$( ".ui-widget-overlay" ).attr("style", "background-color: grey; opacity: .6;");
$( "#btn_no_delete_attach_prospecto" ).focus(); // Establecer el foco en el botón "btn_cancel_send_mail"
modalDeleteDocsProspecto.closest( ".ui-dialog" ).css("border-radius", "10px"); // borde redondo del modal
modalDeleteDocsProspecto.parent().find( ".ui-dialog-buttonset" ).addClass( "font-window-message" ); // para manejar el estilo de la letra de los botones
}
, close: function() {
modalDeleteDocsProspecto.parent().find( ".ui-dialog-buttonset" ).removeClass( "font-window-message" );
modalDeleteDocsProspecto.dialog( "destroy" );
}
, buttons: [
{
text: "Sí"
, id: "btn_yes_delete_orden_compra"
, click: function() {
var fd = new FormData();
var fkAttachDocument = thisElement.data("fk_attach_document");
var fkSoc = $(".top-section-info-current .current-customer-info").data("fk_soc");
fd.append("action", action);
fd.append("fk_attach_document", fkAttachDocument);
fd.append('token', '');
fd.append('fk_soc', fkSoc);
call_ajax_fetch('/crm/custom/invdspeedy/ajax/shopping_cart.php', fd, (data) => {
elementoUl.remove();
$(".list-docs-prospecto li").each(function (index) {
$(this).find("span:first").text(index + 1);
});
modalDeleteDocsProspecto.dialog( "close" );
});
}
}
, {
text: "Cancelar"
, id: "btn_no_delete_attach_prospecto"
, click: function() {
elementoUl.css( "outline", "none");
modalDeleteDocsProspecto.dialog( "close" );
}
}
]
});
}
});
}
});
function createLiElement(consecutivoDocs, attachFile) {
var $liDocsProspecto = $("
", { class: "li-list-docs-prospecto" })
.append($("", { text: consecutivoDocs }))
.append($("", { text: attachFile.filename }))
.append($("", { class: "fa fa-search view-attach-file-prospecto", id: "view_attach_file_prospecto_" + attachFile.rowid }))
.append($("