diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 0278a980..2b8b0b45 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -822,6 +822,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->get('rotativa', 'Ordentrabajo::index_planning_rotativa'); $routes->get('papel/datatable', 'Ordentrabajo::papel_gramaje_datatable'); $routes->get('papel/plana/datatable', 'Ordentrabajo::papel_pliego_datatable'); + $routes->get('maquina/plana/datatable', 'Ordentrabajo::maquina_plana_datatable'); $routes->get('rotativa/datatable', 'Ordentrabajo::planning_rotativa_datatable'); $routes->get('plana/datatable', 'Ordentrabajo::planning_plana_datatable'); $routes->post('tarea/toggle/corte/(:num)', 'Ordentrabajo::tarea_toggle_corte/$1'); diff --git a/ci4/app/Config/Routes/PresupuestosRoutes.php b/ci4/app/Config/Routes/PresupuestosRoutes.php index 2f5ed704..4097a69e 100755 --- a/ci4/app/Config/Routes/PresupuestosRoutes.php +++ b/ci4/app/Config/Routes/PresupuestosRoutes.php @@ -31,6 +31,9 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos $routes->get('presupuestosCliente', 'Presupuestoadmin::tablaClienteForm'); $routes->get('getSumCliente/(:num)', 'Presupuestoadmin::obtenerTotalPresupuestosCliente/$1'); + $routes->get('hasFiles', 'Presupuestoadmin::hasFiles'); + $routes->post('reprint', 'Presupuestoadmin::reprintPresupuesto'); + $routes->post('download_zip', 'Presupuestocliente::download_zip', ['as' => 'descargarAdminArchivos']); }); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index a2a5b194..a69fad38 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -130,11 +130,10 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; $ancho = 0; $alto = 0; - if(isset($sanitizedData['papel_formato_personalizado']) && $sanitizedData['papel_formato_personalizado'] == '1'){ + if (isset($sanitizedData['papel_formato_personalizado']) && $sanitizedData['papel_formato_personalizado'] == '1') { $ancho = $sanitizedData['papel_formato_ancho']; $alto = $sanitizedData['papel_formato_alto']; - } - else{ + } else { $papelFormatoModel = new PapelFormatoModel(); $papelFormato = $papelFormatoModel->find($sanitizedData['papel_formato_id']); $ancho = $papelFormato->ancho; @@ -152,7 +151,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController ]); $model = new PresupuestoEncuadernacionesModel(); - foreach($servDefectoEnc as $servicio){ + foreach ($servDefectoEnc as $servicio) { $data = [ 'presupuesto_id' => $id, @@ -238,12 +237,14 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $postData = $this->request->getPost(); $postData['updated_at'] = gmdate('Y-m-d H:m:s', time()); - + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); $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'] != ""){ + 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']; } @@ -369,9 +370,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } // modificar los datos del pedido y de la factura si no está la factura validada - if ($presupuestoEntity->estado_id == 2){ + if ($presupuestoEntity->estado_id == 2) { $facturaModel = model('App\Models\Facturas\FacturaModel'); - if(!$facturaModel->presupuestoHasFacturaValidada($id)){ + if (!$facturaModel->presupuestoHasFacturaValidada($id)) { // se actualiza primero el pedido $pedidoModel = model('App\Models\Pedidos\PedidoLineaModel'); $pedidoLineaId = $pedidoModel->where('presupuesto_id', $id)->first()->id; @@ -437,7 +438,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $this->viewData['POD'] = $this->getPOD(); $this->viewData['no_envio_base'] = model('App\Models\Clientes\ClienteModel')->where('id', $presupuestoEntity->cliente_id)->first(); - if($this->viewData['no_envio_base']) + if ($this->viewData['no_envio_base']) $this->viewData['no_envio_base'] = $this->viewData['no_envio_base']->no_envio_base; $this->viewData['serviciosAutomaticos'] = [ @@ -465,11 +466,11 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $modelPedidoLinea = new \App\Models\Pedidos\PedidoLineaModel(); $linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); - if($linea){ + if ($linea) { $this->viewData['pedido_id'] = $linea->pedido_id; $modelOrden = new \App\Models\OrdenTrabajo\OrdenTrabajoModel(); $orden = $modelOrden->where('pedido_id', $linea->pedido_id)->first(); - if($orden){ + if ($orden) { $this->viewData['orden_id'] = $orden->id; } } @@ -639,7 +640,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['comparador']['json_data'] = json_decode($presupuesto->comparador_json_data, true); if ($data['comparador']['json_data'] != null) { foreach ($data['comparador']['json_data'] as &$item) { - if(intval($item['papel_id'])>0) + if (intval($item['papel_id']) > 0) $item['papel_nombre'] = $modelPapelGenerico->getNombre($item['papel_id'])['nombre']; } } @@ -663,7 +664,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['comentarios_pdf'] = $presupuesto->comentarios_pdf; $data['comentarios_presupuesto'] = $presupuesto->comentarios_presupuesto; $data['comentarios_produccion'] = $presupuesto->comentarios_produccion; - + $data['tiradasAlternativas'] = json_decode($presupuesto->tirada_alternativa_json_data); @@ -694,9 +695,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['resumen']['total_factor_ponderado'] = is_numeric($presupuesto->total_factor_ponderado) ? $presupuesto->total_factor_ponderado : 0; $data['total_aceptado_revisado'] = $presupuesto->total_aceptado_revisado; - $data['aprobado_by_at'] = ($presupuesto->aprobado_user_id != null)? - model('App\Models\Usuarios\UserModel')->getFullName($presupuesto->aprobado_user_id) . ', ' - . date('d/m/Y H:i:s', strtotime($presupuesto->aprobado_at)):''; + $data['aprobado_by_at'] = ($presupuesto->aprobado_user_id != null) ? + model('App\Models\Usuarios\UserModel')->getFullName($presupuesto->aprobado_user_id) . ', ' + . date('d/m/Y H:i:s', strtotime($presupuesto->aprobado_at)) : ''; $data['resumen']['iva_reducido'] = $presupuesto->iva_reducido; @@ -817,7 +818,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $paginas_color = $sobrecubierta['datosPedido']['paginas'] ?? 0; $tipo_impresion_id = $sobrecubierta['tipo_impresion_id']; $faja = intval($sobrecubierta['faja'] ?? 0); - $uso = $faja==1? 'faja' : $sobrecubierta['uso']; + $uso = $faja == 1 ? 'faja' : $sobrecubierta['uso']; $data = array( @@ -1082,20 +1083,22 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); - if($calcular_merma == 1 && count($resourceData) > 0 && - count($resourceData[0]['fields']) >0 && $resourceData[0]['fields']['num_formas'] > 0) { + if ( + $calcular_merma == 1 && count($resourceData) > 0 && + count($resourceData[0]['fields']) > 0 && $resourceData[0]['fields']['num_formas'] > 0 + ) { usort($resourceData, function ($a, $b) { return $b['fields']['total_impresion'] <=> $a['fields']['total_impresion']; }); $num_formas = []; - $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 : - intval($resourceData[0]['fields']['num_formas']['value']); + $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 : + intval($resourceData[0]['fields']['num_formas']['value']); array_push($num_formas, $formas_linea); $POD = $this->getPOD(); - $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada,$POD, $num_formas); + $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada, $POD, $num_formas); $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); } @@ -1132,20 +1135,22 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $resourceData = PresupuestoService::obtenerComparadorRotativa($input_data); - if($calcular_merma == 1 && count($resourceData) > 0 && - count($resourceData[0]['fields']) >0 && $resourceData[0]['fields']['num_formas'] > 0) { + if ( + $calcular_merma == 1 && count($resourceData) > 0 && + count($resourceData[0]['fields']) > 0 && $resourceData[0]['fields']['num_formas'] > 0 + ) { usort($resourceData, function ($a, $b) { return $b['fields']['total_impresion'] <=> $a['fields']['total_impresion']; }); $num_formas = []; - $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 : - intval($resourceData[0]['fields']['num_formas']['value']); + $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 : + intval($resourceData[0]['fields']['num_formas']['value']); array_push($num_formas, $formas_linea); $POD = $this->getPOD(); - $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada,$POD, $num_formas); + $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada, $POD, $num_formas); $resourceData = PresupuestoService::obtenerComparadorRotativa($input_data); } @@ -1215,7 +1220,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return $this->respond($data); } else if ($tipo == 'duplicar') { $presupuesto_id = $reqData['presupuesto_id'] ?? -1; - $result = $this->duplicarPresupuesto($presupuesto_id); + $result = PresupuestoService::duplicarPresupuesto($presupuesto_id); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); if ($result['success']) { @@ -1271,12 +1276,12 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $cubierta = false; if ($uso == 'cubierta') { $cubierta = true; - $anchoLibro = 2* $ancho + 2 * $solapas + $lomo; + $anchoLibro = 2 * $ancho + 2 * $solapas + $lomo; } $sobrecubierta = false; if ($uso == 'sobrecubierta') { $sobrecubierta = true; - $anchoLibro = 2* $ancho + 2 * $solapas + $lomo; + $anchoLibro = 2 * $ancho + 2 * $solapas + $lomo; } $guardas = false; if ($uso == 'guardas') { @@ -1300,7 +1305,8 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $isPOD, $anchoLibro, $alto, - $tirada); + $tirada + ); if ($this->request->getGet("q")) { $query->groupStart() ->orLike("t1.nombre", $this->request->getGet("q")) @@ -1339,12 +1345,12 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $cubierta = false; if ($uso == 'cubierta') { $cubierta = true; - $anchoLibro = 2* $ancho + 2 * $solapas + $lomo; + $anchoLibro = 2 * $ancho + 2 * $solapas + $lomo; } $sobrecubierta = false; if ($uso == 'sobrecubierta') { $sobrecubierta = true; - $anchoLibro = 2* $ancho + 2 * $solapas + $lomo; + $anchoLibro = 2 * $ancho + 2 * $solapas + $lomo; } $guardas = false; if ($uso == 'guardas') { @@ -1356,7 +1362,8 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } $model = model('App\Models\Configuracion\PapelGenericoModel'); - $query = $model->getGramajeForComparador($tipo, + $query = $model->getGramajeForComparador( + $tipo, $papel_generico_id, $cubierta, $sobrecubierta, @@ -1366,7 +1373,8 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $isPOD, $anchoLibro, $alto, - $tirada); + $tirada + ); if ($this->request->getGet("q")) { $query->groupStart() ->orLike("t2.gramaje", $this->request->getGet("q")) @@ -1599,81 +1607,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } - /** - * Duplica un presupuesto dado por su ID. - * - * Esta función duplica un presupuesto y todas sus entidades relacionadas como acabados, encuadernaciones, manipulados, - * preimpresiones, direcciones y lineas. El presupuesto duplicado se marca como tal y a su título se le añade - * una cadena 'duplicado'. La función devuelve un array con un estado de éxito y el ID del nuevo presupuesto. - * - * @param int $id El ID del presupuesto a duplicar. - * @return array Un array asociativo que contiene una clave 'success' que indica el estado de éxito de la operación, - * y una clave 'id' que contiene el ID del nuevo presupuesto si la operación fue exitosa. - * Si ocurre una excepción, la clave 'success' será false y una clave 'message' contendrá el mensaje de la excepción. - * @throws \Exception Si ocurre un error durante la operación. - */ - private function duplicarPresupuesto($id) - { - - try { - - $presupuesto = $this->model->find($id); - $presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado'); - $presupuesto->is_duplicado = 1; - $presupuesto->estado_id = 1; - $new_id = $this->model->insert($presupuesto); - - $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) { - $acabado->presupuesto_id = $new_id; - $presupuestoAcabadosModel->insert($acabado); - } - - $presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); - foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) { - $encuadernacion->presupuesto_id = $new_id; - $presupuestoEncuadernacionesModel->insert($encuadernacion); - } - - $presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); - foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) { - $manipulado->presupuesto_id = $new_id; - $presupuestoManipuladosModel->insert($manipulado); - } - - $presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); - foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) { - $preimpresion->presupuesto_id = $new_id; - $presupuestoPreimpresionesModel->insert($preimpresion); - } - - $presupuestoServiciosExtraModel = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); - foreach ($presupuestoServiciosExtraModel->where('presupuesto_id', $presupuesto->id)->findAll() as $servicioExtra) { - $servicioExtra->presupuesto_id = $new_id; - $presupuestoServiciosExtraModel->insert($servicioExtra); - } - - $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); - foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) { - $direccion->presupuesto_id = $new_id; - $presupuestoDireccionesModel->insert($direccion); - } - - $presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); - - return [ - 'success' => true, - 'id' => $new_id - ]; - - } catch (\Exception $e) { - return [ - 'success' => false, - 'message' => $e->getMessage() - ]; - } - } public function allItemsSelect() { @@ -1812,10 +1745,11 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $result = DataTable::of($q) ->edit( 'fecha', - fn($q) => $q->fecha?Time::createFromFormat("Y-m-d H:i:s", $q->fecha)->format("d/m/Y"):"" + fn($q) => $q->fecha ? Time::createFromFormat("Y-m-d H:i:s", $q->fecha)->format("d/m/Y") : "" ) ->edit( - 'estado', fn($q) => match ($q->estado) { + 'estado', + fn($q) => match ($q->estado) { "1" => lang('Presupuestos.borrador'), "2" => lang('Presupuestos.confirmado'), default => '--' @@ -1826,13 +1760,14 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController '; - + }); - - return $result->toJson(returnAsObject: true) ; + + return $result->toJson(returnAsObject: true); } - public function obtenerTotalPresupuestosCliente($cliente_id){ + public function obtenerTotalPresupuestosCliente($cliente_id) + { $error = false; $result = [ @@ -1843,17 +1778,17 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController ->where('presupuestos.cliente_id', $cliente_id) ->select('SUM(presupuestos.total_aceptado) as total') ->groupBy('presupuestos.cliente_id')->get()->getResultObject(); - if(count($data) > 0){ + if (count($data) > 0) { $result['total_impresion'] = round(floatval($data[0]->total), 2); - } - else{ + } else { $error = true; } $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; - return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + return $this->respond(['status' => $error ? 'error' : 'success', 'totales' => $result]); } - public function obtenerTotalPedidosCliente($cliente_id){ + public function obtenerTotalPedidosCliente($cliente_id) + { $error = false; $result = [ @@ -1866,14 +1801,58 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController ->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id') ->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id') ->groupBy('presupuestos.cliente_id')->get()->getResultObject(); - if(count($data) > 0){ + if (count($data) > 0) { $result['total_impresion'] = round(floatval($data[0]->total), 2); - } - else{ + } else { $error = true; } $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; - return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + return $this->respond(['status' => $error ? 'error' : 'success', 'totales' => $result]); + } + + + public function hasFiles() + { + + if ($this->request->isAJAX()) { + $id = $this->request->getGet('id'); + $presupuesto = $this->model->find($id); + if (!$presupuesto) { + return $this->respond([ + 'status' => 'error', + 'message' => lang('Presupuestos.presupuestoNotFound'), + ]); + } + + $files = $presupuesto->files() ?? []; + if (count($files) == 0) { + return $this->respond([ + 'status' => 'success', + 'hasFiles' => false, + ]); + } else { + return $this->respond([ + 'status' => 'success', + 'hasFiles' => true, + ]); + } + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function reprintPresupuesto() + { + + if ($this->request->isAJAX()) { + $id = $this->request->getPost('id'); + $duplicateFiles = $this->request->getPost('duplicateFiles') ?? false; + $response = PresupuestoService::duplicarPresupuesto($id, true, $duplicateFiles); + return $this->respond($response); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } } @@ -1903,7 +1882,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $modelPapel = new PapelGenericoModel(); foreach ($lineas as $linea) { $linea->papel_generico = (new PapelGenericoModel())->find($linea->papel_id)->nombre; - if($linea->tipo == 'lp_faja'){ + if ($linea->tipo == 'lp_faja') { $linea->alto_faja = $presupuestoEntity->alto_faja_color; } } @@ -1972,4 +1951,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return $direcciones; } + + } diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index ce6dacdd..2d3baeca 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -372,6 +372,15 @@ class Ordentrabajo extends BaseController ->add("action", fn($q) => ["title" => lang('Produccion.datatable.filter_by_paper'), 'data' => $q]) ->toJson(true); } + public function maquina_plana_datatable() + { + // return $this->response->setStatusCode(400); + $q = $this->produccionService->maquinaPlanaDatatableQuery(); + return DataTable::of($q) + ->edit("tiempoReal", fn($q) => $q->tiempoReal) + ->add("action", fn($q) => ["title" => lang('Produccion.datatable.filter_by_machine'), 'data' => $q]) + ->toJson(true); + } public function reset_tareas(int $orden_trabajo_id) { $r = $this->produccionService->init($orden_trabajo_id)->resetAllTareas(); @@ -513,7 +522,8 @@ class Ordentrabajo extends BaseController public function select_maquina_planning_plana() { $q = $this->request->getGet('q'); - $result = $this->produccionService->querySelectMaquinaPlanningPlana($q); + $padreId = $this->request->getGet('padre_id'); + $result = $this->produccionService->querySelectMaquinaPlanningPlana($q,$padreId); return $this->response->setJSON($result); } public function select_maquina_padre_planning_plana() diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index f23b687b..ac209861 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -363,6 +363,9 @@ return [ 'borrador' => 'Borrador', 'confirmado' => 'Confirmado', + 'reprint' => 'Reimpresión', + 'presupuestoGenerado' => 'Presupuesto generado con éxito', + 'files' => 'Ficheros', 'titulos' => [ 'libroFresadoTapaDura' => 'Rústica Fresado tapa dura', @@ -402,6 +405,7 @@ return [ ], 'errores' => [ + 'presupuestoNotFound' => 'Presupuesto no encontrado', 'paginas' => 'El campo páginas tiene que ser mayor que cero', 'paginasLP' => 'El número de páginas no coincide con el total', 'tiradas' => 'El campo tiradas tiene que ser mayor que cero', diff --git a/ci4/app/Language/es/Produccion.php b/ci4/app/Language/es/Produccion.php index a7907544..9552d726 100755 --- a/ci4/app/Language/es/Produccion.php +++ b/ci4/app/Language/es/Produccion.php @@ -13,6 +13,7 @@ return [ 'prod' => 'Producción' ], "datatable" => [ + "nombre" => "Nombre", "ot_id" => "OT ID", "barcode" => "Código", "pedido_id" => "Pedido ID", @@ -38,6 +39,7 @@ return [ "progreso" => "Progreso", "logo" => "Logo impresion", "filter_by_task" => "Filtrar por tarea", + "filter_by_machine" => "Filtrar por máquina", "filter_by_paper" => "Filtrar por papel", "metros" => "Metros", "corte" => "Corte", @@ -141,7 +143,7 @@ return [ "attr_not_exist" => "El atributo {0,string} no pertenece al modelo Pedido" ], - + "maquinas_planas" => "Máquinas planas", "progress_ferro" => "Ferro", "progress_preimpresion" => "Preimpresión", "progress_logistica" => "Logística", diff --git a/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php b/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php index 46ab3db6..41deef1e 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php @@ -24,10 +24,11 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel public static $labelField = "nombre"; - public function saveFileInBBDD($presupuesto_id, $filename, $extension ,$user_id) { - try{ + public function saveFileInBBDD($presupuesto_id, $filename, $extension, $user_id) + { + try { $new_filename = $this->generateFileHash($filename) . '.' . $extension; - + $this->db->table($this->table . " t1") ->set('presupuesto_id', $presupuesto_id) ->set('nombre', $filename) @@ -42,13 +43,14 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel } } - public function deleteFiles($presupuesto_id, $old_files = []){ + public function deleteFiles($presupuesto_id, $old_files = []) + { $files = $this->db ->table($this->table . " t1") ->where('presupuesto_id', $presupuesto_id)->get()->getResult(); - if($files){ - foreach($files as $file){ + if ($files) { + foreach ($files as $file) { // se comprueba que el $file->nombre no sea igual a ninguno de los elementos del array $old_files if (!in_array($file->nombre, $old_files)) { @@ -67,21 +69,52 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel } - public function getFiles($presupuesto_id){ + public function copyFiles($presupuesto_id_origen, $presupuesto_id_destino) + { + + $files = $this->db + ->table($this->table . " t1") + ->where('presupuesto_id', $presupuesto_id_origen)->get()->getResult(); + if ($files) { + + foreach ($files as $file) { + + $hash = $this->generateFileHash($file->nombre); + + // se copia el fichero a la nueva ubicación + if (!file_exists(WRITEPATH . $file->file_path)) { + copy($file->file_path, WRITEPATH . 'uploads/presupuestos/' . $hash); + } + + $this->db->table($this->table . " t1") + ->set('presupuesto_id', $presupuesto_id_destino) + ->set('nombre', $file->nombre) + ->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $hash) + ->set('upload_by', auth()->user()->id) + ->set('upload_at', date('Y-m-d H:i:s')) + ->insert(); + } + } + } + + + public function getFiles($presupuesto_id) + { return $this->db ->table($this->table . " t1") ->where('presupuesto_id', $presupuesto_id)->get()->getResult(); } - + /** - * Función para convertir el nombre y extensión de un fichero en un hash único - * usando cifrado simétrico. - * - * @param string $filename Nombre del fichero con extensión - * @return string Hash encriptado del fichero - */ - private function generateFileHash($filename) { + * Función para convertir el nombre y extensión de un fichero en un hash único + * usando cifrado simétrico. + * + * @param string $filename Nombre del fichero con extensión + * @return string Hash encriptado del fichero + */ + private function generateFileHash($filename) + { return hash('sha256', $filename); } diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index e23ca530..38ad683e 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -2077,7 +2077,10 @@ class PresupuestoService extends BaseService $merma = 0; - if ($tirada > $POD) { + if ($tirada == 0) { + $merma = 0; + } + else if ($tirada > $POD) { $merma = $tirada * 0.1; } else { $merma_lineas = []; @@ -2105,4 +2108,93 @@ class PresupuestoService extends BaseService } return null; } + + public static function duplicarPresupuesto($id = null, $is_reimpresion = false, $copy_files = false) + { + try { + + $modelPresupuesto = model('App\Models\Presupuestos\PresupuestoModel'); + $presupuesto = $modelPresupuesto->find($id); + if (!$presupuesto || $id == null) { + return [ + 'success' => false, + 'message' => lang('Presupuestos.presupuestoNotFound'), + ]; + } + $presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado'); + $presupuesto->is_duplicado = 1; + $presupuesto->estado_id = 1; + if($is_reimpresion && boolval($copy_files)){ + $presupuesto->inc_rei = "reimpresion"; + $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); + $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); + if($pedido_linea){ + $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . + "\n================================================\n"; + $presupuesto->comentarios_safekat = $presupuesto->comentarios_safekat . $text; + } + } + else{ + $presupuesto->inc_rei = null; + } + $new_id = $modelPresupuesto->insert($presupuesto); + + $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) { + $acabado->presupuesto_id = $new_id; + $presupuestoAcabadosModel->insert($acabado); + } + + $presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) { + $encuadernacion->presupuesto_id = $new_id; + $presupuestoEncuadernacionesModel->insert($encuadernacion); + } + + $presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); + foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) { + $manipulado->presupuesto_id = $new_id; + $presupuestoManipuladosModel->insert($manipulado); + } + + $presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); + foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) { + $preimpresion->presupuesto_id = $new_id; + $presupuestoPreimpresionesModel->insert($preimpresion); + } + + $presupuestoServiciosExtraModel = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); + foreach ($presupuestoServiciosExtraModel->where('presupuesto_id', $presupuesto->id)->findAll() as $servicioExtra) { + $servicioExtra->presupuesto_id = $new_id; + $presupuestoServiciosExtraModel->insert($servicioExtra); + } + + $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) { + $direccion->presupuesto_id = $new_id; + $presupuestoDireccionesModel->insert($direccion); + } + + $presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel'); + $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); + + + if (boolval($copy_files)== true) { + $presupuestoFilesModel = model('App\Models\Presupuestos\PresupuestoFicheroModel'); + $presupuestoFilesModel->copyFiles($presupuesto->id, $new_id); + } + + return [ + 'success' => true, + 'id' => $new_id, + 'message' => lang('Presupuestos.presupuestoGenerado'), + ]; + + } catch (\Exception $e) { + return [ + 'success' => false, + 'message' => $e->getMessage() + ]; + } + } } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 02f3cddf..dced1317 100755 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -924,6 +924,29 @@ class ProductionService extends BaseService + return $q; + } + public function maquinaPlanaDatatableQuery() + { + $q = $this->otModel->builder()->select([ + "lg_maquinas.nombre as maquinaNombre", + "lg_maquinas.id as maquinaId", + "COUNT(orden_trabajo_tareas.id) as tareasCount", + "presupuesto_linea.pliegos_pedido as pliegosPedido", + "SUM(ordenes_trabajo.total_tirada) as totalTirada", + "SUM(orden_trabajo_tareas.tiempo_real) as tiempoReal" + ]) + ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->join("presupuestos", "presupuestos.id = presupuesto_linea.presupuesto_id", "right") + ->join('lg_maquinas',"lg_maquinas.id = orden_trabajo_tareas.maquina_id","left") + ->where("orden_trabajo_tareas.deleted_at", null) + ->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL, FALSE) + ->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA) + ->groupBy('lg_maquinas.id'); + + + return $q; } /** @@ -1334,13 +1357,14 @@ class ProductionService extends BaseService ->whereIn("presupuesto_linea.tipo", $this->TIPOS_ROTATIVA) ->where('lg_maquinas.is_rotativa', true) ->where("orden_trabajo_tareas.deleted_at", null) - ->orderBy("orden_trabajo_tareas.orden", "ASC"); + ->orderBy("orden_trabajo_tareas.orden", "ASC") + ->groupBy('lg_maquinas.id'); if ($q) { $query->like('lg_maquinas.nombre', $q); } return $query->get()->getResultArray(); } - public function querySelectMaquinaPlanningPlana($q) + public function querySelectMaquinaPlanningPlana($q,?string $padreId) { $query = $this->otModel->builder()->select([ "orden_trabajo_tareas.maquina_id as id", @@ -1352,10 +1376,14 @@ class ProductionService extends BaseService ->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA) ->where('lg_maquinas.is_rotativa', false) ->where("orden_trabajo_tareas.deleted_at", null) - ->orderBy("orden_trabajo_tareas.orden", "ASC"); + ->orderBy("orden_trabajo_tareas.orden", "ASC") + ->groupBy('lg_maquinas.id'); if ($q) { $query->like('lg_maquinas.nombre', $q); } + if($padreId){ + $query->where('lg_maquinas.padre_id',$padreId); + } return $query->get()->getResultArray(); } public function querySelectMaquinaPadrePlanningPlana($q) diff --git a/ci4/app/Views/themes/vuexy/components/tables/planning_maquina_table.php b/ci4/app/Views/themes/vuexy/components/tables/planning_maquina_table.php new file mode 100755 index 00000000..ef47fd01 --- /dev/null +++ b/ci4/app/Views/themes/vuexy/components/tables/planning_maquina_table.php @@ -0,0 +1,28 @@ +
| = lang('Produccion.datatable.nombre') ?> | += lang('Produccion.datatable.tareas') ?> | += lang('Produccion.datatable.tirada') ?> | += lang('Produccion.datatable.pliegos_libro') ?> | += lang('Produccion.datatable.tiempo') ?>(HH:MM) | ++ + |
|---|---|---|---|---|---|
| Total: | ++ | + | + + | ||