diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f493764a..43bd6da77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,8 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2418.01]
+
## [2416.01] - 2024-04-18
### Added
@@ -20,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- (Tickets) => Se añade la opción de clonar ticket. #6951
- (Parking) => Se añade la sección Parking. #5186
+- (Rutas) => Se añade el campo "servida" a la tabla y se añade también a los filtros. #7130
+
### Changed
### Fixed
diff --git a/package.json b/package.json
index 82f21efe6..8398eb3f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "salix-front",
- "version": "24.16.0",
+ "version": "24.18.0",
"description": "Salix frontend",
"productName": "Salix",
"author": "Verdnatura",
@@ -32,6 +32,7 @@
"@intlify/unplugin-vue-i18n": "^0.8.1",
"@pinia/testing": "^0.1.2",
"@quasar/app-vite": "^1.7.3",
+ "@quasar/quasar-app-extension-qcalendar": "4.0.0-beta.15",
"@quasar/quasar-app-extension-testing-unit-vitest": "^0.4.0",
"@vue/test-utils": "^2.4.4",
"autoprefixer": "^10.4.14",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3fe7df55..bdff559cc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -49,6 +49,9 @@ devDependencies:
'@quasar/app-vite':
specifier: ^1.7.3
version: 1.7.3(eslint@8.56.0)(pinia@2.1.7)(quasar@2.14.5)(vue-router@4.2.5)(vue@3.4.19)
+ '@quasar/quasar-app-extension-qcalendar':
+ specifier: 4.0.0-beta.15
+ version: 4.0.0-beta.15
'@quasar/quasar-app-extension-testing-unit-vitest':
specifier: ^0.4.0
version: 0.4.0(@vue/test-utils@2.4.4)(quasar@2.14.5)(vite@5.1.4)(vitest@0.31.4)(vue@3.4.19)
@@ -912,6 +915,13 @@ packages:
resolution: {integrity: sha512-SlOhwzXyPQHWgQIS2ncyDdYdksCJvUYNtgsDQqzAKEG3r3d/ejOxvThle79HTK3Q6HB+gQWFG21Ux00Osr5XSw==}
dev: false
+ /@quasar/quasar-app-extension-qcalendar@4.0.0-beta.15:
+ resolution: {integrity: sha512-i6hQkcP70LXLfVMPZMKQjSg3681gjZmASV3vq6ULzc0LhtBiPneLdVNNtH2itkWxAmaUj+1heQDI5Pa0F7VKLQ==}
+ engines: {node: '>= 10.0.0', npm: '>= 5.6.0', yarn: '>= 1.6.0'}
+ dependencies:
+ '@quasar/quasar-ui-qcalendar': 4.0.0-beta.19
+ dev: true
+
/@quasar/quasar-app-extension-testing-unit-vitest@0.4.0(@vue/test-utils@2.4.4)(quasar@2.14.5)(vite@5.1.4)(vitest@0.31.4)(vue@3.4.19):
resolution: {integrity: sha512-eyzdUdmZiCueNS+5nedjMmzdbpCetSrtdGIwW6KplW1dTzRbLiNvYUjpBOxQGmJCgEhWy9zuswJ7MZ/bTql24Q==}
engines: {node: '>= 12.22.1', npm: '>= 6.14.12', yarn: '>= 1.17.3'}
@@ -939,6 +949,10 @@ packages:
- vite
dev: true
+ /@quasar/quasar-ui-qcalendar@4.0.0-beta.19:
+ resolution: {integrity: sha512-BT0G2JjgKl1bqNrY5utcYeoy8gK+U9k3Pz1YDi1OB265W/jHU6nFoWMEUdY3JdvMccwkXTL2DLVyl3eqAUyLyg==}
+ dev: true
+
/@quasar/render-ssr-error@1.0.3:
resolution: {integrity: sha512-A8RF99q6/sOSe1Ighnh5syEIbliD3qUYEJd2HyfFyBPSMF+WYGXon5dmzg4nUoK662NgOggInevkDyBDJcZugg==}
engines: {node: '>= 16'}
diff --git a/quasar.config.js b/quasar.config.js
index 5ce46667c..dd7a91002 100644
--- a/quasar.config.js
+++ b/quasar.config.js
@@ -93,13 +93,11 @@ module.exports = configure(function (/* ctx */) {
[
VueI18nPlugin({
runtimeOnly: false,
+ include: [
+ path.resolve(__dirname, './src/i18n/locale/**'),
+ path.resolve(__dirname, './src/pages/**/locale/**'),
+ ],
}),
- {
- // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
- // compositionOnly: false,
- // you need to set i18n resource including paths !
- include: path.resolve(__dirname, './src/i18n/**'),
- },
],
],
},
diff --git a/quasar.extensions.json b/quasar.extensions.json
index e5c5cbfaa..867769090 100644
--- a/quasar.extensions.json
+++ b/quasar.extensions.json
@@ -1,7 +1,6 @@
{
- "@quasar/testing-unit-vitest": {
- "options": [
- "scripts"
- ]
- }
-}
\ No newline at end of file
+ "@quasar/testing-unit-vitest": {
+ "options": ["scripts"]
+ },
+ "@quasar/qcalendar": {}
+}
diff --git a/src/components/FormModelPopup.vue b/src/components/FormModelPopup.vue
index 2d8886610..718d087fe 100644
--- a/src/components/FormModelPopup.vue
+++ b/src/components/FormModelPopup.vue
@@ -78,6 +78,7 @@ defineExpose({
diff --git a/src/components/common/VnDmsList.vue b/src/components/common/VnDmsList.vue
index 23e00f5d9..f70146c58 100644
--- a/src/components/common/VnDmsList.vue
+++ b/src/components/common/VnDmsList.vue
@@ -5,9 +5,11 @@ import { useRoute } from 'vue-router';
import { useQuasar, QCheckbox, QBtn, QInput } from 'quasar';
import axios from 'axios';
-import FetchData from 'components/FetchData.vue';
+import VnPaginate from 'components/ui/VnPaginate.vue';
import VnDms from 'src/components/common/VnDms.vue';
import VnConfirm from 'components/ui/VnConfirm.vue';
+import VnInputDate from 'components/common/VnInputDate.vue';
+import VnUserLink from '../ui/VnUserLink.vue';
import { downloadFile } from 'src/composables/downloadFile';
const route = useRoute();
@@ -26,6 +28,15 @@ const $props = defineProps({
type: String,
default: null,
},
+ deleteModel: {
+ type: String,
+ default: null,
+ },
+ downloadModel: {
+ type: String,
+ required: false,
+ default: null,
+ },
defaultDmsCode: {
type: String,
required: true,
@@ -74,7 +85,7 @@ const dmsFilter = {
],
},
},
- order: ['dmsFk DESC'],
+ where: { [$props.filter]: route.params.id },
};
const columns = computed(() => [
@@ -94,12 +105,12 @@ const columns = computed(() => [
props: (prop) => ({
readonly: true,
borderless: true,
- 'model-value': prop.row.dmsType.name,
+ 'model-value': prop.row.dmsType?.name,
}),
},
{
align: 'left',
- field: 'order',
+ field: 'hardCopyNumber',
label: t('globals.order'),
name: 'order',
component: 'span',
@@ -117,6 +128,7 @@ const columns = computed(() => [
label: t('globals.description'),
name: 'description',
component: 'span',
+ props: (prop) => ({ value: prop.value?.toUpperCase() }),
},
{
align: 'left',
@@ -136,21 +148,53 @@ const columns = computed(() => [
name: 'file',
component: 'span',
},
+ {
+ align: 'left',
+ field: 'worker',
+ label: t('globals.worker'),
+ name: 'worker',
+ component: VnUserLink,
+ props: (prop) => ({
+ name: prop.row.worker?.user?.name.toLowerCase(),
+ workerId: prop.row.worker?.id,
+ }),
+ },
+ {
+ align: 'left',
+ field: 'created',
+ label: t('globals.created'),
+ name: 'created',
+ component: VnInputDate,
+ props: (prop) => ({
+ disable: true,
+ 'model-value': prop.row.created,
+ }),
+ },
{
field: 'options',
name: 'options',
components: [
{
component: QBtn,
+ name: 'download',
+ isDocuware: true,
props: () => ({
icon: 'cloud_download',
flat: true,
color: 'primary',
}),
- click: (prop) => downloadFile(prop.row.id),
+ click: (prop) =>
+ downloadFile(
+ prop.row.id,
+ $props.downloadModel,
+ null,
+ prop.row.download
+ ),
},
{
component: QBtn,
+ name: 'edit',
+ external: false,
props: () => ({
icon: 'edit',
flat: true,
@@ -160,6 +204,8 @@ const columns = computed(() => [
},
{
component: QBtn,
+ name: 'delete',
+ external: false,
props: () => ({
icon: 'delete',
flat: true,
@@ -167,12 +213,24 @@ const columns = computed(() => [
}),
click: (prop) => deleteDms(prop.row.id),
},
+ {
+ component: QBtn,
+ name: 'open',
+ external: true,
+ props: () => ({
+ icon: 'open_in_new',
+ flat: true,
+ color: 'primary',
+ }),
+ click: (prop) => open(prop.row.url),
+ },
],
},
]);
function setData(data) {
- const newData = data.map((value) => value.dms);
+ const newData = data.map((value) => value.dms || value);
+ newData.sort((a, b) => new Date(b.created) - new Date(a.created));
rows.value = newData;
}
@@ -186,7 +244,7 @@ function deleteDms(dmsFk) {
},
})
.onOk(async () => {
- await axios.post(`${$props.model}/${dmsFk}/removeFile`);
+ await axios.post(`${$props.deleteModel ?? $props.model}/${dmsFk}/removeFile`);
const index = rows.value.findIndex((row) => row.id == dmsFk);
rows.value.splice(index, 1);
});
@@ -206,84 +264,106 @@ function parseDms(data) {
}
return data;
}
+
+async function open(url) {
+ window.open(url).focus();
+}
+
+function shouldRenderButton(button, isExternal = false) {
+ if (button.name == 'download') return true;
+ return button.external === isExternal;
+}
-
-
-
-
-
-
- {{ props.value }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ col.label }}:
- {{ col.value }}
-
-
-
+
+
+
+
+
+ {{ props.value }}
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}:
+ {{ col.value }}
+
+
+
+
+
+
+
+
-
+
{
return $props.isOutlined
? {
@@ -41,6 +41,10 @@ const onEnterPress = () => {
emit('keyup.enter');
};
+const handleValue = (val = null) => {
+ value.value = val;
+};
+
const focus = () => {
vnInputRef.value.focus();
};
@@ -51,20 +55,33 @@ defineExpose({
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common/VnInputDate.vue b/src/components/common/VnInputDate.vue
index 66da9b7bf..2053eceb1 100644
--- a/src/components/common/VnInputDate.vue
+++ b/src/components/common/VnInputDate.vue
@@ -1,7 +1,6 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ui/VnPaginate.vue b/src/components/ui/VnPaginate.vue
index d1b2f5ccb..f516f473d 100644
--- a/src/components/ui/VnPaginate.vue
+++ b/src/components/ui/VnPaginate.vue
@@ -61,7 +61,6 @@ const props = defineProps({
});
const emit = defineEmits(['onFetch', 'onPaginate']);
-defineExpose({ fetch });
const isLoading = ref(false);
const pagination = ref({
sortBy: props.order,
@@ -78,6 +77,7 @@ const arrayData = useArrayData(props.dataKey, {
userParams: props.userParams,
exprBuilder: props.exprBuilder,
});
+const hasMoreData = ref();
const store = arrayData.store;
onMounted(() => {
@@ -91,6 +91,10 @@ watch(
}
);
+const addFilter = async (filter, params) => {
+ await arrayData.addFilter({ filter, params });
+};
+
async function fetch() {
await arrayData.fetch({ append: false });
if (!arrayData.hasMoreData.value) {
@@ -106,11 +110,10 @@ async function paginate() {
isLoading.value = true;
await arrayData.loadMore();
-
if (!arrayData.hasMoreData.value) {
if (store.userParamsChanged) arrayData.hasMoreData.value = true;
store.userParamsChanged = false;
- isLoading.value = false;
+ endPagination();
return;
}
@@ -120,12 +123,14 @@ async function paginate() {
pagination.value.sortBy = sortBy;
pagination.value.descending = descending;
- isLoading.value = false;
+ endPagination();
+}
+function endPagination() {
+ isLoading.value = false;
emit('onFetch', store.data);
emit('onPaginate');
}
-
async function onLoad(index, done) {
if (!store.data) {
return done();
@@ -140,6 +145,8 @@ async function onLoad(index, done) {
if (store.userParamsChanged) isDone = !arrayData.hasMoreData.value;
done(isDone);
}
+
+defineExpose({ fetch, addFilter });
@@ -175,11 +182,12 @@ async function onLoad(index, done) {
+
@@ -188,6 +196,9 @@ async function onLoad(index, done) {
+
+
+
en:
@@ -479,6 +504,7 @@ es:
Description: Descripción
Hour started: Hora inicio
Hour finished: Hora fin
+ Served: Servida
newRoute: Nueva Ruta
Clone Selected Routes: Clonar rutas seleccionadas
Select the starting date: Seleccione la fecha de inicio
@@ -490,4 +516,6 @@ es:
Add ticket: Añadir tickets
Preview: Vista previa
Summary: Resumen
+ Route is closed: La ruta está cerrada
+ Route is not served: La ruta no está servida
diff --git a/src/pages/Supplier/Card/SupplierSummary.vue b/src/pages/Supplier/Card/SupplierSummary.vue
index 9d00ba8f7..4cd1f46f5 100644
--- a/src/pages/Supplier/Card/SupplierSummary.vue
+++ b/src/pages/Supplier/Card/SupplierSummary.vue
@@ -1,10 +1,9 @@
@@ -58,15 +55,10 @@ const isAdministrative = computed(() => {
-
- {{ t('globals.summary.basicData') }}
+
@@ -94,15 +86,10 @@ const isAdministrative = computed(() => {
/>
-
- {{ t('supplier.summary.billingData') }}
+
{
-
- {{ t('supplier.summary.fiscalData') }}
+
{
/>
-
- {{ t('supplier.summary.fiscalAddress') }}
+
diff --git a/src/pages/Travel/TravelFilter.vue b/src/pages/Travel/TravelFilter.vue
index 7e8d19405..545bb58ae 100644
--- a/src/pages/Travel/TravelFilter.vue
+++ b/src/pages/Travel/TravelFilter.vue
@@ -4,7 +4,6 @@ import { useI18n } from 'vue-i18n';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnSelectFilter from 'src/components/common/VnSelectFilter.vue';
-import VnInput from 'src/components/common/VnInput.vue';
import FetchData from 'components/FetchData.vue';
import VnInputDate from 'components/common/VnInputDate.vue';
@@ -63,7 +62,7 @@ const decrement = (paramsObj, key) => {
{
{
{
{
en:
params:
search: Id/Reference
- agencyModeFk: Agency
- warehouseInFk: Warehouse In
- warehouseOutFk: Warehouse Out
- scopeDays: Days onward
landedFrom: Landed from
landedTo: Landed to
continent: Continent out
@@ -222,10 +217,6 @@ en:
es:
params:
search: Id/Referencia
- agencyModeFk: Agencia
- warehouseInFk: Alm. entrada
- warehouseOutFk: Alm. salida
- scopeDays: Días adelante
landedFrom: Llegada desde
landedTo: Llegada hasta
continent: Cont. Salida
diff --git a/src/pages/Travel/locale/en.yml b/src/pages/Travel/locale/en.yml
new file mode 100644
index 000000000..c67eddce0
--- /dev/null
+++ b/src/pages/Travel/locale/en.yml
@@ -0,0 +1,6 @@
+travelFilter:
+ filter:
+ warehouseOutFk: Warehouse Out
+ warehouseInFk: Warehouse In
+ agencyModeFk: Agency
+ scopeDays: Days onward
diff --git a/src/pages/Travel/locale/es.yml b/src/pages/Travel/locale/es.yml
new file mode 100644
index 000000000..8e958c074
--- /dev/null
+++ b/src/pages/Travel/locale/es.yml
@@ -0,0 +1,6 @@
+travelFilter:
+ filter:
+ warehouseInFk: Alm. entrada
+ warehouseOutFk: Alm. salida
+ agencyModeFk: Agencia
+ scopeDays: Días adelante
diff --git a/src/pages/Worker/Card/WorkerBasicData.vue b/src/pages/Worker/Card/WorkerBasicData.vue
index c59f4281d..775472065 100644
--- a/src/pages/Worker/Card/WorkerBasicData.vue
+++ b/src/pages/Worker/Card/WorkerBasicData.vue
@@ -27,6 +27,7 @@ const workerFilter = {
},
{ relation: 'sip', scope: { fields: ['extension', 'secret'] } },
{ relation: 'department', scope: { include: { relation: 'department' } } },
+ { relation: 'client', scope: {fields:['phone']} },
],
};
const workersFilter = {
@@ -86,6 +87,7 @@ const maritalStatus = [
:label="t('Mobile extension')"
clearable
/>
+
@@ -157,6 +159,7 @@ es:
Last name: Apellidos
Business phone: Teléfono de empresa
Mobile extension: Extensión móvil
+ Personal phone: Teléfono personal
Boss: Jefe
Marital status: Estado civil
Married: Casado/a
diff --git a/src/pages/Worker/Card/WorkerCalendar.vue b/src/pages/Worker/Card/WorkerCalendar.vue
new file mode 100644
index 000000000..288e78dcf
--- /dev/null
+++ b/src/pages/Worker/Card/WorkerCalendar.vue
@@ -0,0 +1,239 @@
+
+
+
+
+ (isSubordinate = data)"
+ auto-load
+ />
+
+
+
+
+
+ {{ t('globals.collapseMenu') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('Autonomous worker') }}
+
+
+
+
+
+ {{ t('addAbsencesText') }}
+
+
+
+
+
+
+
+
+
+
+
+
+en:
+ addAbsencesText: To start adding absences, click an absence type from the right menu and then on the day you want to add an absence
+
+es:
+ Search worker: Buscar trabajador
+ You can search by worker id or name: Puedes buscar por id o nombre del trabajador
+ addAbsencesText: Para empezar a añadir ausencias, haz clic en un tipo de ausencia desde el menu de la derecha y después en el día que quieres añadir la ausencia
+
diff --git a/src/pages/Worker/Card/WorkerCalendarFilter.vue b/src/pages/Worker/Card/WorkerCalendarFilter.vue
new file mode 100644
index 000000000..374762ac1
--- /dev/null
+++ b/src/pages/Worker/Card/WorkerCalendarFilter.vue
@@ -0,0 +1,248 @@
+
+
+
+ (absenceTypeList = data)"
+ auto-load
+ />
+ (contractList = data)"
+ auto-load
+ />
+
+
+
+
+ {{ t('Contract') }} #{{ selectedBusinessFk }}
+
+
+
+
+ {{
+ t('usedDays', {
+ holidaysEnjoyed: contractHolidays.holidaysEnjoyed || 0,
+ totalHolidays: contractHolidays.totalHolidays || 0,
+ })
+ }}
+
+
+
+
+ {{
+ t('spentHours', {
+ hoursEnjoyed: contractHolidays.hoursEnjoyed || 0,
+ totalHours: contractHolidays.totalHours || 0,
+ })
+ }}
+
+
+
+
+ {{
+ t('paidHolidays', {
+ payedHolidays: contractHolidays.payedHolidays || 0,
+ })
+ }}
+
+
+
+
+
+
+ {{ t('Year') }} {{ selectedYear }}
+
+
+
+
+ {{
+ t('usedDays', {
+ holidaysEnjoyed: yearHolidays.holidaysEnjoyed || 0,
+ totalHolidays: yearHolidays.totalHolidays || 0,
+ })
+ }}
+
+
+
+ {{
+ t('spentHours', {
+ hoursEnjoyed: yearHolidays.hoursEnjoyed || 0,
+ totalHours: yearHolidays.totalHours || 0,
+ })
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # {{ scope.opt?.businessFk }}
+
+ {{ toDateFormat(scope.opt?.started) }} -
+ {{
+ scope.opt?.ended
+ ? toDateFormat(scope.opt?.ended)
+ : 'Indef.'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ type.name }}
+
+
+
+
+
+
+
+ {{ t('Festive') }}
+
+
+ {{ t('Current day') }}
+
+
+
+
+
+
+
+
+en:
+ spentHours: Spent {hoursEnjoyed} of {totalHours} hours
+ usedDays: Used {holidaysEnjoyed} of {totalHolidays} days
+ paidHolidays: Paid holidays {payedHolidays} days
+
+es:
+ Paid holidays: Vacaciones pagadas
+ Year: Año
+ Contract: Contrato
+ Festive: Festivo
+ Current day: Día actual
+ spentHours: Utilizadas {hoursEnjoyed} de {totalHours} horas
+ usedDays: Utilizados {holidaysEnjoyed} de {totalHolidays} días
+ paidHolidays: Vacaciones pagadas {payedHolidays} días
+
+
diff --git a/src/pages/Worker/Card/WorkerCalendarItem.vue b/src/pages/Worker/Card/WorkerCalendarItem.vue
new file mode 100644
index 000000000..584222d19
--- /dev/null
+++ b/src/pages/Worker/Card/WorkerCalendarItem.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+ {{
+ weekdayStore.getLocaleMonths[$props.month - 1].locale
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+es:
+ Choose an absence type from the right menu: Elige un tipo de ausencia desde el menú de la derecha
+
diff --git a/src/pages/Worker/Card/WorkerDescriptor.vue b/src/pages/Worker/Card/WorkerDescriptor.vue
index a20ad5546..bb4acec69 100644
--- a/src/pages/Worker/Card/WorkerDescriptor.vue
+++ b/src/pages/Worker/Card/WorkerDescriptor.vue
@@ -31,29 +31,7 @@ const entityId = computed(() => {
});
const worker = ref();
-const filter = {
- include: [
- {
- relation: 'user',
- scope: {
- fields: ['email', 'name', 'nickname'],
- },
- },
- {
- relation: 'department',
- scope: {
- include: [
- {
- relation: 'department',
- },
- ],
- },
- },
- {
- relation: 'sip',
- },
- ],
-};
+const filter = { where: { id: route.params.id}};
const sip = ref(null);
@@ -82,7 +60,7 @@ const setData = (entity) => {
+import VnDmsList from 'src/components/common/VnDmsList.vue';
+import { useRoute } from 'vue-router';
+const route = useRoute();
+
+
+
+
diff --git a/src/pages/Worker/Card/WorkerEventLabel.vue b/src/pages/Worker/Card/WorkerEventLabel.vue
new file mode 100644
index 000000000..b75fea890
--- /dev/null
+++ b/src/pages/Worker/Card/WorkerEventLabel.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
diff --git a/src/pages/Worker/Card/WorkerSummary.vue b/src/pages/Worker/Card/WorkerSummary.vue
index dad21cda5..43c493565 100644
--- a/src/pages/Worker/Card/WorkerSummary.vue
+++ b/src/pages/Worker/Card/WorkerSummary.vue
@@ -10,7 +10,7 @@ import CardSummary from 'components/ui/CardSummary.vue';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import VnTitle from 'src/components/common/VnTitle.vue';
-const route = useRoute();
+const { params } = useRoute();
const { t } = useI18n();
const $props = defineProps({
@@ -20,53 +20,18 @@ const $props = defineProps({
},
});
-const entityId = computed(() => $props.id || route.params.id);
+const entityId = computed(() => $props.id || params.id);
const workerUrl = ref();
onMounted(async () => {
workerUrl.value = (await getUrl('')) + `worker/${entityId.value}/`;
});
-const filter = {
- include: [
- {
- relation: 'user',
- scope: {
- fields: ['email', 'name', 'nickname', 'roleFk'],
- include: {
- relation: 'role',
- scope: {
- fields: ['name'],
- },
- },
- },
- },
- {
- relation: 'department',
- scope: {
- include: {
- relation: 'department',
- scope: {
- fields: ['name'],
- },
- },
- },
- },
- {
- relation: 'boss',
- },
- {
- relation: 'client',
- },
- {
- relation: 'sip',
- },
- ],
-};
+const filter = { where: { id: entityId.value } };
-
+
{{ entity.id }} - {{ entity.firstName }} {{ entity.lastName }}
@@ -103,12 +68,6 @@ const filter = {
-
-
- {{ t('worker.summary.personalPhone') }}
-
-
-
diff --git a/src/router/modules/Supplier.js b/src/router/modules/Supplier.js
index 64c48146b..da45aad2f 100644
--- a/src/router/modules/Supplier.js
+++ b/src/router/modules/Supplier.js
@@ -45,7 +45,8 @@ export default {
path: 'create',
name: 'SupplierCreate',
meta: {
- title: 'create',
+ title: 'supplierCreate',
+ icon: 'add',
},
component: () => import('src/pages/Supplier/SupplierCreate.vue'),
},
diff --git a/src/router/modules/customer.js b/src/router/modules/customer.js
index 75188bd32..76d9a5af1 100644
--- a/src/router/modules/customer.js
+++ b/src/router/modules/customer.js
@@ -55,7 +55,8 @@ export default {
path: 'create',
name: 'CustomerCreate',
meta: {
- title: 'create',
+ title: 'customerCreate',
+ icon: 'add',
},
component: () => import('src/pages/Customer/CustomerCreate.vue'),
},
diff --git a/src/router/modules/entry.js b/src/router/modules/entry.js
index 50a651af5..67fc41824 100644
--- a/src/router/modules/entry.js
+++ b/src/router/modules/entry.js
@@ -34,7 +34,8 @@ export default {
path: 'create',
name: 'EntryCreate',
meta: {
- title: 'create',
+ title: 'entryCreate',
+ icon: 'add',
},
component: () => import('src/pages/Entry/EntryCreate.vue'),
},
diff --git a/src/router/modules/item.js b/src/router/modules/item.js
index d3462e15c..41f3ec92a 100644
--- a/src/router/modules/item.js
+++ b/src/router/modules/item.js
@@ -10,15 +10,15 @@ export default {
component: RouterView,
redirect: { name: 'ItemMain' },
menus: {
- main: [],
- card: [],
+ main: ['ItemList', 'WasteBreakdown'],
+ card: ['ItemBasicData'],
},
children: [
{
path: '',
name: 'ItemMain',
component: () => import('src/pages/Item/ItemMain.vue'),
- redirect: { name: 'Itemlist' },
+ redirect: { name: 'ItemList' },
children: [
{
path: 'list',
@@ -29,6 +29,27 @@ export default {
},
component: () => import('src/pages/Item/ItemList.vue'),
},
+ {
+ path: 'create',
+ name: 'ItemCreate',
+ meta: {
+ title: 'create',
+ },
+ component: () => import('src/pages/Item/ItemCreate.vue'),
+ },
+ {
+ path: 'waste-breakdown',
+ name: 'WasteBreakdown',
+ meta: {
+ title: 'wasteBreakdown',
+ icon: 'vn:claims',
+ },
+ beforeEnter: (to, from, next) => {
+ next({ name: 'ItemList' });
+ window.location.href =
+ 'https://grafana.verdnatura.es/d/TTNXQAxVk';
+ },
+ },
],
},
{
@@ -64,6 +85,15 @@ export default {
},
component: () => import('src/pages/Item/Card/ItemTags.vue'),
},
+ {
+ path: 'basic-data',
+ name: 'ItemBasicData',
+ meta: {
+ title: 'basicData',
+ icon: 'vn:settings',
+ },
+ component: () => import('src/pages/Item/Card/ItemBasicData.vue'),
+ },
],
},
],
diff --git a/src/router/modules/order.js b/src/router/modules/order.js
index 16d73281b..eb5424e75 100644
--- a/src/router/modules/order.js
+++ b/src/router/modules/order.js
@@ -34,7 +34,8 @@ export default {
path: 'create',
name: 'OrderCreate',
meta: {
- title: 'create',
+ title: 'orderCreate',
+ icon: 'add',
},
component: () => import('src/pages/Order/Card/OrderForm.vue'),
},
diff --git a/src/router/modules/route.js b/src/router/modules/route.js
index 099492981..f8ededf55 100644
--- a/src/router/modules/route.js
+++ b/src/router/modules/route.js
@@ -34,7 +34,8 @@ export default {
path: 'create',
name: 'RouteCreate',
meta: {
- title: 'create',
+ title: 'routeCreate',
+ icon: 'add',
},
component: () => import('src/pages/Route/Card/RouteForm.vue'),
},
diff --git a/src/router/modules/shelving.js b/src/router/modules/shelving.js
index b881ca020..d20ce40f4 100644
--- a/src/router/modules/shelving.js
+++ b/src/router/modules/shelving.js
@@ -34,7 +34,8 @@ export default {
path: 'create',
name: 'ShelvingCreate',
meta: {
- title: 'create',
+ title: 'shelvingCreate',
+ icon: 'add',
},
component: () => import('src/pages/Shelving/Card/ShelvingForm.vue'),
},
diff --git a/src/router/modules/travel.js b/src/router/modules/travel.js
index 2f1e2150e..e1a08e9de 100644
--- a/src/router/modules/travel.js
+++ b/src/router/modules/travel.js
@@ -44,6 +44,7 @@ export default {
name: 'TravelCreate',
meta: {
title: 'travelCreate',
+ icon: 'add',
},
component: () => import('src/pages/Travel/TravelCreate.vue'),
},
diff --git a/src/router/modules/worker.js b/src/router/modules/worker.js
index 68f096220..bf8d6093f 100644
--- a/src/router/modules/worker.js
+++ b/src/router/modules/worker.js
@@ -19,6 +19,8 @@ export default {
'WorkerNotificationsManager',
'WorkerPBX',
'WorkerLog',
+ 'WorkerCalendar',
+ 'WorkerDms',
],
departmentCard: ['BasicData'],
},
@@ -52,7 +54,7 @@ export default {
name: 'WorkerCreate',
meta: {
title: 'workerCreate',
- icon: '',
+ icon: 'add',
},
component: () => import('src/pages/Worker/WorkerCreate.vue'),
},
@@ -127,6 +129,15 @@ export default {
},
component: () => import('src/pages/Worker/Card/WorkerPBX.vue'),
},
+ {
+ name: 'WorkerDms',
+ path: 'dms',
+ meta: {
+ title: 'dms',
+ icon: 'cloud_upload',
+ },
+ component: () => import('src/pages/Worker/Card/WorkerDms.vue'),
+ },
{
name: 'WorkerLog',
path: 'log',
@@ -136,6 +147,15 @@ export default {
},
component: () => import('src/pages/Worker/Card/WorkerLog.vue'),
},
+ {
+ name: 'WorkerCalendar',
+ path: 'calendar',
+ meta: {
+ title: 'calendar',
+ icon: 'calendar_today',
+ },
+ component: () => import('src/pages/Worker/Card/WorkerCalendar.vue'),
+ },
],
},
],
diff --git a/src/stores/useNavigationStore.js b/src/stores/useNavigationStore.js
index afd3af0c0..f075301f6 100644
--- a/src/stores/useNavigationStore.js
+++ b/src/stores/useNavigationStore.js
@@ -7,6 +7,7 @@ import routes from 'src/router/modules';
export const useNavigationStore = defineStore('navigationStore', () => {
const modules = [
+ 'item',
'shelving',
'order',
'customer',
diff --git a/src/stores/useWeekdayStore.js b/src/stores/useWeekdayStore.js
new file mode 100644
index 000000000..ad898c9a7
--- /dev/null
+++ b/src/stores/useWeekdayStore.js
@@ -0,0 +1,95 @@
+import { reactive, ref, computed } from 'vue';
+import { useI18n } from 'vue-i18n';
+import { defineStore } from 'pinia';
+
+export const useWeekdayStore = defineStore('weekdayStore', () => {
+ const { t } = useI18n();
+
+ const weekdays = [
+ { code: 'sun', name: 'Sunday' },
+ { code: 'mon', name: 'Monday' },
+ { code: 'tue', name: 'Tuesday' },
+ { code: 'wed', name: 'Wednesday' },
+ { code: 'thu', name: 'Thursday' },
+ { code: 'fri', name: 'Friday' },
+ { code: 'sat', name: 'Saturday' },
+ ];
+
+ const monthCodes = [
+ 'jan',
+ 'feb',
+ 'mar',
+ 'apr',
+ 'may',
+ 'jun',
+ 'jul',
+ 'aug',
+ 'sep',
+ 'oct',
+ 'nov',
+ 'dec',
+ ];
+
+ const localeOrder = {
+ es: ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'],
+ en: ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
+ };
+
+ const weekdaysMap = reactive({});
+ const localeWeekdays = ref([]);
+
+ const initStore = () => {
+ getWeekdaysMap();
+ };
+
+ const getWeekdaysMap = () => {
+ if (Object.keys(weekdaysMap).length > 0) return weekdaysMap;
+
+ weekdays.forEach((day, i) => {
+ const obj = {
+ ...day,
+ index: i,
+ char: day.name.substr(0, 1),
+ abr: day.name.substr(0, 3),
+ };
+ weekdaysMap[day.code] = obj;
+ });
+ };
+
+ const getLocales = computed(() => {
+ // El día de mañana esto permitirá ordenar los weekdays en base a el locale si se lo desea reemplazando localeOrder.es por localeOrder[locale]
+ const locales = [];
+ for (let code of localeOrder.es) {
+ const obj = {
+ ...weekdaysMap[code],
+ locale: t(`weekdays.${weekdaysMap[code].code}`),
+ localeChar: t(`weekdays.${weekdaysMap[code].code}`).substr(0, 1),
+ localeAbr: t(`weekdays.${weekdaysMap[code].code}`).substr(0, 3),
+ };
+ locales.push(obj);
+ }
+ return locales;
+ });
+
+ const getLocaleMonths = computed(() => {
+ const locales = [];
+ for (let code of monthCodes) {
+ const obj = {
+ code: code,
+ locale: t(`months.${code}`),
+ };
+ locales.push(obj);
+ }
+ return locales;
+ });
+
+ return {
+ initStore,
+ weekdaysMap,
+ localeWeekdays,
+ getLocales,
+ weekdays,
+ monthCodes,
+ getLocaleMonths,
+ };
+});
diff --git a/test/cypress/integration/VnLocation.spec.js b/test/cypress/integration/VnLocation.spec.js
index 3a90afce9..f89a0f716 100644
--- a/test/cypress/integration/VnLocation.spec.js
+++ b/test/cypress/integration/VnLocation.spec.js
@@ -1,48 +1,64 @@
-const locationOptions ='[role="listbox"] > div.q-virtual-scroll__content > .q-item'
+const locationOptions = '[role="listbox"] > div.q-virtual-scroll__content > .q-item';
describe('VnLocation', () => {
- describe('Create',()=>{
- const inputLocation = ':nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control';
+ describe('Create', () => {
+ const inputLocation =
+ '.q-form .q-card> :nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control';
beforeEach(() => {
cy.viewport(1280, 720);
cy.login('developer');
cy.visit('/#/worker/create');
cy.waitForElement('.q-card');
});
- it('Show all options', function() {
+ it('Show all options', function () {
cy.get(inputLocation).click();
- 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 () {
cy.get(inputLocation).click();
cy.get(inputLocation).clear();
cy.get(inputLocation).type('al');
- cy.get(locationOptions).should('have.length.at.least',3);
+ cy.get(locationOptions).should('have.length.at.least', 3);
});
- it('input filter location as "ecuador"', function() {
+ it('input filter location as "ecuador"', function () {
cy.get(inputLocation).click();
cy.get(inputLocation).clear();
cy.get(inputLocation).type('ecuador');
- cy.get(locationOptions).should('have.length.at.least',1);
+ cy.get(locationOptions).should('have.length.at.least', 1);
cy.get(`${locationOptions}:nth-child(1)`).click();
- cy.get(':nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(2) > .q-icon').click();
+ cy.get(inputLocation + '> :nth-child(2) > .q-icon').click();
});
});
- describe('Fiscal-data',()=>{
+ describe('Fiscal-data', () => {
beforeEach(() => {
cy.viewport(1280, 720);
cy.login('developer');
- cy.visit('/#/supplier/567/fiscal-data', {timeout: 2000});
+ cy.visit('/#/supplier/567/fiscal-data', { timeout: 2000 });
cy.waitForElement('.q-card');
});
- it('Create postCode', function() {
- cy.get(':nth-child(6) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(3) > .q-icon').click();
+ it('Create postCode', function () {
+ cy.get(
+ ':nth-child(6) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(3) > .q-icon'
+ ).click();
cy.get(' .q-card > h1').should('have.text', 'New postcode');
- cy.get('.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input').clear('12');
- cy.get('.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input').type('1234453');
- cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(4) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ', 'Valencia');
- cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control ', 'Province one');
- cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ', 'España');
+ cy.get(
+ '.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input'
+ ).clear('12');
+ cy.get(
+ '.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input'
+ ).type('1234453');
+ cy.selectOption(
+ '.q-dialog__inner > .column > #formModel > .q-card > :nth-child(4) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ',
+ 'Valencia'
+ );
+ cy.selectOption(
+ '.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control ',
+ 'Province one'
+ );
+ cy.selectOption(
+ '.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ',
+ 'España'
+ );
cy.get('.q-mt-lg > .q-btn--standard').click();
});
});
-})
+});
diff --git a/test/cypress/integration/claim/claimDevelopment.spec.js b/test/cypress/integration/claim/claimDevelopment.spec.js
index 26c7ee196..903f58d4b 100755
--- a/test/cypress/integration/claim/claimDevelopment.spec.js
+++ b/test/cypress/integration/claim/claimDevelopment.spec.js
@@ -8,6 +8,7 @@ describe('ClaimDevelopment', () => {
cy.viewport(1920, 1080);
cy.login('developer');
cy.visit(`/#/claim/${claimId}/development`);
+ cy.waitForElement('tbody');
});
it('should reset line', () => {
diff --git a/test/cypress/integration/entry/entryDms.spec.js b/test/cypress/integration/entry/entryDms.spec.js
index 79a9c5162..5f9fae3dd 100644
--- a/test/cypress/integration/entry/entryDms.spec.js
+++ b/test/cypress/integration/entry/entryDms.spec.js
@@ -5,37 +5,40 @@ describe('WagonTypeCreate', () => {
cy.viewport(1920, 1080);
cy.login('developer');
cy.visit(`/#/entry/${entryId}/dms`);
-
});
it('should create edit and remove new dms', () => {
cy.addRow();
- cy.get('.icon-attach').click()
+ cy.get('.icon-attach').click();
cy.get('.q-file').selectFile('test/cypress/fixtures/image.jpg', {
force: true,
});
- cy.get("tbody > tr").then((value) => {
+ cy.get('tbody > tr').then((value) => {
+ const u = undefined;
+
//Create and check if exist new row
let newFileTd = Cypress.$(value).length;
cy.get('.q-btn--standard > .q-btn__content > .block').click();
expect(value).to.have.length(newFileTd++);
- const newRowSelector = `tbody > :nth-child(${newFileTd})`
+ const newRowSelector = `tbody > :nth-child(${newFileTd})`;
cy.waitForElement(newRowSelector);
+ cy.validateRow(newRowSelector, [u, u, u, u, 'ENTRADA ID 1']);
//Edit new dms
- const u = undefined;
- cy.validateRow(newRowSelector, [u,u,u,u,'ENTRADA ID 1'])
- cy.get(`tbody :nth-child(${newFileTd}) > .text-right > .flex > :nth-child(2) > .q-btn > .q-btn__content > .q-icon`).click();
- })
- // cy.log('newFileTd', newFileTd)
+ const newDescription = 'entry id 1 modified';
+ const textAreaSelector =
+ '.q-textarea > .q-field__inner > .q-field__control > .q-field__control-container';
+ cy.get(
+ `tbody :nth-child(${newFileTd}) > .text-right > .no-wrap > :nth-child(2) > .q-btn > .q-btn__content > .q-icon`
+ ).click();
- // //Create and check if exist new row
- // cy.log('newFileTd:', newFileTd);
- // cy.get(`tbody :nth-child(${newFileTd}) > .text-right > .flex > :nth-child(2) > .q-btn > .q-btn__content > .q-icon`).click()
+ cy.get(textAreaSelector).clear();
+ cy.get(textAreaSelector).type(newDescription);
+ cy.saveCard();
+ cy.reload();
- // cy.get(`tbody :nth-child(${newFileTd}) > :nth-child(5) > .q-tr > :nth-child(1) > span`).then((value) => {
- // cy.log(value)
- // });
+ cy.validateRow(newRowSelector, [u, u, u, u, newDescription]);
+ });
});
});
diff --git a/test/cypress/integration/invoiceIn/invoiceInBasicData.spec.js b/test/cypress/integration/invoiceIn/invoiceInBasicData.spec.js
index 20f137aeb..fc989d6c5 100644
--- a/test/cypress/integration/invoiceIn/invoiceInBasicData.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInBasicData.spec.js
@@ -1,6 +1,6 @@
///
describe('InvoiceInBasicData', () => {
- const selects = ':nth-child(1) > :nth-child(1) > .q-field';
+ const selects = '.q-form .q-card>:nth-child(1) > :nth-child(1) > .q-field';
const appendBtns = 'label button';
const dialogAppendBtns = '.q-dialog label button';
const dialogInputs = '.q-dialog input';
diff --git a/test/cypress/integration/invoiceIn/invoiceInVat.spec.js b/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
index 811374b98..2f045f32c 100644
--- a/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
@@ -37,6 +37,7 @@ describe('InvoiceInVat', () => {
it('should throw an error if there are fields undefined', () => {
cy.get(inputBtns).eq(0).click();
+ cy.get(':nth-child(1) > .q-td.q-table--col-auto-width > .q-field > .q-field__inner > .q-field__control > :nth-child(2) > .default-icon').click();
cy.get(dialogBtns).eq(2).click();
cy.get('.q-notification__message').should('have.text', "The code can't be empty");
});
@@ -44,7 +45,7 @@ describe('InvoiceInVat', () => {
it('should correctly handle expense addition', () => {
cy.get(inputBtns).eq(0).click();
- cy.get(dialogInputs).eq(0).click();
+ cy.get(':nth-child(1) > .q-td.q-table--col-auto-width > .q-field > .q-field__inner > .q-field__control > :nth-child(2) > .default-icon').click();
cy.get(dialogInputs).eq(0).type(randomInt);
cy.get(dialogInputs).eq(1).click();
cy.get(dialogInputs).eq(1).type('This is a dummy expense');
diff --git a/test/cypress/integration/worker/workerList.spec.js b/test/cypress/integration/worker/workerList.spec.js
index c950f9fed..38e7ea6d0 100644
--- a/test/cypress/integration/worker/workerList.spec.js
+++ b/test/cypress/integration/worker/workerList.spec.js
@@ -8,9 +8,9 @@ describe('WorkerList', () => {
});
it('should load workers', () => {
- cy.get(workerFieldNames).eq(0).should('have.text', 'JessicaJones');
- cy.get(workerFieldNames).eq(1).should('have.text', 'BruceBanner');
- cy.get(workerFieldNames).eq(2).should('have.text', 'CharlesXavier');
+ cy.get(workerFieldNames).eq(0).should('have.text', 'jessicajones');
+ cy.get(workerFieldNames).eq(1).should('have.text', 'brucebanner');
+ cy.get(workerFieldNames).eq(2).should('have.text', 'charlesxavier');
});
it('should open the worker summary', () => {
diff --git a/test/cypress/integration/worker/workerNotificationsManager.spec.js b/test/cypress/integration/worker/workerNotificationsManager.spec.js
index 175933277..ac452c4ff 100644
--- a/test/cypress/integration/worker/workerNotificationsManager.spec.js
+++ b/test/cypress/integration/worker/workerNotificationsManager.spec.js
@@ -60,7 +60,6 @@ describe('WorkerNotificationsManager', () => {
it('should active a notification if you are their boss', () => {
cy.login('salesBoss');
cy.visit(`/#/worker/${salesPersonId}/notifications`);
- cy.waitForElement(activeList);
cy.waitForElement(availableList);
cy.get(activeList)
diff --git a/test/cypress/integration/worker/workerSummary.spec.js b/test/cypress/integration/worker/workerSummary.spec.js
index 7228b4b31..3d70fdf96 100644
--- a/test/cypress/integration/worker/workerSummary.spec.js
+++ b/test/cypress/integration/worker/workerSummary.spec.js
@@ -6,7 +6,8 @@ describe('WorkerSummary', () => {
});
it('should load worker summary', () => {
- cy.get('.summaryHeader > div').should('have.text', '19 - salesBoss salesBoss');
+ cy.waitForElement('.summaryHeader');
+ cy.get('.summaryHeader > div').should('have.text', '19 - salesboss salesboss');
cy.get(':nth-child(1) > :nth-child(2) > .value > span').should(
'have.text',
'salesBossNick'
diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js
index 544e7e6b5..28a8aa979 100755
--- a/test/cypress/support/commands.js
+++ b/test/cypress/support/commands.js
@@ -72,6 +72,7 @@ Cypress.Commands.add('getValue', (selector) => {
// Fill Inputs
Cypress.Commands.add('selectOption', (selector, option) => {
+ cy.waitForElement(selector);
cy.get(selector).find('.q-select__dropdown-icon').click();
cy.get('.q-menu .q-item').contains(option).click();
});
@@ -183,11 +184,11 @@ Cypress.Commands.add('closeSideMenu', (element) => {
Cypress.Commands.add('clearSearchbar', (element) => {
if (element) cy.waitForElement(element);
- cy.get('#searchbar > form > label > div:nth-child(1) input').clear();
+ cy.get('#searchbar > form > div:nth-child(1) > label > div:nth-child(1) input').clear();
});
Cypress.Commands.add('writeSearchbar', (value) => {
- cy.get('#searchbar > form > label > div:nth-child(1) input').type(value);
+ cy.get('#searchbar > form > div:nth-child(1) > label > div:nth-child(1) input').type(value);
});
Cypress.Commands.add('validateContent', (selector, expectedValue) => {
cy.get(selector).should('have.text', expectedValue);
diff --git a/vitest.config.js b/vitest.config.js
index 5a8699e99..ca9f6c1fe 100644
--- a/vitest.config.js
+++ b/vitest.config.js
@@ -19,7 +19,7 @@ export default defineConfig({
plugins: [
vue({
template: {
- transformAssetUrls
+ transformAssetUrls,
},
}),
quasar({
@@ -27,7 +27,10 @@ export default defineConfig({
sassVariables: 'src/quasar-variables.scss',
}),
VueI18nPlugin({
- include: path.resolve(__dirname, 'src/i18n/**'),
+ include: [
+ path.resolve(__dirname, 'src/i18n/**'),
+ path.resolve(__dirname, 'src/pages/**/locale/**'),
+ ],
}),
jsconfigPaths(),
],