mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
update with ot files
This commit is contained in:
@ -6,6 +6,7 @@ use App\Controllers\Produccion\Ordentrabajo;
|
|||||||
use App\Database\Migrations\OrdenTrabajoDatesTable;
|
use App\Database\Migrations\OrdenTrabajoDatesTable;
|
||||||
use App\Entities\Pedidos\PedidoEntity;
|
use App\Entities\Pedidos\PedidoEntity;
|
||||||
use App\Models\OrdenTrabajo\OrdenTrabajoDate;
|
use App\Models\OrdenTrabajo\OrdenTrabajoDate;
|
||||||
|
use App\Models\OrdenTrabajo\OrdenTrabajoFileModel;
|
||||||
use App\Models\OrdenTrabajo\OrdenTrabajoTarea;
|
use App\Models\OrdenTrabajo\OrdenTrabajoTarea;
|
||||||
use App\Models\OrdenTrabajo\OrdenTrabajoUser;
|
use App\Models\OrdenTrabajo\OrdenTrabajoUser;
|
||||||
use App\Models\Pedidos\PedidoModel;
|
use App\Models\Pedidos\PedidoModel;
|
||||||
@ -109,4 +110,9 @@ class OrdenTrabajoEntity extends Entity
|
|||||||
$barcodeData = $barcode->getBarcode($this->pedido()->presupuesto()->id);
|
$barcodeData = $barcode->getBarcode($this->pedido()->presupuesto()->id);
|
||||||
return base64_encode($renderer->render($barcodeData,200, 50));
|
return base64_encode($renderer->render($barcodeData,200, 50));
|
||||||
}
|
}
|
||||||
|
public function files() : array
|
||||||
|
{
|
||||||
|
$m = model(OrdenTrabajoFileModel::class);
|
||||||
|
return $m->where('orden_trabajo_id',$this->attributes['id'])->findAll() ?? [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
32
ci4/app/Entities/Produccion/OrdenTrabajoFileEntity.php
Normal file
32
ci4/app/Entities/Produccion/OrdenTrabajoFileEntity.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entities\Produccion;
|
||||||
|
|
||||||
|
use App\Models\OrdenTrabajo\OrdenTrabajoModel;
|
||||||
|
use CodeIgniter\Entity\Entity;
|
||||||
|
|
||||||
|
class OrdenTrabajoFileEntity extends Entity
|
||||||
|
{
|
||||||
|
protected $attributes = [
|
||||||
|
"orden_trabajo_id" => null,
|
||||||
|
"name" => null,
|
||||||
|
"upload_by" => null,
|
||||||
|
"file_path" => null
|
||||||
|
];
|
||||||
|
protected $casts = [
|
||||||
|
"orden_trabajo_id" => "integer",
|
||||||
|
"name" => "string",
|
||||||
|
"upload_by" => "integer",
|
||||||
|
"file_path" => "string"
|
||||||
|
];
|
||||||
|
|
||||||
|
public function orden_trabajo(): ?OrdenTrabajoEntity
|
||||||
|
{
|
||||||
|
$m = model(OrdenTrabajoModel::class);
|
||||||
|
return $m->find($this->attributes["orden_trabajo_id"]);
|
||||||
|
}
|
||||||
|
public function hash(): string
|
||||||
|
{
|
||||||
|
return array_reverse(explode('/', $this->attributes["file_path"]))[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
56
ci4/app/Models/OrdenTrabajo/OrdenTrabajoFileModel.php
Normal file
56
ci4/app/Models/OrdenTrabajo/OrdenTrabajoFileModel.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models\OrdenTrabajo;
|
||||||
|
|
||||||
|
use App\Entities\Produccion\OrdenTrabajoFileEntity;
|
||||||
|
use CodeIgniter\Database\BaseBuilder;
|
||||||
|
use CodeIgniter\Model;
|
||||||
|
class OrdenTrabajoFileModel extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'orden_trabajo_files';
|
||||||
|
protected $primaryKey = 'id';
|
||||||
|
protected $useAutoIncrement = true;
|
||||||
|
protected $returnType = OrdenTrabajoFileEntity::class;
|
||||||
|
protected $useSoftDeletes = true;
|
||||||
|
protected $protectFields = true;
|
||||||
|
protected $allowedFields = [
|
||||||
|
"orden_trabajo_id",
|
||||||
|
"name",
|
||||||
|
"upload_by",
|
||||||
|
"file_path"
|
||||||
|
];
|
||||||
|
|
||||||
|
protected bool $allowEmptyInserts = false;
|
||||||
|
protected bool $updateOnlyChanged = true;
|
||||||
|
|
||||||
|
protected array $casts = [
|
||||||
|
|
||||||
|
];
|
||||||
|
protected array $castHandlers = [];
|
||||||
|
|
||||||
|
// Dates
|
||||||
|
protected $useTimestamps = true;
|
||||||
|
protected $dateFormat = 'datetime';
|
||||||
|
protected $createdField = 'created_at';
|
||||||
|
protected $updatedField = 'updated_at';
|
||||||
|
protected $deletedField = 'deleted_at';
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
protected $validationRules = [];
|
||||||
|
protected $validationMessages = [];
|
||||||
|
protected $skipValidation = false;
|
||||||
|
protected $cleanValidationRules = true;
|
||||||
|
|
||||||
|
// Callbacks
|
||||||
|
protected $allowCallbacks = true;
|
||||||
|
protected $beforeInsert = [];
|
||||||
|
protected $afterInsert = [];
|
||||||
|
protected $beforeUpdate = [];
|
||||||
|
protected $afterUpdate = [];
|
||||||
|
protected $beforeFind = [];
|
||||||
|
protected $afterFind = [];
|
||||||
|
protected $beforeDelete = [];
|
||||||
|
protected $afterDelete = [];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -15,15 +15,18 @@ use App\Models\OrdenTrabajo\OrdenTrabajoUser;
|
|||||||
use App\Models\Usuarios\UserModel;
|
use App\Models\Usuarios\UserModel;
|
||||||
use CodeIgniter\Config\BaseService;
|
use CodeIgniter\Config\BaseService;
|
||||||
use App\Entities\Configuracion\Maquina as MaquinaEntity;
|
use App\Entities\Configuracion\Maquina as MaquinaEntity;
|
||||||
|
use App\Entities\Produccion\OrdenTrabajoFileEntity;
|
||||||
use App\Entities\Produccion\OrdenTrabajoTareaEntity;
|
use App\Entities\Produccion\OrdenTrabajoTareaEntity;
|
||||||
use App\Models\Configuracion\ConfigVariableModel;
|
use App\Models\Configuracion\ConfigVariableModel;
|
||||||
use App\Models\Configuracion\MaquinaModel;
|
use App\Models\Configuracion\MaquinaModel;
|
||||||
|
use App\Models\OrdenTrabajo\OrdenTrabajoFileModel;
|
||||||
use CodeIgniter\Database\BaseBuilder;
|
use CodeIgniter\Database\BaseBuilder;
|
||||||
use CodeIgniter\Database\BaseResult;
|
use CodeIgniter\Database\BaseResult;
|
||||||
use CodeIgniter\Database\Exceptions\DatabaseException;
|
use CodeIgniter\Database\Exceptions\DatabaseException;
|
||||||
|
use CodeIgniter\Files\File;
|
||||||
|
use CodeIgniter\HTTP\Files\UploadedFile;
|
||||||
use CodeIgniter\I18n\Time;
|
use CodeIgniter\I18n\Time;
|
||||||
use CodeIgniter\Model;
|
use Exception;
|
||||||
use Dompdf\Dompdf;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clase con las funcionalidades necesarias trabajar con las ordenes de trabajo.
|
* Clase con las funcionalidades necesarias trabajar con las ordenes de trabajo.
|
||||||
@ -39,6 +42,7 @@ class ProductionService extends BaseService
|
|||||||
protected OrdenTrabajoDate $otDate;
|
protected OrdenTrabajoDate $otDate;
|
||||||
protected OrdenTrabajoUser $otUser;
|
protected OrdenTrabajoUser $otUser;
|
||||||
protected OrdenTrabajoEntity $ot;
|
protected OrdenTrabajoEntity $ot;
|
||||||
|
protected OrdenTrabajoFileModel $otFileModel;
|
||||||
protected UserModel $userModel;
|
protected UserModel $userModel;
|
||||||
protected string $defaultMaquinaCorteName = 'HT-1000';
|
protected string $defaultMaquinaCorteName = 'HT-1000';
|
||||||
protected MaquinaEntity $defaultMaquinaCorte;
|
protected MaquinaEntity $defaultMaquinaCorte;
|
||||||
@ -80,6 +84,7 @@ class ProductionService extends BaseService
|
|||||||
$this->otTarea = model(OrdenTrabajoTarea::class);
|
$this->otTarea = model(OrdenTrabajoTarea::class);
|
||||||
$this->otUser = model(OrdenTrabajoUser::class);
|
$this->otUser = model(OrdenTrabajoUser::class);
|
||||||
$this->userModel = model(UserModel::class);
|
$this->userModel = model(UserModel::class);
|
||||||
|
$this->otFileModel = model(OrdenTrabajoFileModel::class);
|
||||||
}
|
}
|
||||||
public function init(int $orden_trabajo_id): self
|
public function init(int $orden_trabajo_id): self
|
||||||
{
|
{
|
||||||
@ -894,7 +899,8 @@ class ProductionService extends BaseService
|
|||||||
->join("lg_papel_impresion", "presupuesto_linea.papel_impresion_id = lg_papel_impresion.id", "left")
|
->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")
|
->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_id", "left")
|
||||||
->where("orden_trabajo_tareas.deleted_at", null)
|
->where("orden_trabajo_tareas.deleted_at", null)
|
||||||
->where("orden_trabajo_tareas.presupuesto_linea_id IS NOT NULL", NULL, FALSE)
|
->where("orden_trabajo_tareas.presupuesto_linea_
|
||||||
|
id IS NOT NULL", NULL, FALSE)
|
||||||
->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA)
|
->whereIn("presupuesto_linea.tipo", $this->TIPOS_PLANA)
|
||||||
->groupBy('lg_papel_impresion.id');
|
->groupBy('lg_papel_impresion.id');
|
||||||
if ($q) {
|
if ($q) {
|
||||||
@ -926,4 +932,37 @@ class ProductionService extends BaseService
|
|||||||
{
|
{
|
||||||
return $this->otTarea->where('orden_trabajo_id', $ot_id)->where('is_corte', true)?->first()->tipo_corte ?? null;
|
return $this->otTarea->where('orden_trabajo_id', $ot_id)->where('is_corte', true)?->first()->tipo_corte ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getOtFiles() : array
|
||||||
|
{
|
||||||
|
$otFiles = $this->ot->files();
|
||||||
|
return $otFiles;
|
||||||
|
}
|
||||||
|
public function storeOtFiles(array $uploadFiles): array
|
||||||
|
{
|
||||||
|
$otFileEntities = [];
|
||||||
|
foreach ($uploadFiles as $uploadFile) {
|
||||||
|
$otFileEntities[] = $this->storeOtFile($uploadFile);
|
||||||
|
}
|
||||||
|
return $otFileEntities;
|
||||||
|
}
|
||||||
|
protected function storeOtFile(UploadedFile $file) : ?OrdenTrabajoFileEntity
|
||||||
|
{
|
||||||
|
$result = null;
|
||||||
|
if($this->ot){
|
||||||
|
if ($file->isValid() && !$file->hasMoved()) {
|
||||||
|
$fullpath = $file->store('orden_trabajo/'.$this->ot->id);
|
||||||
|
$ot_file_id = $this->otFileModel->insert([
|
||||||
|
"orden_trabajo_id" => $this->ot->id,
|
||||||
|
"name" => $file->getClientName(),
|
||||||
|
"file_path" => WRITEPATH.'uploads/'.$fullpath,
|
||||||
|
"upload_by" => auth()->user()->id
|
||||||
|
]);
|
||||||
|
$result = $this->otFileModel->find($ot_file_id);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}else{
|
||||||
|
throw new Exception('No se ha especificado una orden de trabajo. Usa $this->producctionService->init($orden_trabajo_id)');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,11 +22,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-12 gap-2">
|
<div class="col-md-12 gap-2">
|
||||||
<button id="<?= $id ?>_btnUploadFiles" class="btn mt-3 btn-primary btn-submit waves-effect waves-light ml-2 ">
|
<button id="<?= $id ?>_btnUploadFiles" class="btn mt-3 btn-primary waves-effect waves-light ml-2 ">
|
||||||
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_upload_files') ?></span>
|
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_upload_files') ?></span>
|
||||||
<i class="ti ti-upload ti-xs"></i>
|
<i class="ti ti-upload ti-xs"></i>
|
||||||
</button>
|
</button>
|
||||||
<button id="<?= $id ?>_btnSubmitFiles" class="btn mt-3 btn-success btn-submit waves-effect waves-light ml-2">
|
<button id="<?= $id ?>_btnSubmitFiles" class="btn mt-3 btn-success waves-effect waves-light ml-2">
|
||||||
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_save_file') ?></span>
|
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_save_file') ?></span>
|
||||||
<i class="ti ti-device-floppy ti-xs"></i>
|
<i class="ti ti-device-floppy ti-xs"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<?= view("themes/vuexy/components/dropzone",data: ['id' => 'dropzone-ot-files','modelId' => $modelId]) ?>
|
||||||
|
</div><!--//.col -->
|
||||||
|
</div><!--//.row -->
|
||||||
@ -9,10 +9,13 @@
|
|||||||
<?= view("themes/vuexy/form/produccion/ot/otHeader") ?>
|
<?= view("themes/vuexy/form/produccion/ot/otHeader") ?>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form id="ot-edit-form">
|
<idv id="ot-edit-form">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<?= view("themes/vuexy/form/produccion/ot/otPortada") ?>
|
<?= view("themes/vuexy/form/produccion/ot/otPortada") ?>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-12">
|
||||||
|
<?= view("themes/vuexy/form/produccion/ot/otFiles") ?>
|
||||||
|
</div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<?= view("themes/vuexy/form/produccion/ot/otDates") ?>
|
<?= view("themes/vuexy/form/produccion/ot/otDates") ?>
|
||||||
</div>
|
</div>
|
||||||
@ -31,19 +34,19 @@
|
|||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<?= view("themes/vuexy/form/produccion/ot/otComments") ?>
|
<?= view("themes/vuexy/form/produccion/ot/otComments") ?>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
<div class="col-md-12 mt-3">
|
<div class="col-md-12 mt-3">
|
||||||
<div class="d-grip gap-2">
|
<div class="d-grip gap-2">
|
||||||
<a type="button" class="btn btn-outline-danger btn-block mb-1" target="__blank" href="<?= "/produccion/ordentrabajo/pdf/" . $modelId ?>">
|
<a type="button" class="btn btn-outline-danger btn-block mb-1" target="__blank" href="<?= "/produccion/ordentrabajo/pdf/" . $modelId ?>">
|
||||||
<span class="ti-sm ti ti-eye me-1"></span>
|
<span class="ti-sm ti ti-eye me-1"></span>
|
||||||
<?= @lang("Produccion.preview_pdf") ?></a>
|
<?= @lang("Produccion.preview_pdf") ?></a>
|
||||||
<button type="button" class="btn btn-primary btn-block mb-1"><?= @lang("Produccion.imprimir_ferro") ?></button>
|
<button type="button" class="btn btn-primary btn-block mb-1"><?= @lang("Produccion.imprimir_ferro") ?></button>
|
||||||
<button type="button" class="btn btn-secondary btn-block mb-1"><?= @lang("Produccion.imprimir_codigo_safekat") ?></button>
|
<button type="button" class="btn btn-secondary btn-block mb-1"><?= @lang("Produccion.imprimir_codigo_safekat") ?></button>
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<!-- Modal -->
|
<!-- Modal -->
|
||||||
<div class="modal fade" id="modalCommentTarea" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalCommentTarea" tabindex="-1" aria-hidden="true">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
|
|||||||
@ -81,7 +81,7 @@ class FileUploadDropzone {
|
|||||||
|
|
||||||
if (files[i].upload) {
|
if (files[i].upload) {
|
||||||
var file = files[i];
|
var file = files[i];
|
||||||
formData.append('file[' + counter + ']', file);
|
formData.append('file[]', file);
|
||||||
counter += 1;
|
counter += 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import ClassSelect from "../../components/select2.js";
|
|||||||
import DatePicker from "../../components/datepicker.js";
|
import DatePicker from "../../components/datepicker.js";
|
||||||
import { alertConfirmationDelete, alertSuccess } from "../../components/alerts/sweetAlert.js";
|
import { alertConfirmationDelete, alertSuccess } from "../../components/alerts/sweetAlert.js";
|
||||||
import Modal from "../../components/modal.js"
|
import Modal from "../../components/modal.js"
|
||||||
|
import FileUploadDropzone from '../../components/forms/fileUploadDropzone.js';
|
||||||
|
|
||||||
class OrdenTrabajo {
|
class OrdenTrabajo {
|
||||||
constructor(domItem) {
|
constructor(domItem) {
|
||||||
@ -29,9 +30,23 @@ class OrdenTrabajo {
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DROP ZONE FILES OT
|
||||||
|
*/
|
||||||
|
this.configUploadDropzone = {
|
||||||
|
domElement: '#dropzone-ot-files',
|
||||||
|
nameId: "orden_trabajo_id",
|
||||||
|
getUri: '/produccion/ordentrabajo/get_files',
|
||||||
|
postUri: '/produccion/ordentrabajo/upload_files'
|
||||||
|
}
|
||||||
|
if ($(this.configUploadDropzone.domElement).length > 0) {
|
||||||
|
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initDropFiles(){
|
||||||
|
if ($(this.configUploadDropzone.domElement).length > 0) {
|
||||||
|
this.fileUploadDropzone.init()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
configDatePickers() {
|
configDatePickers() {
|
||||||
const option = {
|
const option = {
|
||||||
@ -90,6 +105,7 @@ class OrdenTrabajo {
|
|||||||
this.otForm.off("click", ".decrease-order")
|
this.otForm.off("click", ".decrease-order")
|
||||||
}
|
}
|
||||||
init() {
|
init() {
|
||||||
|
this.initDropFiles()
|
||||||
this.configDatePickers()
|
this.configDatePickers()
|
||||||
this.initDatatableTareas()
|
this.initDatatableTareas()
|
||||||
this.tareasTableItem.on("draw.dt", this.createSelectMaquinaTarea.bind(this))
|
this.tareasTableItem.on("draw.dt", this.createSelectMaquinaTarea.bind(this))
|
||||||
|
|||||||
Reference in New Issue
Block a user