Merge branch 'add/ajustar_margen' into 'main'

Add/ajustar margen

See merge request jjimenez/safekat!655
This commit is contained in:
2025-04-04 15:04:15 +00:00
10 changed files with 255 additions and 78 deletions

View File

@ -232,12 +232,22 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$postData = $this->request->getPost(); $postData = $this->request->getPost();
$postData['updated_at'] = gmdate('Y-m-d H:m:s', time()); $postData['updated_at'] = gmdate('Y-m-d H:m:s', time());
$sanitizedData = $this->sanitized($postData, $nullIfEmpty); $sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id; $sanitizedData['user_updated_id'] = auth()->user()->id;
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_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) { if ($this->request->getPost('is_duplicado') == null) {
$sanitizedData['is_duplicado'] = 0; $sanitizedData['is_duplicado'] = 0;
} }
@ -633,6 +643,12 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$data['resumen']['total_factor'] = is_numeric($presupuesto->total_factor) ? $presupuesto->total_factor : 0; $data['resumen']['total_factor'] = is_numeric($presupuesto->total_factor) ? $presupuesto->total_factor : 0;
$data['resumen']['total_factor_ponderado'] = is_numeric($presupuesto->total_factor_ponderado) ? $presupuesto->total_factor_ponderado : 0; $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 H:i:s', strtotime($presupuesto->aprobado_at)):'';
$data['resumen']['iva_reducido'] = $presupuesto->iva_reducido; $data['resumen']['iva_reducido'] = $presupuesto->iva_reducido;
$data['created_by'] = model('App\Models\Usuarios\UserModel')->getFullName($presupuesto->user_created_id); $data['created_by'] = model('App\Models\Usuarios\UserModel')->getFullName($presupuesto->user_created_id);

View File

@ -0,0 +1,25 @@
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class AddTotalAceptadoRevisadoToPresupuestos extends Migration
{
public function up()
{
$this->forge->addColumn('presupuestos', [
'total_aceptado_revisado' => [
'type' => 'FLOAT',
'null' => true,
'default' => null,
'after' => 'total_aceptado' // Opcional: reemplazar con la última columna actual
],
]);
}
public function down()
{
$this->forge->dropColumn('presupuestos', 'total_aceptado_revisado');
}
}

View File

@ -100,6 +100,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
"total_factor" => null, "total_factor" => null,
"total_factor_ponderado" => null, "total_factor_ponderado" => null,
'total_aceptado' => null, 'total_aceptado' => null,
'total_aceptado_revisado' => null,
'iva_reducido' => null, 'iva_reducido' => null,
'excluir_rotativa' => null, 'excluir_rotativa' => null,
"acabado_cubierta_id" => null, "acabado_cubierta_id" => null,
@ -173,6 +174,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
"total_factor" => "?float", "total_factor" => "?float",
"total_factor_ponderado" => "?float", "total_factor_ponderado" => "?float",
'total_aceptado' => "?float", 'total_aceptado' => "?float",
'total_aceptado_revisado' => "?float",
'iva_reducido' => "?boolean", 'iva_reducido' => "?boolean",
'excluir_rotativa' => "?boolean", 'excluir_rotativa' => "?boolean",
"acabado_cubierta_id" => "int", "acabado_cubierta_id" => "int",

View File

@ -74,6 +74,7 @@ class PresupuestoDireccionesModel extends \App\Models\BaseModel
$builder->where('t1.presupuesto_id', $presupuesto_id); $builder->where('t1.presupuesto_id', $presupuesto_id);
$builder->join("lg_paises t2", "t1.pais_id = t2.id", "left"); $builder->join("lg_paises t2", "t1.pais_id = t2.id", "left");
$builder->orderBy('t1.id', 'DESC');
return empty($search) return empty($search)
? $builder ? $builder

View File

@ -119,6 +119,7 @@ class PresupuestoModel extends \App\Models\BaseModel
"total_descuento", "total_descuento",
"total_descuentoPercent", "total_descuentoPercent",
"total_presupuesto", "total_presupuesto",
"total_aceptado_revisado",
"total_precio_unidad", "total_precio_unidad",
"total_factor", "total_factor",
"total_factor_ponderado", "total_factor_ponderado",

View File

