Merge branch 'main' of git.golsystems.mx:juan.zapata/pdv.frontend
This commit is contained in:
commit
f8e4421ffc
@ -770,8 +770,8 @@ watch(activeTab, (tab) => {
|
|||||||
<FormInput
|
<FormInput
|
||||||
v-model.number="eqForm.conversion_factor"
|
v-model.number="eqForm.conversion_factor"
|
||||||
type="number"
|
type="number"
|
||||||
min="0.001"
|
min="0"
|
||||||
step="0.001"
|
step="any"
|
||||||
placeholder="Ej: 24"
|
placeholder="Ej: 24"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -227,79 +227,85 @@ const closeModal = () => {
|
|||||||
emit('close');
|
emit('close');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Helpers */
|
||||||
|
const applySerials = (movement) => {
|
||||||
|
const isTransfer = movement.movement_type === 'transfer';
|
||||||
|
const isExit = movement.movement_type === 'exit';
|
||||||
|
const rawSerials = isTransfer
|
||||||
|
? (movement.transferred_serials || [])
|
||||||
|
: isExit
|
||||||
|
? (movement.exited_serials || [])
|
||||||
|
: (movement.serials || []);
|
||||||
|
|
||||||
|
if (isTransfer || isExit) {
|
||||||
|
selectedSerialObjects.value = rawSerials;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rawSerials.length > 0) {
|
||||||
|
const movementWarehouseId = movement.warehouse_to?.id || movement.warehouse_to_id;
|
||||||
|
|
||||||
|
serialsList.value = rawSerials.map(s => {
|
||||||
|
let locked = false;
|
||||||
|
let lock_reason = null;
|
||||||
|
|
||||||
|
const isOwnExitSerial = isExit && s.status === 'salida';
|
||||||
|
|
||||||
|
if (!isOwnExitSerial && s.status !== 'disponible') {
|
||||||
|
locked = true;
|
||||||
|
lock_reason = s.status;
|
||||||
|
} else if (
|
||||||
|
!isTransfer && !isExit &&
|
||||||
|
s.warehouse_id &&
|
||||||
|
movementWarehouseId &&
|
||||||
|
s.warehouse_id !== movementWarehouseId
|
||||||
|
) {
|
||||||
|
locked = true;
|
||||||
|
lock_reason = 'traspasado';
|
||||||
|
}
|
||||||
|
|
||||||
|
return { serial_number: s.serial_number, locked, lock_reason };
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
serialsList.value = [{ serial_number: '', locked: false }];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/** Observadores */
|
/** Observadores */
|
||||||
watch(() => props.show, (isShown) => {
|
watch(() => props.show, (isShown) => {
|
||||||
if (isShown) {
|
if (isShown) {
|
||||||
loadWarehouses();
|
loadWarehouses();
|
||||||
|
|
||||||
if (props.movement) {
|
if (props.movement) {
|
||||||
// Cargar datos del movimiento
|
// Cargar datos básicos del formulario desde el prop
|
||||||
form.quantity = props.movement.quantity || 0;
|
form.quantity = props.movement.quantity || 0;
|
||||||
form.unit_cost = props.movement.unit_cost || 0;
|
form.unit_cost = props.movement.unit_cost || 0;
|
||||||
form.invoice_reference = props.movement.invoice_reference || '';
|
form.invoice_reference = props.movement.invoice_reference || '';
|
||||||
form.notes = props.movement.notes || '';
|
form.notes = props.movement.notes || '';
|
||||||
form.supplier_id = props.movement.supplier_id || null;
|
form.supplier_id = props.movement.supplier_id || null;
|
||||||
|
|
||||||
// Cargar números de serie según tipo de movimiento
|
|
||||||
const isTransfer = props.movement.movement_type === 'transfer';
|
|
||||||
const isExit = props.movement.movement_type === 'exit';
|
|
||||||
const rawSerials = isTransfer
|
|
||||||
? (props.movement.transferred_serials || [])
|
|
||||||
: isExit
|
|
||||||
? (props.movement.exited_serials || [])
|
|
||||||
: (props.movement.serials || []);
|
|
||||||
|
|
||||||
// Para traspasos/salidas: inicializar objetos de seriales para SerialSelector
|
|
||||||
if (isTransfer || isExit) {
|
|
||||||
selectedSerialObjects.value = rawSerials;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rawSerials.length > 0) {
|
|
||||||
const movementWarehouseId = props.movement.warehouse_id || props.movement.warehouse_to?.id;
|
|
||||||
|
|
||||||
serialsList.value = rawSerials.map(s => {
|
|
||||||
let locked = false;
|
|
||||||
let lock_reason = null;
|
|
||||||
|
|
||||||
// Seriales con status='salida' son propios de este movimiento → editables
|
|
||||||
const isOwnExitSerial = isExit && s.status === 'salida';
|
|
||||||
|
|
||||||
if (!isOwnExitSerial && s.status !== 'disponible') {
|
|
||||||
locked = true;
|
|
||||||
lock_reason = s.status;
|
|
||||||
} else if (
|
|
||||||
!isTransfer && !isExit &&
|
|
||||||
s.warehouse_id &&
|
|
||||||
movementWarehouseId &&
|
|
||||||
s.warehouse_id !== movementWarehouseId
|
|
||||||
) {
|
|
||||||
locked = true;
|
|
||||||
lock_reason = 'traspasado';
|
|
||||||
}
|
|
||||||
|
|
||||||
return { serial_number: s.serial_number, locked, lock_reason };
|
|
||||||
});
|
|
||||||
} else if (props.movement.serial_numbers && props.movement.serial_numbers.length > 0) {
|
|
||||||
serialsList.value = props.movement.serial_numbers.map(sn => ({
|
|
||||||
serial_number: sn,
|
|
||||||
locked: false
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
serialsList.value = [{ serial_number: '', locked: false }];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Almacenes según tipo
|
// Almacenes según tipo
|
||||||
if (props.movement.movement_type === 'entry') {
|
if (props.movement.movement_type === 'entry') {
|
||||||
form.destination_warehouse_id = props.movement.warehouse_id || '';
|
form.destination_warehouse_id = props.movement.warehouse_to_id || props.movement.warehouse_to?.id || '';
|
||||||
} else if (props.movement.movement_type === 'exit') {
|
} else if (props.movement.movement_type === 'exit') {
|
||||||
form.origin_warehouse_id = props.movement.warehouse_from_id || props.movement.warehouse_from?.id || '';
|
form.origin_warehouse_id = props.movement.warehouse_from_id || props.movement.warehouse_from?.id || '';
|
||||||
} else if (props.movement.movement_type === 'transfer') {
|
} else if (props.movement.movement_type === 'transfer') {
|
||||||
form.origin_warehouse_id = props.movement.warehouse_from_id || props.movement.warehouse_from?.id || '';
|
form.origin_warehouse_id = props.movement.warehouse_from_id || props.movement.warehouse_from?.id || '';
|
||||||
form.destination_warehouse_id = props.movement.warehouse_to_id || props.movement.warehouse_to?.id || '';
|
form.destination_warehouse_id = props.movement.warehouse_to_id || props.movement.warehouse_to?.id || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Limpiar seriales mientras se carga el detalle
|
||||||
|
serialsList.value = [{ serial_number: '', locked: false }];
|
||||||
|
selectedSerialObjects.value = [];
|
||||||
|
|
||||||
|
// Obtener el movimiento completo con seriales desde el endpoint de detalle
|
||||||
|
api.get(apiURL(`movimientos/${props.movement.id}`), {
|
||||||
|
onSuccess: (data) => {
|
||||||
|
applySerials(data.movement);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Limpiar seriales al cerrar
|
// Limpiar al cerrar
|
||||||
serialsText.value = '';
|
serialsText.value = '';
|
||||||
}
|
}
|
||||||
}, { immediate: true });
|
}, { immediate: true });
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user