Merge branch 'main' into 'feat/listados_cliente_form'

Main

See merge request jjimenez/safekat!629
This commit is contained in:
2025-03-31 07:48:41 +00:00
38 changed files with 1730 additions and 573 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,27 @@
import Ajax from "../components/ajax.js"
const opts = {
findMaquina: (maquinaId) => {
return {
url: `/maquinas/${maquinaId}`,
}
}
}
export const findMaquina = (maquinaId) => {
return new Promise((resolve, reject) => {
new Ajax(opts.findMaquina(maquinaId),
null,
null,
(response) => {
resolve(response)
},
(error) => {
reject(error)
}
).get()
})
}

View File

@ -34,7 +34,7 @@ class OrdenTrabajoDatatable {
render: (d, t) => {
return `<div class="btn-group btn-group-sm">
<a type="button" href="/produccion/ordentrabajo/edit/${d}" class=" btn btn-outline ot-edit"><i class="ti ti-eye ti-sm mx-2"></i></a>
<a type="button" href="/produccion/ordentrabajo/pdf/${d}" class="btn btn-outline ot-pdf"><i class="ti ti-download ti-sm mx-2"></i></a>
<a type="button" target="_blank" href="/produccion/ordentrabajo/pdf/${d}" class="btn btn-outline ot-pdf"><i class="ti ti-download ti-sm mx-2"></i></a>
</div>`
}

View File

@ -0,0 +1,12 @@
$(() => {
console.log("PDF")
var opt = {
margin: 2,
filename: "PDF_OrdenTrabajo_" + $(".pdf-wrapper").data("id") + ".pdf",
image: { type: 'jpeg', quality: 1 },
html2canvas: { scale: 3 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
};
let elementToPdf = $('body')[0]
html2pdf().set(opt).from(elementToPdf).save()
})

View File

@ -95,6 +95,7 @@ class OrdenTrabajo {
this.tareasTableItem.on("draw.dt", this.createSelectMaquinaTarea.bind(this))
this.tareasTableItem.on("xhr.dt", this.unbindEventTareas.bind(this))
this.otForm.on("click", "#btn-upload-portada", this.handleUploadPortada.bind(this))
this.otForm.on("click", "#btn-delete-portada", this.handleDeletePortada.bind(this))
this.otForm.on("click", "#btn-finalizar-orden-pedido", this.handleFinalizarPedido.bind(this))
this.tareasTableItem.on("click", ".ot-tarea-btn-delete", this.handleTareaDeleteConfirmation.bind(this))
this.item.on("click", "#btn-reset-tareas", this.handleResetTareasDeleteConfirmation.bind(this))
@ -172,16 +173,15 @@ class OrdenTrabajo {
}
createSelectMaquinaTarea() {
try {
this.tareasId.forEach(element => {
let selectItem = this.item.find("#select-maquina-tarea-" + element);
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/maquinas/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
console.log("Create selects")
this.summaryData.tasks.forEach(element => {
let selectItem = this.item.find("#select-maquina-tarea-" + element.id);
if (element.presupuesto_linea_id && element.is_corte == false) this.createSelectMaquinaImpresion(selectItem)
if (element.presupuesto_acabado_id) this.createSelectMaquinaAcabado(selectItem)
if (element.presupuesto_encuadernado_id) this.createSelectMaquinaEncuadernacion(selectItem)
if (element.presupuesto_manipulado_id || element.is_corte) this.createSelectMaquinaManipulado(selectItem)
if (element.presupuesto_preimpresion_id) this.createSelectMaquinaAll(selectItem)
if (element.presupuesto_extra_id) this.createSelectMaquinaAll(selectItem)
});
} catch (error) {
} finally {
@ -190,6 +190,59 @@ class OrdenTrabajo {
}
}
createSelectMaquinaAcabado(selectItem) {
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/tarifas/maquinas/acabado/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
}
createSelectMaquinaManipulado(selectItem) {
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/tarifas/maquinas/manipulado/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
}
createSelectMaquinaImpresion(selectItem) {
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/tarifas/maquinas/impresion/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
}
createSelectMaquinaEncuadernacion(selectItem) {
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/tarifas/maquinas/encuadernacion/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
}
createSelectMaquinaAll(selectItem) {
let maquina_id = selectItem.data("maquina-id")
let maquinaSelects = new ClassSelect(selectItem, `/maquinas/select`, "Seleccione una maquina", true);
maquinaSelects.init();
if (maquina_id) {
maquinaSelects.setVal(maquina_id)
} else {
maquinaSelects.reset()
}
}
filterCreatedRow(row, data, dataIndex, cells) {
if (data.maquina_tarea.maquina_id == null) {
}
@ -206,6 +259,7 @@ class OrdenTrabajo {
this.fillOtDetails()
this.fillOtDates()
this.fillPreimpresionReview()
this.datatableTareas.ajax.reload()
} catch (error) {
} finally {
@ -217,7 +271,6 @@ class OrdenTrabajo {
}
handleSummaryError(error) { }
fillPreimpresionReview() {
console.log(this.summaryData.ot)
this.otForm.find("[name=fecha_entrega_warning]").prop("checked", this.summaryData.ot.fecha_entrega_warning)
this.otForm.find("[name=fecha_entrega_warning_revised]").prop("checked", this.summaryData.ot.fecha_entrega_warning_revised)
this.otForm.find("[name=revisar_formato]").prop("checked", this.summaryData.ot.revisar_formato)
@ -231,10 +284,10 @@ class OrdenTrabajo {
}
fillOtDetails() {
const progreso = this.summaryData.ot.progreso
this.otForm.find("#ot-progress-bar").attr('aria-valuenow', progreso).text(progreso + "%").css("width", progreso + "%")
this.otForm.find("#ot-paginas").text(this.summaryData.presupuesto.paginas)
this.otForm.find("#ot-tirada").text(this.summaryData.presupuesto.tirada)
this.otForm.find("#ot-merma").text(this.summaryData.presupuesto.merma)
// this.otForm.find("#ot-progress-bar").attr('aria-valuenow', progreso).text(progreso + "%").css("width", progreso + "%")
// this.otForm.find("#ot-paginas").text(this.summaryData.presupuesto.paginas)
// this.otForm.find("#ot-tirada").text(this.summaryData.presupuesto.tirada)
// this.otForm.find("#ot-merma").text(this.summaryData.presupuesto.merma)
}
fillOtDates() {
this.fechaImpresion.setDate(this.summaryData.dates.fecha_impresion_at)
@ -351,6 +404,7 @@ class OrdenTrabajo {
}
handlePreimpresionReviewChangeSuccess(response) {
alertSuccess(response.message).fire()
}
handlePreimpresionReviewChangeError(error) {
@ -374,9 +428,38 @@ class OrdenTrabajo {
}
handleUploadPortadaSuccess(response) {
this.handleGetPortada()
popSuccessAlert(response.message)
this.otForm.find("#portada-file-input").val(null)
}
handleUploadPortadaError(errors) { }
handleUploadPortadaError(errors) {
popSuccessAlert(errors?.message)
}
handleDeletePortada() {
this.item.find(".portada-loader").prop("hidden", true);
this.item.find("#portada-orden-trabajo").prop("hidden", false);
let ajax = new Ajax('/produccion/ordentrabajo/portada/' + this.modelId,
null,
null,
this.handleDeletePortadaSuccess.bind(this),
this.handleGetPortadaError.bind(this),
)
alertConfirmationDelete("¿Estás seguro de realizar esta acción?")
.then(result => {
if (result.isConfirmed) {
ajax.delete();
}
})
}
handleDeletePortadaSuccess(response) {
$('#portada-orden-trabajo').attr('src', '/assets/img/portada_not_found.png');
this.item.find(".portada-loader").prop("hidden", true);
this.item.find("#portada-orden-trabajo").prop("hidden", false);
popSuccessAlert(response.message)
}
handleDeletePortadaError(response) {
popErrorAlert(response.error)
}
handleGetPortada() {
this.item.find(".portada-loader").prop("hidden", false);
this.item.find("#portada-orden-trabajo").prop("hidden", true);
@ -396,7 +479,11 @@ class OrdenTrabajo {
this.item.find(".portada-loader").prop("hidden", true);
this.item.find("#portada-orden-trabajo").prop("hidden", false);
}
handleGetPortadaError(errors) { }
handleGetPortadaError() {
this.item.find(".portada-loader").prop("hidden", true);
this.item.find("#portada-orden-trabajo").prop("hidden", false);
}
handleFinalizarPedido() {
const ajax = new Ajax(
"/produccion/ordentrabajo/update",
@ -410,7 +497,8 @@ class OrdenTrabajo {
);
ajax.post()
}
handleEstadoChangeSuccess() {
handleEstadoChangeSuccess(response) {
popSuccessAlert(response.message)
this.alertOrdenTrabajo.removeClass("alert-info").addClass("alert-success")
this.btnFinalizarPedido.prop("disabled", true);
}
@ -437,13 +525,13 @@ class OrdenTrabajo {
"/produccion/ordentrabajo/reset/tareas/" + this.modelId,
null,
null,
this.handleDeleteTareaSuccess.bind(this),
this.handleDeleteTareaError.bind(this)
this.handleDeleteResetTareasSuccess.bind(this),
this.handleDeleteResetTareasError.bind(this)
);
ajax.delete()
}
handleDeleteResetTareasSuccess(response) {
this.datatableTareas.ajax.reload()
this._handleGetData()
}
handleDeleteResetTareasError() { }
handleDeleteTarea(orden_tarea_id) {

View File

@ -1,5 +1,6 @@
import ClassSelect from "../../../components/select2.js";
import Ajax from "../../../components/ajax.js";
import { alertError, alertSuccess } from "../../../components/alerts/sweetAlert.js";
class PlanningRotativa {
@ -78,14 +79,14 @@ class PlanningRotativa {
]
this.maquinaSelectFilter = new ClassSelect(
this.tablePlanningRot.find(".planning-maquina-select"),
`/maquinas/select`,
`/produccion/ordentrabajo/planning/select/maquina/rotativa`,
"Seleccione una maquina",
true, {
dropdownCssClass: "h-2"
}, $('body'));
this.papelImpresionFilter = new ClassSelect(this.tablePlanningRot.find(".planning-papel-select"), `/papelesimpresion/select`, "Seleccione un papel", true, {}, $('body'));
this.maquinaSelectFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-maquina-select"), `/maquinas/select`, "Seleccione una maquina", true, {}, $('body'));
this.papelImpresionFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-papel-select"), `/papelesimpresion/select`, "Seleccione un papel", true, {}, $('body'));
this.papelImpresionFilter = new ClassSelect(this.tablePlanningRot.find(".planning-papel-select"), `/produccion/ordentrabajo/planning/select/papel/rotativa`, "Seleccione un papel", true, {}, $('body'));
this.maquinaSelectFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-maquina-select"), `/produccion/ordentrabajo/planning/select/maquina/plana`, "Seleccione una maquina", true, {}, $('body'));
this.papelImpresionFilterPlana = new ClassSelect(this.tablePlanningPlana.find(".planning-papel-select"), `/produccion/ordentrabajo/planning/select/papel/plana`, "Seleccione un papel", true, {}, $('body'));
this.maquinaSelectFilter.config.dropdownParent = this.item
}
init() {
@ -204,7 +205,7 @@ class PlanningRotativa {
this.papelGramajeDatatable.on('draw', this.addTotalFooter.bind(this))
this.tablePlanningRot.on('change', ".metros-check", this.calcMetrosCheck.bind(this))
this.tablePlanningRot.on("click",'.change-corte',this.toggleCorte.bind(this))
/**
* PLANNING PLANA
*/
@ -307,15 +308,34 @@ class PlanningRotativa {
this.totalPliegosSel.set(metros_sel.reduce((a, b) => a + b, 0))
}
renderCorteImage() {
renderCorteImage(data) {
const tipo_corte = data.tipo_corte == "bobina" ? "cortadora_bobinas" : "guillotina";
console.log(data.tipo_corte)
return `
<a type="button" class="btn btn-outline-secondary bg-white btn-xs change-corte">
<a type="button" class="btn btn-outline-secondary bg-white btn-xs change-corte" data-id=${data.otId}>
<div class="avatar avatar-size-xs">
<img src="/assets/img/cortadora_bobinas.png" alt="Guillotina" width="10px" height="10px">
<img src="/assets/img/${tipo_corte}.png" alt="${data.tipo_corte}" width="10px" height="10px">
</div>
</a>
`
}
toggleCorte(event){
let otId = $(event.currentTarget).data('id')
let ajax = new Ajax("/produccion/ordentrabajo/planning/tarea/toggle/corte/" + otId,
null,
null,
this.toggleCorteSuccess.bind(this),
this.toggleCorteError.bind(this)
)
ajax.post()
}
toggleCorteSuccess(response){
this.datatablePlanningRot.ajax.reload()
alertSuccess(response.message).fire()
}
toggleCorteError(){
}
}