ya funciona añadir los servicios

This commit is contained in:
Jaime Jiménez
2024-02-21 21:58:58 +01:00
parent ae133e8bea
commit 417bc74e1f
10 changed files with 150 additions and 49 deletions

View File

@ -571,11 +571,8 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$datosPedido->solapas_ancho = $reqData['solapas_ancho'];
$datosPedido->lomo = $reqData['lomo'];
if($type=='sobrecubierta')
$datosPedido->lomo_cubierta = $reqData['lomo_cubierta'];
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($tipo_impresion_id, $datosPedido);
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($tipo_impresion_id, $datosPedido);
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
// Cubierta y sobrecubierta siempre color HQ
$resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, 1, $cliente_id);

View File

@ -42,15 +42,14 @@ class Presupuestoacabados extends \App\Controllers\GoBaseResourceController
endif;
$postData = $this->request->getJSON();
$tarifas = array_column($postData->datos, 'tarifa_id');
if(count($tarifas)>0){
$this->model->deleteServiciosNotInArray($requestedId, $tarifas);
if(count($postData->datos)>0){
$this->model->deleteServiciosNotInArray($requestedId, $postData->datos);
}
else{
$this->model->deleteAllServicios($requestedId);
}
if(count($tarifas)>0){
if(count($postData->datos)>0){
$this->model->updateTarifas($requestedId, $postData->datos);
}

View File

@ -18,7 +18,11 @@ class Test extends BaseController
public function index()
{
echo '<pre>';
($this->testLineasSobrecubierta());
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$tarifas = [
(object)['tarifa_id'=>1, "cubierta"=>0, "sobrecubierta"=>0]
];
var_dump($model->deleteServiciosNotInArray(44, $tarifas));
echo '</pre>';
/*

View File

@ -12,6 +12,8 @@ class PresupuestoAcabadosEntity extends \CodeIgniter\Entity\Entity
"precio_unidad" => null,
"precio_total" => null,
"margen" => null,
"cubierta" => null,
"sobrecubierta" => null,
"created_at" => null,
"updated_at" => null,
];
@ -21,5 +23,7 @@ class PresupuestoAcabadosEntity extends \CodeIgniter\Entity\Entity
"precio_unidad" => "float",
"precio_total" => "float",
"margen" => "float",
"cubierta" => "int",
"sobrecubierta" => "int",
];
}

View File

@ -19,7 +19,7 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
2 => "t1.precio_total"
];
protected $allowedFields = ["presupuesto_id", "tarifa_acabado_id", "nombre", "precio_total", "precio_unidad", "margen"];
protected $allowedFields = ["presupuesto_id", "tarifa_acabado_id", "nombre", "precio_total", "precio_unidad", "margen", "cubierta", "sobrecubierta"];
protected $returnType = "App\Entities\Presupuestos\PresupuestoAcabadosEntity";
protected $useTimestamps = true;
@ -98,13 +98,33 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
->delete();
}
public function deleteServiciosNotInArray($presupuesto_id, $tarifas_id){
public function deleteServiciosNotInArray($presupuesto_id, $tarifas){
$builder = $this->db
->table($this->table . " t1");
$builder->select("*");
$builder->where('presupuesto_id', $presupuesto_id);
$results = $builder->get()->getResultObject();
$ids_for_delete = [];
foreach($results as $result){
$found = false;
foreach($tarifas as $tarifa){
if($tarifa->tarifa_id == $result->tarifa_acabado_id &&
$tarifa->cubierta == $result->cubierta &&
$tarifa->sobrecubierta == $result->sobrecubierta)
$found = true;
}
if(!$found){
array_push($ids_for_delete, $result->id);
}
}
$builder = $this->db
->table($this->table . " t1");
$builder->where('presupuesto_id', $presupuesto_id);
foreach($tarifas_id as $id){
$builder->where('tarifa_acabado_id !=', $id);
foreach($ids_for_delete as $id){
$builder->orWhere('id', $id);
}
$builder->delete();
}
@ -118,6 +138,8 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
$builder->select("id");
$builder->where('presupuesto_id', $presupuesto_id);
$builder->where('tarifa_acabado_id', $tarifa->tarifa_id);
$builder->where('cubierta', $tarifa->cubierta);
$builder->where('sobrecubierta', $tarifa->sobrecubierta);
$result = $builder->get()->getResultObject();
if(count($result)>0){
$this->db
@ -127,6 +149,8 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
->set('precio_unidad', $tarifa->precio_unidad)
->set('precio_total', $tarifa->precio_total)
->set('margen', $tarifa->margen)
->set('cubierta', $tarifa->cubierta)
->set('sobrecubierta', $tarifa->sobrecubierta)
->update();
@ -139,6 +163,8 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
->set('precio_unidad', $tarifa->precio_unidad)
->set('precio_total', $tarifa->precio_total)
->set('margen', $tarifa->margen)
->set('cubierta', $tarifa->cubierta)
->set('sobrecubierta', $tarifa->sobrecubierta)
->insert();
}
}
@ -157,7 +183,7 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
->table($this->table . " t1")
->select(
"t1.id AS id, t1.tarifa_acabado_id AS tarifa_acabado_id, t1.precio_unidad AS precio_unidad,
t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre"
t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.cubierta AS cubierta, t1.sobrecubierta AS sobrecubierta"
);
$builder->where('t1.presupuesto_id', $presupuesto_id);

View File

@ -541,8 +541,9 @@ class PresupuestoService extends BaseService
/**
* Devuelve el ancho de la cubierta/sobrecubierta, incluido el lomo.
* El $uso tiene que ser "cubierta" o "sobrecubierta"
*/
public static function getAnchoTotalExteriores($tipo_impresion_id, $datosPedido=null)
public static function getAnchoTotalExteriores($uso="cubierta", $tipo_impresion_id, $datosPedido=null)
{
$ancho_total = 0;
@ -550,8 +551,7 @@ class PresupuestoService extends BaseService
// Tapa blanda (cosido y fresado)
if($tipo_impresion_id == 2 || $tipo_impresion_id == 4){
$ancho_total = floatval($datosPedido->ancho)*2 + floatval($datosPedido->lomo);
$ancho_total += property_exists($datosPedido, 'lomo_cubierta')?$datosPedido->lomo_cubierta:0;
// añadimos ancho de las solapas
// si se añaden solapas hay que sumar 3mm de los dobleces
if ($datosPedido->solapas) {
@ -563,9 +563,14 @@ class PresupuestoService extends BaseService
// Tapa dura cosido y fresado
else if($tipo_impresion_id == 1 || $tipo_impresion_id == 3){
$ancho_total = floatval($datosPedido->ancho)*2 + floatval($datosPedido->lomo);
$ancho_total += property_exists($datosPedido, 'lomo_cubierta')?$datosPedido->lomo_cubierta:0;
// Se añaden 20mm de sangre por cada lado + 2 * 0.6mm de portada y contraportada -> total 41.2
$ancho_total += (1.2+2*self::SANGRE_FORMAS_CUBIERTA);
// si es cubierta
// Se añaden 20mm de sangre por cada lado + 2 * 6mm de vuelo portada y contraportada -> total 52
if($uso=="cubierta")
$ancho_total += (12+2*self::SANGRE_FORMAS_CUBIERTA);
// si es sobrecubierta
// Se añaden 5mm de sangre por cada lado + 2 * 6mm de vuelo portada y contraportada -> total 52
else
$ancho_total += (12+2*self::SANGRE_FORMAS);
}
else{
// En cualquier otro caso se le suma 5mm de sangre por cada lado
@ -576,9 +581,9 @@ class PresupuestoService extends BaseService
}
/**
* Devuelve el ancho de la cubierta/sobrecubierta, incluido el lomo.
* Devuelve el alto de la cubierta/sobrecubierta
*/
public static function getAltoTotalExteriores($tipo_impresion_id, $datosPedido=null)
public static function getAltoTotalExteriores($uso="cubierta", $tipo_impresion_id, $datosPedido=null)
{
$alto_total = 0;
@ -586,8 +591,14 @@ class PresupuestoService extends BaseService
$alto_total = floatval($datosPedido->alto);
// Tapa dura (cosido y fresado)
if($tipo_impresion_id == 1 || $tipo_impresion_id == 3){
// Se añaden 20mm de sangre por cada lado + 0.7mm extra que sobresale -> total 40.7
$alto_total += (0.7+2*self::SANGRE_FORMAS_CUBIERTA);
// Se añaden 20mm de sangre por cada lado + 7mm extra que sobresale -> total 47
if($uso=="cubierta")
$alto_total += (7+2*self::SANGRE_FORMAS_CUBIERTA);
// si es sobrecubierta
// Se añaden 5mm de sangre por cada lado + 7mm de vuelo -> total 52
else
$alto_total += (7+2*self::SANGRE_FORMAS);
}
// En cualquier otro caso se le suma 5mm de sangre por cada lado
else{

View File

@ -180,10 +180,10 @@
<div class="col-md-12 col-lg-6 px-4">
<div class="row">
<div class="mb-1">
<label id="label_papelFormatoId" for="papelFormatoId" class="form-label">
<label id="label_acabado_cubierta_id" for="acabado_cubierta_id" class="form-label">
<?= lang('Presupuestos.acabadoCubierta') ?>*
</label>
<select id="papelFormatoId" name="papel_formato_id" tabindex="3" class="form-control select2bs2" style="width: 100%;">
<select id="acabado_cubierta_id" name="acabado_cubierta_id" tabindex="3" class="form-control select2bs2" style="width: 100%;">
<?php if (isset($acabadosCubierta) && is_array($acabadosCubierta) && !empty($acabadosCubierta)) :
foreach ($acabadosCubierta as $acabado) : ?>
<option value="<?= $acabado->id ?>" <?= $acabado->id == $presupuestoEntity->acabado_cubierta_id ? ' selected' : '' ?>>
@ -198,10 +198,10 @@
<div class="col-md-12 col-lg-6 px-4">
<div class="row">
<div class="mb-1">
<label id="label_papelFormatoId" for="papelFormatoId" class="form-label">
<label id="label_acabado_sobrecubierta_id" for="acabado_sobrecubierta_id" class="form-label">
<?= lang('Presupuestos.acabadoSobrecubierta') ?>*
</label>
<select id="papelFormatoId" name="papel_formato_id" tabindex="3" class="form-control select2bs2" style="width: 100%;">
<select id="acabado_sobrecubierta_id" name="acabado_sobrecubierta_id" tabindex="3" class="form-control select2bs2" style="width: 100%;">
<?php if (isset($acabadosSobrecubierta) && is_array($acabadosSobrecubierta) && !empty($acabadosSobrecubierta)) :
foreach ($acabadosSobrecubierta as $acabado) : ?>
<option value="<?= $acabado->id ?>" <?= $acabado->id == $presupuestoEntity->acabado_sobrecubierta_id ? ' selected' : '' ?>>
@ -506,6 +506,9 @@ function event_change_formato(){
$('#compPaginasNegrohq').trigger('change');
}
$('#compPapelCubierta').trigger('change');
$('#compPapelSobrecubierta').trigger('change');
update_servicios(false)
}
@ -520,6 +523,7 @@ $("#solapas").on("click", function () {
}
else {
e.style.display = "none";
$('#solapas_ancho').val(0)
}
$('#serv_default').click()
@ -533,6 +537,7 @@ $("#solapas_sobrecubierta").on("click", function () {
}
else {
e.style.display = "none";
$('#solapas_ancho_sobrecubierta').val(0)
}
$('#serv_default').click()

View File

@ -1398,8 +1398,7 @@
color: 1,
ancho: dimension.ancho,
alto: dimension.alto,
lomo: getLomoLineasPresupuesto(),
lomo_cubierta: getLomoCubiertaLineasPresupuesto(),
lomo: getLomoLineasPresupuesto() + getLomoCubiertaLineasPresupuesto(),
solapas: $('#solapas_sobrecubierta').is(':checked')?1:0,
solapas_ancho: $('#solapas_sobrecubierta').is(':checked')?parseInt($('#solapas_ancho_sobrecubierta').val()):0,
papel_generico_id: $('#compPapelSobrecubierta').select2('data')[0].id,

View File

@ -259,13 +259,15 @@
$(document).on('click', '.btn-delete-serv', function(e) {
const dataId = $(this).attr('data-id');
const rowId = $(this).closest('td').parent()[0].sectionRowIndex;
var dataText = null;
var table = "";
if($(this).closest('table').attr('id').includes('tableOfServiciosEncuadernacion')){
table = "tableOfServiciosEncuadernacion";
}
else if($(this).closest('table').attr('id').includes('tableOfServiciosAcabado')){
table = "tableOfServiciosAcabado";
dataText = $(this).attr('data-text');
}
else if($(this).closest('table').attr('id').includes('tableOfServiciosManipulado')){
table = "tableOfServiciosManipulado";
@ -278,11 +280,18 @@
}
if(table != ""){
if(dataText==null){
$('#' + table).DataTable().rows( function ( idx, data, node ) {
return data[0] === dataId;
} )
.remove()
.draw();
}
$('#' + table).DataTable().rows( function ( idx, data, node ) {
return data[0] === dataId;
} )
.remove()
.draw();
return ((data[0] === dataId) && (data[1]=== dataText));
} )
.remove()
.draw();
}
check_serv_enc_error()
@ -528,13 +537,20 @@
serviciosacabadosList.forEach((element) =>{
nombre_completo = element.nombre
if (element.cubierta == 1){
nombre_completo += ' (<?= lang("Presupuestos.cubierta") ?>)'
}
else if (element.sobrecubierta == 1){
nombre_completo += ' (<?= lang("Presupuestos.sobrecubierta") ?>)'
}
tableServiciosAcabado.row.add([
element.tarifa_acabado_id,
element.nombre,
nombre_completo,
'<span id="precio_unidad_acabado_' + element.tarifa_acabado_id + '">' + parseFloat(element.precio_unidad).toFixed(2) + '</span>',
'<input class="update-totales" id="precio_total_acabado_' + element.tarifa_acabado_id +'" value="' + parseFloat(element.precio_total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="acabado_margen_' + element.tarifa_acabado_id + '">' + parseFloat(element.margen).toFixed(2) + '</span>',
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + element.tarifa_acabado_id +'"></i></a>'
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + element.tarifa_acabado_id +'" data-text="' + nombre_completo + '"></i></a>'
]).draw(false)
})
@ -561,7 +577,7 @@
$('#serv-acabado-error').html(htmlString)
}
function get_tarifas_acabado(tarifa_id = -1){
function get_tarifas_acabado(tarifa_id = -1, uso=null){
if(parseInt($('#tirada').val())>0){
var tirada = parseInt($('#tirada').val())
@ -586,13 +602,17 @@
data.values.forEach((row) => {
nombre = row.tarifa_nombre
if(uso!= null)
nombre += ' (' + uso + ')'
tableServiciosAcabado.row.add([
row.tarifa_id,
row.tarifa_nombre,
nombre,
'<span id="precio_unidad_acabado_' + row.tarifa_id + '">' + parseFloat(row.precio_unidad).toFixed(2) + '</span>',
'<input class="update-totales" id="precio_total_acabado_' + row.tarifa_id +'" value="' + parseFloat(row.total).toFixed(2) + '"></input>',
'<span style="display: none;" class="update-totales" id="acabado_margen_' + row.tarifa_id + '">' + parseFloat(row.margen).toFixed(2) + '</span>',
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + row.tarifa_id +'"></i></a>'
'<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-serv mx-2" data-id="' + row.tarifa_id +'" data-text="' + nombre +'"></i></a>'
]).draw(false)
});
@ -659,7 +679,14 @@
const tarifa_text = $('#add_servicio_acabado_list').select2('data')[0].text.trim()
if( $('#add_servicio_acabado_list').select2('data')[0].text.trim().length > 0){
if($('#tableOfServiciosAcabado tr > td:contains(' + tarifa_text + ')').length == 0)
found = false
var rows = $("#tableOfServiciosAcabado").DataTable().rows( ).data().toArray();
for(row of rows){
if(row[1]== tarifa_text)
found = true
continue
}
if(!found)
get_tarifas_acabado($('#add_servicio_acabado_list').select2('data')[0].id);
else{
popErrorAlert("<?= lang("Presupuestos.errores.error_servicios_duplicados") ?>", 'serv-acabado-alert')
@ -668,6 +695,18 @@
check_serv_acabado_error()
})
function insertar_acabado_exterior($servicio_id, $uso="cubierta"){
const tarifa_text = $('#add_servicio_acabado_list option[value="' + $servicio_id + '"]').text().trim() + ' (' +$uso + ')'
if($('#tableOfServiciosAcabado tr > td:contains(' + tarifa_text + ')').length == 0)
get_tarifas_acabado($servicio_id, $uso);
else{
}
check_serv_acabado_error()
}
function get_datos_acabado(){
var datosAcabado = []
@ -680,6 +719,16 @@
case 0:
values['tarifa_id'] = $(this).text()
break
case 1:
if($(this).text().includes(' (<?= lang("Presupuestos.cubierta") ?>)'))
values['cubierta'] = 1
else
values['cubierta'] = 0
if($(this).text().includes(' (<?= lang("Presupuestos.sobrecubierta") ?>)'))
values['sobrecubierta'] = 1
else
values['sobrecubierta'] = 0
break
case 2:
values['precio_unidad'] = $(this).text()
break

View File

@ -1003,15 +1003,21 @@ $('.insertarLinea').on("click", function (e) {
var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray();
for(row of rows){
if(row.tipo == 'cubierta')
if(row.tipo == 'cubierta'){
fill_lp_cubierta(row, true);
if($('#acabado_cubierta_id').val() > 0)
insertar_acabado_exterior($('#acabado_cubierta_id').val(), '<?= lang("Presupuestos.cubierta") ?>')
}
}
clear_sobrecubierta();
for(row of rows){
if(row.tipo == 'sobrecubierta')
if(row.tipo == 'sobrecubierta'){
fill_lp_sobrecubierta(row, true);
if($('#acabado_sobrecubierta_id').val() > 0)
insertar_acabado_exterior($('#acabado_sobrecubierta_id').val(), '<?= lang("Presupuestos.sobrecubierta") ?>')
}
}
}
@ -3394,7 +3400,7 @@ function calcularPresupuesto_cubierta(fromComparador=false, input_data={}){
paginas_negro: 0,
paginas_color: 0,
solapas: $('#solapas').is(':checked')?1:0,
solapas_ancho: parseInt($('#solapas_ancho').val()),
solapas_ancho: $('#solapas').is(':checked')?parseInt($('#solapas_ancho').val()):0,
tirada: parseInt($('#tirada').val()),
merma: parseInt($('#mermacubierta').val()),
ancho: dimension.ancho,
@ -3489,6 +3495,8 @@ function fill_lp_cubierta(row, fromComparador=false){
$('#lp_cubierta_checkPapel').change()
check_update_sobrecubierta()
calcular_mermas()
updateTotales(true, false, false)
updateTablaEnvios()
@ -3658,14 +3666,13 @@ function calcularPresupuesto_sobrecubierta(fromComparador=false, input_data={}){
paginas: input_data.paginas,
paginas_negro: 0,
paginas_color: 0,
solapas: $('#solapas').is(':checked')?1:0,
solapas_ancho: parseInt($('#solapas_ancho').val()),
solapas: $('#solapas_sobrecubierta').is(':checked')?1:0,
solapas_ancho: $('#solapas_sobrecubierta').is(':checked')?parseInt($('#solapas_ancho_sobrecubierta').val()):0,
tirada: parseInt($('#tirada').val()),
merma: parseInt($('#mermacubierta').val()),
ancho: dimension.ancho,
alto: dimension.alto,
lomo: getLomoLineasPresupuesto(),
lomo_cubierta: getLomoCubiertaLineasPresupuesto(),
lomo: getLomoLineasPresupuesto() + getLomoCubiertaLineasPresupuesto,
papel_generico_id: input_data.papel_generico_id,
papel_generico: input_data.papel_generico,
gramaje: input_data.gramaje,