Merge branch 'dev' into 8387-itemTagCrudModelFront
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Robert Ferrús 2025-01-21 11:14:16 +00:00
commit dbd5b8f95f
12 changed files with 59 additions and 53 deletions

View File

@ -34,5 +34,7 @@ module.exports = defineConfig({
require('cypress-mochawesome-reporter/plugin')(on); require('cypress-mochawesome-reporter/plugin')(on);
// implement node event listeners here // implement node event listeners here
}, },
viewportWidth: 1280,
viewportHeight: 720,
}, },
}); });

View File

@ -1,6 +1,6 @@
{ {
"name": "salix-front", "name": "salix-front",
"version": "25.04.0", "version": "25.06.0",
"description": "Salix frontend", "description": "Salix frontend",
"productName": "Salix", "productName": "Salix",
"author": "Verdnatura", "author": "Verdnatura",

View File

@ -52,7 +52,8 @@ const sectionValue = computed(() => $props.section ?? $props.dataKey);
const isMainSection = computed(() => { const isMainSection = computed(() => {
const isSame = sectionValue.value == route.name; const isSame = sectionValue.value == route.name;
if (!isSame && arrayData) { if (!isSame && arrayData) {
arrayData.reset(['userParams', 'userFilter']); arrayData.reset(['userParams', 'filter']);
arrayData.setCurrentFilter();
} }
return isSame; return isSame;
}); });

View File

@ -232,12 +232,15 @@ async function fetchFilter(val) {
} else defaultWhere = { [key]: getVal(val) }; } else defaultWhere = { [key]: getVal(val) };
const where = { ...(val ? defaultWhere : {}), ...$props.where }; const where = { ...(val ? defaultWhere : {}), ...$props.where };
$props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val)); $props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val));
const fetchOptions = { where, include, limit }; const filterOptions = { where, include, limit };
if (fields) fetchOptions.fields = fields; if (fields) filterOptions.fields = fields;
if (sortBy) fetchOptions.order = sortBy; if (sortBy) filterOptions.order = sortBy;
arrayData.resetPagination(); arrayData.resetPagination();
const { data } = await arrayData.applyFilter({ filter: fetchOptions }); const { data } = await arrayData.applyFilter(
{ filter: filterOptions },
{ updateRouter: false }
);
setOptions(data); setOptions(data);
return data; return data;
} }

View File

