diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
index 31ef4ed1..7c3e941d 100644
--- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
@@ -239,7 +239,13 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
if(isset($sanitizedData['total_aceptado_revisado']) && $sanitizedData['total_aceptado_revisado'] != 0
&& $sanitizedData['total_aceptado_revisado'] != null && $sanitizedData['total_aceptado_revisado'] != ""){
$sanitizedData['aprobado_at'] = $sanitizedData['updated_at'];
- $sanitizedData['aprobado_by'] = $sanitizedData['user_updated_id'];
+ $sanitizedData['aprobado_user_id'] = $sanitizedData['user_updated_id'];
+ }
+
+ if ($presupuestoEntity->estado_id == 1 && isset($postData['confirmar']) && $postData['confirmar'] == 1) {
+ $sanitizedData['aprobado_at'] = $sanitizedData['updated_at'];
+ $sanitizedData['aprobado_user_id'] = $sanitizedData['user_updated_id'];
+ $sanitizedData['total_aceptado_revisado'] = $sanitizedData['total_presupuesto'];
}
if ($this->request->getPost('is_duplicado') == null) {
@@ -638,8 +644,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$data['resumen']['total_factor_ponderado'] = is_numeric($presupuesto->total_factor_ponderado) ? $presupuesto->total_factor_ponderado : 0;
$data['total_aceptado_revisado'] = $presupuesto->total_aceptado_revisado;
- $data['aprobado_by_at'] = ($presupuesto->aprobado_user_id != null)?model('App\Models\UserModel')->getFullName($presupuesto->aprobado_user_id) . ', '
- . date('d/m/Y', strtotime($presupuesto->aprobado_at)):'';
+ $data['aprobado_by_at'] = ($presupuesto->aprobado_user_id != null)?
+ model('App\Models\UserModel')->getFullName($presupuesto->aprobado_user_id) . ', '
+ . date('d/m/Y H:i:s', strtotime($presupuesto->aprobado_at)):'';
$data['resumen']['iva_reducido'] = $presupuesto->iva_reducido;
diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php
index c4993d9c..2b28d821 100755
--- a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php
+++ b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php
@@ -100,6 +100,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
"total_factor" => null,
"total_factor_ponderado" => null,
'total_aceptado' => null,
+ 'total_aceptado_revisado' => null,
'iva_reducido' => null,
'excluir_rotativa' => null,
"acabado_cubierta_id" => null,
@@ -173,6 +174,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
"total_factor" => "?float",
"total_factor_ponderado" => "?float",
'total_aceptado' => "?float",
+ 'total_aceptado_revisado' => "?float",
'iva_reducido' => "?boolean",
'excluir_rotativa' => "?boolean",
"acabado_cubierta_id" => "int",
diff --git a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php
index 90da4d00..cc24fb30 100755
--- a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php
+++ b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php
@@ -74,6 +74,7 @@ class PresupuestoDireccionesModel extends \App\Models\BaseModel
$builder->where('t1.presupuesto_id', $presupuesto_id);
$builder->join("lg_paises t2", "t1.pais_id = t2.id", "left");
+ $builder->orderBy('t1.id', 'DESC');
return empty($search)
? $builder
diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php
index 38f9aada..676e78b8 100755
--- a/ci4/app/Models/Presupuestos/PresupuestoModel.php
+++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php
@@ -119,6 +119,7 @@ class PresupuestoModel extends \App\Models\BaseModel
"total_descuento",
"total_descuentoPercent",
"total_presupuesto",
+ "total_aceptado_revisado",
"total_precio_unidad",
"total_factor",
"total_factor_ponderado",
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php
index 24eb02b6..31a2a04b 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php
@@ -44,13 +44,13 @@
Coste de envío
- Precio de envío
-
+ class="autonumeric-resumen-currency">
Margen envío
+ class="autonumeric-resumen-currency">
+ Total envío base
+
@@ -69,7 +69,7 @@
- - Total
+ - Total antes de descuento
-
- Descuento (%)
@@ -118,28 +118,41 @@
+
+
+
El total aceptado y revisado tiene que ser mayor que total costes + precio de envío
+
+
- estado_id == 2): ?>
+ estado_id == 2): ?>
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/httpdocs/assets/js/safekat/components/chat.js b/httpdocs/assets/js/safekat/components/chat.js
index e0de09bf..043a6fef 100644
--- a/httpdocs/assets/js/safekat/components/chat.js
+++ b/httpdocs/assets/js/safekat/components/chat.js
@@ -68,7 +68,7 @@ class Chat {
}
if (this.chatHistoryBody[0]) {
- console.log("History body");
+ //console.log("History body");
this.scrollbarChatHistory = new PerfectScrollbar(this.chatHistoryBody[0], {
wheelPropagation: false,
suppressScrollX: true,
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js
index 1606cd6e..c597c3ce 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js
@@ -120,9 +120,28 @@ class PresupuestoAdminEdit {
this.tiradasAlternativas.init();
this.resumen.init();
- $('#btn_aceptar_revisado').on('click', function () {
-
- this.resumen.updateTotales({ updateLP: true, updateServicios: true, updateEnvio: true });
+ $('#btn_ajustar_revisado').on('click', function () {
+
+ this.resumen.updateTotales({ updateLP: true, updateServicios: true, updateEnvio: true }, true);
+ }.bind(this));
+
+ $('#total_aceptado_revisado').on('change', function () {
+ let totalCostes = AutoNumeric.getAutoNumericElement($('#totalCostes')[0]);
+ let envio_base = AutoNumeric.getAutoNumericElement($('#precioEnvios')[0]);
+ let autoTotalAceptado = AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]);
+ let total_aceptado_revisado = autoTotalAceptado.getNumber();
+
+ if (total_aceptado_revisado && total_aceptado_revisado != 0) {
+ const nuevoTotal = totalCostes.getNumber() + envio_base.getNumber();
+
+ if (total_aceptado_revisado < nuevoTotal) {
+ // Solo usá .set(), no .val() ni .html()
+ autoTotalAceptado.set(nuevoTotal);
+ total_aceptado_revisado = nuevoTotal;
+ }
+
+ totalMargenes = total_aceptado_revisado - nuevoTotal;
+ }
}.bind(this));
if (window.location.href.includes("edit")) {
@@ -147,7 +166,7 @@ class PresupuestoAdminEdit {
target.removeClass('d-none');
}
});
-
+
$(document).on('update-presupuesto', this.updatePresupuesto.bind(this));
@@ -380,9 +399,10 @@ class PresupuestoAdminEdit {
self.tipo_impresion.val(response.data.tipo_impresion);
self.POD.val(response.data.POD);
- $('#total_aceptado_revisado').val(response.data.total_aceptado_revisado);
+ AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]).set(response.data.total_aceptado_revisado);
+
$('#aprobado_by_at').html(response.data.aprobado_by_at);
-
+
$('#created_by').html(response.data.created_by);
$('#updated_by').html(response.data.updated_by);
$('#created_at').html(response.data.created_at);
@@ -628,7 +648,7 @@ class PresupuestoAdminEdit {
const svgData = serializer.serializeToString(shapeSvgEl);
const svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' });
const svgUrl = URL.createObjectURL(svgBlob);
- const img = new Image(shapeSvgEl.getBoundingClientRect().width,shapeSvgEl.getBoundingClientRect().height);
+ const img = new Image(shapeSvgEl.getBoundingClientRect().width, shapeSvgEl.getBoundingClientRect().height);
img.onload = () => {
const scaleFactor = 3; // Increase resolution (e.g., 2x, 3x)
const canvas = document.createElement('canvas');
@@ -639,7 +659,7 @@ class PresupuestoAdminEdit {
canvas.height = height * scaleFactor;
const ctx = canvas.getContext('2d');
ctx.scale(scaleFactor, scaleFactor);
- ctx.drawImage(img, 0,0,width,height);
+ ctx.drawImage(img, 0, 0, width, height);
const pngUrl = canvas.toDataURL('image/png');
const downloadLink = document.createElement('a');
downloadLink.href = pngUrl;
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js
index a67afda7..00170f69 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js
@@ -41,14 +41,13 @@ class Envios {
processing: true,
autoWidth: true,
responsive: true,
- order: [[0, "asc"]],
pageLength: 20,
lengthChange: false,
searching: false,
paging: false,
info: false,
scrollX: true,
-
+ ordering: false,
columns: [
{ 'data': 'tarifa_id' },
{ 'data': 'cantidad' },
@@ -87,10 +86,10 @@ class Envios {
{
orderable: false,
searchable: false,
- targets: [$('#tableOfDireccionesEnvio').find("tr:first th").length - 1]
+ // all columns
+ targets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
+ //targets: [$('#tableOfDireccionesEnvio').find("tr:first th").length - 1]
},
- { "orderData": [0], "targets": 0 },
-
],
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js
index bcedce0c..ca466e56 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js
@@ -26,22 +26,22 @@ class 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);
+ $("#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);
+ $("#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);
+ $("#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);
@@ -53,10 +53,10 @@ class Resumen {
$("#margenEnvios").val(resumen.total_margen_envios || 0);
$("#totalCostes").html(resumen.total_costes || 0).val();
- $("#porcentajeMargen").html(resumen.porcentajeMargen ? resumen.porcentajeMargen: 0);
+ $("#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);
+ $("#porcentajeMargen").val(resumen.porcentajeMargen ? resumen.porcentajeMargen : 0);
$("#totalMargenes").val(resumen.total_margenes || 0);
$("#totalAntesDescuento").html(resumen.total_antes_descuento || 0);
@@ -64,14 +64,14 @@ class Resumen {
$("#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);
+ $("#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);
+ $("#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);
@@ -94,7 +94,7 @@ class Resumen {
- async updateTotales(data = {}) {
+ async updateTotales(data = {}, ajustar = false) {
const self = this;
@@ -181,7 +181,7 @@ class Resumen {
$('#porcentajeMargenImpresion').html(porcentajeMargenImpresion).val(porcentajeMargenImpresion.toFixed(2))
$('#totalCosteImpresion').html(totalImpresion).val(totalImpresion.toFixed(2))
$('#margenImpresion').html(margenImpresion).val(margenImpresion.toFixed(2))
-
+
}
else {
@@ -297,18 +297,45 @@ class Resumen {
margenEnvios = parseFloat($('#margenEnvios').attr('val'))
}
- let totalCostes = parseFloat(totalPapel.toFixed(2)) + parseFloat(totalImpresion.toFixed(2))
+ 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 total_aceptado_revisado = AutoNumeric.getAutoNumericElement($('#total_aceptado_revisado')[0]).getNumber()
- if(total_aceptado_revisado != '' && total_aceptado_revisado != undefined &&
- total_aceptado_revisado != null && total_aceptado_revisado != 0){
- if(total_aceptado_revisado < totalCostes){
- total_aceptado_revisado = totalCoste ;
+ 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;
+ }
+
+
+
}
- totalMargenes = parseFloat(total_aceptado_revisado)- totalCostes;
+
+ if(!($('#total_aceptado') && total_aceptado_revisado < nuevoTotal)){
+ totalMargenes = total_aceptado_revisado - nuevoTotal;
+ }
+ }
}
let porcentajeMargen = totalCostes + totalMargenes > 0 ? (100 * totalMargenes / (totalCostes + totalMargenes)).toFixed(0) : 0
@@ -319,11 +346,10 @@ class Resumen {
if ($('#total_descuentoPercent').val() < 0) {
$('#total_descuentoPercent').val(0)
}
- let totalAntesDescuento = totalCostes + totalMargenes + parseFloat(totalEnvios.toFixed(2)) + totalEnvios_base;
+ let totalAntesDescuento = totalCostes + totalMargenes + totalEnvios_base;
let totalDescuento = totalAntesDescuento * parseInt($('#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())
- totalPresupuesto += totalEnvios;
$('#totalAntesDescuento').html(totalAntesDescuento).val(totalAntesDescuento.toFixed(2))
$('#descuentoTotal').html(totalDescuento).val(totalDescuento.toFixed(2))
@@ -381,6 +407,12 @@ class Resumen {
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;
+ }
+
return data;
}