Merge branch 'add/serv_acabado_desdoblados' into 'main'

Add/serv acabado desdoblados

See merge request jjimenez/safekat!573
This commit is contained in:
2025-02-26 20:32:06 +00:00
23 changed files with 1172 additions and 150 deletions

View File

@ -49,6 +49,9 @@ const SK_PERMISSION_MATRIX = [
"tarifa-envio.edit",
"tarifa-envio.delete",
"tarifa-envio.menu",
"servicio-acabado.create",
"servicio-acabado.delete",
"servicio-acabado.menu",
"proveedores.create",
"proveedores.edit",
"proveedores.delete",
@ -89,7 +92,6 @@ const SK_PERMISSION_MATRIX = [
"roles-permisos.edit",
"roles-permisos.delete",
"roles-permisos.menu",
"tickets.create",
"tickets.edit",
"tickets.menu",
],
@ -129,7 +131,6 @@ const SK_PERMISSION_MATRIX = [
"direcciones.menu",
"presupuesto.create",
"presupuesto.edit",
"presupuesto.delete",
"presupuesto.menu",
"presupuesto-cliente.create",
"presupuesto-cliente.edit",
@ -221,10 +222,6 @@ const SK_PERMISSION_MATRIX = [
"tarifa-encuadernacion.edit",
"tarifa-encuadernacion.delete",
"tarifa-encuadernacion.menu",
"tarifa-extra.create",
"tarifa-extra.edit",
"tarifa-extra.delete",
"tarifa-extra.menu",
"tarifa-envio.create",
"tarifa-envio.edit",
"tarifa-envio.delete",
@ -269,7 +266,6 @@ const SK_PERMISSION_MATRIX = [
"roles-permisos.edit",
"roles-permisos.delete",
"roles-permisos.menu",
"tickets.create",
"tickets.edit",
"tickets.menu",
],

View File

@ -53,6 +53,10 @@ const SK_PERMISSIONS = [
'tarifa-envio.edit' => 'Can edit',
'tarifa-envio.delete' => 'Can delete',
'tarifa-envio.menu' => 'Menu shall be visualize',
'servicio-acabado.create' => 'Can create',
'servicio-acabado.edit' => 'Can edit',
'servicio-acabado.delete' => 'Can delete',
'servicio-acabado.menu' => 'Menu shall be visualize',
'proveedores.create' => 'Can create',
'proveedores.edit' => 'Can edit',
'proveedores.delete' => 'Can delete',
@ -93,7 +97,6 @@ const SK_PERMISSIONS = [
'roles-permisos.edit' => 'Can edit',
'roles-permisos.delete' => 'Can delete',
'roles-permisos.menu' => 'Menu shall be visualize',
'tickets.create' => 'Can create',
'tickets.edit' => 'Can edit',
'tickets.menu' => 'Menu shall be visualize',
];

View File

@ -209,6 +209,19 @@ $routes->group('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas'],
$routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasmanipulado', 'except' => 'show,new,create,update']);
$routes->group('serviciosacabado', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) {
$routes->get('', 'ServiciosAcabado::index', ['as' => 'serviciosAcabadoList']);
$routes->get('add', 'ServiciosAcabado::add', ['as' => 'newServicioAcabado']);
$routes->post('add', 'ServiciosAcabado::add', ['as' => 'createServicioAcabado']);
$routes->get('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'editServicioAcabado']);
$routes->post('edit/(:num)', 'ServiciosAcabado::edit/$1', ['as' => 'updateServicioAcabado']);
$routes->get('datatable', 'ServiciosAcabado::datatable');
$routes->get('getselectedtarifas', 'ServiciosAcabado::getTarifasSeleccionadas');
$routes->get('gettarifas', 'ServiciosAcabado::getTarifas');
});
$routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas\Acabados', 'controller' => 'ServiciosAcabado', 'except' => 'show,new,create,update']);
$routes->group('tarifamanipuladolineas', ['namespace' => 'App\Controllers\Tarifas'], function ($routes) {
$routes->get('', 'Tarifamanipuladolineas::index', ['as' => 'tarifaManipuladoLineaList']);
$routes->get('add', 'Tarifamanipuladolineas::add', ['as' => 'newTarifaManipuladoLinea']);

View File

@ -137,10 +137,21 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);
$data = [];
$model = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$tarifas = $model->getTarifasForServicio($tarifa_acabado_id);
foreach ($tarifas as $tarifa) {
$values = $this->model->getPrecioTarifa($tarifa, $tirada, $proveedor_id, $POD);
$values[0]->tarifa_id = $tarifa;
array_push($data, $values[0]);
}
//$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);
$data = [
'values' => $values,
'values' => $data,
$csrfTokenName => $newTokenHash
];
@ -157,26 +168,31 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$cubierta = $this->request->getGet("cubierta") ?? 0;
$sobrecubierta = $this->request->getGet("sobrecubierta") ?? 0;
$cliente = $this->request->getGet("cliente") ?? 0;
$model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
$model = model('App\Models\Tarifas\Acabados\ServicioAcabadoModel');
$query = $model->builder()->select(
[
"id",
"nombre as name"
]
)
->where("lg_tarifa_acabado.is_deleted", 0)
->where("lg_tarifa_acabado.mostrar_en_presupuesto", 1);
->where("servicios_acabado.deleted_at", null);
if($cubierta == 1){
$query->where("lg_tarifa_acabado.acabado_cubierta", 1);
$query->where("servicios_acabado.acabado_cubierta", 1);
}
else if ($sobrecubierta == 1){
$query->where("lg_tarifa_acabado.acabado_sobrecubierta", 1);
$query->where("servicios_acabado.acabado_sobrecubierta", 1);
}
if ($cliente == 1) {
$query->where("servicios_acabado.mostrar_en_presupuesto_cliente", 1);
}
if ($this->request->getGet("q")) {
$query->groupStart()
->orLike("lg_tarifa_acabado.nombre", $this->request->getGet("q"))
->orLike("servicios_acabado.nombre", $this->request->getGet("q"))
->groupEnd();
}

View File

@ -1128,18 +1128,21 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$solapas = $this->request->getGet('solapas') ?? 0;
$lomo = $this->request->getGet('lomo') ?? 0;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
$tipo = $this->request->getGet("tipo");
$uso = $this->request->getGet("uso") ?? 'interior';
$anchoLibro = $ancho;
$cubierta = false;
if ($uso == 'cubierta') {
$cubierta = true;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
}
$sobrecubierta = false;
if ($uso == 'sobrecubierta') {
$sobrecubierta = true;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
}
$guardas = false;
if ($uso == 'guardas') {
@ -1191,7 +1194,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$solapas = $this->request->getGet('solapas') ?? 0;
$lomo = $this->request->getGet('lomo') ?? 0;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
$anchoLibro = $ancho;
$tipo_impresion_id = $this->request->getGet("tipo_impresion");
$tapa_dura = model('App\Models\Configuracion\TipoPresupuestoModel')->get_isTapaDura(intval($tipo_impresion_id));
@ -1202,10 +1205,12 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$cubierta = false;
if ($uso == 'cubierta') {
$cubierta = true;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
}
$sobrecubierta = false;
if ($uso == 'sobrecubierta') {
$sobrecubierta = true;
$anchoLibro = 2* $ancho + 2 * $solapas + $lomo;
}
$guardas = false;
if ($uso == 'guardas') {

View File

@ -1290,37 +1290,55 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// Servicios
if ($sobrecubierta) {
if (intval($sobrecubierta['acabado']) > 0) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($sobrecubierta['acabado']), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', false, true);
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($sobrecubierta['acabado']);
foreach ($serviciosAcabado as $service) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', false, true);
}
}
}
}
}
if (intval($cubierta['acabado']) > 0) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($cubierta['acabado']), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', true, false);
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($sobrecubierta['acabado']);
foreach ($serviciosAcabado as $service) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', true, false);
}
}
}
}
if (is_array($faja) && $faja !== [] && intval($faja['acabado']) > 0) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($faja['acabado']), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', false, false, true);
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio($faja['acabado']);
foreach ($serviciosAcabado as $service) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$servicio = $model->getPrecioTarifa(intval($service), intval($selected_tirada), -1, $POD);
if (count($servicio) > 0) {
if ($servicio[0]->total > 0) {
$this->guardarServicio($id, $servicio[0], 'acabado', false, false, true);
}
}
}
}
foreach ($resultado_presupuesto['values']['serviciosDefecto']['encuadernacion'] as $servicio) {
$this->guardarServicio($id, $servicio, 'encuadernacion');
@ -1415,10 +1433,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'url' => site_url('presupuestos/presupuestocliente/edit'),
'message' => lang('Basic.global.saveSuccess', [lang('Basic.global.record')]),
]);
}else{
} else {
return [
'sk_id' => $id,
'sk_url' => site_url('presupuestos/presupuestocliente/edit/' . $id)
'sk_url' => site_url('presupuestos/presupuestocliente/edit/' . $id)
];
}
}
@ -1439,7 +1457,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$data['lsc'] = $presupuesto->lomo_sobrecubierta;
$data['eb'] = $presupuesto->envio_base;
$data['state'] = intval($presupuesto->estado_id);
if($presupuesto->estado_id == 2){ // confirmado
if ($presupuesto->estado_id == 2) { // confirmado
$data['datosGenerales']['selectedTirada'] = $presupuesto->tirada;
}
$data['datosGenerales']['titulo'] = $presupuesto->titulo;
@ -1492,7 +1510,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$data['cubierta']['solapas'] = $presupuesto->solapas ? 1 : 0;
$data['cubierta']['solapas_ancho'] = $presupuesto->solapas_ancho;
$data['cubierta']['cabezada'] = $presupuesto->cabezada;
$modelAcabado = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel");
$modelAcabado = model("App\Models\Tarifas\Acabados\ServicioAcabadoModel");
$data['cubierta']['acabado']['id'] = $presupuesto->acabado_cubierta_id;
if ($presupuesto->acabado_cubierta_id == 0) {
$data['cubierta']['acabado']['text'] = "Ninguno";
@ -2127,36 +2145,41 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// Acabado Cubierta
if (intval($datos_entrada['cubierta']['acabado']) != 0) {
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($datos_entrada['cubierta']['acabado']));
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoCubierta = $model->getPrecioTarifa(intval($datos_entrada['cubierta']['acabado']), $datosPedido->tirada, -1, $POD);
foreach ($serviciosAcabado as $servicio) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoCubierta = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD);
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0) {
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0) {
$input_data['tarifas_acabado_cubierta'] = intval($datos_entrada['cubierta']['acabado']);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de cubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
}
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada;
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
$input_data['tarifas_acabado_cubierta'] = intval($servicio);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de cubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
}
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada;
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
}
}
}
}
@ -2217,35 +2240,40 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// Acabado sobrecubierta
if (intval($datos_entrada['sobrecubierta']['acabado']) != 0) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoSobrecubierta = $model->getPrecioTarifa(intval($datos_entrada['sobrecubierta']['acabado']), $datosPedido->tirada, -1, $POD);
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($datos_entrada['sobrecubierta']['acabado']));
if (count($acabadoSobrecubierta) > 0) {
foreach ($serviciosAcabado as $servicio) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoSobrecubierta = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD);
if ($acabadoSobrecubierta[0]->total <= 0) {
if (count($acabadoSobrecubierta) > 0) {
$input_data['tarifas_acabado_sobrecubierta'] = intval($datos_entrada['sobrecubierta']['acabado']);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de sobrecubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
}
if ($acabadoSobrecubierta[0]->total <= 0) {
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada;
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
$input_data['tarifas_acabado_sobrecubierta'] = intval($servicio);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de sobrecubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
}
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $datosPedido->tirada), 2) * $datosPedido->tirada;
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
}
}
}
}
@ -2370,14 +2398,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// Acabado faja
if (intval($faja['acabado']) != 0) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoFaja = $model->getPrecioTarifa(intval($faja['acabado']), $datosPedido->tirada, -1, $POD);
$modelServicioAcabado = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
$serviciosAcabado = $modelServicioAcabado->getTarifasForServicio(intval($faja['acabado']));
foreach ($serviciosAcabado as $servicio)
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoFaja = $model->getPrecioTarifa(intval($servicio), $datosPedido->tirada, -1, $POD);
if (count($acabadoFaja) > 0) {
if ($acabadoFaja[0]->total <= 0) {
$input_data['tarifas_acabado_faja'] = intval($faja['acabado']);
$input_data['tarifas_acabado_faja'] = intval($servicio);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
@ -2902,7 +2934,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$margenImpresion += round($linea['precio_impresion_horas'], 2); // coste de maquina y magen son MARGEN, no COSTE
$margenImpresion += round($linea['margen_impresion_horas'], 2);
$margenImpresion += round($linea['margen_click_pedido'], 2);
}
protected function calcular_lomo($lineas, $lomo_inicial)

View File

@ -0,0 +1,327 @@
<?php
namespace App\Controllers\Tarifas\Acabados;
use App\Controllers\BaseResourceController;
use App\Entities\Tarifas\Acabados\ServicioAcabadoEntity;
use App\Models\Tarifas\Acabados\ServicioAcabadoModel;
use CodeIgniter\I18n\Time;
use Hermawan\DataTables\DataTable;
class ServiciosAcabado extends BaseResourceController
{
protected $modelName = ServicioAcabadoModel::class;
protected $format = 'json';
protected static $singularObjectName = 'Servicio Acabado';
protected static $singularObjectNameCc = 'serviciosAcabado';
protected static $pluralObjectName = 'Servicios Acabado';
protected static $pluralObjectNameCc = 'serviciosAcabado';
protected static $controllerSlug = 'serviciosacabado';
protected static $viewPath = 'themes/vuexy/form/tarifas/acabado/';
protected $indexRoute = 'serviciosAcabadoList';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Servicioacabado.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
$this->viewData = ['usingServerSideDataTable' => true];
// Breadcrumbs
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_tarifas"), 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_servicioAcabado"), 'route' => route_to('serviciosAcabadoList'), 'active' => true]
];
helper("time");
parent::initController($request, $response, $logger);
}
public function index()
{
checkPermission('tarifa-acabado.menu');
$viewData = [
'currentModule' => static::$controllerSlug,
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Servicioacabado.serviciosacabado')]),
'servicioacabadoEntity' => new ServicioAcabadoEntity(),
'usingServerSideDataTable' => true,
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . 'viewServiciosAcabadoList', $viewData);
}
public function add()
{
checkPermission('tarifa-acabado.create', $this->indexRoute);
if ($this->request->getPost()) :
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$tarifasSeleccionadas = $postData['tarifasAcabado'] ?? [];
unset($postData['tarifasAcabado']);
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$sanitizedData['user_updated_id'] = auth()->user()->id;
if ($this->request->getPost('mostrar_en_presupuesto_cliente') == null) {
$sanitizedData['mostrar_en_presupuesto'] = false;
}
if ($this->request->getPost('acabado_cubierta') == null) {
$sanitizedData['acabado_cubierta'] = false;
}
if ($this->request->getPost('acabado_sobrecubierta') == null) {
$sanitizedData['acabado_sobrecubierta'] = false;
}
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [lang('Basic.global.record')]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
endif;
if ($noException && $successfulResult) :
$id = $this->model->db->insertID();
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
$modelTable = model("App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel");
foreach ($tarifasSeleccionadas as $tarifaId) {
$modelTable->insert(['servicio_id' => $id, 'tarifa_id' => $tarifaId, 'user_updated_id' => auth()->user()->id]);
}
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(site_url('/serviciosacabado/edit/' . $id))->with('message', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['tarifasSeleccionadas'] = [];
$this->viewData['servicio'] = isset($sanitizedData) ? new ServicioAcabadoEntity($sanitizedData) : new ServicioAcabadoEntity();
$this->viewData['formAction'] = route_to('createServicioAcabado');
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('ServicioAcabado.moduleTitle') . ' ' . lang('Basic.global.addNewSuffix');
return $this->displayForm(__METHOD__);
}
public function edit($requestedId = null)
{
if ($requestedId == null):
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$servicio = $this->model->find($id);
if ($servicio == false):
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('ServicioAcabado.servicioacabado')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->getPost()):
$nullIfEmpty = true; // !(phpversion() >= '8.1');
$postData = $this->request->getPost();
$tarifasSeleccionadas = $postData['tarifasAcabado'] ?? [];
unset($postData['tarifasAcabado']);
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
$sanitizedData['user_updated_id'] = auth()->user()->id;
if ($this->request->getPost('mostrar_en_presupuesto_cliente') == null) {
$sanitizedData['mostrar_en_presupuesto'] = false;
}
if ($this->request->getPost('acabado_cubierta') == null) {
$sanitizedData['acabado_cubierta'] = false;
}
if ($this->request->getPost('acabado_sobrecubierta') == null) {
$sanitizedData['acabado_sobrecubierta'] = false;
}
$noException = true;
if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()):
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('ServicioAcabado.servicioacabado'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$servicio->fill($sanitizedData);
$modelTable = model("App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel");
$modelTable->where('servicio_id',$id)->delete();
foreach ($tarifasSeleccionadas as $tarifaId) {
$modelTable->insert(['servicio_id' => $id, 'tarifa_id' => $tarifaId, 'user_updated_id' => auth()->user()->id]);
}
$thenRedirect = false;
endif;
if ($noException && $successfulResult):
$id = $servicio->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect):
if (!empty($this->indexRoute)):
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['servicio'] = $servicio;
$this->viewData['tarifasSeleccionadas'] = $this->getTarifasSeleccionadasForView($id);
$this->viewData['formAction'] = route_to('updateServicioAcabado', $id);
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('ServicioAcabado.moduleTitle') . ' ' . lang('Basic.global.edit3');
return $this->displayForm(__METHOD__, $id);
} // end function edit(...)
public function datatable()
{
$model = model(ServicioAcabadoModel::class);
$q = $model->getDatatableQuery();
//return $this->response->setJSON($q->get());
return DataTable::of($q)
->add("action", callback: function ($q) {
return '<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="' . $q->id . '"></i></a></span>'
. (auth()->user()->can("servicio-acabado.delete") ?
'<span class="delete"><a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="' . $q->id . '"></i></a></span>'
: '');
})
->edit(
"updated_at",
fn($q) => Time::createFromFormat("Y-m-d H:i:s", $q->updated_at)->format("d/m/Y")
)
->toJson(returnAsObject: true);
}
public function getTarifasSeleccionadasForView($servicioId){
$model = model("App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel");
$ids = $model->getTarifasForServicio($servicioId);
return $ids;
}
public function getTarifasSeleccionadas()
{
$model = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel");
$ids = $this->request->getGet('ids');
if (empty($ids)) {
return $this->response->setJSON([]);
}
$query = $model->select('lg_tarifa_acabado.id, lg_tarifa_acabado.nombre')->whereIn('lg_tarifa_acabado.id', $ids);
$query->where('lg_tarifa_acabado.deleted_at', null);
$tarifas = $query->findAll();
return $this->response->setJSON($tarifas);
}
public function getTarifas()
{
$model = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel");
$search = $this->request->getGet('search'); // Obtiene el parámetro de búsqueda
$acabado_cubierta = $this->request->getGet('acabado_cubierta');
$acabado_sobrecubierta = $this->request->getGet('acabado_sobrecubierta');
$query = $model->select('lg_tarifa_acabado.id, lg_tarifa_acabado.nombre');
if (!empty($search)) {
$query->like('lg_tarifa_acabado.nombre', $search);
}
if($acabado_cubierta){
$query->where('lg_tarifa_acabado.acabado_cubierta', $acabado_cubierta);
}
if($acabado_sobrecubierta){
$query->where('lg_tarifa_acabado.acabado_sobrecubierta', $acabado_sobrecubierta);
}
$query->where('lg_tarifa_acabado.deleted_at', null);
$tarifas = $query->findAll();
return $this->response->setJSON($tarifas);
}
}

