feat: refs #7449 added new button on claimLines, prevented claimAction to import lines with 0 quantity

This commit is contained in:
Pau Rovira 2025-03-05 07:49:42 +01:00
parent 7d07256591
commit d7ba8868a6
8 changed files with 78 additions and 34 deletions

View File

@ -347,8 +347,8 @@ watch(formUrl, async () => {
<QBtnDropdown
v-if="$props.goTo && $props.defaultSave"
@click="onSubmitAndGo"
:label="tMobile('globals.saveAndContinue')"
:title="t('globals.saveAndContinue')"
:label="tMobile('globals.saveAndContinue') + ' ' + t('globals.' + $props.goTo.split('/').pop())"
:title="t('globals.saveAndContinue') + ' ' + t('globals.' + $props.goTo.split('/').pop())"
:disable="!hasChanges"
color="primary"
icon="save"
@ -397,4 +397,4 @@ watch(formUrl, async () => {
:label="t && t('globals.pleaseWait')"
color="primary"
/>
</template>
</template>

View File

@ -368,8 +368,8 @@ defineExpose({
data-cy="saveAndContinueDefaultBtn"
v-if="$props.goTo"
@click="saveAndGo"
:label="tMobile('globals.saveAndContinue')"
:title="t('globals.saveAndContinue')"
:label="tMobile('globals.saveAndContinue') + ' ' + t('globals.' + $props.goTo.split('/').pop())"
:title="t('globals.saveAndContinue') + ' ' + t('globals.' + $props.goTo.split('/').pop())"
:disable="!hasChanges"
color="primary"
icon="save"

View File

@ -28,7 +28,7 @@ globals:
create: Create
edit: Edit
save: Save
saveAndContinue: Save and continue
saveAndContinue: Save and go to
remove: Remove
reset: Reset
close: Close
@ -106,6 +106,8 @@ globals:
from: From
to: To
notes: Notes
photos: Photos
due-day: Due day
refresh: Refresh
item: Item
ticket: Ticket
@ -383,6 +385,7 @@ errors:
updateUserConfig: Error updating user config
tokenConfig: Error fetching token config
writeRequest: The requested operation could not be completed
claimBeginningQuantity: Cannot import a line with a claimed quantity of 0
login:
title: Login
username: Username

View File

@ -28,7 +28,7 @@ globals:
create: Crear
edit: Modificar
save: Guardar
saveAndContinue: Guardar y continuar
saveAndContinue: Guardar e ir a
remove: Eliminar
reset: Restaurar
close: Cerrar
@ -110,6 +110,8 @@ globals:
from: Desde
to: Hasta
notes: Notas
photos: Fotos
due-day: Vencimiento
refresh: Actualizar
item: Artículo
ticket: Ticket
@ -379,6 +381,7 @@ errors:
updateUserConfig: Error al actualizar la configuración de usuario
tokenConfig: Error al obtener configuración de token
writeRequest: No se pudo completar la operación solicitada
claimBeginningQuantity: No se puede importar una linea sin una cantidad reclamada
login:
title: Inicio de sesión
username: Nombre de usuario

View File

@ -13,8 +13,10 @@ import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
import { useArrayData } from 'composables/useArrayData';
import RightMenu from 'src/components/common/RightMenu.vue';
import useNotify from 'src/composables/useNotify.js';
const { t } = useI18n();
const { notify } = useNotify();
const quasar = useQuasar();
const route = useRoute();
const claim = ref(null);
@ -176,12 +178,17 @@ async function save(data) {
}
async function importToNewRefundTicket() {
await post(`ClaimBeginnings/${claimId}/importToNewRefundTicket`);
await claimActionsForm.value.reload();
quasar.notify({
message: t('globals.dataSaved'),
type: 'positive',
});
try{
await post(`ClaimBeginnings/${claimId}/importToNewRefundTicket`);
await claimActionsForm.value.reload();
quasar.notify({
message: t('globals.dataSaved'),
type: 'positive',
});
} catch (error) {
const errorMessage = error.response?.data?.error?.message;
notify( t(errorMessage), 'negative' );
}
}
async function post(query, params) {

View File

@ -26,6 +26,7 @@ const workersOptions = ref([]);
<FetchData url="ClaimStates" @on-fetch="setClaimStates" auto-load />
<FormModel
model="Claim"
:go-to="`/claim/${route.params.id}/notes`"
:url-update="`Claims/updateClaim/${route.params.id}`"
auto-load
>

View File

@ -152,12 +152,33 @@ function showImportDialog() {
.onOk(() => claimLinesForm.value.reload());
}
async function saveWhenHasChanges() {
if (claimLinesForm.value.getChanges().updates) {
await claimLinesForm.value.onSubmit();
onFetch(claimLinesForm.value.formData);
function fillClaimedQuantities() {
const formData = claimLinesForm.value.formData;
let hasChanges = false;
const selectedRows = formData.filter(row => selected.value.includes(row));
for (const row of selectedRows) {
if (row.quantity === 0 || row.quantity === null) {
row.quantity = row.sale.quantity;
hasChanges = true;
}
}
if (hasChanges) {
quasar.notify({
message: t('Cantidades rellenadas automáticamente'),
type: 'positive',
});
} else {
quasar.notify({
message: t('No hay cantidades para rellenar'),
type: 'info',
});
}
}
</script>
<template>
<Teleport to="#st-data" v-if="stateStore.isSubToolbarShown()">
@ -185,15 +206,16 @@ async function saveWhenHasChanges() {
auto-load
/>
<div class="q-pa-md">
<CrudModel
data-key="ClaimLines"
ref="claimLinesForm"
:go-to="`photos`"
:url="`Claims/${route.params.id}/lines`"
save-url="ClaimBeginnings/crud"
:user-filter="linesFilter"
@on-fetch="onFetch"
v-model:selected="selected"
:default-save="false"
:default-reset="false"
auto-load
:limit="0"
@ -214,8 +236,7 @@ async function saveWhenHasChanges() {
v-model.number="row.quantity"
type="number"
dense
@keyup.enter="saveWhenHasChanges()"
@blur="saveWhenHasChanges()"
/>
</QTd>
</template>
@ -272,10 +293,7 @@ async function saveWhenHasChanges() {
type="number"
dense
autofocus
@keyup.enter="
saveWhenHasChanges()
"
@blur="saveWhenHasChanges()"
/>
</QItemLabel>
</template>
@ -313,6 +331,18 @@ async function saveWhenHasChanges() {
</template>
</QTable>
</template>
<template #moreBeforeActions>
<QBtn
color="primary"
text-color="white"
:unelevated="true"
:label="t('Rellenar cantidades')"
:title="t('Rellenar cantidades')"
icon="auto_fix_high"
:disabled="!selected.length"
@click="fillClaimedQuantities"
/>
</template>
</CrudModel>
</div>

View File

@ -8,9 +8,9 @@ const claimCard = {
meta: {
menu: [
'ClaimBasicData',
'ClaimNotes',
'ClaimLines',
'ClaimPhotos',
'ClaimNotes',
'ClaimDevelopment',
'ClaimAction',
'ClaimLog',
@ -36,6 +36,15 @@ const claimCard = {
},
component: () => import('src/pages/Claim/Card/ClaimBasicData.vue'),
},
{
path: 'notes',
name: 'ClaimNotes',
meta: {
title: 'notes',
icon: 'draft',
},
component: () => import('src/pages/Claim/Card/ClaimNotes.vue'),
},
{
path: 'lines',
name: 'ClaimLines',
@ -54,15 +63,6 @@ const claimCard = {
},
component: () => import('src/pages/Claim/Card/ClaimPhoto.vue'),
},
{
path: 'notes',
name: 'ClaimNotes',
meta: {
title: 'notes',
icon: 'draft',
},
component: () => import('src/pages/Claim/Card/ClaimNotes.vue'),
},
{
path: 'development',
name: 'ClaimDevelopment',