@ -113,23 +113,20 @@ onMounted(() => {
}); });
async function search() { async function search() {
const staticParams = Object.keys(store.userParams ?? {}).length
? store.userParams
: store.defaultParams;
arrayData.resetPagination(); arrayData.resetPagination();
const filter = { let filter = { params: { search: searchText.value } };
params: {
search: searchText.value,
},
filter: props.filter,
};
if (!props.searchRemoveParams || !searchText.value) { if (!props.searchRemoveParams || !searchText.value) {
filter.params = { filter = {
...staticParams, params: {
search: searchText.value, ...store.userParams,
search: searchText.value,
},
filter: store.filter,
}; };
} else {
arrayData.reset(['currentFilter', 'userParams']);
} }
if (props.whereFilter) { if (props.whereFilter) {

View File

@ -33,10 +33,11 @@ export function useArrayData(key, userOptions) {
: JSON.parse(params?.filter ?? '{}'); : JSON.parse(params?.filter ?? '{}');
delete params.filter; delete params.filter;
store.userParams = { ...store.userParams, ...params }; store.userParams = params;
store.filter = { ...filter, ...store.userFilter }; store.filter = { ...filter, ...store.userFilter };
if (filter?.order) store.order = filter.order; if (filter?.order) store.order = filter.order;
} }
setCurrentFilter();
}); });
if (key && userOptions) setOptions(); if (key && userOptions) setOptions();
@ -78,11 +79,7 @@ export function useArrayData(key, userOptions) {
cancelRequest(); cancelRequest();
canceller = new AbortController(); canceller = new AbortController();
const { params, limit } = getCurrentFilter(); const { params, limit } = setCurrentFilter();
store.currentFilter = JSON.parse(JSON.stringify(params));
delete store.currentFilter.filter.include;
store.currentFilter.filter = JSON.stringify(store.currentFilter.filter);
let exprFilter; let exprFilter;
if (store?.exprBuilder) { if (store?.exprBuilder) {
@ -107,7 +104,7 @@ export function useArrayData(key, userOptions) {
store.hasMoreData = limit && response.data.length >= limit; store.hasMoreData = limit && response.data.length >= limit;
if (!append && !isDialogOpened() && updateRouter) { if (!append && !isDialogOpened() && updateRouter) {
if (updateStateParams(response.data)?.redirect) return; if (updateStateParams(response.data)?.redirect && !store.keepData) return;
} }
store.isLoading = false; store.isLoading = false;
canceller = null; canceller = null;
@ -142,12 +139,12 @@ export function useArrayData(key, userOptions) {
} }
} }
async function applyFilter({ filter, params }) { async function applyFilter({ filter, params }, fetchOptions = {}) {
if (filter) store.userFilter = filter; if (filter) store.userFilter = filter;
store.filter = {}; store.filter = {};
if (params) store.userParams = { ...params }; if (params) store.userParams = { ...params };
const response = await fetch({}); const response = await fetch(fetchOptions);
return response; return response;
} }
@ -276,14 +273,14 @@ export function useArrayData(key, userOptions) {
} }
function getCurrentFilter() { function getCurrentFilter() {
if (!Object.keys(store.userParams).length)
store.userParams = store.defaultParams ?? {};
const filter = { const filter = {
limit: store.limit, limit: store.limit,
...store.userFilter,
}; };
let userParams = { ...store.userParams };
Object.assign(filter, store.userFilter);
let where; let where;
if (filter?.where || store.filter?.where) if (filter?.where || store.filter?.where)
where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {}); where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {});
@ -291,7 +288,7 @@ export function useArrayData(key, userOptions) {
filter.where = where; filter.where = where;
const params = { filter }; const params = { filter };
Object.assign(params, userParams); Object.assign(params, store.userParams);
if (params.filter) params.filter.skip = store.skip; if (params.filter) params.filter.skip = store.skip;
if (store?.order && typeof store?.order == 'string') store.order = [store.order]; if (store?.order && typeof store?.order == 'string') store.order = [store.order];
if (store.order?.length) params.filter.order = [...store.order]; if (store.order?.length) params.filter.order = [...store.order];
@ -300,6 +297,14 @@ export function useArrayData(key, userOptions) {
return { filter, params, limit: filter.limit }; return { filter, params, limit: filter.limit };
} }
function setCurrentFilter() {
const { params, limit } = getCurrentFilter();
store.currentFilter = JSON.parse(JSON.stringify(params));
delete store.currentFilter.filter.include;
store.currentFilter.filter = JSON.stringify(store.currentFilter.filter);
return { params, limit };
}
function processData(data, { map = true, append = true }) { function processData(data, { map = true, append = true }) {
if (!append) { if (!append) {
store.data = []; store.data = [];
@ -333,6 +338,7 @@ export function useArrayData(key, userOptions) {
applyFilter, applyFilter,
addFilter, addFilter,
getCurrentFilter, getCurrentFilter,
setCurrentFilter,
addFilterWhere, addFilterWhere,
addOrder, addOrder,
deleteOrder, deleteOrder,

View File

@ -29,8 +29,12 @@ export function useFilterParams(key) {
orders.value = orderObject; orders.value = orderObject;
} }
function setUserParams(watchedParams) { function setUserParams(watchedParams = {}) {
if (!watchedParams || Object.keys(watchedParams).length == 0) return; if (Object.keys(watchedParams).length == 0) {
params.value = {};
orders.value = {};
return;
}
if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams); if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams);
if (typeof watchedParams?.filter == 'string') if (typeof watchedParams?.filter == 'string')

View File

@ -7,6 +7,7 @@ import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import VnSelect from 'src/components/common/VnSelect.vue'; import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
const { t } = useI18n(); const { t } = useI18n();
const props = defineProps({ const props = defineProps({
@ -81,15 +82,12 @@ const getGroupedStates = (data) => {
</QItem> </QItem>
<QItem> <QItem>
<QItemSection> <QItemSection>
<VnSelect <VnSelectWorker
:label="t('Salesperson')" :label="t('globals.salesPerson')"
v-model="params.salesPersonFk" v-model="params.salesPersonFk"
url="Workers/activeWithInheritedRole" :params="{
:where="{ role: 'salesPerson' }" departmentCodes: ['VT'],
option-value="id" }"
option-label="firstName"
:use-like="false"
sort-by="firstName ASC"
dense dense
outlined outlined
rounded rounded

View File

@ -9,7 +9,6 @@ describe('InvoiceOut summary', () => {
cy.viewport(1920, 1080); cy.viewport(1920, 1080);
cy.login('developer'); cy.login('developer');
cy.visit(`/#/invoice-out/list`); cy.visit(`/#/invoice-out/list`);
cy.typeSearchbar('{enter}');
}); });
it('should generate the invoice PDF', () => { it('should generate the invoice PDF', () => {
@ -19,13 +18,12 @@ describe('InvoiceOut summary', () => {
cy.dataCy('VnConfirm_confirm').click(); cy.dataCy('VnConfirm_confirm').click();
cy.checkNotification('The invoice PDF document has been regenerated'); cy.checkNotification('The invoice PDF document has been regenerated');
}); });
it('should refund the invoice ', () => { it('should refund the invoice ', () => {
cy.typeSearchbar('T1111111{enter}'); cy.typeSearchbar('T1111111{enter}');
cy.dataCy('descriptor-more-opts').click(); cy.dataCy('descriptor-more-opts').click();
cy.get('.q-menu > .q-list > :nth-child(7)').click(); cy.get('.q-menu > .q-list > :nth-child(7)').click();
cy.get('#q-portal--menu--3 > .q-menu > .q-list > :nth-child(2)').click(); cy.get('#q-portal--menu--3 > .q-menu > .q-list > :nth-child(2)').click();
cy.checkNotification('The following refund ticket have been created 1000000'); cy.checkNotification('The following refund ticket have been created');
}); });
it('should delete an invoice ', () => { it('should delete an invoice ', () => {
@ -35,8 +33,7 @@ describe('InvoiceOut summary', () => {
cy.dataCy('VnConfirm_confirm').click(); cy.dataCy('VnConfirm_confirm').click();
cy.checkNotification('InvoiceOut deleted'); cy.checkNotification('InvoiceOut deleted');
}); });
// https://redmine.verdnatura.es/issues/8415 it('should transfer the invoice ', () => {
it.skip('should transfer the invoice ', () => {
cy.typeSearchbar('T1111111{enter}'); cy.typeSearchbar('T1111111{enter}');
cy.dataCy('descriptor-more-opts').click(); cy.dataCy('descriptor-more-opts').click();
cy.get('.q-menu > .q-list > :nth-child(1)').click(); cy.get('.q-menu > .q-list > :nth-child(1)').click();

View File

@ -1,7 +1,5 @@
/// <reference types="cypress" /> /// <reference types="cypress" />
const c = require('croppie');
describe('TicketSale', () => { describe('TicketSale', () => {
beforeEach(() => { beforeEach(() => {
cy.login('developer'); cy.login('developer');

View File

@ -49,12 +49,12 @@ describe('VnLocation', () => {
beforeEach(() => { beforeEach(() => {
cy.viewport(1280, 720); cy.viewport(1280, 720);
cy.login('developer'); cy.login('developer');
cy.visit('/#/worker/create', { timeout: 5000 }); cy.visit('/#/worker/list', { timeout: 5000 });
cy.dataCy('vnTableCreateBtn').click();
cy.waitForElement('.q-card'); cy.waitForElement('.q-card');
cy.get(inputLocation).click(); cy.get(inputLocation).click();
}); });
// https://redmine.verdnatura.es/issues/8436 it('Show all options', function () {
it.skip('Show all options', function () {
cy.get(locationOptions).should('have.length.at.least', 5); cy.get(locationOptions).should('have.length.at.least', 5);
}); });
it('input filter location as "al"', function () { it('input filter location as "al"', function () {

View File

@ -10,8 +10,8 @@ describe('WorkerList', () => {
it('should open the worker summary', () => { it('should open the worker summary', () => {
cy.get(inputName).type('jessica{enter}'); cy.get(inputName).type('jessica{enter}');
cy.get(searchBtn).click();
cy.intercept('GET', /\/api\/Workers\/summary+/).as('worker'); cy.intercept('GET', /\/api\/Workers\/summary+/).as('worker');
cy.get(searchBtn).click();
cy.wait('@worker').then(() => cy.wait('@worker').then(() =>
cy.get(descriptorTitle).should('include.text', 'Jessica') cy.get(descriptorTitle).should('include.text', 'Jessica')
); );