@ -2,14 +2,12 @@
<div class="card accordion-item active"> <div class="card accordion-item active">
<h2 class="accordion-header" id="headingOne"> <h2 class="accordion-header" id="headingOne">
<button type="button" class="accordion-button" data-bs-toggle="collapse" <button type="button" class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#accordionResumenTip" aria-expanded="false" data-bs-target="#accordionResumenTip" aria-expanded="false" aria-controls="accordionResumenTip">
aria-controls="accordionResumenTip">
<h4><?= lang("Presupuestos.resumen") ?></h4> <h4><?= lang("Presupuestos.resumen") ?></h4>
</button> </button>
</h2> </h2>
<div id="accordionResumenTip" class="accordion-collapse collapse show" <div id="accordionResumenTip" class="accordion-collapse collapse show" data-bs-parent="#accordionResumen">
data-bs-parent="#accordionResumen">
<div class="accordion-body"> <div class="accordion-body">
<div class="col-xl-12"> <div class="col-xl-12">
@ -18,63 +16,88 @@
<!-- Price Details --> <!-- Price Details -->
<dl class="row mb-0"> <dl class="row mb-0">
<dt class="col-5 py-1 fw-normal text-end">Coste papel</dt> <dt class="col-5 py-1 fw-normal text-end">Coste papel</dt>
<dd class="py-1 col-6 text-end"><span id="totalCostePapel" class="autonumeric-resumen-currency"></span></dd> <dd class="py-1 col-6 text-end"><span id="totalCostePapel"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 py-1 fw-normal text-end">Margen papel</dt> <dt class="col-5 py-1 fw-normal text-end">Margen papel</dt>
<dd class="col-3 text-end py-1"><span id="porcentajeMargenPapel" class="autonumeric-resumen-percent"></span></dd> <dd class="col-3 text-end py-1"><span id="porcentajeMargenPapel"
<dd class="col-3 text-end py-1"><span id="margenPapel" class="autonumeric-resumen-currency"></span></dd> class="autonumeric-resumen-percent"></span></dd>
<dd class="col-3 text-end py-1"><span id="margenPapel"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 fw-normal text-end">Coste impresión</dt> <dt class="col-5 fw-normal text-end">Coste impresión</dt>
<dd class="col-6 text-end py-1"><span id="totalCosteImpresion" class="autonumeric-resumen-currency"></span></dd> <dd class="col-6 text-end py-1"><span id="totalCosteImpresion"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 py-1 fw-normal text-end">Margen impresión</dt> <dt class="col-5 py-1 fw-normal text-end">Margen impresión</dt>
<dd class="col-3 text-end py-1"><span id="porcentajeMargenImpresion" class="autonumeric-resumen-percent"></span></dd> <dd class="col-3 text-end py-1"><span id="porcentajeMargenImpresion"
<dd class="col-3 text-end py-1"><span id="margenImpresion" class="autonumeric-resumen-currency"></span></d> class="autonumeric-resumen-percent"></span></dd>
<dd class="col-3 text-end py-1"><span id="margenImpresion"
class="autonumeric-resumen-currency"></span></d>
<dt class="col-5 fw-normal text-end">Coste servicios</dt> <dt class="col-5 fw-normal text-end">Coste servicios</dt>
<dd class="col-6 text-end py-1 "><span id="totalServicios" class="autonumeric-resumen-currency"></span></dd> <dd class="col-6 text-end py-1 "><span id="totalServicios"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 fw-normal text-end">Margen servicios</dt> <dt class="col-5 fw-normal text-end">Margen servicios</dt>
<dd class="col-3 text-end py-1 "><span id="porcentajeMargenServicios" class="autonumeric-resumen-percent"></span></dd> <dd class="col-3 text-end py-1 "><span id="porcentajeMargenServicios"
<dd class="col-3 text-end py-1 "><span id="margenServicios" class="autonumeric-resumen-currency"></span></dd> class="autonumeric-resumen-percent"></span></dd>
<dd class="col-3 text-end py-1 "><span id="margenServicios"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 fw-normal text-end">Coste de envío</dt> <dt class="col-5 fw-normal text-end">Coste de envío</dt>
<dd class="col-6 text-end py-1 "><span id="costeEnvios" class="autonumeric-resumen-currency"></span></sp> <dd class="col-6 text-end py-1 "><span id="costeEnvios"
<dt class="col-5 fw-normal text-end">Precio de envío</dt> class="autonumeric-resumen-currency"></span></dd>
<dd class="col-6 text-end py-1 "><span id="precioEnvios" class="autonumeric-resumen-currency"></span></sp>
<dt class="col-5 fw-normal text-end">Margen envío</dt> <dt class="col-5 fw-normal text-end">Margen envío</dt>
<dd class="col-6 text-end py-1 "><span id="margenEnvios" class="autonumeric-resumen-currency"></span></sp> <dd class="col-6 text-end py-1 "><span id="margenEnvios"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 fw-normal text-end">Total envío base</dt>
<dd class="col-6 text-end py-1 "><span id="precioEnvios"
class="autonumeric-resumen-currency"></span></dd>
</dl> </dl>
<hr class="mx-n4"> <hr class="mx-n4">
<dl class="row mb-0"> <dl class="row mb-0">
<dt class="col-5 fw-normal text-end">Total Costes</dt> <dt class="col-5 fw-normal text-end">Total Costes</dt>
<dd class="col-6 text-end "><span id="totalCostes" class="autonumeric-resumen-currency"></span></span> <dd class="col-6 text-end "><span id="totalCostes"
class="autonumeric-resumen-currency"></span></span>
<dt class="col-5 fw-normal text-end">Total Margen</dt> <dt class="col-5 fw-normal text-end">Total Margen</dt>
<dd class="col-3 text-end py-1"><span id="porcentajeMargen" class="autonumeric-resumen-percent"></span></dd> <dd class="col-3 text-end py-1"><span id="porcentajeMargen"
<dd class="col-3 text-end py-1"><span id="totalMargenes" class="autonumeric-resumen-currency"></span></dd> class="autonumeric-resumen-percent"></span></dd>
<dd class="col-3 text-end py-1"><span id="totalMargenes"
class="autonumeric-resumen-currency"></span></dd>
</dl> </dl>
<hr class="mx-n4"> <hr class="mx-n4">
<dl class="row mb-0"> <dl class="row mb-0">
<dt class="col-5 fw-normal text-end">Total</dt> <dt class="col-5 fw-normal text-end">Total antes de descuento</dt>
<dd class="col-6 text-end"><span id="totalAntesDescuento" class="autonumeric-resumen-currency"></span></span> <dd class="col-6 text-end"><span id="totalAntesDescuento"
class="autonumeric-resumen-currency"></span></span>
<dt class="col-5 py-1 fw-normal text-end">Descuento (%)</dt> <dt class="col-5 py-1 fw-normal text-end">Descuento (%)</dt>
<dd id="dd" class="col-3 text-end py-1"><input id="total_descuentoPercent" type="number" value="" class="update-totales form-control" style="width:100% !important;"></dd> <dd id="dd" class="col-3 text-end py-1"><input id="total_descuentoPercent" type="number"
<dd class="col-3 py-1 text-end "><span id="descuentoTotal" class="autonumeric-resumen-currency"></span></dd> value="" class="update-totales form-control" style="width:100% !important;"></dd>
<dd class="col-3 py-1 text-end "><span id="descuentoTotal"
class="autonumeric-resumen-currency"></span></dd>
<dt class="col-5 text-end">Total presupuesto</dt> <dt class="col-5 text-end">Total presupuesto</dt>
<dd class="col-6 text-end"><span id="totalDespuesDecuento" class="fw-semibold autonumeric-resumen-currency"></span></dd> <dd class="col-6 text-end"><span id="totalDespuesDecuento"
class="fw-semibold autonumeric-resumen-currency"></span></dd>
<dt class="col-5 fw-normal text-end">Precio unidad</dt> <dt class="col-5 fw-normal text-end">Precio unidad</dt>
<dd class="col-6 text-end mb-2"><span id="precioUnidadPresupuesto" class="autonumeric-resumen-currency-4"></span></dd> <dd class="col-6 text-end mb-2"><span id="precioUnidadPresupuesto"
class="autonumeric-resumen-currency-4"></span></dd>
<dt class="col-5 fw-normal text-end" style="font-size: smaller !important;">Factor</dt> <dt class="col-5 fw-normal text-end" style="font-size: smaller !important;">Factor</dt>
<dd class="col-6 text-end mb-2 "><span id="factor" class="autonumeric-resumen-2" style="font-size: smaller !important;"></span></dd> <dd class="col-6 text-end mb-2 "><span id="factor" class="autonumeric-resumen-2"
<dt class="col-5 fw-normal text-end" style="font-size: smaller !important;">Factor Ponderado</dt> style="font-size: smaller !important;"></span></dd>
<dd class="col-6 text-end mb-0"><span id="factor_ponderado" class="autonumeric-resumen-2" style="font-size: smaller !important;"></span></dd> <dt class="col-5 fw-normal text-end" style="font-size: smaller !important;">Factor Ponderado
</dt>
<dd class="col-6 text-end mb-0"><span id="factor_ponderado" class="autonumeric-resumen-2"
style="font-size: smaller !important;"></span></dd>
</dl> </dl>
</div> </div>
<div class="d-grid float-end mb-4"> <div class="d-grid float-end mb-4">
<div class="form-check form-switch mb-2"> <div class="form-check form-switch mb-2">
<input class="form-check-input" <?= $presupuestoEntity->estado_id == 2 ? 'onclick="return false;"' : ''; ?> type="checkbox" id="confirmar_presupuesto" name="confirmar_presupuesto" value="1" <?= $presupuestoEntity->estado_id == 2 ? 'checked' : ''; ?>> <input class="form-check-input" <?= $presupuestoEntity->estado_id == 2 ? 'onclick="return false;"' : ''; ?> type="checkbox" id="confirmar_presupuesto"
<label class="form-check-label" for="confirmar_presupuesto"><?= $presupuestoEntity->estado_id == 2 ? lang('Presupuestos.confirmado') : lang('Presupuestos.confirmar'); ?></label> name="confirmar_presupuesto" value="1" <?= $presupuestoEntity->estado_id == 2 ? 'checked' : ''; ?>>
<label class="form-check-label"
for="confirmar_presupuesto"><?= $presupuestoEntity->estado_id == 2 ? lang('Presupuestos.confirmado') : lang('Presupuestos.confirmar'); ?></label>
</div> </div>
</div> </div>
</div> </div>
@ -92,18 +115,53 @@
</select> </select>
</div> </div>
<?php if ($presupuestoEntity->estado_id == 2): ?> <div class="col-xl-12 mt-3">
<div class="row mt-5"> <div class="card border border-secondary-subtle rounded-3">
<div class="mb-1"> <div class="card-body">
<label for="totalAceptado" class="form-label"> <div id="div_ajustar_error" class="alert alert-danger d-flex align-items-baseline d-none" role="alert">
<?= lang('Presupuestos.totalAceptado') ?> <span class="alert-icon alert-icon-lg text-primary me-2">
</label> <i class="ti ti-ban ti-sm"></i>
<input disabled type="text" id="totalAceptado" name="totalAceptado" class="form-control autonumeric-resumen-currency" value="" <?php echo ($tipo_impresion_id == 21) ? ' max=80' : '' ?>> </span>
</div><!--//.mb-3 --> <div class="d-flex flex-column ps-1">
</div> <h5 id="error_recalcular_margen" class="alert-heading mb-2"></h5>
<?php endif; ?> </div>
</div>
</div> <!-- //.accordion-body --> <div class="row">
</div> <!-- //.accordion-collapse --> <p>El total aceptado y revisado tiene que ser mayor que total costes + precio de envío
</div> <!-- //.accordion-item --> </p>
</div> <!-- //.accordion --> </div>
<div class="row">
<div class="col-sm-6 mb-md-0 mb-2">
<label for="total_aceptado_revisado" class="form-label">Total aceptado y
revisado</label>
<input <?= ($presupuestoEntity->estado_id == 2) ? "disabled" : "" ?> type="text"
class="autonumeric-currency form-control text-center fs-5"
id="total_aceptado_revisado"></input>
</div>
<div class="col-sm-6 d-flex align-items-end mb-md-0 mb-2">
<button type="button" id="btn_ajustar_revisado"
class="btn btn-primary w-100">Ajustar</button>
</div>
</div>
<?php /*if ($presupuestoEntity->estado_id == 2): ?>
<div class="row">
<div class="col-sm-6 mb-1">
<label for="totalAceptado"
class="form-label"><?= lang('Presupuestos.totalAceptado') ?></label>
<input disabled type="text" id="totalAceptado" name="totalAceptado"
class="form-control text-center fs-5 autonumeric-resumen-currency" value="" <?php echo ($tipo_impresion_id == 21) ? ' max=80' : '' ?>>
</div>
</div>
<?php endif; */?>
<div class="row">
<p>
<span id="aprobado_by_at"></span>
</p>
</div>
</div>
</div> <!-- //.card-body -->
</div> <!-- //.card -->
</div> <!-- //.col-xl-12 -->
</div> <!-- //.accordion-body -->
</div> <!-- //.accordion-collapse -->
</div> <!-- //.accordion-item -->

