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\Entities\Pedidos\PedidoEntity;
|
||||
use App\Models\OrdenTrabajo\OrdenTrabajoDate;
|
||||
use App\Models\OrdenTrabajo\OrdenTrabajoFileModel;
|
||||
use App\Models\OrdenTrabajo\OrdenTrabajoTarea;
|
||||
use App\Models\OrdenTrabajo\OrdenTrabajoUser;
|
||||
use App\Models\Pedidos\PedidoModel;
|
||||
@ -109,4 +110,9 @@ class OrdenTrabajoEntity extends Entity
|
||||
$barcodeData = $barcode->getBarcode($this->pedido()->presupuesto()->id);
|
||||
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 CodeIgniter\Config\BaseService;
|
||||
use App\Entities\Configuracion\Maquina as MaquinaEntity;
|
||||
use App\Entities\Produccion\OrdenTrabajoFileEntity;
|
||||
use App\Entities\Produccion\OrdenTrabajoTareaEntity;
|
||||
use App\Models\Configuracion\ConfigVariableModel;
|
||||
use App\Models\Configuracion\MaquinaModel;
|
||||
use App\Models\OrdenTrabajo\OrdenTrabajoFileModel;
|
||||
use CodeIgniter\Database\BaseBuilder;
|
||||
use CodeIgniter\Database\BaseResult;
|
||||
use CodeIgniter\Database\Exceptions\DatabaseException;
|
||||
use CodeIgniter\Files\File;
|
||||
use CodeIgniter\HTTP\Files\UploadedFile;
|
||||
use CodeIgniter\I18n\Time;
|
||||
use CodeIgniter\Model;
|
||||
use Dompdf\Dompdf;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Clase con las funcionalidades necesarias trabajar con las ordenes de trabajo.
|
||||
@ -39,6 +42,7 @@ class ProductionService extends BaseService
|
||||
protected OrdenTrabajoDate $otDate;
|
||||
protected OrdenTrabajoUser $otUser;
|
||||
protected OrdenTrabajoEntity $ot;
|
||||
protected OrdenTrabajoFileModel $otFileModel;
|
||||
protected UserModel $userModel;
|
||||
protected string $defaultMaquinaCorteName = 'HT-1000';
|
||||
protected MaquinaEntity $defaultMaquinaCorte;
|
||||
@ -80,6 +84,7 @@ class ProductionService extends BaseService
|
||||
$this->otTarea = model(OrdenTrabajoTarea::class);
|
||||
$this->otUser = model(OrdenTrabajoUser::class);
|
||||
$this->userModel = model(UserModel::class);
|
||||
$this->otFileModel = model(OrdenTrabajoFileModel::class);
|
||||
}
|
||||
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_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)
|
||||
->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) {
|
||||
@ -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;
|
||||
}
|
||||
|
||||
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 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>
|
||||
<i class="ti ti-upload ti-xs"></i>
|
||||
</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>
|
||||
<i class="ti ti-device-floppy ti-xs"></i>
|
||||
</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") ?>
|
||||
|
||||
<div class="row">
|
||||
<form id="ot-edit-form">
|
||||
<idv id="ot-edit-form">
|
||||
<div class="col-md-12">
|
||||
<?= view("themes/vuexy/form/produccion/ot/otPortada") ?>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<?= view("themes/vuexy/form/produccion/ot/otFiles") ?>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<?= view("themes/vuexy/form/produccion/ot/otDates") ?>
|
||||
</div>
|
||||
@ -31,19 +34,19 @@
|
||||
<div class="col-md-12">
|
||||
<?= view("themes/vuexy/form/produccion/ot/otComments") ?>
|
||||
</div>
|
||||
</form>
|
||||
<div class="col-md-12 mt-3">
|
||||
<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 ?>">
|
||||
</div>
|
||||
<div class="col-md-12 mt-3">
|
||||
<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 ?>">
|
||||
<span class="ti-sm ti ti-eye me-1"></span>
|
||||
<?= @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-secondary btn-block mb-1"><?= @lang("Produccion.imprimir_codigo_safekat") ?></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>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="modalCommentTarea" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
|
||||
@ -81,7 +81,7 @@ class FileUploadDropzone {
|
||||
|
||||
if (files[i].upload) {
|
||||
var file = files[i];
|
||||
formData.append('file[' + counter + ']', file);
|
||||
formData.append('file[]', file);
|
||||
counter += 1;
|
||||
}
|
||||
else {
|
||||
|
||||
@ -3,6 +3,7 @@ import ClassSelect from "../../components/select2.js";
|
||||
import DatePicker from "../../components/datepicker.js";
|
||||
import { alertConfirmationDelete, alertSuccess } from "../../components/alerts/sweetAlert.js";
|
||||
import Modal from "../../components/modal.js"
|
||||
import FileUploadDropzone from '../../components/forms/fileUploadDropzone.js';
|
||||
|
||||
class OrdenTrabajo {
|
||||
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() {
|
||||
const option = {
|
||||
@ -90,6 +105,7 @@ class OrdenTrabajo {
|
||||
this.otForm.off("click", ".decrease-order")
|
||||
}
|
||||
init() {
|
||||
this.initDropFiles()
|
||||
this.configDatePickers()
|
||||
this.initDatatableTareas()
|
||||
this.tareasTableItem.on("draw.dt", this.createSelectMaquinaTarea.bind(this))
|
||||
|
||||
Reference in New Issue
Block a user