diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 55d5f84b..d8769fd2 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -807,6 +807,7 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi $routes->get('print/label/test', 'LogisticaController::print_test_label'); $routes->get('panel', 'LogisticaController::panel', ['as' => 'LogisticaPanel']); $routes->get('envios', 'LogisticaController::gestionEnvios', ['as' => 'gestionEnvios']); + $routes->get('enviosFerros', 'LogisticaController::gestionEnviosFerros', ['as' => 'gestionEnviosFerros']); $routes->get('datatableEnvios', 'LogisticaController::datatable_envios'); $routes->get('datatableLineasEnvios/(:num)', 'LogisticaController::datatable_enviosEdit/$1'); $routes->get('envio/(:num)', 'LogisticaController::editEnvio/$1'); @@ -821,6 +822,7 @@ $routes->group('logistica', ['namespace' => 'App\Controllers\Logistica'], functi $routes->post('updateProveedorEnvio', 'LogisticaController::updateProveedorEnvio'); $routes->post('finalizarEnvio', 'LogisticaController::finalizarEnvio'); $routes->post('generateEnvio', 'LogisticaController::generarEnvio'); + $routes->post('generateEnvioFerro', 'LogisticaController::generarEnvioFerro'); $routes->get('selectForNewEnvio', 'LogisticaController::findForNewEnvio'); $routes->get('selectDireccionForEnvio', 'LogisticaController::selectDireccionForEnvio'); $routes->post('imprimirEtiquetas', 'LogisticaController::imprimirEtiquetas'); diff --git a/ci4/app/Controllers/Logistica/LogisticaController.php b/ci4/app/Controllers/Logistica/LogisticaController.php index f293bb3e..3dc24a88 100755 --- a/ci4/app/Controllers/Logistica/LogisticaController.php +++ b/ci4/app/Controllers/Logistica/LogisticaController.php @@ -62,6 +62,22 @@ class LogisticaController extends BaseController 'currentModule' => static::$controllerSlug, 'boxTitle' => lang('Logistica.gestionEnvios'), 'usingServerSideDataTable' => true, + 'tipo_envio' => 'estandar', + ]; + + $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class + + return view(static::$viewPath . 'viewLogisticaSelectEnvios', $viewData); + } + + + public function gestionEnviosFerros() + { + $viewData = [ + 'currentModule' => static::$controllerSlug, + 'boxTitle' => lang('Logistica.envioFerros'), + 'usingServerSideDataTable' => true, + 'tipo_envio' => 'ferro_prototipo', ]; $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class @@ -85,7 +101,14 @@ class LogisticaController extends BaseController { if ($this->request->isAJAX()) { - $query = LogisticaService::findForNewEnvio(); + + $tipo_envio = $this->request->getGet('tipo_envio') ?? 'estandar'; + + if($tipo_envio == 'ferro_prototipo'){ + $query = LogisticaService::findForNewEnvioFerro(); + } else { + $query = LogisticaService::findForNewEnvio(); + } if ($this->request->getGet("q")) { $query->groupStart() ->orLike("id", $this->request->getGet("q")) @@ -105,12 +128,12 @@ class LogisticaController extends BaseController public function selectDireccionForEnvio(){ if ($this->request->isAJAX()) { - $pedido_id = $this->request->getGet('pedido_id'); - if($pedido_id == null || $pedido_id == 0){ + $ot = $this->request->getGet('ot_id'); + if($ot == null || $ot == 0){ return []; } $searchVal = $this->request->getGet("q") ?? ""; - $result = LogisticaService::findDireccionesNewEnvio($pedido_id, $searchVal); + $result = LogisticaService::findDireccionesNewEnvio($ot, $searchVal); return $this->response->setJSON($result); } else { @@ -124,9 +147,22 @@ class LogisticaController extends BaseController { if ($this->request->isAJAX()) { - $pedido_id = $this->request->getPost('pedido_id'); - $direccion = $this->request->getPost('direccion'); - $result = LogisticaService::generateEnvio($pedido_id, $direccion); + $ot_id = $this->request->getPost('ot_id'); + $direccion = $this->request->getPost('direccion') ?? ""; + $result = LogisticaService::generateEnvio($ot_id, $direccion); + return $this->response->setJSON($result); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function generarEnvioFerro() + { + if ($this->request->isAJAX()) { + + $ot_id = $this->request->getPost('ot_id'); + $result = LogisticaService::generateEnvioFerro($ot_id); return $this->response->setJSON($result); } else { return $this->failUnauthorized('Invalid request', 403); @@ -233,9 +269,10 @@ class LogisticaController extends BaseController { $otsFilter = $this->request->getGetPost('otsFilter'); + $tipo_envio = $this->request->getGetPost('tipo_envio') ?? 'estandar'; $model = model('App\Models\Logistica\EnvioModel'); - $q = $model->getDatatableQuery(); + $q = $model->getDatatableQuery($tipo_envio); if (!empty($otsFilter)) { $q->groupStart(); @@ -370,7 +407,7 @@ class LogisticaController extends BaseController )->edit( "unidadesEnvio", function ($row, $meta) { - if($row->finalizado == 1){ + if($row->finalizado == 1 || $row->tipo_envio == 'ferro_prototipo'){ return $row->unidadesEnvio; } return ' $presupuesto_id, @@ -73,6 +74,7 @@ class Presupuestodirecciones extends \App\Controllers\BaseResourceController "proveedor" => $proveedor, "proveedor_id" => $proveedor_id, "entregaPieCalle" => $entregaPieCalle, + "is_ferro_prototipo" => $is_ferro_prototipo ]; $response = $this->model->insert($data); diff --git a/ci4/app/Database/Migrations/2025-04-26-180000_AddFerroProtoPresupuestoDirecciones.php b/ci4/app/Database/Migrations/2025-04-26-180000_AddFerroProtoPresupuestoDirecciones.php index a80e7131..d5fd4b58 100644 --- a/ci4/app/Database/Migrations/2025-04-26-180000_AddFerroProtoPresupuestoDirecciones.php +++ b/ci4/app/Database/Migrations/2025-04-26-180000_AddFerroProtoPresupuestoDirecciones.php @@ -7,30 +7,24 @@ use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; use CodeIgniter\I18n\Time; -class AddClickColumnOrdenTrabajoTarea extends Migration +class AddFerroProtoPresupuestoDirecciones extends Migration { protected array $COLUMNS = [ - "click_init" => [ - "type" => "INT", + "is_ferro_prototipo" => [ + "type" => "TINYINT", "unsigned" => true, "default" => 0, - "comment" => "Click iniciales de una tarea de impresion" - ], - "click_end" => [ - "type" => "INT", - "unsigned" => true, - "default" => 0, - "comment" => "Click finales de una tarea de impresion" + "comment" => "Indica si es una direccion para el prototipo o ferro", ], ]; public function up() { - $this->forge->addColumn('orden_trabajo_tareas', $this->COLUMNS); + $this->forge->addColumn('presupuesto_direcciones', $this->COLUMNS); } public function down() { - $this->forge->dropColumn('orden_trabajo_tareas', array_keys($this->COLUMNS)); + $this->forge->dropColumn('presupuesto_direcciones', array_keys($this->COLUMNS)); } } diff --git a/ci4/app/Database/Migrations/2025-04-26-200000_AddTipoEnvioEnvios.php b/ci4/app/Database/Migrations/2025-04-26-200000_AddTipoEnvioEnvios.php new file mode 100644 index 00000000..228ee536 --- /dev/null +++ b/ci4/app/Database/Migrations/2025-04-26-200000_AddTipoEnvioEnvios.php @@ -0,0 +1,30 @@ + [ + "type" => "enum", + "constraint" => ['estandar', 'ferro_prototipo'], + "default" => 'estandar', + "comment" => "Indica el tipo de envio", + ], + ]; + public function up() + { + $this->forge->addColumn('envios', $this->COLUMNS); + } + + public function down() + { + $this->forge->dropColumn('envios', array_keys($this->COLUMNS)); + } +} diff --git a/ci4/app/Entities/Logistica/EnvioEntity.php b/ci4/app/Entities/Logistica/EnvioEntity.php index e6bef114..6f22b7f7 100644 --- a/ci4/app/Entities/Logistica/EnvioEntity.php +++ b/ci4/app/Entities/Logistica/EnvioEntity.php @@ -31,5 +31,6 @@ class EnvioEntity extends Entity 'created_at' => 'datetime', 'updated_at' => 'datetime', 'cajas' => 'int', + 'tipo_envio' => 'string', ]; } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoDireccionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoDireccionesEntity.php index 65917b3e..11538041 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoDireccionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoDireccionesEntity.php @@ -25,6 +25,7 @@ class PresupuestoDireccionesEntity extends \CodeIgniter\Entity\Entity "proveedor_id" => null, "margen" => null, "entregaPieCalle" => null, + "is_ferro_prototipo" => null, ]; protected $casts = [ "presupuesto_id" => "int", @@ -38,6 +39,7 @@ class PresupuestoDireccionesEntity extends \CodeIgniter\Entity\Entity "margen" => "float", "proveedor_id" => "int", "entregaPieCalle" => "int", + "is_ferro_prototipo" => "int", ]; } diff --git a/ci4/app/Models/Logistica/EnvioLineaModel.php b/ci4/app/Models/Logistica/EnvioLineaModel.php index 26938014..a50709d3 100644 --- a/ci4/app/Models/Logistica/EnvioLineaModel.php +++ b/ci4/app/Models/Logistica/EnvioLineaModel.php @@ -37,7 +37,7 @@ class EnvioLineaModel extends Model ->select( "t1.id, t1.pedido_id as pedido, t3.id as presupuesto, t3.titulo as titulo, t1.unidades_envio as unidadesEnvio, t1.unidades_envio as unidadesEnvioRaw, - t1.unidades_total as unidadesTotal, + t1.unidades_total as unidadesTotal, t2.tipo_envio as tipo_envio, IFNULL(( SELECT SUM(t_sub.unidades_envio) FROM envios_lineas t_sub diff --git a/ci4/app/Models/Logistica/EnvioModel.php b/ci4/app/Models/Logistica/EnvioModel.php index f94556c8..2222b0aa 100644 --- a/ci4/app/Models/Logistica/EnvioModel.php +++ b/ci4/app/Models/Logistica/EnvioModel.php @@ -32,13 +32,14 @@ class EnvioModel extends Model 'created_at', 'updated_at', 'cajas', + 'tipo_envio', ]; protected $useTimestamps = true; protected $createdField = 'created_at'; protected $updatedField = 'updated_at'; - public function getDatatableQuery(): BaseBuilder + public function getDatatableQuery($tipo_envio = "estandar"): BaseBuilder { $builder = $this->db ->table($this->table . " t1") @@ -51,6 +52,24 @@ class EnvioModel extends Model $builder->join("lg_paises t3", "t3.id = t1.pais_id", "left"); $builder->join("pedidos t4", "t4.id = t2.pedido_id", "left"); $builder->join('ordenes_trabajo t5', 't5.pedido_id = t4.id'); + $builder->where("t1.tipo_envio", $tipo_envio); + + $builder->groupBy("t1.id"); + return $builder; + } + + public function getDatatableQueryFerroPrototipo(): BaseBuilder + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id, GROUP_CONCAT(DISTINCT t5.id) AS ots, + t1.att, t1.direccion, t1.ciudad, t3.nombre as pais, t1.cp, t1.email, t1.telefono, t1.finalizado" + ); + $builder->join("lg_paises t3", "t3.id = t1.pais_id", "left"); + $builder->join("pedidos t4", "t4.id = t2.pedido_id", "left"); + $builder->join('ordenes_trabajo t5', 't5.pedido_id = t4.id'); + $builder->whereIn("t1.tipo_envio", ["estandar"]); $builder->groupBy("t1.id"); return $builder; diff --git a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php index cc24fb30..15f63294 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php @@ -45,6 +45,7 @@ class PresupuestoDireccionesModel extends \App\Models\BaseModel "proveedor_id", "proveedor", "entregaPieCalle", + "is_ferro_prototipo" ]; protected $returnType = "App\Entities\Presupuestos\PresupuestoDireccionesEntity"; @@ -69,7 +70,8 @@ class PresupuestoDireccionesModel extends \App\Models\BaseModel t1.email AS email, t1.direccion AS direccion, t1.pais_id AS pais_id, t2.nombre AS pais, t1.municipio AS municipio, t1.provincia AS provincia, t1.cp AS cp, t1.telefono AS telefono, t1.peso AS peso, t1.cantidad AS cantidad, t1.precio AS precio, t1.margen AS margen, - t1.proveedor_id AS proveedor_id, t1.proveedor AS proveedor, t1.entregaPieCalle AS entregaPieCalle" + t1.proveedor_id AS proveedor_id, t1.proveedor AS proveedor, t1.entregaPieCalle AS entregaPieCalle, + t1.is_ferro_prototipo AS is_ferro_prototipo" ); $builder->where('t1.presupuesto_id', $presupuesto_id); diff --git a/ci4/app/Services/LogisticaService.php b/ci4/app/Services/LogisticaService.php index fe8929d2..d2251313 100644 --- a/ci4/app/Services/LogisticaService.php +++ b/ci4/app/Services/LogisticaService.php @@ -94,6 +94,7 @@ class LogisticaService WHERE el.pedido_id = p.id AND el.presupuesto_id = pr.id AND e.finalizado = 1 + AND e.tipo_envio = 'estandar' ) AS unidades_enviadas, pd.cantidad AS cantidad ") @@ -115,7 +116,47 @@ class LogisticaService return $builder; } - public static function findDireccionesNewEnvio($pedido_id, $searchVal = "") + public static function findForNewEnvioFerro() + { + $db = \Config\Database::connect(); + + // 3. Subconsulta principal + $subBuilder = $db->table('pedidos_linea pl') + ->select(" + ot.id AS id, + CONCAT('[', ot.id, '] - ', pr.titulo) AS name, + p.id as pedido_id, + pr.id as presupuesto_id + ") + ->join('pedidos p', 'p.id = pl.pedido_id') + ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') + ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') + ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') + ->join('orden_trabajo_dates ot_dates', 'ot_dates.orden_trabajo_id = ot.id') + ->whereIn('p.estado', ['finalizado', 'produccion']) + ->where('ot_dates.pendiente_ferro_at IS NOT NULL') + ->where('pd.is_ferro_prototipo', 1) + ->groupBy('pl.id'); + + // 4. Envolver y filtrar por unidades pendientes + $builder = $db->table("({$subBuilder->getCompiledSelect(false)}) AS sub"); + $builder->select('id, name'); + $builder->orderBy('name', 'ASC'); + + $builder->where(" + NOT EXISTS ( + SELECT 1 + FROM envios e + INNER JOIN envios_lineas le ON le.envio_id = e.id + WHERE e.tipo_envio = 'ferro_prototipo' + AND (le.pedido_id = sub.pedido_id OR le.presupuesto_id = sub.presupuesto_id) + ) + ", null, false); + + return $builder; + } + + public static function findDireccionesNewEnvio($ot_id, $searchVal = "") { $direcciones = []; @@ -126,7 +167,9 @@ class LogisticaService ->join('presupuestos pr', 'pr.id=presupuesto_direcciones.presupuesto_id') ->join('pedidos_linea pl', 'pl.presupuesto_id = pr.id') ->join('pedidos p', 'pl.pedido_id=p.id') - ->where('p.id', $pedido_id); + ->join('ordenes_trabajo ot', 'ot.pedido_id = p.id') + ->where('ot.id', $ot_id) + ->where("presupuesto_direcciones.is_ferro_prototipo", 0); if ($searchVal != "") { $dirs = $dirs->groupStart() ->Like("id", $searchVal) @@ -138,10 +181,13 @@ class LogisticaService $unidades_en_direccion = $modelEnvioLineasModel->select('SUM(envios_lineas.unidades_envio) as unidades_enviadas, envios_lineas.unidades_total') ->join('envios', 'envios.id = envios_lineas.envio_id') - ->where('pedido_id', $pedido_id) + ->join('pedidos_linea', 'pedidos_linea.pedido_id = envios_lineas.pedido_id') + ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') + ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') + ->where('ordenes_trabajo.id', $ot_id) ->where('envios.direccion', $direccion->direccion) ->where('envios.finalizado', 1) - ->groupBy('pedido_id')->get()->getResult(); + ->groupBy('ordenes_trabajo.pedido_id')->get()->getResult(); if (count($unidades_en_direccion) == 0 || $unidades_en_direccion[0]->unidades_enviadas < $unidades_en_direccion[0]->unidades_total) { array_push( $direcciones, @@ -196,6 +242,7 @@ class LogisticaService ->join('pedidos p', 'p.id = pl.pedido_id') ->join('presupuestos pr', 'pr.id = pl.presupuesto_id') ->join('presupuesto_direcciones pd', 'pd.presupuesto_id = pr.id') + ->where('pd.is_ferro_prototipo', 0) ->where('p.id', $pedido_id) ->whereIn('p.estado', ['finalizado', 'produccion']) ->where("TRIM(LOWER(pd.direccion)) = '$direccionNormalizada'", null, false) @@ -242,7 +289,7 @@ class LogisticaService - public static function generateEnvio($pedido_id, $direccion = null) + public static function generateEnvio($ot_id, $direccion = null) { $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $direccionNormalizada = strtolower(trim($direccion)); @@ -259,6 +306,7 @@ class LogisticaService presupuesto_direcciones.pais_id, presupuesto_direcciones.cantidad as cantidad_total, presupuestos.cliente_id as cliente_id, + ordenes_trabajo.pedido_id as pedido_id, ( presupuesto_direcciones.cantidad - IFNULL(( @@ -275,7 +323,9 @@ class LogisticaService ->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id') ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') - ->where('pedidos.id', $pedido_id) + ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') + ->where('ordenes_trabajo.id', $ot_id) + ->where('presupuesto_direcciones.is_ferro_prototipo', 0) ->like('presupuesto_direcciones.direccion', $direccion) ->groupBy('presupuesto_direcciones.id') ->first(); @@ -311,7 +361,7 @@ class LogisticaService $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $EnvioLineasModel->save([ 'envio_id' => $idEnvio, - 'pedido_id' => $pedido_id, + 'pedido_id' => $datosEnvio->pedido_id, 'unidades_envio' => $datosEnvio->cantidad, 'unidades_total' => $datosEnvio->cantidad_total, 'cajas' => 1, @@ -332,6 +382,96 @@ class LogisticaService } + public static function generateEnvioFerro($ot_id) + { + $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + + $datosEnvio = $presupuestoDireccionesModel + ->select(" + presupuestos.id as presupuesto_id, + presupuesto_direcciones.att, + presupuesto_direcciones.direccion, + presupuesto_direcciones.provincia as ciudad, + presupuesto_direcciones.cp, + presupuesto_direcciones.telefono, + presupuesto_direcciones.email, + presupuesto_direcciones.pais_id, + presupuesto_direcciones.cantidad as cantidad_total, + presupuestos.cliente_id as cliente_id, + ordenes_trabajo.pedido_id as pedido_id, + ") + ->join('pedidos_linea', 'pedidos_linea.presupuesto_id = presupuesto_direcciones.presupuesto_id') + ->join('pedidos', 'pedidos.id = pedidos_linea.pedido_id') + ->join('presupuestos', 'pedidos_linea.presupuesto_id = presupuestos.id') + ->join('ordenes_trabajo', 'ordenes_trabajo.pedido_id = pedidos.id') + ->where('ordenes_trabajo.id', $ot_id) + ->where('presupuesto_direcciones.is_ferro_prototipo', 1) + ->where(" + NOT EXISTS ( + SELECT 1 + FROM envios e + INNER JOIN envios_lineas el ON el.envio_id = e.id + WHERE e.tipo_envio = 'ferro_prototipo' + AND (el.pedido_id = pedidos.id OR el.presupuesto_id = presupuestos.id) + ) + ", null, false) // <= Esta es la parte nueva, importante + ->groupBy('presupuesto_direcciones.id') + ->first(); + + // Validación si no hay datos o no quedan unidades + if (empty($datosEnvio)) { + return [ + 'status' => false, + 'message' => lang('Logistica.errors.noAddresses') + ]; + } + + // Crear envío + $EnvioModel = model('App\Models\Logistica\EnvioModel'); + $EnvioModel->set([ + 'cliente_id' => $datosEnvio->cliente_id, + 'att' => $datosEnvio->att, + 'direccion' => $datosEnvio->direccion, + 'ciudad' => $datosEnvio->ciudad, + 'cp' => $datosEnvio->cp, + 'telefono' => $datosEnvio->telefono, + 'email' => $datosEnvio->email, + 'pais_id' => $datosEnvio->pais_id, + 'cantidad' => 1, + 'cajas' => 1, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), + 'tipo_envio' => 'ferro_prototipo', + ]); + $EnvioModel->insert(); + $idEnvio = $EnvioModel->insertID(); + + // Crear línea de envío + $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); + $EnvioLineasModel->save([ + 'envio_id' => $idEnvio, + 'pedido_id' => $datosEnvio->pedido_id, + 'unidades_envio' => 1, + 'unidades_total' => 1, + 'cajas' => 1, + 'unidades_cajas' => 1, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), + 'created_by' => auth()->user()->id, + 'updated_by' => auth()->user()->id, + 'presupuesto_id' => (int) $datosEnvio->presupuesto_id + ]); + + return [ + 'status' => true, + 'data' => [ + 'id_envio' => $idEnvio, + ], + ]; + } + + + public static function finalizarEnvio($envio_id, $finalizar_ot = false) { // hay que comprobar que para todas las lineas de envio de este envio @@ -383,24 +523,36 @@ class LogisticaService $cantidad_enviada = $cantidad_enviada[0]->unidades_enviadas; } - if ($cantidad_enviada + $linea->unidades_envio == $pedido->total_tirada) { + if ($envio->tipo_envio == 'ferro_prototipo') { $otModel = model('App\Models\OrdenTrabajo\OrdenTrabajoModel'); $ot = $otModel->where('pedido_id', $linea->pedido_id) ->first(); $ps = (new ProductionService())->init($ot->id); $ps->updateOrdenTrabajoDate([ - "name" => "envio_at", - "envio_at" => date('Y-m-d H:i:s') + "name" => "ferro_en_cliente_at", + "ferro_en_cliente_at" => date('Y-m-d H:i:s') ]); - if ($finalizar_ot) { - $ps->updateOrdenTrabajo( - [ - "estado" => 'F' - ] - ); - array_push($ots, $ot->id); + } else { + if ($cantidad_enviada + $linea->unidades_envio == $pedido->total_tirada) { + $otModel = model('App\Models\OrdenTrabajo\OrdenTrabajoModel'); + $ot = $otModel->where('pedido_id', $linea->pedido_id) + ->first(); + $ps = (new ProductionService())->init($ot->id); + $ps->updateOrdenTrabajoDate([ + "name" => "envio_at", + "envio_at" => date('Y-m-d H:i:s') + ]); + if ($finalizar_ot) { + $ps->updateOrdenTrabajo( + [ + "estado" => 'F' + ] + ); + array_push($ots, $ot->id); + } } } + } $EnvioModel->update($envio_id, ['finalizado' => 1]); @@ -424,19 +576,19 @@ class LogisticaService $data = [ "printer" => $printer->name, "header" => [ - "_FORMAT" => "E:PEDIDO.ZPL", - "_QUANTITY" => 1, - "_PRINBTERNAME" => $printer->name, - "_JOBNAME" => "LBL101" - ], + "_FORMAT" => "E:PEDIDO.ZPL", + "_QUANTITY" => 1, + "_PRINBTERNAME" => $printer->name, + "_JOBNAME" => "LBL101" + ], ]; foreach ($lineas as $linea) { $data["labels"][] = [ "cliente" => $envio->cliente, - "titulo" => "[" . $linea->pedido_id . "] - " . $linea->titulo, + "titulo" => "[" . $linea->pedido_id . "] - " . $linea->titulo, "cantidad" => $linea->unidades_envio, - "tirada" => $linea->unidades_total, + "tirada" => $linea->unidades_total, "cajas" => $cajas, "ean" => null, "nombre" => $envio->att, @@ -449,15 +601,15 @@ class LogisticaService $servicioImpresora = new ImpresoraEtiquetaService(); $xml = $servicioImpresora->createEtiqueta($data); - if($xml == null){ + if ($xml == null) { return [ 'status' => false, 'message' => lang('Logistica.errors.noEtiquetas'), ]; } $sk_environment = getenv('SK_ENVIRONMENT'); - if($sk_environment == 'production'){ - + if ($sk_environment == 'production') { + $status = $servicioImpresora->sendToImpresoraEtiqueta("ETIQUETA", $xml, $printer); if ($status) { return [ @@ -472,7 +624,7 @@ class LogisticaService ]; } - }else{ + } else { return [ 'status' => true, 'message' => lang('Logistica.success.imprimirEtiquetas'), diff --git a/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioEditForm.php b/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioEditForm.php index 23229291..7c63bd17 100644 --- a/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioEditForm.php +++ b/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioEditForm.php @@ -10,6 +10,7 @@

+ tipo_envio == 'ferro_prototipo') ? 'FERRO':'' ?> finalizado == 0) ? '' : 'FINALIZADO' ?>

@@ -18,7 +19,6 @@ -
@@ -114,7 +114,7 @@
- finalizado == 0): ?> + finalizado == 0 && $envioEntity->tipo_envio=='estandar'): ?>

@@ -172,7 +172,7 @@

- finalizado == 0): ?> + finalizado == 0 && $envioEntity->tipo_envio=='estandar'): ?>
+ tipo_envio=='estandar'): ?>
+
diff --git a/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioForm.php b/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioForm.php deleted file mode 100644 index 75b3bbc6..00000000 --- a/ci4/app/Views/themes/vuexy/form/logistica/viewEnvioForm.php +++ /dev/null @@ -1,97 +0,0 @@ -include("themes/_commonPartialsBs/sweetalert") ?> -include('themes/_commonPartialsBs/datatables') ?> -extend('themes/vuexy/main/defaultlayout') ?> - -section('content'); ?> -
-
-
-
-

-
-
- - - -
-

- -

- -
-
- -
- -
- - -
- -
-
-
-
- - -
-

- -

- -
-
- -
- - - - - - - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
-
- -
-
-
-endSection() ?> - - -section('css') ?> - -endSection() ?> - -section('additionalExternalJs') ?> - - -endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php b/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php index cea9b37b..5cad908a 100644 --- a/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php +++ b/ci4/app/Views/themes/vuexy/form/logistica/viewLogisticaSelectEnvios.php @@ -12,6 +12,8 @@
+ +
diff --git a/ci4/app/Views/themes/vuexy/form/logistica/viewPanelLogistica.php b/ci4/app/Views/themes/vuexy/form/logistica/viewPanelLogistica.php index d716dbe5..150044b0 100755 --- a/ci4/app/Views/themes/vuexy/form/logistica/viewPanelLogistica.php +++ b/ci4/app/Views/themes/vuexy/form/logistica/viewPanelLogistica.php @@ -17,7 +17,7 @@ " alt="Envíos">
-
+
" alt="Envío de Ferros/Prototipos">
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php index 982bf06f..891f10aa 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php @@ -39,6 +39,7 @@ Pallets? + Ferro o Prototipo? @@ -60,6 +61,7 @@
+ diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php index 18e014fd..c87a07a5 100755 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php @@ -8,6 +8,15 @@