Files
safekat/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js

466 lines
24 KiB
JavaScript

import { toastPresupuestoSummary } from "../../../components/alerts/sweetAlert.js";
class Resumen {
constructor() {
}
init() {
const self = this;
this.toastPresupuestoTotal = null
$(".update-totales").on("change", function () {
self.updateTotales({ updateLP: true, updateServicios: true, updateEnvio: true });
});
$(document).on('update-totales', async function () {
await self.updateTotales();
$(document).trigger('update-totales-completed');
});
$('#total_descuentoPercent').on('change', function () {
let autoTotalAceptado = AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]);
let total_aceptado_revisado = autoTotalAceptado.getNumber();
if(total_aceptado_revisado && total_aceptado_revisado != 0)
this.updateTotales({ updateLP: false, updateServicios: false, updateEnvio: false }, true);
else
this.updateTotales({ updateLP: false, updateServicios: false, updateEnvio: false }, false);
}.bind(this));
$("#totalDespuesDecuento").on('change', this.updateToastSummary.bind(this))
}
cargar(resumen) {
// Mapear los valores a los elementos HTML por ID
$("#totalCostePapel").val(resumen.total_coste_papel || 0);
$("#totalCostePapel").html(resumen.total_coste_papel || 0);
$("#porcentajeMargenPapel").val(resumen.total_margenPercent_papel ? resumen.total_margenPercent_papel : 0);
$("#porcentajeMargenPapel").html(resumen.total_margenPercent_papel ? resumen.total_margenPercent_papel : 0);
$("#margenPapel").val(resumen.total_margen_papel || 0);
$("#margenPapel").html(resumen.total_margen_papel || 0);
$("#totalCosteImpresion").val(resumen.total_coste_impresion || 0);
$("#totalCosteImpresion").html(resumen.total_coste_impresion || 0);
$("#porcentajeMargenImpresion").val(resumen.total_margenPercent_impresion ? resumen.total_margenPercent_impresion : 0);
$("#porcentajeMargenImpresion").html(resumen.total_margenPercent_impresion ? resumen.total_margenPercent_impresion : 0);
$("#margenImpresion").val(resumen.total_margen_impresion || 0);
$("#margenImpresion").html(resumen.total_margen_impresion || 0);
$("#totalServicios").html(resumen.total_coste_servicios || 0);
$("#totalServicios").val(resumen.total_coste_servicios || 0);
$("#porcentajeMargenServicios").val(resumen.total_margenPercent_servicios ? resumen.total_margenPercent_servicios : 0);
$("#porcentajeMargenServicios").html(resumen.total_margenPercent_servicios ? resumen.total_margenPercent_servicios : 0);
$("#margenServicios").val(resumen.total_margen_servicios || 0);
$("#margenServicios").html(resumen.total_margen_servicios || 0);
$("#costeEnvios").html(resumen.total_coste_envios || 0);
$("#costeEnvios").val(resumen.total_coste_envios || 0);
$("#precioEnvios").html(resumen.total_precio_envios || 0);
$("#precioEnvios").val(resumen.total_precio_envios || 0);
$("#margenEnvios").html(resumen.total_margen_envios || 0);
$("#margenEnvios").val(resumen.total_margen_envios || 0);
$("#totalCostes").html(resumen.total_costes || 0).val();
$("#porcentajeMargen").html(resumen.porcentajeMargen ? resumen.porcentajeMargen : 0);
$("#totalMargenes").html(resumen.total_margenes || 0);
$("#totalCostes").val(resumen.total_costes || 0);
$("#porcentajeMargen").val(resumen.porcentajeMargen ? resumen.porcentajeMargen : 0);
$("#totalMargenes").val(resumen.total_margenes || 0);
$("#totalAntesDescuento").html(resumen.total_antes_descuento || 0);
$("#total_descuentoPercent").val(resumen.total_descuentoPercent || 0);
$("#descuentoTotal").html(resumen.total_descuento || 0);
$("#totalDespuesDecuento").html(resumen.total_presupuesto || 0).trigger("change")
$("#precioUnidadPresupuesto").html(resumen.total_precio_unidad || 0);
$("#factor").html(resumen.total_factor || 0);
$("#factor_ponderado").html(resumen.total_factor_ponderado || 0);
$("#totalAntesDescuento").val(resumen.total_antes_descuento || 0);
$("#descuentoTotal").val(resumen.total_descuento || 0);
$("#totalDespuesDecuento").val(resumen.total_presupuesto || 0).trigger("change")
$("#precioUnidadPresupuesto").val(resumen.total_precio_unidad || 0);
$("#factor").val(resumen.total_factor || 0);
$("#factor_ponderado").val(resumen.total_factor_ponderado || 0);
if (resumen.total_aceptado !== undefined) {
$("#totalAceptado").html(resumen.total_aceptado || 0);
$("#totalAceptado").val(resumen.total_aceptado || 0);
}
$('#ivaReducido').val(resumen.iva_reducido ? 1 : 0);
AutoNumeric.multiple('.autonumeric-resumen-currency', { decimalPlaces: 2, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-currency-4', { decimalPlaces: 4, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-percent', { decimalPlaces: 0, currencySymbol: '%', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-2', { decimalPlaces: 2, digitGroupSeparator: '.', decimalCharacter: ',' });
}
update() {
}
async updateTotales(data = {}, ajustar = false) {
const self = this;
let updateLP = data.updateLP || true;
let updateServicios = data.updateServicios || true;
let updateEnvio = data.updateEnvio || true;
let totalPapel = 0;
let margenPapel = 0;
let totalImpresion = 0;
let totalImpresionforMargen = 0;
let margenImpresion = 0;
let totalServicios = parseFloat(0);
let margenServicios = parseFloat(0);
let totalEnvios = 0;
let totalEnvios_base = 0;
let margenEnvios = 0;
let sumForFactor = 0.0;
let sumForFactorPonderado = 0.0;
let costeMaquinaHoras = 0.0;
let margenPorHoras = 0.0;
if (updateLP) {
if (typeof $("#tableLineasPresupuesto").DataTable() !== 'undefined') {
$("#tableLineasPresupuesto").DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
if (rowData.check_papel_total) {
totalPapel += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val())
margenPapel += parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val())
//sumForFactor += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val())
//sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val())
}
if (rowData.check_impresion_total) {
costeMaquinaHoras += parseFloat($('#' + rowData.row_id + '_precioImpresion').val())
margenPorHoras += parseFloat($('#' + rowData.row_id + '_margenImpresion').val())
totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val())
margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val())
//sumForFactor += parseFloat($('#' + rowData.row_id + '_totalClicks').val())
if (rowData.maquinaTipo == 'inkjet') {
totalImpresion += parseFloat(rowData.totalTinta)
totalImpresion += parseFloat(rowData.totalCorte) ?? 0;
//sumForFactor += (parseFloat(rowData.totalTinta) + parseFloat(rowData.totalCorte))
}
//sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenClicks').val())
/*if (!isNaN(parseFloat($('#' + rowData.row_id + '_totalTinta').val()))) {
totalImpresion += parseFloat($('#' + rowData.row_id + '_totalTinta').val())
sumForFactor += parseFloat($('#' + rowData.row_id + '_totalTinta').val())
}*/
}
})
}
totalImpresion -= parseFloat(margenImpresion);
totalPapel -= parseFloat(margenPapel);
margenImpresion += parseFloat(margenPorHoras) + parseFloat(costeMaquinaHoras);
sumForFactor += totalImpresion;
sumForFactor += totalPapel;
let porcentajeMargenPapel = isNaN(margenPapel / (totalPapel) * 100.0) ? 0 : margenPapel / (totalPapel) * 100.0
$('#porcentajeMargenPapel').html(porcentajeMargenPapel)
$('#porcentajeMargenPapel').val(porcentajeMargenPapel)
$('#totalCostePapel').val(totalPapel.toFixed(2))
$('#totalCostePapel').html(totalPapel)
$('#margenPapel').val(margenPapel.toFixed(2))
$('#margenPapel').html(margenPapel)
let porcentajeMargenImpresion = isNaN(margenImpresion / (totalImpresion) * 100.0) ? 0 : margenImpresion / (totalImpresion) * 100.0
$('#porcentajeMargenImpresion').html(porcentajeMargenImpresion).val(porcentajeMargenImpresion.toFixed(2))
$('#totalCosteImpresion').html(totalImpresion).val(totalImpresion.toFixed(2))
$('#margenImpresion').html(margenImpresion).val(margenImpresion.toFixed(2))
}
else {
totalPapel = parseFloat($('#totalCostePapel').attr('val'))
margenPapel = parseFloat($('#margenPapel').attr('val'))
totalImpresion = parseFloat($('#totalCosteImpresion').attr('val'))
margenImpresion = parseFloat($('#margenImpresion').attr('val'))
}
sumForFactorPonderado = sumForFactor;
if (updateServicios) {
const total = parseInt($('#tirada').val()) + parseInt($('#merma').val());
if (typeof $("#tableOfServiciosEncuadernacion").DataTable() !== 'undefined' && $("#tableOfServiciosEncuadernacion").DataTable().rows().count() > 0) {
$('#tableOfServiciosEncuadernacion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio_total));
let margen_servicio = parseFloat(rowData.margen);
let importe_fijo = parseFloat(rowData.importe_fijo);
totalServicios += total_servicio
let calculoMargen = self.roundToTwoDecimals((total_servicio-importe_fijo) / parseInt($('#tirada').val()));
calculoMargen = self.roundToTwoDecimals(calculoMargen / (1 + margen_servicio / 100.0));
calculoMargen = total_servicio - self.roundToTwoDecimals(calculoMargen * parseInt($('#tirada').val()));
margenServicios += calculoMargen
/*let base = self.roundToTwoDecimals((total_servicio-importe_fijo) / (1 + margen_servicio / 100.0));
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));*/
});
}
if (typeof $("#tableOfServiciosAcabado").DataTable() !== 'undefined' && $("#tableOfServiciosAcabado").DataTable().rows().count() > 0) {
$('#tableOfServiciosAcabado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio_total));
let margen_servicio = parseFloat(rowData.margen);
totalServicios += total_servicio
let base = self.roundToTwoDecimals(total_servicio / (1 + margen_servicio / 100.0));
base = self.roundToTwoDecimals(base / total) * total;
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));
});
}
if (typeof $("#tableOfServiciosPreimpresion").DataTable() !== 'undefined' && $("#tableOfServiciosPreimpresion").DataTable().rows().count() > 0) {
$('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio));
let base = (parseFloat(rowData.precio / (1 + parseFloat(rowData.margen) / 100.0)).toFixed(2));
base = self.roundToTwoDecimals(base / total) * total;
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));
totalServicios += total_servicio
});
}
if (typeof $("#tableOfServiciosExtra").DataTable() !== 'undefined' && $("#tableOfServiciosExtra").DataTable().rows().count() > 0) {
$('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio));
let base = (parseFloat(rowData.precio / (1 + parseFloat(rowData.margen) / 100.0)).toFixed(2));
base = self.roundToTwoDecimals(base / total) * total;
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));
totalServicios += total_servicio;
});
}
if (typeof $("#tableOfServiciosManipulado").DataTable() !== 'undefined' && $("#tableOfServiciosManipulado").DataTable().rows().count() > 0) {
$('#tableOfServiciosManipulado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
let rowData = this.data();
let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio_total));
let margen_servicio = parseFloat(rowData.margen);
totalServicios += total_servicio
let base = self.roundToTwoDecimals(total_servicio / (1 + margen_servicio / 100.0));
base = self.roundToTwoDecimals(base / total) * total;
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));
});
}
totalServicios -= margenServicios;
sumForFactorPonderado += totalServicios;
let porcentajeMargenServicios = margenServicios / (totalServicios) * 100
$('#porcentajeMargenServicios').html(isNaN(porcentajeMargenServicios) ? 0 : porcentajeMargenServicios)
$('#porcentajeMargenServicios').val(isNaN(porcentajeMargenServicios) ? 0 : porcentajeMargenServicios)
$('#totalServicios').html(totalServicios).val(totalServicios.toFixed(2))
$('#margenServicios').html(margenServicios).val(margenServicios.toFixed(2))
}
else {
totalServicios = parseFloat($('#totalServicios').attr('val'))
margenServicios = parseFloat($('#margenServicios').attr('val'))
sumForFactorPonderado += totalServicios;
}
if (updateEnvio) {
totalEnvios_base = parseFloat($('#envio_base').val());
if (typeof $('#tableOfDireccionesEnvio').DataTable() !== 'undefined' && $('#tableOfDireccionesEnvio').DataTable().rows().count() > 0) {
$('#tableOfDireccionesEnvio').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
// el primer envio es el base, y no se debe de cobrar
if (rowIdx != 0 || (rowIdx == 0 && $('#noEnvioBase').val() == 1)) {
let data = this.data()
totalEnvios += parseFloat(data.precio)
margenEnvios += parseFloat((data.precio) * data.margen / 100)
}
});
}
//totalEnvios -= margenEnvios // el precio de los envios es ya coste
$('#precioEnvios').html(totalEnvios_base).val(totalEnvios_base.toFixed(2))
$('#costeEnvios').html(totalEnvios).val(totalEnvios.toFixed(2))
$('#margenEnvios').html(margenEnvios).val(margenEnvios.toFixed(2))
}
else {
totalEnvios = parseFloat($('#precioEnvios').attr('val'))
margenEnvios = parseFloat($('#margenEnvios').attr('val'))
}
let totalCostes = parseFloat(totalPapel.toFixed(2)) + parseFloat(totalImpresion.toFixed(2))
+ parseFloat(totalServicios.toFixed(2)) + parseFloat(totalEnvios.toFixed(2))
let totalMargenes = parseFloat(margenPapel.toFixed(2)) + parseFloat(margenImpresion.toFixed(2)) + parseFloat(margenServicios.toFixed(2)) + parseFloat(margenEnvios.toFixed(2))
let autoTotalAceptado = AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]);
let total_aceptado_revisado = autoTotalAceptado.getNumber();
if (ajustar) {
if (total_aceptado_revisado && total_aceptado_revisado != 0) {
const nuevoTotal = totalCostes + totalEnvios_base;
if (total_aceptado_revisado < nuevoTotal) {
if($('#total_aceptado')){
$('#div_ajustar_error').removeClass('d-none');
$('#error_recalcular_margen').hide().empty().
html('El presupuesto está confirmado y el total coste + precio de envio es menor que el total aceptado y revisado').
fadeIn("slow", function(){
setTimeout(function(){
$('#div_ajustar_error').addClass('d-none');
}, 5000);
});
}
else{
autoTotalAceptado.set(nuevoTotal);
total_aceptado_revisado = nuevoTotal;
}
}
if(!($('#total_aceptado') && total_aceptado_revisado < nuevoTotal)){
totalMargenes = total_aceptado_revisado - nuevoTotal;
}
}
}
let porcentajeMargen = totalCostes > 0 ? (100 * totalMargenes / (totalCostes)).toFixed(0) : 0
$('#totalCostes').html(totalCostes).val(totalCostes.toFixed(2))
$('#totalMargenes').html(totalMargenes).val(totalMargenes.toFixed(2))
$('#porcentajeMargen').html(porcentajeMargen).val(porcentajeMargen)
if ($('#total_descuentoPercent').val() < 0) {
$('#total_descuentoPercent').val(0)
}
let totalAntesDescuento = totalCostes + totalMargenes + totalEnvios_base;
let totalDescuento = totalAntesDescuento * parseFloat($('#total_descuentoPercent').val() || 0) / 100
let totalPresupuesto = totalAntesDescuento - totalDescuento; // para el calculo del precio_u solo se tiene en cuenta el base
let precioUnidad = totalPresupuesto / parseInt($('#tirada').val())
$('#totalAntesDescuento').html(totalAntesDescuento).val(totalAntesDescuento.toFixed(2))
$('#descuentoTotal').html(totalDescuento).val(totalDescuento.toFixed(2))
$('#totalDespuesDecuento').html(totalPresupuesto).val(totalPresupuesto.toFixed(2))
$('#precioUnidadPresupuesto').html(precioUnidad).val(precioUnidad.toFixed(4))
$('#totalDespuesDecuento').trigger("change")
$('#factor').html(((totalPresupuesto - totalEnvios - totalEnvios_base - margenEnvios) / sumForFactor))
$('#factor').val(((totalPresupuesto - totalEnvios - totalEnvios_base - margenEnvios) / sumForFactor).toFixed(2))
$('#factor_ponderado').html(((totalPresupuesto - totalEnvios - totalEnvios_base - margenEnvios) / sumForFactorPonderado))
$('#factor_ponderado').val(((totalPresupuesto - totalEnvios - totalEnvios_base - margenEnvios) / sumForFactorPonderado).toFixed(2))
AutoNumeric.multiple('.autonumeric-resumen-currency', { decimalPlaces: 2, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-currency-4', { decimalPlaces: 4, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-percent', { decimalPlaces: 0, currencySymbol: '%', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
AutoNumeric.multiple('.autonumeric-resumen-2', { decimalPlaces: 2, digitGroupSeparator: '.', decimalCharacter: ',' });
}
getData() {
let data = {
'total_coste_papel': $('#totalCostePapel').val(),
'total_margen_papel': $('#margenPapel').val(),
'total_margenPercent_papel': $('#porcentajeMargenPapel').val(),
'total_coste_impresion': $('#totalCosteImpresion').val(),
'total_margen_impresion': $('#margenImpresion').val(),
'total_margenPercent_impresion': $('#porcentajeMargenImpresion').val(),
'total_coste_servicios': $('#totalServicios').val(),
'total_margen_servicios': $('#margenServicios').val(),
'total_margenPercent_servicios': $('#porcentajeMargenServicios').val(),
'total_coste_envios': $('#costeEnvios').val(),
'total_margen_envios': $('#margenEnvios').val(),
'total_costes': $('#totalCostes').val(),
'total_margenes': $('#totalMargenes').val(),
'total_antes_descuento': $('#totalAntesDescuento').val(),
'total_descuento': $('#descuentoTotal').val(),
'total_descuentoPercent': $('#total_descuentoPercent').val(),
'total_presupuesto': $('#totalDespuesDecuento').val(),
'total_precio_unidad': $('#precioUnidadPresupuesto').val(),
'total_factor': $('#factor').val(),
'total_factor_ponderado': $('#factor_ponderado').val(),
'iva_reducido': $('#ivaReducido').val()
};
if ($('#confirmar_presupuesto').prop('checked')) {
data.confirmar = '1';
data.total_aceptado = $('#totalDespuesDecuento').val();
}
let autoTotalAceptado = AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]);
let total_aceptado_revisado = autoTotalAceptado.getNumber();
if (total_aceptado_revisado && total_aceptado_revisado != 0) {
data.total_aceptado_revisado = total_aceptado_revisado;
}
else{
data.total_aceptado_revisado = data.total_aceptado;
}
return data;
}
updateFromTotalAceptadoRevisado() {
}
roundToTwoDecimals(num) {
return parseFloat(num.toFixed(2));
}
updateToastSummary() {
if (this.toastPresupuestoTotal) {
this.toastPresupuestoTotal.close()
}
this.toastPresupuestoTotal = toastPresupuestoSummary($("#totalDespuesDecuento").html() ?? 0)
this.toastPresupuestoTotal.fire().then((result) => {
if (result.isDismissed && result.dismiss == 'close') {
this.updateToastSummary()
$('html, body').animate(
{
scrollTop: $("#totalDespuesDecuento").offset().top
},
1000)
}
})
}
}
export default Resumen;