View File

@ -68,7 +68,7 @@ class Chat {
} }
if (this.chatHistoryBody[0]) { if (this.chatHistoryBody[0]) {
console.log("History body"); //console.log("History body");
this.scrollbarChatHistory = new PerfectScrollbar(this.chatHistoryBody[0], { this.scrollbarChatHistory = new PerfectScrollbar(this.chatHistoryBody[0], {
wheelPropagation: false, wheelPropagation: false,
suppressScrollX: true, suppressScrollX: true,

View File

@ -82,7 +82,7 @@ class PresupuestoAdminEdit {
// Autonumeric // Autonumeric
AutoNumeric.multiple('.autonumeric-currency', { decimalPlaces: 2, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' }); AutoNumeric.multiple('.autonumeric-currency', { decimalPlaces: 2, currencySymbol: '€', currencySymbolPlacement: 's', digitGroupSeparator: '.', decimalCharacter: ',' });
const impresion_id = $('#tipo_impresion_id').val(); const impresion_id = $('#tipo_impresion_id').val();
let tipoLibro = ''; let tipoLibro = '';
if (impresion_id == 1 || impresion_id == 2) { if (impresion_id == 1 || impresion_id == 2) {
@ -120,6 +120,30 @@ class PresupuestoAdminEdit {
this.tiradasAlternativas.init(); this.tiradasAlternativas.init();
this.resumen.init(); this.resumen.init();
$('#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")) { if (window.location.href.includes("edit")) {
setTimeout(() => { setTimeout(() => {
@ -142,7 +166,7 @@ class PresupuestoAdminEdit {
target.removeClass('d-none'); target.removeClass('d-none');
} }
}); });
$(document).on('update-presupuesto', this.updatePresupuesto.bind(this)); $(document).on('update-presupuesto', this.updatePresupuesto.bind(this));
@ -375,6 +399,10 @@ class PresupuestoAdminEdit {
self.tipo_impresion.val(response.data.tipo_impresion); self.tipo_impresion.val(response.data.tipo_impresion);
self.POD.val(response.data.POD); self.POD.val(response.data.POD);
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); $('#created_by').html(response.data.created_by);
$('#updated_by').html(response.data.updated_by); $('#updated_by').html(response.data.updated_by);
$('#created_at').html(response.data.created_at); $('#created_at').html(response.data.created_at);
@ -620,7 +648,7 @@ class PresupuestoAdminEdit {
const svgData = serializer.serializeToString(shapeSvgEl); const svgData = serializer.serializeToString(shapeSvgEl);
const svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' }); const svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' });
const svgUrl = URL.createObjectURL(svgBlob); 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 = () => { img.onload = () => {
const scaleFactor = 3; // Increase resolution (e.g., 2x, 3x) const scaleFactor = 3; // Increase resolution (e.g., 2x, 3x)
const canvas = document.createElement('canvas'); const canvas = document.createElement('canvas');
@ -631,7 +659,7 @@ class PresupuestoAdminEdit {
canvas.height = height * scaleFactor; canvas.height = height * scaleFactor;
const ctx = canvas.getContext('2d'); const ctx = canvas.getContext('2d');
ctx.scale(scaleFactor, scaleFactor); 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 pngUrl = canvas.toDataURL('image/png');
const downloadLink = document.createElement('a'); const downloadLink = document.createElement('a');
downloadLink.href = pngUrl; downloadLink.href = pngUrl;

View File

@ -41,14 +41,13 @@ class Envios {
processing: true, processing: true,
autoWidth: true, autoWidth: true,
responsive: true, responsive: true,
order: [[0, "asc"]],
pageLength: 20, pageLength: 20,
lengthChange: false, lengthChange: false,
searching: false, searching: false,
paging: false, paging: false,
info: false, info: false,
scrollX: true, scrollX: true,
ordering: false,
columns: [ columns: [
{ 'data': 'tarifa_id' }, { 'data': 'tarifa_id' },
{ 'data': 'cantidad' }, { 'data': 'cantidad' },
@ -87,10 +86,10 @@ class Envios {
{ {
orderable: false, orderable: false,
searchable: 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: { language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"

View File

@ -11,7 +11,7 @@ class Resumen {
const self = this; const self = this;
this.toastPresupuestoTotal = null this.toastPresupuestoTotal = null
$(".update-totales").on("change", function () { $(".update-totales").on("change", function () {
self.updateTotales(true, true, true) self.updateTotales(null, { updateLP: true, updateServicios: true, updateEnvio: true });
}); });
$(document).on('update-totales', async function () { $(document).on('update-totales', async function () {
@ -26,22 +26,22 @@ class Resumen {
// Mapear los valores a los elementos HTML por ID // Mapear los valores a los elementos HTML por ID
$("#totalCostePapel").val(resumen.total_coste_papel || 0); $("#totalCostePapel").val(resumen.total_coste_papel || 0);
$("#totalCostePapel").html(resumen.total_coste_papel || 0); $("#totalCostePapel").html(resumen.total_coste_papel || 0);
$("#porcentajeMargenPapel").val(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); $("#porcentajeMargenPapel").html(resumen.total_margenPercent_papel ? resumen.total_margenPercent_papel : 0);
$("#margenPapel").val(resumen.total_margen_papel || 0); $("#margenPapel").val(resumen.total_margen_papel || 0);
$("#margenPapel").html(resumen.total_margen_papel || 0); $("#margenPapel").html(resumen.total_margen_papel || 0);
$("#totalCosteImpresion").val(resumen.total_coste_impresion || 0); $("#totalCosteImpresion").val(resumen.total_coste_impresion || 0);
$("#totalCosteImpresion").html(resumen.total_coste_impresion || 0); $("#totalCosteImpresion").html(resumen.total_coste_impresion || 0);
$("#porcentajeMargenImpresion").val(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); $("#porcentajeMargenImpresion").html(resumen.total_margenPercent_impresion ? resumen.total_margenPercent_impresion : 0);
$("#margenImpresion").val(resumen.total_margen_impresion || 0); $("#margenImpresion").val(resumen.total_margen_impresion || 0);
$("#margenImpresion").html(resumen.total_margen_impresion || 0); $("#margenImpresion").html(resumen.total_margen_impresion || 0);
$("#totalServicios").html(resumen.total_coste_servicios || 0); $("#totalServicios").html(resumen.total_coste_servicios || 0);
$("#totalServicios").val(resumen.total_coste_servicios || 0); $("#totalServicios").val(resumen.total_coste_servicios || 0);
$("#porcentajeMargenServicios").val(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); $("#porcentajeMargenServicios").html(resumen.total_margenPercent_servicios ? resumen.total_margenPercent_servicios : 0);
$("#margenServicios").val(resumen.total_margen_servicios || 0); $("#margenServicios").val(resumen.total_margen_servicios || 0);
$("#margenServicios").html(resumen.total_margen_servicios || 0); $("#margenServicios").html(resumen.total_margen_servicios || 0);
@ -52,11 +52,11 @@ class Resumen {
$("#margenEnvios").html(resumen.total_margen_envios || 0); $("#margenEnvios").html(resumen.total_margen_envios || 0);
$("#margenEnvios").val(resumen.total_margen_envios || 0); $("#margenEnvios").val(resumen.total_margen_envios || 0);
$("#totalCostes").html(resumen.total_costes || 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); $("#totalMargenes").html(resumen.total_margenes || 0);
$("#totalCostes").val(resumen.total_costes || 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); $("#totalMargenes").val(resumen.total_margenes || 0);
$("#totalAntesDescuento").html(resumen.total_antes_descuento || 0); $("#totalAntesDescuento").html(resumen.total_antes_descuento || 0);
@ -64,14 +64,14 @@ class Resumen {
$("#descuentoTotal").html(resumen.total_descuento || 0); $("#descuentoTotal").html(resumen.total_descuento || 0);
$("#totalDespuesDecuento").html(resumen.total_presupuesto || 0).trigger("change") $("#totalDespuesDecuento").html(resumen.total_presupuesto || 0).trigger("change")
$("#precioUnidadPresupuesto").html(resumen.total_precio_unidad || 0); $("#precioUnidadPresupuesto").html(resumen.total_precio_unidad || 0);
$("#factor").html(resumen.total_factor|| 0); $("#factor").html(resumen.total_factor || 0);
$("#factor_ponderado").html(resumen.total_factor_ponderado|| 0); $("#factor_ponderado").html(resumen.total_factor_ponderado || 0);
$("#totalAntesDescuento").val(resumen.total_antes_descuento || 0); $("#totalAntesDescuento").val(resumen.total_antes_descuento || 0);
$("#descuentoTotal").val(resumen.total_descuento || 0); $("#descuentoTotal").val(resumen.total_descuento || 0);
$("#totalDespuesDecuento").val(resumen.total_presupuesto || 0).trigger("change") $("#totalDespuesDecuento").val(resumen.total_presupuesto || 0).trigger("change")
$("#precioUnidadPresupuesto").val(resumen.total_precio_unidad || 0); $("#precioUnidadPresupuesto").val(resumen.total_precio_unidad || 0);
$("#factor").val(resumen.total_factor|| 0); $("#factor").val(resumen.total_factor || 0);
$("#factor_ponderado").val(resumen.total_factor_ponderado|| 0); $("#factor_ponderado").val(resumen.total_factor_ponderado || 0);
if (resumen.total_aceptado !== undefined) { if (resumen.total_aceptado !== undefined) {
$("#totalAceptado").html(resumen.total_aceptado || 0); $("#totalAceptado").html(resumen.total_aceptado || 0);
@ -94,7 +94,7 @@ class Resumen {
async updateTotales(event, data = {}) { async updateTotales(data = {}, ajustar = false) {
const self = this; const self = this;
@ -181,7 +181,7 @@ class Resumen {
$('#porcentajeMargenImpresion').html(porcentajeMargenImpresion).val(porcentajeMargenImpresion.toFixed(2)) $('#porcentajeMargenImpresion').html(porcentajeMargenImpresion).val(porcentajeMargenImpresion.toFixed(2))
$('#totalCosteImpresion').html(totalImpresion).val(totalImpresion.toFixed(2)) $('#totalCosteImpresion').html(totalImpresion).val(totalImpresion.toFixed(2))
$('#margenImpresion').html(margenImpresion).val(margenImpresion.toFixed(2)) $('#margenImpresion').html(margenImpresion).val(margenImpresion.toFixed(2))
} }
else { else {
@ -297,8 +297,47 @@ class Resumen {
margenEnvios = parseFloat($('#margenEnvios').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 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 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 + totalMargenes > 0 ? (100 * totalMargenes / (totalCostes + totalMargenes)).toFixed(0) : 0 let porcentajeMargen = totalCostes + totalMargenes > 0 ? (100 * totalMargenes / (totalCostes + totalMargenes)).toFixed(0) : 0
$('#totalCostes').html(totalCostes).val(totalCostes.toFixed(2)) $('#totalCostes').html(totalCostes).val(totalCostes.toFixed(2))
$('#totalMargenes').html(totalMargenes).val(totalMargenes.toFixed(2)) $('#totalMargenes').html(totalMargenes).val(totalMargenes.toFixed(2))
@ -307,11 +346,10 @@ class Resumen {
if ($('#total_descuentoPercent').val() < 0) { if ($('#total_descuentoPercent').val() < 0) {
$('#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 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 totalPresupuesto = totalAntesDescuento - totalDescuento; // para el calculo del precio_u solo se tiene en cuenta el base
let precioUnidad = totalPresupuesto / parseInt($('#tirada').val()) let precioUnidad = totalPresupuesto / parseInt($('#tirada').val())
totalPresupuesto += totalEnvios;
$('#totalAntesDescuento').html(totalAntesDescuento).val(totalAntesDescuento.toFixed(2)) $('#totalAntesDescuento').html(totalAntesDescuento).val(totalAntesDescuento.toFixed(2))
$('#descuentoTotal').html(totalDescuento).val(totalDescuento.toFixed(2)) $('#descuentoTotal').html(totalDescuento).val(totalDescuento.toFixed(2))
@ -369,9 +407,18 @@ class Resumen {
data.total_aceptado = $('#totalDespuesDecuento').val(); 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; return data;
} }
updateFromTotalAceptadoRevisado() {
}
roundToTwoDecimals(num) { roundToTwoDecimals(num) {
return parseFloat(num.toFixed(2)); return parseFloat(num.toFixed(2));
} }