terminado front de tiradas. falta back

This commit is contained in:
Jaime Jiménez
2024-03-02 13:08:49 +01:00
parent f21bc36a46
commit d96199d2d0
6 changed files with 263 additions and 26 deletions

View File

@ -27,6 +27,11 @@ class Js_loader extends BaseController
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/previews.js');
}
function tiradasAlternativas_js()
{
$this->response->setHeader('Content-Type', 'text/javascript');
return view('themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems.js');
}
}

View File

@ -226,7 +226,7 @@ return [
// Servicios
'precio' => 'Precio',
'precioUnidad' => 'Precio unitario',
'precioUnidad' => 'Precio unidad',
'precioTotal' => 'Precio total',
'serviciosDefault' => 'Servicios por defecto',
'tarifa' => 'Tarifa',
@ -239,6 +239,14 @@ return [
'cantidad' => 'Cantidad',
//Tiradas alternativas
'tiradasAlternativas' => 'Tiradas alternativas',
'tiradasInfoIVA' => 'Los precios mostrados no incluyen IVA',
'tiradaMargen' => 'Margen',
'tiradaEnvio' => 'Coste Envío',
'tiradaImpresion' => 'Coste Impresión',
'validation' => [
'decimal' => 'El campo {field} debe contener un número decimal.',

View File

@ -1,4 +1,4 @@
<div class="accordion accordion-bordered mt-3 col-xl-6" id="accordionResumen">
<div class="accordion accordion-bordered mt-3 col-xl-4" id="accordionResumen">
<div class="card accordion-item active">
<h2 class="accordion-header" id="headingOne">
<button type="button" class="accordion-button" data-bs-toggle="collapse"
@ -16,52 +16,51 @@
<div class="border rounded p-4 mb-3 pb-3">
<!-- Price Details -->
<h6>Detalles del presupuesto</h6>
<dl class="row mb-0">
<dt class="col-6 py-1 fw-normal text-end">Coste papel</dt>
<dt class="col-5 py-1 fw-normal text-end">Coste papel</dt>
<dd id="totalCostePapel" class="py-1 col-6 text-end"><?= old('0', $presupuestoEntity->total_coste_papel) ?>€</dd>
<dt class="col-6 py-1 fw-normal text-end">Margen papel</dt>
<dd id="porcentajeMargenPapel" class="col-4 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_papel) ?>%</dd>
<dd id="margenPapel" class="col-2 text-end py-1"><?= old('0', $presupuestoEntity->total_margen_papel) ?>€</dd>
<dt class="col-5 py-1 fw-normal text-end">Margen papel</dt>
<dd id="porcentajeMargenPapel" class="col-3 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_papel) ?>%</dd>
<dd id="margenPapel" class="col-3 text-end py-1"><?= old('0', $presupuestoEntity->total_margen_papel) ?>€</dd>
<dt class="col-6 fw-normal text-end">Coste impresión</dt>
<dt class="col-5 fw-normal text-end">Coste impresión</dt>
<dd id="totalCosteImpresion" class="col-6 text-end"><?= old('0', $presupuestoEntity->total_coste_impresion) ?>€</dd>
<dt class="col-6 py-1 fw-normal text-end">Margen impresión</dt>
<dd id="porcentajeMargenImpresion" class="col-4 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_impresion) ?>%</dd>
<dd id="margenImpresion" class="col-2 py-1 text-end"><?= old('0', $presupuestoEntity->total_margen_impresion) ?>€</dd>
<dt class="col-5 py-1 fw-normal text-end">Margen impresión</dt>
<dd id="porcentajeMargenImpresion" class="col-3 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_impresion) ?>%</dd>
<dd id="margenImpresion" class="col-3 py-1 text-end"><?= old('0', $presupuestoEntity->total_margen_impresion) ?>€</dd>
<dt class="col-6 fw-normal text-end">Coste servicios</dt>
<dt class="col-5 fw-normal text-end">Coste servicios</dt>
<dd id="totalServicios" class="col-6 text-end py-1"><?= old('0', $presupuestoEntity->total_coste_servicios) ?>€</dd>
<dt class="col-6 fw-normal text-end">Margen servicios</dt>
<dd id="porcentajeMargenServicios" class="col-4 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_servicios) ?>%</dd>
<dd id="margenServicios" class="col-2 text-end py-1"><?= old('0', $presupuestoEntity->total_margen_servicios) ?>€</dd>
<dt class="col-5 fw-normal text-end">Margen servicios</dt>
<dd id="porcentajeMargenServicios" class="col-3 text-end py-1"><?= old('0', $presupuestoEntity->total_margenPercent_servicios) ?>%</dd>
<dd id="margenServicios" class="col-3 text-end py-1"><?= old('0', $presupuestoEntity->total_margen_servicios) ?>€</dd>
<dt class="col-6 fw-normal text-end">Coste de envío</dt>
<dt class="col-5 fw-normal text-end">Coste de envío</dt>
<dd id="totalEnvios"class="col-6 text-end py-1"><?= old('0', $presupuestoEntity->total_coste_envios) ?>€</dd>
<dt class="col-6 fw-normal text-end">Margen envío</dt>
<dt class="col-5 fw-normal text-end">Margen envío</dt>
<dd id="margenEnvios" class="col-6 text-end py-1"><?= old('0', $presupuestoEntity->total_margen_envios) ?>€</dd>
</dl>
<hr class="mx-n4">
<dl class="row mb-0">
<dt class="col-6 fw-normal text-end">Total Costes</dt>
<dt class="col-5 fw-normal text-end">Total Costes</dt>
<dd id="totalCostes" class="col-6 text-end"><?= old('0', $presupuestoEntity->total_costes) ?>€</dd>
<dt class="col-6 fw-normal text-end">Total Margen</dt>
<dt class="col-5 fw-normal text-end">Total Margen</dt>
<dd id="totalMargenes" class="col-6 text-end"><?= old('0', $presupuestoEntity->total_margenes) ?>€</dd>
</dl>
<hr class="mx-n4">
<dl class="row mb-0">
<dt class="col-6 fw-normal text-end">Total</dt>
<dt class="col-5 fw-normal text-end">Total</dt>
<dd id="totalAntesDescuento" class="col-6 text-end"><?= old('0', $presupuestoEntity->total_antes_descuento) ?>€</dd>
<dt class="col-6 py-1 fw-normal text-end">Descuento</dt>
<div class="d-flex col-4 flex-row-reverse"><input id="total_descuentoPercent" type='number' value="<?= old('0', $presupuestoEntity->total_descuentoPercent) ?>" class="update-totales form-control" style="width:50% !important;"></div>
<dd id="descuentoTotal" class="col-2 py-1 text-end"><?= old('0', $presupuestoEntity->total_descuento) ?>€</dd>
<dt class="col-6 text-end">Total presupuesto</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="<?= old('0', $presupuestoEntity->total_descuentoPercent) ?>" class="update-totales form-control" style="width:100% !important;"></dd>
<dd id="descuentoTotal" class="col-3 py-1 text-end"><?= old('0', $presupuestoEntity->total_descuento) ?>€</dd>
<dt class="col-5 text-end">Total presupuesto</dt>
<dd id="totalDespuesDecuento" class="col-6 fw-semibold text-end"><?= old('0', $presupuestoEntity->total_presupuesto) ?>€</dd>
<dt class="col-6 fw-normal text-end">Precio unidad</dt>
<dt class="col-5 fw-normal text-end">Precio unidad</dt>
<dd id="precioUnidadPresupuesto" class="col-6 text-end mb-0"><?= old('0', $presupuestoEntity->total_precio_unidad) ?>€</dd>
</dl>
</div>
@ -223,6 +222,9 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
$('#totalCostes').text((totalCostes).toFixed(2) + '€')
$('#totalMargenes').text((totalMargenes).toFixed(2) + '€')
if($('#total_descuentoPercent').val()<0){
$('#total_descuentoPercent').val(0)
}
var totalAntesDescuento = totalCostes + totalMargenes
var totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val())/100
var totalPresupuesto = totalAntesDescuento - totalDescuento

View File

@ -0,0 +1,158 @@
// Selección de la última columna de la tabla de tiradas
const lastColNr_tiradasAlt = $('#tableTiradas').find("tr:first th").length - 1;
// Función para generar los botones de acción de la tabla de tiradas
const actionBtns_tiradasAlt = function (data) {
return `
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-tirada mx-2" data-id="${data.row_id}"></i></a>
`;
};
// Inicializaciones de la tabla de tiradas
var tableTiradas;
var editor;
(async () => {
while (!window.hasOwnProperty("editor_url") && !window.hasOwnProperty("editor_headers"))
await new Promise(resolve => setTimeout(resolve, 200));
initEditorTiradas()
while (!window.hasOwnProperty("datatable_lang_url"))
await new Promise(resolve => setTimeout(resolve, 200));
initTableTiradas();
// For debugging purposes
tableTiradas.row.add({
tirada: 15,
coste_impresion: 0,
coste_envio: 0,
margen: 0,
total_pedido: 0,
precio_unidad: 0
}).draw(false);
})();
function initEditorTiradas() {
editor = new $.fn.dataTable.Editor({
ajax: {
url: window.editor_url,
headers: window.editor_headers,
},
table: "#tableTiradas",
idSrc: 'id',
fields: [
{
name: "tirada",
}, {
name: "coste_impresion",
type: "hidden"
}, {
name: "coste_envio",
type: "hidden"
}, {
name: "margen",
type: "hidden"
}, {
name: "total_pedido",
type: "hidden"
}, {
name: "precio_unidad",
type: "hidden"
}, {
name: "json_tiradas",
type: "hidden"
},
]
});
}
function initTableTiradas() {
tableTiradas = $('#tableTiradas').DataTable({
"language": {
"url": window.datatable_lang_url
},
"paging": false,
"info": false,
"searching": false,
"ordering": false,
"autoWidth": false,
"responsive": true,
"dom": '<"mt-4"><"float-end"B><"float-start"l><t>', //"Blt",
"columnDefs": [
{
orderable: false,
searchable: false,
targets: [lastColNr_tiradasAlt]
},
],
"columns": [
{ data: "tirada" },
{ data: 'coste_impresion' },
{ data: 'coste_envio' },
{ data: 'margen' },
{ data: 'total_pedido' },
{ data: 'precio_unidad' },
{
data: actionBtns_tiradasAlt,
className: 'row-edit dt-center'
}
],
"buttons": [{
className: 'btn btn-primary float-end me-sm-3 me-1',
text: '<i class="ti ti-circle-plus"></i>',
extend: "createInline",
editor: editor,
formOptions: {
submitTrigger: -1,
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>',
}
}]
});
}
// Evento de borrado de una fila de la tabla de tiradas
$(document).on('click', '.btn-delete-tirada', function (e) {
console.log(generate_json_tiradas());
const row = $(this).closest('tr');
tableTiradas.row(row)
.remove()
.draw();
})
// Función para generar el JSON de las lineas de presupuesto para calcular las tiradas
function generate_json_tiradas() {
const data = $('#tableLineasPresupuesto').DataTable().data().toArray();
return JSON.stringify(filterData(data,
['paginas',
'numPagColor',
'paginas_impresion',
'papel_impresion_id',
'gramaje',
'maquina_id',
'maquinaTipo',
'row_id']));
}
// Función para filtrar las columnas de la tabla de tiradas
function filterData(data, keys) {
return data.map(obj => {
const newObj = {};
keys.forEach(key => {
if (obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
}
});
return newObj;
});
}

View File

@ -0,0 +1,62 @@
<div class="accordion accordion-bordered mt-3 col-xl-8" id="accordionTiradas">
<div class="card accordion-item active">
<h2 class="accordion-header" id="headingOne">
<button type="button" class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#accordionTiradasTip" aria-expanded="false"
aria-controls="accordionTiradasTip">
<h4><?= lang("Presupuestos.tiradasAlternativas") ?></h4>
</button>
</h2>
<div id="accordionTiradasTip" class="accordion-collapse collapse show"
data-bs-parent="#accordionTiradas">
<div class="accordion-body">
<div class="col-xl-12">
<div class="border rounded p-4 mb-3 pb-3">
<p><?= lang('Presupuestos.tiradasInfoIVA') ?></p>
<table id="tableTiradas" class="comparator-table table dt-responsive dataTable" style="width: 100%;">
<thead>
<tr>
<th><?= lang('Presupuestos.tirada') ?></th>
<th><?= lang('Presupuestos.tiradaImpresion') ?></th>
<th><?= lang('Presupuestos.tiradaEnvio') ?></th>
<th><?= lang('Presupuestos.tiradaMargen') ?></th>
<th><?= lang('Presupuestos.totalPedido') ?></th>
<th><?= lang('Presupuestos.precioUnidad') ?></th>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div> <!-- //.accordion-body -->
</div> <!-- //.accordion-collapse -->
</div> <!-- //.accordion-item -->
</div> <!-- //.accordion -->
<!------------------------------------------------------->
<!-- Código JS comportamiento ?????. -->
<!------------------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
window.datatable_lang_url = "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json";
window.editor_url = "<?= route_to('editorOfMaquinasTarifaImpresion') ?>";
window.editor_headers= {<?= csrf_token() ?? "token" ?>: <?= csrf_token() ?>v};
<?= $this->endSection() ?>

View File

@ -25,7 +25,8 @@
<?= view("themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosEnvios") ?>
<?= view("themes/backend/vuexy/form/presupuestos/cosidotapablanda/_comentariosItems") ?>
<?= view("themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems") ?>
<?php else: ?>
<?= view("themes/backend/vuexy/form/presupuestos/cosidotapablanda/_tiradasAlternativasItems") ?>
<?php else: ?>
<input type="hidden" name="total_presupuesto" id="total_presupuesto" class="form-control"
value="0.0"></input>
<?php endif; ?>
@ -249,6 +250,7 @@ const url_parts = url.split('/');
<?php if (str_contains($formAction, 'edit')): ?>
<script src="<?= site_url('js_loader/comparadorCosidoTapaBlanda_js') ?>"></script>
<script src="<?= site_url('js_loader/previsualizador_js') ?>"></script>
<script src="<?= site_url('js_loader/tiradasAlternativas_js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/two/two.js') ?>"></script>
<?php endif; ?>
<?= $this->endSection() ?>