Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix-front into 8581-invoiceinE2e
gitea/salix-front/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Jorge Penadés 2025-03-04 16:15:37 +01:00
commit 527c17a0e3
20 changed files with 54 additions and 35 deletions

1
Jenkinsfile vendored
View File

@ -26,6 +26,7 @@ node {
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
echo "NODE_NAME: ${env.NODE_NAME}"
echo "WORKSPACE: ${env.WORKSPACE}"
echo "CHANGE_TARGET: ${env.CHANGE_TARGET}"
configFileProvider([
configFile(fileId: 'salix-front.properties',

View File

@ -1,6 +1,6 @@
{
"name": "salix-front",
"version": "25.10.0",
"version": "25.12.0",
"description": "Salix frontend",
"productName": "Salix",
"author": "Verdnatura",
@ -71,4 +71,4 @@
"vite": "^6.0.11",
"vitest": "^0.31.1"
}
}
}

View File

@ -124,7 +124,7 @@ const selectTravel = ({ id }) => {
<FetchData
url="AgencyModes"
@on-fetch="(data) => (agenciesOptions = data)"
:filter="{ fields: ['id', 'name'], order: 'name ASC' }"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
auto-load
/>
<FetchData

View File

@ -55,6 +55,10 @@ const $props = defineProps({
type: [Function, Boolean],
default: null,
},
rowCtrlClick: {
type: [Function, Boolean],
default: null,
},
redirect: {
type: String,
default: null,

View File

@ -145,6 +145,7 @@ const entryFilterPanel = ref();
v-model="params.agencyModeId"
@update:model-value="searchFn()"
url="AgencyModes"
sort-by="name ASC"
:fields="['id', 'name']"
hide-selected
dense

View File

@ -17,6 +17,7 @@ import MonitorTicketFilter from './MonitorTicketFilter.vue';
import TicketProblems from 'src/components/TicketProblems.vue';
import VnDateBadge from 'src/components/common/VnDateBadge.vue';
import { useStateStore } from 'src/stores/useStateStore';
import useOpenURL from 'src/composables/useOpenURL';
const DEFAULT_AUTO_REFRESH = 2 * 60 * 1000;
const { t } = useI18n();
@ -321,8 +322,7 @@ const totalPriceColor = (ticket) => {
if (total > 0 && total < 50) return 'warning';
};
const openTab = (id) =>
window.open(`#/ticket/${id}/sale`, '_blank', 'noopener, noreferrer');
const openTab = (id) => useOpenURL(`#/ticket/${id}/sale`);
</script>
<template>
<FetchData
@ -397,6 +397,7 @@ const openTab = (id) =>
default-mode="table"
auto-load
:row-click="({ id }) => openTab(id)"
:row-ctrl-click="(_, { id }) => openTab(id)"
:disable-option="{ card: true }"
:user-params="{ from, to, scopeDays: 0 }"
>

View File

@ -22,7 +22,7 @@ salesTicketsTable:
notVisible: Not visible
purchaseRequest: Purchase request
clientFrozen: Client frozen
risk: Risk
risk: Excess risk
componentLack: Component lack
tooLittle: Ticket too little
identifier: Identifier

View File

@ -22,7 +22,7 @@ salesTicketsTable:
notVisible: No visible
purchaseRequest: Petición de compra
clientFrozen: Cliente congelado
risk: Riesgo
risk: Exceso de riesgo
componentLack: Faltan componentes
tooLittle: Ticket demasiado pequeño
identifier: Identificador

View File

@ -44,8 +44,7 @@ const exprBuilder = (param, value) => {
<template>
<FetchData
url="AgencyModes"
:filter="{ fields: ['id', 'name'] }"
sort-by="name ASC"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
@on-fetch="(data) => (agencyList = data)"
auto-load
/>

View File

@ -11,6 +11,11 @@ export default {
'isSerious',
'isTrucker',
'account',
'workerFk',
'note',
'isReal',
'isPayMethodChecked',
'companySize',
],
include: [
{

View File

@ -93,9 +93,9 @@ function ticketFilter(ticket) {
<VnLv :label="t('globals.warehouse')" :value="entity.warehouse?.name" />
<VnLv :label="t('globals.alias')" :value="entity.nickname" />
</template>
<template #icons>
<template #icons="{ entity }">
<QCardActions class="q-gutter-x-xs">
<TicketProblems :row="problems" />
<TicketProblems :row="{ ...entity?.client, ...problems }" />
</QCardActions>
</template>
<template #actions="{ entity }">

View File

@ -48,7 +48,7 @@ const getGroupedStates = (data) => {
/>
<FetchData
url="AgencyModes"
:sort-by="['name ASC']"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
@on-fetch="(data) => (agencies = data)"
auto-load
/>
@ -256,8 +256,6 @@ const getGroupedStates = (data) => {
v-model="params.agencyModeFk"
@update:model-value="searchFn()"
:options="agencies"
option-value="id"
option-label="name"
emit-value
map-options
use-input

View File

@ -73,6 +73,7 @@ warehouses();
/>
<FetchData
url="AgencyModes"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
@on-fetch="(data) => (agenciesOptions = data)"
auto-load
/>

View File

@ -39,6 +39,7 @@ const redirectToTravelBasicData = (_, { id }) => {
<template>
<FetchData
url="AgencyModes"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
@on-fetch="(data) => (agenciesOptions = data)"
auto-load
/>

View File

@ -52,9 +52,8 @@ defineExpose({ states });
v-model="params.agencyModeFk"
@update:model-value="searchFn()"
url="agencyModes"
sort-by="name ASC"
:use-like="false"
option-value="id"
option-label="name"
option-filter="name"
dense
outlined

View File

@ -343,19 +343,29 @@ const updateData = async () => {
const getMailStates = async (date) => {
const url = `WorkerTimeControls/${route.params.id}/getMailStates`;
const year = date.getFullYear();
const month = date.getMonth() + 1;
const prevMonth = month == 1 ? 12 : month - 1;
const params = {
month,
year: date.getFullYear(),
const getMonthStates = async (month, year) => {
return (await axios.get(url, { params: { month, year } })).data;
};
const curMonthStates = (await axios.get(url, { params })).data;
const prevMonthStates = (
await axios.get(url, { params: { ...params, month: prevMonth } })
).data;
const curMonthStates = await getMonthStates(month, year);
workerTimeControlMails.value = curMonthStates.concat(prevMonthStates);
const prevMonthStates = await getMonthStates(
month === 1 ? 12 : month - 1,
month === 1 ? year - 1 : year,
);
const postMonthStates = await getMonthStates(
month === 12 ? 1 : month + 1,
month === 12 ? year + 1 : year,
);
workerTimeControlMails.value = [
...curMonthStates,
...prevMonthStates,
...postMonthStates,
];
};
const showWorkerTimeForm = (propValue, formType) => {

View File

@ -9,22 +9,22 @@ import VnInputTime from 'src/components/common/VnInputTime.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
const { t } = useI18n();
const validAddresses = ref([]);
const addresses = ref([]);
const setFilteredAddresses = (data) => {
const validIds = new Set(validAddresses.value.map((item) => item.addressFk));
addresses.value = data.filter((address) => validIds.has(address.id));
addresses.value = data.map(({ address }) => address);
};
</script>
<template>
<FetchData
url="RoadmapAddresses"
:filter="{
include: { relation: 'address' },
}"
auto-load
@on-fetch="(data) => (validAddresses = data)"
@on-fetch="setFilteredAddresses"
/>
<FetchData url="Addresses" auto-load @on-fetch="setFilteredAddresses" />
<FormModel auto-load model="Zone">
<template #form="{ data, validate }">
<VnRow>
@ -125,7 +125,6 @@ const setFilteredAddresses = (data) => {
map-options
:rules="validate('data.addressFk')"
:filter-options="['id']"
:where="filterWhere"
/>
</VnRow>
<VnRow>

View File

@ -5,6 +5,7 @@ import VnInput from 'components/common/VnInput.vue';
import FetchData from 'components/FetchData.vue';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnSelect from 'components/common/VnSelect.vue';
import order from 'src/router/modules/order';
const { t } = useI18n();
const props = defineProps({
@ -24,7 +25,7 @@ const agencies = ref([]);
<template>
<FetchData
url="AgencyModes"
:filter="{ fields: ['id', 'name'] }"
:filter="{ fields: ['id', 'name'], order: ['name ASC'] }"
@on-fetch="(data) => (agencies = data)"
auto-load
/>

View File

@ -199,9 +199,8 @@ function formatRow(row) {
<template #more-create-dialog="{ data }">
<VnSelect
url="AgencyModes"
sort-by="name ASC"
v-model="data.agencyModeFk"
option-value="id"
option-label="name"
:label="t('list.agency')"
/>
<VnInput

View File

@ -33,7 +33,7 @@ describe('InvoiceOut summary', () => {
cy.get('.q-item > .q-item__label').should('include.text', '1101');
});
it('should open the ticket list', () => {
it.skip('should open the ticket list', () => {
cy.get(toTicketList).click();
cy.get('.descriptor').should('be.visible');
cy.dataCy('vnFilterPanelChip').should('include.text', 'T1111111');