View File

@ -0,0 +1,113 @@
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
use function PHPSTORM_META\type;
class CreateServiciosAcabadoTable extends Migration
{
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
'auto_increment' => true,
],
'nombre' =>[
'type' => 'VARCHAR',
'constraint' => 100,
],
'comentarios' => [
'type' => 'TEXT',
'null' => true,
],
'acabado_cubierta' => [
'type' => 'BOOLEAN',
'default' => false,
],
'acabado_sobrecubierta' => [
'type' => 'BOOLEAN',
'default' => false,
],
'mostrar_en_presupuesto_cliente' => [
'type' => 'BOOLEAN',
'default' => true,
],
'user_updated_id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
],
'created_at' => [
'type' => 'DATETIME',
'null' => true,
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true,
],
'deleted_at' => [
'type' => 'DATETIME',
'null' => true,
],
]);
$this->forge->addPrimaryKey('id');
$this->forge->addForeignKey('user_updated_id', 'users', 'id', 'CASCADE', 'CASCADE');
$this->forge->createTable('servicios_acabado');
$this->forge->addField([
'id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
'auto_increment' => true,
],
'tarifa_id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
],
'servicio_id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
],
'user_updated_id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
],
'created_at' => [
'type' => 'DATETIME',
'null' => true,
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true,
],
'deleted_at' => [
'type' => 'DATETIME',
'null' => true,
],
]);
$this->forge->addPrimaryKey('id');
$this->forge->addForeignKey('servicio_id', 'servicios_acabado', 'id', 'NO_ACTION', 'NO_ACTION');
$this->forge->addForeignKey('tarifa_id', 'lg_tarifa_acabado', 'id', 'NO_ACTION', 'NO_ACTION');
$this->forge->addForeignKey('user_updated_id', 'users', 'id', 'NO_ACTION', 'NO_ACTION');
$this->forge->createTable('tarifasAcabado_serviciosAcabado');
}
public function down()
{
$this->forge->dropTable('servicios_acabado');
$this->forge->dropTable('tarifasAcabado_serviciosAcabado');
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Entities\Tarifas\Acabados;
use CodeIgniter\Entity;
class ServicioAcabadoEntity extends \CodeIgniter\Entity\Entity
{
protected $attributes = [
"id" => null,
"nombre" => null,
'mostrar_en_cliente' => false,
"comentarios" => null,
"user_updated_id" => 0,
"created_at" => null,
"updated_at" => null,
"deleted_at" => null,
];
protected $casts = [
"mostrar_en_cliente" => "boolean",
"comentarios" => "string",
"user_updated_id" => "int",
];
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Entities\Tarifas\Acabados;
use CodeIgniter\Entity;
class TarifasAcabadosServicioAcabadoEntity extends \CodeIgniter\Entity\Entity
{
protected $attributes = [
"id" => null,
"tarifa_id" => null,
'servicio_id' => false,
"user_updated_id" => 0,
"created_at" => null,
"updated_at" => null,
"deleted_at" => null,
];
protected $casts = [
"tarifa_id" => "int",
"servicio_id" => "int",
"user_updated_id" => "int",
];
}

View File

@ -797,6 +797,7 @@ return [
"menu_tarifamanipulado" => "Manipulado",
"menu_tarifaencuadernacion" => "Encuadernación",
"menu_tarifapapelcompra" => "Papel compra",
"menu_servicioAcabado" => "Servicios acabado",
"menu_tarifaacabado" => "Acabado",
"menu_tarifapapeldefecto" => "Papel defecto",
"menu_tarifaenvio" => "Envío",

View File

@ -38,6 +38,7 @@ return [
'tarifaPreimpresionSection' => 'Tarifas de preimpresión',
'tarifaManipuladoSection' => 'Tarifas de manipulado',
'tarifaAcabadoSection' => 'Tarifas de acabado',
'servicioAcabadoSection' => 'Servicios de acabado',
'tarifaEncuadernacionSection' => 'Tarifas de encuadernación',
'tarifaEnvioSection' => 'Tarifas de envio',
'tarifaExtraSection' => 'Tarifas extra',

View File

@ -0,0 +1,30 @@
<?php
return [
'id' => 'ID',
'moduleTitle' => 'Servicios Acabado',
'nombre' => 'Nombre',
'comentarios' => 'Comentarios',
'mostrar_en_presupuesto_cliente' => 'Mostrar en presupuesto (cliente)',
'serviciosacabado' => 'Servicios Acabado',
'servicioacabado' => 'Servicio Acabado',
'tarifasacabado' => 'Tarifas Acabado',
"servicio_cubierta" => "Servicio cubierta",
"servicio_sobrecubierta" => "Servicio sobrecubierta",
'tarifaacabado' => 'Tarifa Acabado',
'servicioscabadoList' => 'Lista Servicios Acabado',
'updatedAt' => 'Actualizado en',
'createdAt' => 'Creado en',
'deletedAt' => 'Borrado en',
'userUpdateId' => 'Modificado por',
'validation' => [
'nombre' => [
'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.',
'required' => 'El campo {field} es obligatorio.',
'is_unique' => 'Ya existe un servicio con el campo {field} guardado.',
],
],
];

View File

@ -0,0 +1,49 @@
<?php
namespace App\Models\Tarifas\Acabados;
use CodeIgniter\Database\BaseBuilder;
use CodeIgniter\Model;
class ServicioAcabadoModel extends Model
{
protected $table = 'servicios_acabado';
protected $primaryKey = 'id';
protected $useSoftDeletes = true;
protected $allowedFields = ['acabado_cubierta', 'acabado_sobrecubierta', 'nombre', 'comentarios', 'mostrar_en_presupuesto_cliente', 'user_updated_id', 'created_at', 'updated_at', 'deleted_at'];
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
protected $returnType = 'App\Entities\Tarifas\Acabados\ServicioAcabadoEntity';
protected $validationRules = [
"nombre" => [
"label" => "ServicioAcabado.nombre",
"rules" => "trim|required|max_length[100]",
],
];
public function getDatatableQuery(): BaseBuilder
{
$builder = $this->db
->table($this->table . " t1")
->select(
"t1.id,
t1.nombre,
t1.acabado_cubierta,
t1.acabado_sobrecubierta,
t1.mostrar_en_presupuesto_cliente,
CONCAT(users.first_name, ' ', users.last_name) as user_updated,
t1.updated_at",
)
->join("users", "t1.user_updated_id = users.id", "left")
->where("t1.deleted_at", null);
return $builder;
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace App\Models\Tarifas\Acabados;
use CodeIgniter\Database\BaseBuilder;
use CodeIgniter\Model;
class TarifasAcabadoServiciosAcabadoModel extends Model
{
protected $table = 'tarifasAcabado_serviciosAcabado';
protected $primaryKey = 'id';
protected $useSoftDeletes = true;
protected $allowedFields = ['tarifa_id', 'servicio_id', 'user_updated_id', 'created_at', 'updated_at', 'deleted_at'];
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
protected $returnType = 'App\Entities\Tarifas\Acabados\TarifasAcabadosServicioAcabadoEntity';
public function getTarifasForServicio($servicioId)
{
$builder = $this->db
->table($this->table . " t1")
->select(
"t1.tarifa_id",
)
->where("t1.servicio_id", $servicioId)
->where("t1.deleted_at", null);
$ids = $builder->get()->getResultArray();
return array_column($ids, 'tarifa_id');
}
}

View File

@ -0,0 +1,100 @@
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section("content") ?>
<div class="row">
<div class="col-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
</div><!--//.card-header -->
<form id="servicioAcabadoForm" class="card-body" method="post" action="<?= $formAction ?>">
<?= csrf_field() ?>
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
<div class="row">
<div class="col-md-12 col-lg-12 px-4">
<div class="mb-3">
<label for="nombre" class="form-label">
<?= lang('ServicioAcabado.nombre') ?>*
</label>
<input type="text" id="nombre" name="nombre" maxLength="255" class="form-control"
value="<?= old('nombre', $servicio->nombre) ?>">
</div><!--//.mb-3 -->
<div class="row">
<span class="mb-3">Seleccione si es servicio cubierta o sobrecubierta (o ambos) antes de
seleccionar las tarifas asociadas. Al cambiar estas opciones, se borrará la
selección.</span>
<div class="mb-3">
<div class="form-check col-md-3">
<label for="acabado_cubierta" class="form-check-label">
<input type="checkbox" id="acabado_cubierta" name="acabado_cubierta" value="1"
class="form-check-input" <?= $servicio->acabado_cubierta == true ? 'checked' : ''; ?>>
<?= lang('ServicioAcabado.servicio_cubierta') ?>
</label>
</div><!--//.form-check -->
<div class="form-check col-md-3">
<label for="acabado_sobrecubierta" class="form-check-label">
<input type="checkbox" id="acabado_sobrecubierta" name="acabado_sobrecubierta"
value="1" class="form-check-input" <?= $servicio->acabado_sobrecubierta == true ? 'checked' : ''; ?>>
<?= lang('ServicioAcabado.servicio_sobrecubierta') ?>
</label>
</div><!--//.form-check -->
<div class="form-check col-md-3">
<label for="mostrar_en_presupuesto_cliente" class="form-check-label">
<input type="checkbox" id="mostrar_en_presupuesto_cliente"
name="mostrar_en_presupuesto_cliente" value="1" class="form-check-input"
<?= $servicio->mostrar_en_presupuesto_cliente == true ? 'checked' : ''; ?>>
<?= lang('Tarifaencuadernacion.mostrar_en_presupuesto_cliente') ?>
</label>
</div><!--//.form-check -->
</div><!--//.mb-3 -->
</div>
<div class="mb-3">
<div class="form-group">
<label for="tarifas" class="form-label">
<?= lang('Tarifaacabado.tarifasacabado') ?></label>
<select id="tarifas" name="tarifasAcabado[]" multiple="multiple"
class="form-control select2"
data-selected='<?= json_encode($tarifasSeleccionadas) ?>'></select>
</div>
</div>
<div class="mb-3">
<label for="comentarios" class="form-label">
<?= lang('ServicioAcabado.comentarios') ?>
</label>
<textarea id="comentarios" name="comentarios" rows="5" cols="10"
class="form-control"><?= old('comentarios', $servicio->comentarios) ?></textarea>
</div><!--//.mb-3 -->
</div><!--//.col -->
</div><!-- //.row -->
<div class="pt-4">
<?php if (auth()->user()->can('tarifa-acabado.edit')): ?>
<input type="submit" class="btn btn-primary float-start me-sm-3 me-1" name="save"
value="<?= lang("Basic.global.Save") ?>" />
<?php endif; ?>
<?= anchor(route_to("serviciosAcabadoList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary float-start"]) ?>
</div><!-- /.card-footer -->
</form>
</div><!-- //.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section('additionalExternalJs') ?>
<script type="module" src="<?= site_url("/assets/js/safekat/pages/tarifas/serviciosAcabado/edit.js") ?>"></script>
<?= $this->endSection() ?>

View File

@ -0,0 +1,59 @@
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<div class="row">
<div class="col-md-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= lang('ServicioAcabado.servicioscabadoList') ?></h3>
<?php if(auth()->user()->can('servicio-acabado.create')): ?>
<?= anchor(route_to('newServicioAcabado'), lang('Basic.global.addNew') . ' ' . lang('ServicioAcabado.servicioacabado'), ['class' => 'btn btn-primary float-end']); ?>
<?php endif; ?>
</div><!--//.card-header -->
<div class="card-body">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<table id="tableOfServiciosAcabado" class="table table-striped table-hover" style="width: 100%;">
<thead>
<tr>
<th><?= lang('ServicioAcabado.id') ?></th>
<th><?= lang('ServicioAcabado.nombre') ?></th>
<th><?= lang('ServicioAcabado.servicio_cubierta') ?></th>
<th><?= lang('ServicioAcabado.servicio_sobrecubierta') ?></th>
<th><?= lang('ServicioAcabado.mostrar_en_presupuesto_cliente') ?></th>
<th><?= lang('ServicioAcabado.userUpdateId') ?></th>
<th><?= lang('ServicioAcabado.updatedAt') ?></th>
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div><!--//.card-body -->
<div class="card-footer">
</div><!--//.card-footer -->
</div><!--//.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section('additionalExternalJs') ?>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/dataTables.buttons.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.print.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/jszip/jszip.min.js") ?>"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/pdfmake.min.js") ?>" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
<script type="module" src="<?= site_url("/assets/js/safekat/pages/tarifas/serviciosAcabado/list.js") ?>"></script>
<?= $this->endSection() ?>

View File

@ -5,6 +5,7 @@
if (
auth()->user()->can('tarifa-preimpresion.menu') ||
auth()->user()->can('tarifa-manipulado.menu') ||
auth()->user()->can('servicio-acabado.menu') ||
auth()->user()->can('tarifa-acabado.menu') ||
auth()->user()->can('tarifa-encuadernacion.menu') ||
auth()->user()->can('tarifa-envio.menu') ||
@ -39,6 +40,13 @@ if (
</a>
</li>
<?php } ?>
<?php if (auth()->user()->can('servicio-acabado.menu')) { ?>
<li class="menu-item">
<a href="<?= route_to('serviciosAcabadoList') ?>" class="menu-link">
<?= lang("App.menu_servicioAcabado") ?>
</a>
</li>
<?php } ?>
<?php if (auth()->user()->can('tarifa-encuadernacion.menu')) { ?>
<li class="menu-item">
<a href="<?= site_url("tarifas/tarifasencuadernacion") ?>" class="menu-link">

View File

@ -219,6 +219,7 @@ class PresupuestoAdminEdit {
datos.selectedTirada = this.datosLibro.tirada.val();
datos.acabado_cubierta_id = this.datosLibro.acabadoCubierta.getVal();
datos.acabado_sobrecubierta_id = this.datosLibro.acabadoSobrecubierta.getVal();
datos.acabado_faja_id = this.datosLibro.acabadoFaja.getVal();
datos = {
...datos, ...{

View File

@ -49,14 +49,14 @@ class DatosLibro {
}
);
this.acabadoFaja = new ClassSelect($("#acabado_faja_id"),
'/serviciosacabados/getacabados',
'/serviciosacabados/getacabados',
'',
false,
{
[this.csrf_token]: this.csrf_hash,
"sobrecubierta": 1
}
);
);
this.retractilado = this.domItem.find('#retractilado');
this.retractilado5 = this.domItem.find('#retractilado5');
@ -71,7 +71,6 @@ class DatosLibro {
this.div_faja = this.domItem.find('.faja-div');
this.cargando = cargando;
}
init() {
@ -85,37 +84,41 @@ class DatosLibro {
this.acabadoCubierta.item.on('select2:select', function () {
if(this.cargando)
if (this.cargando){
return;
}
if(self.acabadoCubierta.getVal() == 0){
if (self.acabadoCubierta.getVal() == 0) {
$(document).trigger('remove-servicio-lineas', 'acabadoCubierta');
}
else{
else {
$(document).trigger('add-servicio-lineas', 'acabadoCubierta');
}
});
this.acabadoSobrecubierta.item.on('select2:select', function () {
if(this.cargando)
if (this.cargando){
return;
}
if(self.acabadoCubierta.getVal() == 0){
if (self.acabadoCubierta.getVal() == 0) {
$(document).trigger('remove-servicio-lineas', 'acabadoSobrecubierta');
}
else{
else {
$(document).trigger('add-servicio-lineas', 'acabadoSobrecubierta');
}
});
this.acabadoFaja.item.on('select2:select', function () {
if(this.cargando)
if (this.cargando)
return;
if(self.acabadoFaja.getVal() == 0){
if (self.acabadoFaja.getVal() == 0) {
$(document).trigger('remove-servicio-lineas', 'acabadoFaja');
}
else{
else {
$(document).trigger('add-servicio-lineas', 'acabadoFaja');
}
});
@ -158,8 +161,8 @@ class DatosLibro {
if (this.faja.prop('checked')) {
this.div_faja.removeClass('d-none');
$('#compFaja').val(1).trigger('change');
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('add-servicio-lineas', 'solapas_faja');
@ -169,8 +172,8 @@ class DatosLibro {
this.div_faja.addClass('d-none');
$('#compFaja').val(0).trigger('change');
$('.acabado-faja').addClass('d-none');
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('remove-servicio-lineas', 'acabadoFaja');
@ -182,7 +185,7 @@ class DatosLibro {
checkMinMaxInput(event) {
if(this.cargando)
if (this.cargando)
return;
const el = event.target;
@ -194,7 +197,7 @@ class DatosLibro {
el.value = el.max;
}
}
else{
else {
el.value = el.min;
}
}
@ -202,7 +205,7 @@ class DatosLibro {
changeFerro() {
if(this.cargando)
if (this.cargando)
return;
if (this.ferro.prop('checked')) {
@ -215,7 +218,7 @@ class DatosLibro {
changePrototipo() {
if(this.cargando)
if (this.cargando)
return;
if (this.prototipo.prop('checked')) {
@ -229,7 +232,7 @@ class DatosLibro {
checkRetractilado(event) {
if(this.cargando)
if (this.cargando)
return;
switch (event.currentTarget.id) {
@ -323,13 +326,13 @@ class DatosLibro {
setTimeout(() => {
if (this.solapasCubierta.prop('checked')) {
$('#div_solapas_ancho').removeClass('d-none');
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('add-servicio-lineas', 'solapas_cubierta');
}
else {
$('#div_solapas_ancho').addClass('d-none');
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('remove-servicio-lineas', 'solapas_cubierta');
$(document).trigger('remove-servicio-lineas', 'solapas_grandes_cubierta');
@ -345,14 +348,14 @@ class DatosLibro {
// para que se actualice el comparador
$('#compCarasCubierta').trigger('change');
if(this.cargando)
if (this.cargando)
return;
if (this.checkSolapasGrandes('cubierta')) {
$(document).trigger('add-servicio-lineas', 'solapas_grandes_cubierta');
}
else {
$(document).trigger('remove-servicio-lineas', 'solapas_grandes_cubierta');
}
}
@ -362,7 +365,7 @@ class DatosLibro {
if (this.solapasSobrecubierta.prop('checked')) {
this.divSolapasSobrecubierta.removeClass('d-none');
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('add-servicio-lineas', 'solapas_sobrecubierta');
}
@ -371,7 +374,7 @@ class DatosLibro {
if ($('#compSobrecubierta').length) {
$('#compSobrecubierta').val(0).trigger('change');
}
if(this.cargando)
if (this.cargando)
return;
$(document).trigger('remove-servicio-lineas', 'solapas_sobrecubierta');
$(document).trigger('remove-servicio-lineas', 'solapas_grandes_sobrecubierta');
@ -380,13 +383,13 @@ class DatosLibro {
changeAnchoSolapasSobrecubierta() {
// para que se actualice el comparador
if($('#compGramajeSobrecubierta').select2('data').length > 0)
if ($('#compGramajeSobrecubierta').select2('data').length > 0)
$('#compGramajeSobrecubierta').trigger('change');
if(this.cargando)
if (this.cargando)
return;
if (this.checkSolapasGrandes('sobrecubierta')) {
@ -401,11 +404,11 @@ class DatosLibro {
changeAnchoSolapasFaja() {
// para que se actualice el comparador
if($('#compGramajeFaja').select2('data').length > 0){
if ($('#compGramajeFaja').select2('data').length > 0) {
$('#compGramajeFaja').trigger('change');
}
if(this.cargando)
if (this.cargando)
return;
if (this.checkSolapasGrandes('faja')) {
@ -539,8 +542,12 @@ class DatosLibro {
const formas_linea = parseInt($('#isCosido').val()) == 0 ? parseInt(rowData.formas) : parseInt(rowData.formas) / 2;
if (formas_linea > tirada)
merma_lineas.push(formas_linea - tirada);
else
merma_lineas.push(tirada % formas_linea);
else {
var total_pliegos = Math.ceil(1.0 * tirada / formas_linea);
var total_formas = total_pliegos * formas_linea;
merma_lineas.push(total_formas - formas_linea);
}
}
}
@ -621,7 +628,7 @@ class DatosLibro {
}
this.faja.prop('checked', datos.fajaColor);
if(datos.fajaColor){
if (datos.fajaColor) {
this.div_faja.removeClass('d-none');
this.fajaAlto.val(datos.fajaColorAlto).trigger('change');
this.fajaSolapasAncho.val(datos.fajaColorSolapasAncho).trigger('change');

View File

@ -510,13 +510,12 @@ class ServiciosAcabado {
updateAcabadosExteriores(cubierta, sobrecubierta, faja) {
this.table.rows().every(function () {
var data = this.data();
for (let i = this.table.rows().count() - 1; i >= 0; i--) {
let data = this.table.row(i).data();
if (data && (data.cubierta == cubierta && data.sobrecubierta == sobrecubierta && data.faja == faja)) {
this.remove().draw();
this.table.row(i).remove().draw();
}
});
}
let tarifa_id = 0;
let uso = 'cubierta';
@ -531,9 +530,6 @@ class ServiciosAcabado {
tarifa_id = $('#acabado_faja_id').val();
uso = 'faja';
}
this.getPresupuestoAcabado(tarifa_id, uso, null);
}
@ -561,24 +557,25 @@ class ServiciosAcabado {
new Ajax('/serviciosacabados/getvalues', datos, {},
function (response) {
if (response.values) {
response.values[0].cubierta = 0;
response.values[0].sobrecubierta = 0;
response.values[0].faja = 0;
if (uso == 'cubierta') {
response.values[0].cubierta = 1;
}
else if (uso == 'sobrecubierta') {
response.values[0].sobrecubierta = 1;
}
else if (uso == 'faja') {
response.values[0].faja = 1;
for(let i=0; i<response.values.length; i++){
response.values[i].cubierta = 0;
response.values[i].sobrecubierta = 0;
response.values[i].faja = 0;
if (uso == 'cubierta') {
response.values[i].cubierta = 1;
}
else if (uso == 'sobrecubierta') {
response.values[i].sobrecubierta = 1;
}
else if (uso == 'faja') {
response.values[i].faja = 1;
}
}
if (updateSelect != null) {
self.table.row(updateSelect.closest('tr')).data(response.values[0]).draw();
}
else {
self.table.rows.add([response.values[0]]).draw();
self.table.rows.add(response.values).draw();
}
}
},

View File

@ -0,0 +1,86 @@
import Ajax from '../../../components/ajax.js';
class editServiciosAcabado {
constructor() {
this.selectElement = $('#tarifas');
this.acabado_cubierta = $('#acabado_cubierta');
this.acabado_sobrecubierta = $('#acabado_sobrecubierta');
this.tarifasSeleccionadas = JSON.parse(this.selectElement.attr('data-selected') || '[]');
}
init() {
const self = this;
this.selectElement.select2({
placeholder: "Selecciona tarifas...",
allowClear: true,
ajax: {
url: "/serviciosacabado/gettarifas",
type: "GET",
dataType: "json",
delay: 250,
data: function (params) {
return {
id: window.location.pathname.split('/').pop(),
search: params.term ,
acabado_cubierta: self.acabado_cubierta.prop('checked')?1:0,
acabado_sobrecubierta: self.acabado_sobrecubierta.prop('checked')?1:0
};
},
processResults: function (data) {
return {
results: data.map(item => ({
id: item.id,
text: item.nombre
}))
};
},
cache: true
}
});
// Si hay tarifas preseleccionadas, cargarlas manualmente
if (this.tarifasSeleccionadas.length > 0) {
$.ajax({
url: "/serviciosacabado/getselectedtarifas",
type: "GET",
dataType: "json",
data: { ids: self.tarifasSeleccionadas },
success: (data) => {
let tarifasPreseleccionadas = data.map(item => ({
id: item.id,
text: item.nombre
}));
self.selectElement.append(
tarifasPreseleccionadas.map(item =>
new Option(item.text, item.id, true, true)
)
).trigger("change");
}
});
}
this.acabado_cubierta.on('change', function(){
self.selectElement.val(null).trigger('change');
});
this.acabado_sobrecubierta.on('change', function(){
self.selectElement.val(null).trigger('change');
});
}
}
$(function () {
new editServiciosAcabado().init();
})
export default editServiciosAcabado;

View File

@ -0,0 +1,94 @@
import Ajax from '../../../components/ajax.js';
import ConfirmDeleteModal from '../../../components/ConfirmDeleteModal.js';
class listServiciosAcabado {
constructor() {
this.deleteModal = null;
}
init() {
const self = this;
this.table = $('#tableOfServiciosAcabado');
this.datatableColumns = [
{ data: 'id', searchable: true, sortable: true, width: "10%" },
{ data: 'nombre', searchable: true, sortable: true, width: "40%" },
{ data: 'acabado_cubierta', sortable: true, width: "10%", render: this.#renderBoolCell.bind(this) },
{ data: 'acabado_sobrecubierta', sortable: false, width: "10%", render: this.#renderBoolCell.bind(this) },
{ data: 'mostrar_en_presupuesto_cliente', searchable: false, sortable: true, width: "1exit0%", render: this.#renderBoolCell.bind(this) },
{ data: 'user_updated', searchable: true, sortable: true },
{ data: 'updated_at', searchable: false, sortable: true },
{
data: 'action', searchable: false, sortable: false, width: "10%"
},
]
this.initDatatableTareas();
this.deleteModal = new ConfirmDeleteModal('tarifascliente');
this.deleteModal.init();
this.table.on('click', '.btn-delete', function (e) {
self.deleteModal.setData($(this).attr('data-id'));
self.deleteModal.show(() => {
if ($.isNumeric(self.deleteModal.getData())) {
new Ajax(
'/serviciosacabado/delete/' + self.deleteModal.getData(),
{},
{},
(response) => {
if (response.id) {
self.datatableTareas.ajax.reload();
popSuccessAlert(response.msg);
}
}
).get();
}
});
});
this.table.on('click', '.btn-edit', function (e) {
window.location.href = '/serviciosacabado/edit/' + $(this).attr('data-id');
});
}
initDatatableTareas() {
this.datatableTareas = this.table.DataTable({
processing: true,
//paging: true,
layout: {
topStart: 'pageLength',
topEnd: 'search',
bottomStart: 'info',
bottomEnd: 'paging'
},
serverSide: true,
responsive: true,
pageLength: 25,
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
columns: this.datatableColumns,
ajax: '/serviciosacabado/datatable'
});
}
#renderBoolCell(d, t) {
let cell = d == 1 ? '<i class="ti ti-check"></i>' : '';
return cell;
}
}
$(function () {
new listServiciosAcabado().init();
})
export default listServiciosAcabado;