diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index e9590f5c..58bba4ba 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -330,7 +330,7 @@ $routes->group('maquinas', ['namespace' => 'App\Controllers\Configuracion'], fun $routes->post('allmenuitems', 'Maquinas::allItemsSelect', ['as' => 'select2ItemsOfMaquinas']); $routes->post('menuitems', 'Maquinas::menuItems', ['as' => 'menuItemsOfMaquinas']); $routes->post('duplicate/(:num)', 'Maquinas::duplicate/$1', ['as' => 'duplicateMaquina']); - + $routes->get('(:num)','Maquinas::find_maquina/$1',['as' => 'findMaquina']); $routes->get('select', 'Maquinas::select', ['as' => 'selectMaquinas']); }); $routes->resource('maquinas', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Maquinas', 'except' => 'show,new,create,update']); @@ -659,6 +659,9 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos $routes->get('maquinas', 'Presupuestoadmin::getMaquinas'); $routes->post('getlinea', 'Presupuestoadmin::getLineaPresupuesto'); $routes->post('clone', 'Presupuestoadmin::datatable_2'); + + $routes->get('presupuestosCliente', 'Presupuestoadmin::tablaClienteForm'); + $routes->get('getSumCliente/(:num)', 'Presupuestoadmin::obtenerTotalPresupuestosCliente/$1'); }); $routes->resource('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestoadmin', 'except' => 'show,new,create,update']); @@ -757,6 +760,8 @@ $routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function ( $routes->post('insertfactura', 'Pedido::addFactura'); $routes->get('xml/(:num)', 'Pedido::get_xml_pedido/$1', ['as' => 'getXMLPedido']); $routes->post('produccion/(:num)', 'Pedido::to_produccion/$1', ['as' => 'toProduccion']); + $routes->get('pedidosCliente', 'Pedido::tablaClienteForm'); + $routes->get('getSumCliente/(:num)', 'Pedido::obtenerTotalPedidosCliente/$1'); }); $routes->resource('pedidos', ['namespace' => 'App\Controllers\Pedidos', 'controller' => 'Pedido', 'except' => 'show,new,create,update']); @@ -797,6 +802,7 @@ $routes->group('facturas', ['namespace' => 'App\Controllers\Facturacion'], funct $routes->post('datatablePagos/(:any)', 'FacturasPagos::datatable/$1', ['as' => 'dataTableOfPagosFacturas']); $routes->post('editorPagos', 'FacturasPagos::datatable_editor', ['as' => 'editorOfPagosFacturas']); $routes->post('datatablePedidos', 'Facturas::datatablePedidos', ['as' => 'dataTableOfFacturasPedido']); + $routes->get('getdatoscliente/(:any)', 'Facturas::getDatosFacturacionClienteForm/$1'); }); @@ -992,6 +998,7 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->post("update/user", 'Ordentrabajo::update_orden_trabajo_user'); $routes->post("update", 'Ordentrabajo::update_orden_trabajo'); $routes->post("upload/portada", 'Ordentrabajo::upload_orden_trabajo_portada'); + $routes->delete("portada/(:num)", 'Ordentrabajo::delete_orden_trabajo_portada/$1'); /**====================== * PDF @@ -999,11 +1006,17 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func $routes->get('pdf/(:num)', 'Ordentrabajo::get_pdf/$1'); $routes->get('portada/(:num)', 'Ordentrabajo::get_portada_img/$1'); $routes->group('planning', ['namespace' => 'App\Controllers\Produccion'], function ($routes) { + $routes->get('select/maquina/rotativa','Ordentrabajo::select_maquina_planning_rot'); + $routes->get('select/papel/rotativa','Ordentrabajo::select_papel_planning_rot'); + $routes->get('select/maquina/plana','Ordentrabajo::select_maquina_planning_plana'); + $routes->get('select/papel/plana','Ordentrabajo::select_papel_planning_plana'); $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('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/Controllers/Configuracion/Maquinas.php b/ci4/app/Controllers/Configuracion/Maquinas.php index bb7fb49b..70dfce67 100755 --- a/ci4/app/Controllers/Configuracion/Maquinas.php +++ b/ci4/app/Controllers/Configuracion/Maquinas.php @@ -363,6 +363,7 @@ class Maquinas extends \App\Controllers\BaseResourceController $r = $this->model->getSelectQuery($this->request->getGet("q")); return $this->response->setJSON($r); } + protected function getMaquinaListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; @@ -402,5 +403,9 @@ class Maquinas extends \App\Controllers\BaseResourceController } } + public function find_maquina(int $maquina_id){ + $maquinaEntity = $this->model->find($maquina_id); + return $this->response->setJSON($maquinaEntity); + } } diff --git a/ci4/app/Controllers/Facturacion/Facturas.php b/ci4/app/Controllers/Facturacion/Facturas.php index fd5416c4..3d914183 100755 --- a/ci4/app/Controllers/Facturacion/Facturas.php +++ b/ci4/app/Controllers/Facturacion/Facturas.php @@ -236,13 +236,16 @@ class Facturas extends \App\Controllers\BaseResourceController public function datatable() { + $dataForClienteForm = false; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { - $clienteId = -1; + $temp = $this->request->getGet('cliente_id'); + $clienteId = ($temp && $temp != null && $temp != "") ? $temp : -1; + $dataForClienteForm = ($temp && $temp != null && $temp != "") ? true : false; } $model = model(FacturaModel::class); @@ -342,8 +345,10 @@ class Facturas extends \App\Controllers\BaseResourceController if ($clienteId != -1) { $result->hide('cliente'); $result->hide('creditoAsegurado'); - $result->hide('estado'); - $result->hide('estado_pago'); + if(!$dataForClienteForm){ + $result->hide('estado'); + $result->hide('estado_pago'); + } $result->hide('forma_pago'); $result->hide('vencimiento'); $result->hide('dias_vencimiento'); @@ -352,6 +357,11 @@ class Facturas extends \App\Controllers\BaseResourceController return $result->toJson(returnAsObject: true); } + public function getDatosFacturacionClienteForm($cliente_id){ + + return $this->respond($this->model->getSumatoriosFacturacionCliente($cliente_id)); + } + public function datatablePedidos() { diff --git a/ci4/app/Controllers/Pedidos/Pedido.php b/ci4/app/Controllers/Pedidos/Pedido.php index e17c26ef..bf4ddc9d 100755 --- a/ci4/app/Controllers/Pedidos/Pedido.php +++ b/ci4/app/Controllers/Pedidos/Pedido.php @@ -8,6 +8,8 @@ use App\Models\Collection; use App\Models\Pedidos\PedidoModel; use App\Services\PedidoXMLService; use App\Services\ProductionService; +use Hermawan\DataTables\DataTable; +use CodeIgniter\I18n\Time; class Pedido extends \App\Controllers\BaseResourceController { @@ -34,6 +36,7 @@ class Pedido extends \App\Controllers\BaseResourceController $this->viewData['breadcrumb'] = [ ['title' => lang("App.menu_pedidos"), 'route' => "javascript:void(0);", 'active' => false], ]; + helper("time"); parent::initController($request, $response, $logger); @@ -371,6 +374,96 @@ class Pedido extends \App\Controllers\BaseResourceController } } + public function tablaClienteForm() + { + + $clienteId = $this->request->getGet('cliente_id') ?? -1; + + $q = $this->model->getPedidosClienteForm($clienteId); + + $searchValue = $this->request->getGet('fecha') ?? ''; + if (!empty($searchValue)) { + // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" + $dates = explode('|', $searchValue); + if (count($dates) == 2) { + $q->where('p.created_at >=', $dates[0] . ' 00:00:00') + ->where('p.created_at <=', $dates[1] . ' 23:59:59'); + } + } + $searchValue = $this->request->getGet('fecha_entrega') ?? ''; + if (!empty($searchValue)) { + // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" + $dates = explode('|', $searchValue); + if (count($dates) == 2) { + $q->where('p.fecha_entrega_real >=', $dates[0] . ' 00:00:00') + ->where('p.fecha_entrega_real <=', $dates[1] . ' 23:59:59'); + } + } + + + $result = DataTable::of($q) + ->edit( + 'fecha', + fn($q) => $q->fecha?Time::createFromFormat("Y-m-d H:i:s", $q->fecha)->format("d/m/Y"):"" + ) + ->edit( + 'fecha_entrega', + fn($q) => $q->fecha_entrega?Time::createFromFormat("Y-m-d H:i:s", $q->fecha_entrega)->format("d/m/Y"):"" + ) + ->edit( + "estado", + function ($row, $meta) { + switch ($row->estado) { + case "validacion": + return lang('Pedidos.validacion'); + case "produccion": + return lang('Pedidos.produccion'); + case "finalizado": + return lang('Pedidos.finalizado'); + case "enviado": + return lang('Pedidos.enviado'); + case "cancelado": + return lang('Pedidos.cancelado'); + default: + return '--'; // Debug + } + } + ) + ->add("action", callback: function ($q) { + return ' +
+ +
+ '; + + }); + + return $result->toJson(returnAsObject: true) ; + } + + public function obtenerTotalPedidosCliente($cliente_id){ + + $error = false; + $result = [ + 'total_impresion' => 0, + 'total_maquetacion' => 0, + ]; + $data = $this->model + ->where('presupuestos.cliente_id', $cliente_id)->whereNotIn('pedidos.estado', ['cancelado']) + ->select('SUM(pedidos.total_precio) as total') + ->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){ + $result['total_impresion'] = round(floatval($data[0]->total), 2); + } + else{ + $error = true; + } + $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; + return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + } + public function obtenerPedidosForFacturas(){ if ($this->request->isAJAX()) { diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index 35b372c2..d056e955 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -20,6 +20,8 @@ use App\Models\Presupuestos\PresupuestoPreimpresionesModel; use App\Models\Presupuestos\PresupuestoServiciosExtraModel; use App\Services\PresupuestoService; use App\Services\PresupuestoClienteService; +use Hermawan\DataTables\DataTable; +use CodeIgniter\I18n\Time; use Exception; class Presupuestoadmin extends \App\Controllers\BaseResourceController @@ -1684,6 +1686,91 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } + public function tablaClienteForm() + { + + $clienteId = $this->request->getGet('cliente_id') ?? -1; + + $q = $this->model->getPresupuestosClienteForm($clienteId); + + $searchValue = $this->request->getGet('fecha') ?? ''; + if (!empty($searchValue)) { + // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" + $dates = explode('|', $searchValue); + if (count($dates) == 2) { + $q->where('p.created_at >=', $dates[0] . ' 00:00:00') + ->where('p.created_at <=', $dates[1] . ' 23:59:59'); + } + } + + $result = DataTable::of($q) + ->edit( + 'fecha', + 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) { + "1" => lang('Presupuestos.borrador'), + "2" => lang('Presupuestos.confirmado'), + default => '--' + } + )->add("action", callback: function ($q) { + return ' +
+ +
+ '; + + }); + + return $result->toJson(returnAsObject: true) ; + } + + public function obtenerTotalPresupuestosCliente($cliente_id){ + + $error = false; + $result = [ + 'total_impresion' => 0, + 'total_maquetacion' => 0, + ]; + $data = $this->model + ->where('presupuestos.cliente_id', $cliente_id) + ->select('SUM(presupuestos.total_aceptado) as total') + ->groupBy('presupuestos.cliente_id')->get()->getResultObject(); + if(count($data) > 0){ + $result['total_impresion'] = round(floatval($data[0]->total), 2); + } + else{ + $error = true; + } + $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; + return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + } + + public function obtenerTotalPedidosCliente($cliente_id){ + + $error = false; + $result = [ + 'total_impresion' => 0, + 'total_maquetacion' => 0, + ]; + $data = $this->model + ->where('presupuestos.cliente_id', $cliente_id)->whereNotIn('pedidos.estado', ['cancelado']) + ->select('SUM(pedidos.total_precio) as total') + ->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){ + $result['total_impresion'] = round(floatval($data[0]->total), 2); + } + else{ + $error = true; + } + $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; + return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + } + + protected function getClienteListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Clientes.cliente'))])]; diff --git a/ci4/app/Controllers/Produccion/Ordentrabajo.php b/ci4/app/Controllers/Produccion/Ordentrabajo.php index 44f5ebd9..0fef800c 100755 --- a/ci4/app/Controllers/Produccion/Ordentrabajo.php +++ b/ci4/app/Controllers/Produccion/Ordentrabajo.php @@ -138,7 +138,7 @@ class Ordentrabajo extends BaseController ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) ->toJson(true); @@ -153,7 +153,7 @@ class Ordentrabajo extends BaseController ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => $q->fecha_encuadernado_at? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y"):"" + fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) ->toJson(true); @@ -168,7 +168,7 @@ class Ordentrabajo extends BaseController ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => $q->fecha_encuadernado_at?Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y"):"" + fn($q) =>$q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) ->toJson(true); @@ -183,7 +183,7 @@ class Ordentrabajo extends BaseController ->add("logo", fn($q) => site_url($logo->get_logo_path($q->presupuesto_linea_tipo))) ->edit( "fecha_encuadernado_at", - fn($q) => Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") + fn($q) => $q->fecha_encuadernado_at ? Time::createFromFormat("Y-m-d", $q->fecha_encuadernado_at)->format("d/m/Y") : "" ) ->add("action", fn($q) => $q->id) ->toJson(true); @@ -253,6 +253,22 @@ class Ordentrabajo extends BaseController return $this->response->setJSON(["message" => "Portada error", "error" => $th->getMessage()])->setStatusCode($th->getCode()); } } + public function delete_orden_trabajo_portada($orden_trabajo_id) + { + try { + helper('filesystem'); + $otEntity = $this->otModel->find($orden_trabajo_id); + $pathActualFile = $otEntity->portada_path; + $fullPath = WRITEPATH . 'uploads/' . $pathActualFile; + if(file_exists($fullPath)){ + delete_files($fullPath); + } + $r = $this->otModel->update($otEntity->id, ["portada_path" => null]); + return $this->response->setJSON(["message" => "Portada eliminada", "data" => $r]); + } catch (\Throwable $th) { + return $this->response->setStatusCode(500)->setJSON(["message" => "Portada error", "error" => $th->getMessage()]); + } + } public function get_portada_img($orden_trabajo_id) { $ot = $this->otModel->find($orden_trabajo_id); @@ -273,8 +289,7 @@ class Ordentrabajo extends BaseController return DataTable::of($q) ->edit("fecha_entrega_real_at", fn($q) => $q->fecha_entrega_real_at ? Time::createFromFormat("Y-m-d", $q->fecha_entrega_real_at)->format("d/m/Y") : "") ->add("metros_check", fn($q) => $q->otId) - ->add("corte", fn($q) => $q->otId) - + ->add("corte", fn($q) => ["otId" => $q->otId,"tipo_corte" => $this->produccionService->ordenTrabajoTareaCorte($q->otId)]) ->add("action", fn($q) => $q) ->toJson(true); } @@ -287,4 +302,30 @@ class Ordentrabajo extends BaseController ->add("action", fn($q) => $q) ->toJson(true); } + public function select_maquina_planning_rot(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectMaquinaPlanningRotativa($q); + return $this->response->setJSON($result); + } + public function select_papel_planning_rot(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectPapelPlanningRot($q); + return $this->response->setJSON($result); + } + public function select_maquina_planning_plana(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectMaquinaPlanningPlana($q); + return $this->response->setJSON($result); + } + public function select_papel_planning_plana(){ + $q = $this->request->getGet('q'); + $result = $this->produccionService->querySelectPapelPlanningPlana($q); + return $this->response->setJSON($result); + } + public function tarea_toggle_corte($orden_trabajo_id) + { + $status = $this->produccionService->tareaUpdateMaquinaCorte($orden_trabajo_id); + return $this->response->setJSON(["message" => lang("App.global_alert_save_success"), "status" => $status ]); + } + } diff --git a/ci4/app/Database/Migrations/2025-03-31-080000_AddColumnIsCorteOrdenTrabajoTarea.php b/ci4/app/Database/Migrations/2025-03-31-080000_AddColumnIsCorteOrdenTrabajoTarea.php new file mode 100644 index 00000000..2c0343c7 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-03-31-080000_AddColumnIsCorteOrdenTrabajoTarea.php @@ -0,0 +1,51 @@ + [ + 'type' => 'TINYINT', + 'constraint' => 1, + 'null' => false, + 'default' => 0, + ], + 'tipo_corte' => [ + 'type' => 'ENUM', + 'constraint' => ['bobina','guillotina'], + 'default' => 'bobina', + ], + ]; + $this->forge->addColumn('orden_trabajo_tareas', $fields); + $m = model(OrdenTrabajoTarea::class); + $m->where('nombre','Corte')->set(['is_corte' => true,'tipo_corte' => 'bobina'])->update(); + $cvm = model(ConfigVariableModel::class); + $cvm->insert([ + "name" => "id_maquina_bobina_corte_ot_tarea", + "value" => 61, + "description" => "Id de máquina por defecto para corte en bobina rotativa. (Asignación máquina orden trabajo tarea)" + ]); + $cvm->insert([ + "name" => "id_maquina_guillotina_corte_ot_tarea", + "value" => 31, + "description" => "Id de máquina por defecto para corte guillotina rotativa. (Asignación máquina orden trabajo tarea)" + ]); + } + + public function down() + { + $this->forge->dropColumn('orden_trabajo_tareas', 'is_corte'); + $this->forge->dropColumn('orden_trabajo_tareas', 'tipo_corte'); + $cvm = model(ConfigVariableModel::class); + $cvm->whereIn('name',["id_maquina_bobina_corte_ot_tarea","id_maquina_guillotina_corte_ot_tarea"])->delete(purge:true); + + + } +} diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php index 81e257f8..a586f2c1 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php @@ -2,6 +2,7 @@ namespace App\Entities\Presupuestos; use App\Entities\Tarifas\TarifaEncuadernacionEntity; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\Maquinas\TarifaEncuadernacionMaquinaModel; use App\Models\Tarifas\TarifaEncuadernacionModel; use CodeIgniter\Entity; @@ -34,7 +35,13 @@ class PresupuestoEncuadernacionesEntity extends \CodeIgniter\Entity\Entity public function maquinas() : array { $m = model(TarifaEncuadernacionMaquinaModel::class); - return $m->where("tarifa_encuadernacion_id",$this->attributes["tarifa_encuadernado_id"])->findAll(); + $tarifa_maquinas = $m->where("tarifa_encuadernacion_id",$this->attributes["tarifa_encuadernado_id"])->findAll(); + $maquinaModel = model(MaquinaModel::class); + $maquinas = []; + foreach ($tarifa_maquinas as $key => $tarifa_maquina) { + $maquinas[] = $maquinaModel->find($tarifa_maquina->maquina_id); + } + return $maquinas; } public function tarifa() : TarifaEncuadernacionEntity { diff --git a/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php index 2fec8009..5c880ec4 100644 --- a/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoManipuladosEntity.php @@ -2,6 +2,7 @@ namespace App\Entities\Presupuestos; use App\Entities\Tarifas\TarifaManipuladoEntity; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\Maquinas\TarifaManipuladoMaquinaModel; use App\Models\Tarifas\TarifaManipuladoModel; use CodeIgniter\Entity; @@ -28,7 +29,13 @@ class PresupuestoManipuladosEntity extends \CodeIgniter\Entity\Entity public function maquinas() : array { $m = model(TarifaManipuladoMaquinaModel::class); - return $m->where("tarifa_manipulado_id",$this->attributes["tarifa_manipulado_id"])->findAll(); + $tarifa_maquinas = $m->where("tarifa_manipulado_id",$this->attributes["tarifa_manipulado_id"])->findAll(); + $maquinaModel = model(MaquinaModel::class); + $maquinas = []; + foreach ($tarifa_maquinas as $key => $tarifa_maquina) { + $maquinas[] = $maquinaModel->find($tarifa_maquina->maquina_id); + } + return $maquinas; } public function tarifa() : TarifaManipuladoEntity { diff --git a/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php index 9a0fef88..81de17f5 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoPreimpresionesEntity.php @@ -2,6 +2,7 @@ namespace App\Entities\Presupuestos; use App\Entities\Tarifas\TarifapreimpresionEntity; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\Maquinas\TarifaPreimpresionMaquinaModel; use App\Models\Tarifas\TarifapreimpresionModel; use CodeIgniter\Entity; @@ -26,7 +27,13 @@ class PresupuestoPreimpresionesEntity extends \CodeIgniter\Entity\Entity public function maquinas() : array { $m = model(TarifaPreimpresionMaquinaModel::class); - return $m->where("tarifa_preimpresion_id",$this->attributes["tarifa_preimpresion_id"])->findAll(); + $tarifa_maquinas = $m->where("tarifa_preimpresion_id",$this->attributes["tarifa_preimpresion_id"])->findAll(); + $maquinaModel = model(MaquinaModel::class); + $maquinas = []; + foreach ($tarifa_maquinas as $key => $tarifa_maquina) { + $maquinas[] = $maquinaModel->find($tarifa_maquina->maquina_id); + } + return $maquinas; } public function tarifa() : TarifapreimpresionEntity { diff --git a/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php index b68f6c2f..ebd82bab 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoServiciosExtraEntity.php @@ -2,6 +2,7 @@ namespace App\Entities\Presupuestos; use App\Entities\Tarifas\TarifaextraEntity; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\Maquinas\TarifaExtraMaquinaModel; use App\Models\Tarifas\TarifaextraModel; use CodeIgniter\Entity; @@ -27,7 +28,13 @@ class PresupuestoServiciosExtraEntity extends \CodeIgniter\Entity\Entity public function maquinas() : array { $m = model(TarifaExtraMaquinaModel::class); - return $m->where("tarifa_extra_id",$this->attributes["tarifa_extra_id"])->findAll(); + $tarifa_maquinas = $m->where("tarifa_extra_id",$this->attributes["tarifa_extra_id"])->findAll(); + $maquinaModel = model(MaquinaModel::class); + $maquinas = []; + foreach ($tarifa_maquinas as $key => $tarifa_maquina) { + $maquinas[] = $maquinaModel->find($tarifa_maquina->maquina_id); + } + return $maquinas; } public function tarifa() : TarifaextraEntity { diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php index f59678fd..329a3e3f 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoEntity.php @@ -10,7 +10,8 @@ use App\Models\OrdenTrabajo\OrdenTrabajoTarea; use App\Models\OrdenTrabajo\OrdenTrabajoUser; use App\Models\Pedidos\PedidoModel; use CodeIgniter\Entity\Entity; - +use Picqer\Barcode\Renderers\PngRenderer; +use Picqer\Barcode\Types\TypeCode128; class OrdenTrabajoEntity extends Entity { @@ -101,4 +102,11 @@ class OrdenTrabajoEntity extends Entity $this->attributes["dates"] = $ot_dates->fill($data); return $this; } + public function getBarCode() : string + { + $barcode = new TypeCode128(); + $renderer = new PngRenderer(); + $barcodeData = $barcode->getBarcode($this->pedido()->presupuesto()->id); + return base64_encode($renderer->render($barcodeData,200, 50)); + } } diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php index c7826985..b11c9812 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoTareaEntity.php @@ -25,6 +25,8 @@ class OrdenTrabajoTareaEntity extends Entity "imposicion_id" => null, "tiempo_estimado" => null, "tiempo_real" => null, + "is_corte" => null, + "tipo_corte" => null, "comment" => null, ]; protected $datamap = []; @@ -39,6 +41,8 @@ class OrdenTrabajoTareaEntity extends Entity "imposicion_id" => "?integer", "tiempo_estimado" => "?float", "tiempo_real" => "?float", + "is_corte" => "boolean", + "tipo_corte" => "string", "comment" => "?string" ]; diff --git a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php index 6eaf08c6..c03df33a 100644 --- a/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php +++ b/ci4/app/Entities/Produccion/OrdenTrabajoUserEntity.php @@ -2,6 +2,8 @@ namespace App\Entities\Produccion; +use App\Entities\Usuarios\UserEntity; +use App\Models\Usuarios\UserModel; use CodeIgniter\Entity\Entity; class OrdenTrabajoUserEntity extends Entity @@ -10,30 +12,30 @@ class OrdenTrabajoUserEntity extends Entity protected $dates = ['created_at', 'updated_at', 'deleted_at']; protected $attributes = [ - "orden_trabajo_id"=> null, - "user_created_id"=> null, - "user_update_id"=> null, - "inaplazable_revised_change_user_id"=> null, - "ferro_disponible_hecho_user_id"=> null, - "ferro_disponible_ok_user_id"=> null, - "ferro_entregado_user_id"=> null, - "pendiente_ferro_user_id"=> null, - "ferro_en_cliente_user_id"=> null, - "ferro_ok_user_id"=> null, - "interior_bn_user_id"=> null, - "interior_color_user_id"=> null, - "preparacion_interior_user_id"=> null, - "cubierta_user_id"=> null, - "plastificado_user_id"=> null, - "encuadernacion_user_id"=> null, - "corte_user_id"=> null, - "embalaje_user_id"=> null, - "entrada_manipulado_user_id"=> null, - "pre_formato_user_id"=> null, - "pre_lomo_user_id"=> null, - "pre_solapa_user_id"=> null, - "pre_codbarras_user_id"=> null, - "pre_imposicion_user_id"=> null, + "orden_trabajo_id" => null, + "user_created_id" => null, + "user_update_id" => null, + "inaplazable_revised_change_user_id" => null, + "ferro_disponible_hecho_user_id" => null, + "ferro_disponible_ok_user_id" => null, + "ferro_entregado_user_id" => null, + "pendiente_ferro_user_id" => null, + "ferro_en_cliente_user_id" => null, + "ferro_ok_user_id" => null, + "interior_bn_user_id" => null, + "interior_color_user_id" => null, + "preparacion_interior_user_id" => null, + "cubierta_user_id" => null, + "plastificado_user_id" => null, + "encuadernacion_user_id" => null, + "corte_user_id" => null, + "embalaje_user_id" => null, + "entrada_manipulado_user_id" => null, + "pre_formato_user_id" => null, + "pre_lomo_user_id" => null, + "pre_solapa_user_id" => null, + "pre_codbarras_user_id" => null, + "pre_imposicion_user_id" => null, "pre_imprimir_user_id" => null ]; // protected array $casts = [ @@ -63,4 +65,21 @@ class OrdenTrabajoUserEntity extends Entity // "pre_imposicion_user_id" => "?integer", // "pre_imprimir_user_id" => "?integer" // ]; + + protected function userBy(string $key): ?UserEntity + { + $user = null; + if (isset($this->attributes[$key])) { + + if ($this->attributes[$key]) { + $m = model(UserModel::class); + $user = $m->find($this->attributes[$key]); + } + } + return $user; + } + public function getPlastificadoBy() : ?UserEntity + { + return $this->userBy('plastificado_user_id'); + } } diff --git a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php index 0e384c7f..818d42e1 100644 --- a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php +++ b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php @@ -1,6 +1,8 @@ "int", "is_deleted" => "int", ]; + /** + * Devuelve las maquinas asociadas a esta tarifa de acabado + * + * @return array + */ + public function maquinas() : array + { + $m = model(TarifaAcabadoMaquinaModel::class); + $ta_maquinas = $m->where('tarifa_acabado_id',$this->attributes['id'])->findAll(); + return array_map(fn(TarifaAcabadoMaquinaEntity $ta_maquina) => $ta_maquina->maquina(),$ta_maquinas); + } } diff --git a/ci4/app/Entities/Tarifas/Maquinas/TarifaAcabadoMaquinaEntity.php b/ci4/app/Entities/Tarifas/Maquinas/TarifaAcabadoMaquinaEntity.php index 107370f6..a5b97709 100644 --- a/ci4/app/Entities/Tarifas/Maquinas/TarifaAcabadoMaquinaEntity.php +++ b/ci4/app/Entities/Tarifas/Maquinas/TarifaAcabadoMaquinaEntity.php @@ -2,6 +2,8 @@ namespace App\Entities\Tarifas\Maquinas; use App\Entities\Tarifas\Acabados\TarifaAcabadoEntity; +use App\Entities\Configuracion\Maquina; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\Acabados\TarifaAcabadoModel; use CodeIgniter\Entity\Entity; @@ -27,4 +29,10 @@ class TarifaAcabadoMaquinaEntity extends Entity $m = model(TarifaAcabadoModel::class); return $m->find($this->attributes["tarifa_acabado_id"]); } + public function maquina() : Maquina + { + $m = model(MaquinaModel::class); + return $m->find($this->attributes["maquina_id"]); + + } } diff --git a/ci4/app/Entities/Tarifas/Maquinas/TarifaEncuadernacionMaquinaEntity.php b/ci4/app/Entities/Tarifas/Maquinas/TarifaEncuadernacionMaquinaEntity.php index f0d9ee92..71fcae28 100644 --- a/ci4/app/Entities/Tarifas/Maquinas/TarifaEncuadernacionMaquinaEntity.php +++ b/ci4/app/Entities/Tarifas/Maquinas/TarifaEncuadernacionMaquinaEntity.php @@ -2,7 +2,9 @@ namespace App\Entities\Tarifas\Maquinas; +use App\Entities\Configuracion\Maquina; use App\Entities\Tarifas\TarifaEncuadernacionEntity; +use App\Models\Configuracion\MaquinaModel; use App\Models\Tarifas\TarifaEncuadernacionModel; use CodeIgniter\Entity\Entity; @@ -31,4 +33,9 @@ class TarifaEncuadernacionMaquinaEntity extends Entity $m = model(TarifaEncuadernacionModel::class); return $m->find($this->attributes["tarifa_encuadernacion_id"]); } + public function maquina(): ?Maquina + { + $m = model(MaquinaModel::class); + return $m->find($this->attributes['maquina_id']); + } } diff --git a/ci4/app/Entities/Tarifas/Maquinas/TarifaExtraMaquinaEntity.php b/ci4/app/Entities/Tarifas/Maquinas/TarifaExtraMaquinaEntity.php index 9532f153..af6fe49b 100644 --- a/ci4/app/Entities/Tarifas/Maquinas/TarifaExtraMaquinaEntity.php +++ b/ci4/app/Entities/Tarifas/Maquinas/TarifaExtraMaquinaEntity.php @@ -6,7 +6,8 @@ use App\Entities\Tarifas\TarifaextraEntity; use App\Models\Tarifas\Acabados\TarifaAcabadoModel; use App\Models\Tarifas\TarifaextraModel; use CodeIgniter\Entity\Entity; - +use App\Entities\Configuracion\Maquina; +use App\Models\Configuracion\MaquinaModel; class TarifaExtraMaquinaEntity extends Entity { @@ -29,4 +30,9 @@ class TarifaExtraMaquinaEntity extends Entity $m = model(TarifaextraModel::class); return $m->find($this->attributes["tarifa_extra_id"]); } + public function maquina(): ?Maquina + { + $m = model(MaquinaModel::class); + return $m->find($this->attributes['maquina_id']); + } } diff --git a/ci4/app/Entities/Tarifas/Maquinas/TarifaManipuladoMaquinaEntity.php b/ci4/app/Entities/Tarifas/Maquinas/TarifaManipuladoMaquinaEntity.php index ed8fb93c..341ab7f6 100644 --- a/ci4/app/Entities/Tarifas/Maquinas/TarifaManipuladoMaquinaEntity.php +++ b/ci4/app/Entities/Tarifas/Maquinas/TarifaManipuladoMaquinaEntity.php @@ -4,7 +4,8 @@ namespace App\Entities\Tarifas\Maquinas; use App\Entities\Tarifas\TarifaManipuladoEntity; use App\Models\Tarifas\TarifaManipuladoModel; use CodeIgniter\Entity\Entity; - +use App\Entities\Configuracion\Maquina; +use App\Models\Configuracion\MaquinaModel; class TarifaManipuladoMaquinaEntity extends Entity { @@ -28,4 +29,9 @@ class TarifaManipuladoMaquinaEntity extends Entity $m = model(TarifaManipuladoModel::class); return $m->find($this->attributes["tarifa_manipulado_id"]); } + public function maquina(): ?Maquina + { + $m = model(MaquinaModel::class); + return $m->find($this->attributes['maquina_id']); + } } diff --git a/ci4/app/Entities/Tarifas/Maquinas/TarifaPreimpresionMaquinaEntity.php b/ci4/app/Entities/Tarifas/Maquinas/TarifaPreimpresionMaquinaEntity.php index 2eb4f991..a73a155c 100644 --- a/ci4/app/Entities/Tarifas/Maquinas/TarifaPreimpresionMaquinaEntity.php +++ b/ci4/app/Entities/Tarifas/Maquinas/TarifaPreimpresionMaquinaEntity.php @@ -4,7 +4,8 @@ namespace App\Entities\Tarifas\Maquinas; use App\Entities\Tarifas\TarifapreimpresionEntity; use App\Models\Tarifas\TarifapreimpresionModel; use CodeIgniter\Entity\Entity; - +use App\Entities\Configuracion\Maquina; +use App\Models\Configuracion\MaquinaModel; class TarifaPreimpresionMaquinaEntity extends Entity { @@ -28,4 +29,9 @@ class TarifaPreimpresionMaquinaEntity extends Entity $m = model(TarifapreimpresionModel::class); return $m->find($this->attributes["tarifa_preimpresion_id"]); } + public function maquina(): ?Maquina + { + $m = model(MaquinaModel::class); + return $m->find($this->attributes['maquina_id']); + } } diff --git a/ci4/app/Language/es/Facturas.php b/ci4/app/Language/es/Facturas.php index 9be71bb4..fd058b51 100644 --- a/ci4/app/Language/es/Facturas.php +++ b/ci4/app/Language/es/Facturas.php @@ -74,6 +74,9 @@ return [ "ejemplares" => "Ejemplares", "addPago" => "Añadir Pago", "facturaPagada" => "Factura rectificativa ya abonada", + + "acumuladoFacturacion" => "Acumulado Facturación", + "totalPendientePago" => "Pendiente de pago", 'errors' => [ 'requiredFields' => 'Los campos marcados con * son obligatorios', diff --git a/ci4/app/Language/es/Pedidos.php b/ci4/app/Language/es/Pedidos.php index aa9c20e2..6afcd3ef 100644 --- a/ci4/app/Language/es/Pedidos.php +++ b/ci4/app/Language/es/Pedidos.php @@ -16,6 +16,7 @@ return [ 'estado' => 'Estado', 'importePendiente' => 'Importe Pendiente', + 'todos' => 'Todos', 'validacion' => 'Validación', 'produccion' => 'Producción', 'finalizado' => 'Finalizado', @@ -82,6 +83,10 @@ return [ 'showTotal' => 'Mostrar totales', + 'pedidosImpresion' => 'Pedidos impresión', + 'pedidosMaquetacion' => 'Pedidos maquetación', + 'pedidosTotal' => 'Total en pedidos', + 'validation' => [ 'errorCantidadAlbaranes' => 'Total en albaranes {0} no coincide con la tirada {1}', diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index b347eebe..cd19b536 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -349,6 +349,16 @@ return [ 'cubiertaSinAcabado' => 'Cubierta sin acabado', 'cubiertaSinAcabadoText' => 'La falta de plastificado en la cubierta puede comprometer su calidad, ya que aumenta el riesgo de agrietamiento en los pliegues o hendidos, afectando su apariencia y resistencia', + + 'presupuestosImpresion' => 'Presupuestos impresión', + 'presupuestosMaquetacion' => 'Presupuestos maquetación', + 'presupuestosTotal' => 'Total presupuestos', + 'fecha' => 'Fecha', + 'estado' => 'Estado', + 'todos' => 'Todos', + 'borrador' => 'Borrador', + 'confirmado' => 'Confirmado', + 'files' => 'Ficheros', 'titulos' => [ 'libroFresadoTapaDura' => 'Rústica Fresado tapa dura', diff --git a/ci4/app/Models/Facturas/FacturaModel.php b/ci4/app/Models/Facturas/FacturaModel.php index 718f94f6..dc11b5e2 100644 --- a/ci4/app/Models/Facturas/FacturaModel.php +++ b/ci4/app/Models/Facturas/FacturaModel.php @@ -145,6 +145,40 @@ class FacturaModel extends \App\Models\BaseModel return $builder; } + public function getSumatoriosFacturacionCliente($cliente_id = -1){ + + if($cliente_id == -1){ + return [ + 'total_facturacion' => 0, + 'total_pendiente' => 0 + ]; + } + + $result = []; + $data = $this->db->table('facturas f') + ->select('sum(f.total) as total') + ->where('f.cliente_id', $cliente_id) + ->where('f.deleted_at IS NULL') + ->where('f.estado', 'validada') + ->get() + ->getResultObject(); + $result['total_facturacion'] = + round(floatval(($data && $data[0]->total != null) ? $data[0]->total : 0), 2); + + $data = $this->db->table('facturas f') + ->select('sum(f.pendiente) as pendiente') + ->where('f.cliente_id', $cliente_id) + ->where('f.deleted_at IS NULL') + ->where('f.estado', 'validada') + ->where('f.estado_pago', 'pendiente') + ->get() + ->getResultObject(); + $result['total_pendiente'] = + round(floatval(($data && $data[0]->pendiente != null) ? $data[0]->pendiente : 0), 2); + + return $result; + } + /** * Get resource data for creating PDFs. diff --git a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php index 3c6d1e84..1b40b699 100644 --- a/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php +++ b/ci4/app/Models/OrdenTrabajo/OrdenTrabajoTarea.php @@ -28,6 +28,8 @@ class OrdenTrabajoTarea extends Model "imposicion_id", "tiempo_estimado", "tiempo_real", + "is_corte", + "tipo_corte", "comment" ]; diff --git a/ci4/app/Models/Pedidos/PedidoModel.php b/ci4/app/Models/Pedidos/PedidoModel.php index d5957dce..1ab7dea5 100644 --- a/ci4/app/Models/Pedidos/PedidoModel.php +++ b/ci4/app/Models/Pedidos/PedidoModel.php @@ -232,6 +232,20 @@ class PedidoModel extends \App\Models\BaseModel return $presupuesto_ficheros; } + + public function getPedidosClienteForm($cliente_id = -1){ + $builder = $this->db + ->table($this->table . " p") + ->select('p.id, p.created_at as fecha, p.fecha_entrega_real as fecha_entrega, + pr.paginas as paginas, p.total_tirada, p.total_precio, p.estado') + ->join('pedidos_linea pl', 'pl.pedido_id = p.id', 'left') + ->join('presupuestos pr', 'pr.id = pl.presupuesto_id', 'left') + //->where('pr.deleted_at IS NULL') + ->where('pr.cliente_id', $cliente_id) + ->groupBy('p.id'); + return $builder; + } + /** * Crea una orden de trabajo asociada al pedido * diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index de3a817b..38f9aada 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -713,6 +713,19 @@ class PresupuestoModel extends \App\Models\BaseModel $servicios['extra'] = $queryExtras->get()->getResultObject(); return $servicios; } + + public function getPresupuestosClienteForm($cliente_id = -1){ + $builder = $this->db + ->table($this->table . " pr") + ->select('pr.id, pr.created_at as fecha, CONCAT(u.first_name, " ", u.last_name) AS comercial, pr.titulo, + pr.paginas as paginas, pr.tirada, pr.total_aceptado as total, pr.estado_id as estado') + ->join ("clientes c", "pr.cliente_id = c.id", "left") + ->join("users u", "c.comercial_id= u.id", "left") + ->where('pr.cliente_id', $cliente_id) + ->groupBy('pr.id'); + return $builder; + } + private function generarConceptoLineasPresupuestoLibro($lineas, $presupuesto) { diff --git a/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php b/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php index 6673625f..1795aca3 100644 --- a/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php +++ b/ci4/app/Models/Tarifas/Maquinas/TarifaEncuadernacionMaquinaModel.php @@ -2,8 +2,9 @@ namespace App\Models\Tarifas\Maquinas; - +use App\Entities\Configuracion\Maquina; use App\Entities\Tarifas\Maquinas\TarifaEncuadernacionMaquinaEntity; +use App\Models\Configuracion\MaquinaModel; use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Model; @@ -71,4 +72,5 @@ class TarifaEncuadernacionMaquinaModel extends Model $query->where("tarifa_encuadernacion_maquinas.tarifa_encuadernacion_id", $tarifa_encuadernacion_id); return $query; } + } diff --git a/ci4/app/Services/ProductionService.php b/ci4/app/Services/ProductionService.php index 6f9ea0c6..15b8b2a8 100644 --- a/ci4/app/Services/ProductionService.php +++ b/ci4/app/Services/ProductionService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Database\Migrations\ConfigVariablesApp; use App\Entities\Clientes\ClienteEntity; use App\Entities\Pedidos\PedidoEntity; use App\Entities\Presupuestos\PresupuestoEntity; @@ -15,6 +16,7 @@ use App\Models\Usuarios\UserModel; use CodeIgniter\Config\BaseService; use App\Entities\Configuracion\Maquina as MaquinaEntity; use App\Entities\Produccion\OrdenTrabajoTareaEntity; +use App\Models\Configuracion\ConfigVariableModel; use App\Models\Configuracion\MaquinaModel; use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Database\BaseResult; @@ -28,8 +30,8 @@ use Dompdf\Dompdf; */ class ProductionService extends BaseService { - public array $TIPOS_PLANA = ['lp_bn','lp_color','lp_colorhq']; - public array $TIPOS_ROTATIVA = ['lp_rot_bn','lp_rot_color']; + public array $TIPOS_PLANA = ['lp_bn', 'lp_color', 'lp_colorhq']; + public array $TIPOS_ROTATIVA = ['lp_rot_bn', 'lp_rot_color']; protected OrdenTrabajoModel $otModel; @@ -86,7 +88,7 @@ class ProductionService extends BaseService $this->ot = $this->otModel->find($orden_trabajo_id); $pedido = $this->ot->pedido(); $this->setPedido($pedido); - $this->defaultMaquinaCorte = $this->maquinaModel->where('nombre',$this->defaultMaquinaCorteName)->first(); + $this->defaultMaquinaCorte = $this->maquinaModel->where('nombre', $this->defaultMaquinaCorteName)->first(); return $this; } /** @@ -162,7 +164,7 @@ class ProductionService extends BaseService "fecha_entrega_externo" => $this->pedido->fecha_entrega_externo, ]; $otDateId = $this->otDate->insert($data); - $this->otDate->updateUserDateMap($this->ot->id,$data); + $this->otDate->updateUserDateMap($this->ot->id, $data); return $otDateId; } protected function storeOrdenTrabajoUsers(): int|bool|string @@ -176,9 +178,9 @@ class ProductionService extends BaseService $this->storeOrdenTrabajoTareas(); $this->storeOrdenTrabajoAcabadoTareas(); $this->storeOrdenTrabajoManipuladoTareas(); - $this->storeOrdenTrabajoPreimpresionTareas(); + // $this->storeOrdenTrabajoPreimpresionTareas(); $this->storeOrdenTrabajoEncuadernacionTareas(); - $this->storeOrdenTrabajoExtraTareas(); + // $this->storeOrdenTrabajoExtraTareas(); } public function resetAllTareas(): BaseResult|bool { @@ -208,8 +210,8 @@ class ProductionService extends BaseService $ot_tareas["orden"] = $p_linea_maquina->orden_planning ?? 0; $ot_tareas["maquina_id"] = $p_linea_maquina->id; $ot_tareas["imposicion_id"] = null; - $ot_tareas["tiempo_estimado"] = $p_linea->horas_maquina; - $ot_tareas["tiempo_real"] = $p_linea->horas_maquina; //? Tiempo real se inserta manual? + $ot_tareas["tiempo_estimado"] = $p_linea->horas_maquina * 3600; + $ot_tareas["tiempo_real"] = $p_linea->horas_maquina * 3600; //? Tiempo real se inserta manual? $insert_query_result = $this->otTarea->insert($ot_tareas); $ot_tareas = []; $this->storeTareaCorte($p_linea); @@ -219,15 +221,17 @@ class ProductionService extends BaseService protected function storeTareaCorte(PresupuestoLineaEntity $pLinea): ?OrdenTrabajoTareaEntity { $otCorte = null; - if($pLinea->isRotativa()){ + if ($pLinea->isRotativa()) { $tareaId = $this->otTarea->insert([ 'orden_trabajo_id' => $this->ot->id, 'presupuesto_linea_id' => $pLinea->id, 'nombre' => 'Corte', 'maquina_id' => $this->defaultMaquinaCorte->id, 'orden' => $this->defaultMaquinaCorte->orden_planning, - 'tiempo_estimado' => $pLinea->rotativa_tiempo_corte, - 'tiempo_real' => $pLinea->rotativa_tiempo_corte + 'tiempo_estimado' => $pLinea->rotativa_tiempo_corte * 60, + 'tiempo_real' => $pLinea->rotativa_tiempo_corte * 60, + 'is_corte' => true, + 'tipo_corte' => "bobina", ]); $otCorte = $this->otTarea->find($tareaId); } @@ -241,20 +245,20 @@ class ProductionService extends BaseService $p_linea_maquinas = $p_linea->maquinas(); $ot_tareas = []; if (count($p_linea_maquinas) > 0) { - foreach ($p_linea_maquinas as $key => $linea) { - $ot_tareas["orden_trabajo_id"] = $this->ot->id; - $ot_tareas["presupuesto_acabado_id"] = $p_linea->id; - $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; - $ot_tareas["orden"] = $linea->orden_planning ?? 0; - $ot_tareas["maquina_id"] = $linea->id; - $ot_tareas["imposicion_id"] = null; - $this->otTarea->insert($ot_tareas); - $ot_tareas = []; - } + $linea_maquina = $p_linea_maquinas[0]; //Se obtiene la primera máquina aunque tenga varias + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_acabado_id"] = $p_linea->id; + $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; + $ot_tareas["orden"] = $linea_maquina->orden_planning ?? 100; + $ot_tareas["maquina_id"] = $linea_maquina->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; } else { $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_acabado_id"] = $p_linea->id; $ot_tareas["nombre"] = $p_linea->tarifa()->nombre ?? ""; + $ot_tareas["orden"] = 100; $this->otTarea->insert($ot_tareas); } } @@ -267,20 +271,20 @@ class ProductionService extends BaseService $p_linea_maquinas = $p_linea->maquinas(); $ot_tareas = []; if (count($p_linea_maquinas) > 0) { - foreach ($p_linea_maquinas as $key => $linea) { - $ot_tareas["orden_trabajo_id"] = $this->ot->id; - $ot_tareas["presupuesto_manipulado_id"] = $p_linea->id; - $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; - $ot_tareas["orden"] = $linea->orden_planning ?? 0; - $ot_tareas["maquina_id"] = $linea->id; - $ot_tareas["imposicion_id"] = null; - $this->otTarea->insert($ot_tareas); - $ot_tareas = []; - } + $linea_maquina = $p_linea_maquinas[0]; //Se obtiene la primera máquina aunque tenga varias + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_manipulado_id"] = $p_linea->id; + $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; + $ot_tareas["orden"] = $linea_maquina->orden_planning ?? 100; + $ot_tareas["maquina_id"] = $linea_maquina->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; } else { $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_manipulado_id"] = $p_linea->id; $ot_tareas["nombre"] = $p_linea->tarifa()->nombre ?? ""; + $ot_tareas["orden"] = 100; $this->otTarea->insert($ot_tareas); } } @@ -293,20 +297,20 @@ class ProductionService extends BaseService $p_linea_maquinas = $p_linea->maquinas(); $ot_tareas = []; if (count($p_linea_maquinas) > 0) { - foreach ($p_linea_maquinas as $key => $linea) { - $ot_tareas["orden_trabajo_id"] = $this->ot->id; - $ot_tareas["presupuesto_preimpresion_id"] = $p_linea->id; - $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; - $ot_tareas["orden"] = $linea->orden_planning ?? 0; - $ot_tareas["maquina_id"] = $linea->id; - $ot_tareas["imposicion_id"] = null; - $this->otTarea->insert($ot_tareas); - $ot_tareas = []; - } + $linea_maquina = $p_linea_maquinas[0]; //Se obtiene la primera máquina aunque tenga varias + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_preimpresion_id"] = $p_linea->id; + $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; + $ot_tareas["orden"] = $linea_maquina->orden_planning ?? 100; + $ot_tareas["maquina_id"] = $linea_maquina->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; } else { $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_preimpresion_id"] = $p_linea->id; $ot_tareas["nombre"] = $p_linea->tarifa()->nombre ?? ""; + $ot_tareas["orden"] = 100; $this->otTarea->insert($ot_tareas); } } @@ -319,20 +323,20 @@ class ProductionService extends BaseService $p_linea_maquinas = $p_linea->maquinas(); $ot_tareas = []; if (count($p_linea_maquinas) > 0) { - foreach ($p_linea_maquinas as $key => $linea) { - $ot_tareas["orden_trabajo_id"] = $this->ot->id; - $ot_tareas["presupuesto_encuadernado_id"] = $p_linea->id; - $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; - $ot_tareas["orden"] = $linea->orden_planning ?? 0; - $ot_tareas["maquina_id"] = $linea->id; - $ot_tareas["imposicion_id"] = null; - $this->otTarea->insert($ot_tareas); - $ot_tareas = []; - } + $linea_maquina = $p_linea_maquinas[0]; //Se obtiene la primera máquina aunque tenga varias + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_encuadernado_id"] = $p_linea->id; + $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; + $ot_tareas["orden"] = $linea_maquina->orden_planning ?? 110; + $ot_tareas["maquina_id"] = $linea_maquina->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; } else { $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_encuadernado_id"] = $p_linea->id; $ot_tareas["nombre"] = $p_linea->tarifa()->nombre ?? ""; + $ot_tareas["orden"] = 110; $this->otTarea->insert($ot_tareas); } } @@ -345,16 +349,15 @@ class ProductionService extends BaseService $p_linea_maquinas = $p_linea->maquinas(); $ot_tareas = []; if (count($p_linea_maquinas) > 0) { - foreach ($p_linea_maquinas as $key => $linea) { - $ot_tareas["orden_trabajo_id"] = $this->ot->id; - $ot_tareas["presupuesto_extra_id"] = $p_linea->id; - $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; - $ot_tareas["orden"] = $linea->orden_planning; - $ot_tareas["maquina_id"] = $linea->id; - $ot_tareas["imposicion_id"] = null; - $this->otTarea->insert($ot_tareas); - $ot_tareas = []; - } + $linea_maquina = $p_linea_maquinas[0]; //Se obtiene la primera máquina aunque tenga varias + $ot_tareas["orden_trabajo_id"] = $this->ot->id; + $ot_tareas["presupuesto_extra_id"] = $p_linea->id; + $ot_tareas["nombre"] = $p_linea->tarifa()->nombre; + $ot_tareas["orden"] = $linea_maquina->orden_planning ?? 0; + $ot_tareas["maquina_id"] = $linea_maquina->id; + $ot_tareas["imposicion_id"] = null; + $this->otTarea->insert($ot_tareas); + $ot_tareas = []; } else { $ot_tareas["orden_trabajo_id"] = $this->ot->id; $ot_tareas["presupuesto_extra_id"] = $p_linea->id; @@ -459,12 +462,12 @@ class ProductionService extends BaseService ->join("lg_imposiciones", "lg_imposiciones.id = orden_trabajo_tareas.imposicion_id", "left") // ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) ->whereIn("presupuesto_linea.tipo", $this->TIPOS_ROTATIVA) - ->where('lg_maquinas.is_rotativa',true) + ->where('lg_maquinas.is_rotativa', true) ->where("orden_trabajo_tareas.deleted_at", null) ->orderBy("orden_trabajo_tareas.orden", "ASC"); return $q; } - /** + /** * Query para mostrar en datatable * * @return BaseBuilder @@ -500,7 +503,7 @@ class ProductionService extends BaseService ->join("lg_imposiciones", "lg_imposiciones.id = orden_trabajo_tareas.imposicion_id", "left") // ->where("orden_trabajo_tareas.orden_trabajo_id", $this->ot->id) ->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA) - ->where('lg_maquinas.is_rotativa',false) + ->where('lg_maquinas.is_rotativa', false) ->where("orden_trabajo_tareas.deleted_at", null) ->orderBy("orden_trabajo_tareas.orden", "ASC"); return $q; @@ -716,6 +719,10 @@ class ProductionService extends BaseService public function updateOrdenTrabajoTarea($tarea_id, $data): bool { + if (isset($data['maquina_id'])) { + $maquina = model(MaquinaModel::class)->find($data['maquina_id']); + $data['orden'] = $maquina->orden_planning; + } return $this->otTarea->update($tarea_id, $data); } @@ -725,16 +732,16 @@ class ProductionService extends BaseService $otDate = $this->otDate->where('orden_trabajo_id', $this->ot->id) ->set([$data['name'] => $data[$data['name']]]) ->update($data); - $this->otDate->updateUserDateMap($this->ot->id,$data); + $this->otDate->updateUserDateMap($this->ot->id, $data); $ot_users = $this->ot->users(); - if(isset($this->MAPPING_DATE_USER[$data["name"]])){ + if (isset($this->MAPPING_DATE_USER[$data["name"]])) { $user_id = $ot_users->{$this->MAPPING_DATE_USER[$data["name"]]}; $user = $this->userModel->find($user_id); - if($user_id){ + if ($user_id) { $result = ["user" => null, "status" => false]; } $result = ["user" => $user, "status" => $otDate]; - }else{ + } else { $result = ["user" => null, "status" => false]; } return $result; @@ -817,4 +824,106 @@ class ProductionService extends BaseService { return ["title" => lang('ot.filter_by_task'), 'id' => $id]; } + + public function querySelectMaquinaPlanningRotativa($q) + { + $query = $this->otModel->builder()->select([ + "orden_trabajo_tareas.maquina_id as id", + "lg_maquinas.nombre as name", + ]) + ->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("lg_maquinas", "lg_maquinas.id = orden_trabajo_tareas.maquina_id", "left") + ->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"); + if ($q) { + $query->like('lg_maquinas.nombre', $q); + } + return $query->get()->getResultArray(); + } + public function querySelectMaquinaPlanningPlana($q) + { + $query = $this->otModel->builder()->select([ + "orden_trabajo_tareas.maquina_id as id", + "lg_maquinas.nombre as name", + ]) + ->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("orden_trabajo_dates", "orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id", "left") + ->join("presupuesto_linea", "presupuesto_linea.id = orden_trabajo_tareas.presupuesto_linea_id", "left") + ->join("lg_maquinas", "lg_maquinas.id = orden_trabajo_tareas.maquina_id", "left") + ->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"); + if ($q) { + $query->like('lg_maquinas.nombre', $q); + } + return $query->get()->getResultArray(); + } + public function querySelectPapelPlanningRot(string $q) + { + $query = $this->otModel->builder()->select([ + "lg_papel_impresion.id", + "lg_papel_impresion.nombre as name", + ]) + ->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_papel_impresion", "presupuesto_linea.papel_impresion_id = lg_papel_impresion.id", "left") + ->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_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_ROTATIVA) + ->groupBy('lg_papel_impresion.id'); + if ($q) { + $query->like('lg_papel_impresion.nombre', $q); + } + return $query->get()->getResultArray(); + } + public function querySelectPapelPlanningPlana($q) + { + $query = $this->otModel->builder()->select([ + "lg_papel_impresion.id", + "lg_papel_impresion.nombre as name", + ]) + ->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_papel_impresion", "presupuesto_linea.papel_impresion_id = lg_papel_impresion.id", "left") + ->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_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_papel_impresion.id'); + if ($q) { + $query->like('lg_papel_impresion.nombre', $q); + } + return $query->get()->getResultArray(); + } + public function tareaUpdateMaquinaCorte($orden_trabajo_id): bool + { + $cvm = model(ConfigVariableModel::class); + $otTarea = $this->otTarea->where('orden_trabajo_id', $orden_trabajo_id)->where('is_corte', true)->first(); + $toggleCorte = "bobina"; + if ($otTarea->tipo_corte == "bobina") { + $maquina_id = $cvm->where('name', "id_maquina_guillotina_corte_ot_tarea")->first()["value"]; + $toggleCorte = "guillotina"; + } elseif ($otTarea->tipo_corte == "guillotina") { + $maquina_id = $cvm->where('name', "id_maquina_bobina_corte_ot_tarea")->first()["value"]; + $toggleCorte = "bobina"; + } else { + $maquina_id = null; + } + return $this->otTarea + ->where('orden_trabajo_id', $orden_trabajo_id) + ->where('is_corte', true) + ->set(["maquina_id" => $maquina_id, "tipo_corte" => $toggleCorte]) + ->update(); + } + public function ordenTrabajoTareaCorte(int $ot_id): ?string + { + return $this->otTarea->where('orden_trabajo_id', $ot_id)->where('is_corte', true)?->first()->tipo_corte ?? null; + } } diff --git a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php index 6c67d6a6..56654f74 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php @@ -56,19 +56,19 @@ +