diff --git a/src/components/common/VnChangePassword.vue b/src/components/common/VnChangePassword.vue
index 79784f3c5..d8374498f 100644
--- a/src/components/common/VnChangePassword.vue
+++ b/src/components/common/VnChangePassword.vue
@@ -2,9 +2,9 @@
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import VnRow from '../ui/VnRow.vue';
-import VnInput from './VnInput.vue';
import FetchData from '../FetchData.vue';
import useNotify from 'src/composables/useNotify';
+import VnInputPassword from 'src/components/common/VnInputPassword.vue';
const props = defineProps({
submitFn: { type: Function, default: () => {} },
@@ -70,19 +70,19 @@ defineExpose({ show: () => changePassDialog.value.show() });
-
-
diff --git a/src/components/common/VnInput.vue b/src/components/common/VnInput.vue
index 3cecf760a..4c7445aab 100644
--- a/src/components/common/VnInput.vue
+++ b/src/components/common/VnInput.vue
@@ -45,6 +45,7 @@ const $props = defineProps({
});
const vnInputRef = ref(null);
+const showPassword = ref(false);
const value = computed({
get() {
return $props.modelValue;
@@ -134,7 +135,7 @@ const handleInsertMode = (e) => {
hide-bottom-space
:data-cy="$attrs.dataCy ?? $attrs.label + '_input'"
>
-
+
@@ -158,7 +159,7 @@ const handleInsertMode = (e) => {
emit('remove');
}
"
- >
+ />
@@ -169,18 +170,3 @@ const handleInsertMode = (e) => {
-
- en:
- inputMin: Must be more than {value}
- maxLength: The value exceeds {value} characters
- inputMax: Must be less than {value}
- es:
- inputMin: Debe ser mayor a {value}
- maxLength: El valor excede los {value} carácteres
- inputMax: Debe ser menor a {value}
-
-
diff --git a/src/components/common/VnInputPassword.vue b/src/components/common/VnInputPassword.vue
new file mode 100644
index 000000000..56981c0c3
--- /dev/null
+++ b/src/components/common/VnInputPassword.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/ui/__tests__/FetchedTags.spec.js b/src/components/ui/__tests__/FetchedTags.spec.js
new file mode 100644
index 000000000..3c658a80e
--- /dev/null
+++ b/src/components/ui/__tests__/FetchedTags.spec.js
@@ -0,0 +1,81 @@
+import { describe, expect, it } from 'vitest';
+import { createWrapper } from 'app/test/vitest/helper';
+import FetchedTags from 'src/components/ui/FetchedTags.vue';
+
+describe('tags computed property', () => {
+ it('returns an object with the correct keys and values', () => {
+ const vm = createWrapper(FetchedTags, {
+ props: {
+ item: {
+ tag1: 'JavaScript',
+ value1: 'Programming Language',
+ tag2: 'Vue',
+ value2: 'Framework',
+ tag3: 'EmptyTag',
+ },
+ tag: 'tag',
+ value: 'value',
+ columns: 2,
+ },
+ }).vm;
+ expect(vm.tags).toEqual({
+ JavaScript: 'Programming Language',
+ Vue: 'Framework',
+ EmptyTag: '',
+ });
+ });
+
+ it('returns an empty object if the item prop is an empty object', () => {
+ const vm = createWrapper(FetchedTags, {
+ props: {
+ item: {},
+ tag: 'tag',
+ value: 'value',
+ },
+ }).vm;
+ expect(vm.tags).toEqual({});
+ });
+
+ it('should calculate the correct columnStyle when columns prop is defined', () => {
+ const vm = createWrapper(FetchedTags, {
+ props: {
+ item: {
+ tag1: 'JavaScript',
+ value1: 'Programming Language',
+ tag2: 'Vue',
+ value2: 'Framework',
+ tag3: 'EmptyTag',
+ },
+ tag: 'tag',
+ value: 'value',
+ columns: 2,
+ },
+ }).vm;
+
+ const expectedStyle = {
+ 'grid-template-columns': 'repeat(2, 1fr)',
+ 'max-width': '8rem',
+ };
+
+ expect(vm.columnStyle).toEqual(expectedStyle);
+ });
+
+ it('should return an empty object for columnStyle when columns prop is not defined', () => {
+ const vm = createWrapper(FetchedTags, {
+ props: {
+ item: {
+ tag1: 'JavaScript',
+ value1: 'Programming Language',
+ tag2: 'Vue',
+ value2: 'Framework',
+ tag3: 'EmptyTag',
+ },
+ tag: 'tag',
+ value: 'value',
+ columns: null,
+ },
+ }).vm;
+
+ expect(vm.columnStyle).toEqual({});
+ });
+});
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index 278c3514d..bf001c9ba 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -455,12 +455,26 @@ entry:
packingOut: Package out
landing: Landing
isExcludedFromAvailable: Es inventory
+ params:
+ toShipped: To
+ fromShipped: From
+ warehouseiNFk: Warehouse
+ daysOnward: Days onward
+ daysAgo: Days ago
+ warehouseInFk: Warehouse in
ticket:
params:
ticketFk: Ticket ID
weekDay: Weekday
agencyModeFk: Agency
id: Worker
+ state: State
+ created: Created
+ externalId: External ID
+ counter: Counter
+ freightItemName: Freight item name
+ packageItemName: Package item name
+ longName: Long name
card:
customerId: Customer ID
customerCard: Customer card
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index 139486e03..2c95f936c 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -456,12 +456,25 @@ entry:
packingOut: Embalaje envíos
landing: Llegada
isExcludedFromAvailable: Es inventario
+ params:
+ toShipped: Hasta
+ fromShipped: Desde
+ warehouseInFk: Alm. entrada
+ daysOnward: Días adelante
+ daysAgo: Días atras
ticket:
params:
ticketFk: ID de ticket
weekDay: Salida
agencyModeFk: Agencia
id: Comercial
+ created: Creado
+ state: Estado
+ externalId: ID externo
+ counter: Contador
+ freightItemName: Nombre
+ packageItemName: Embalaje
+ longName: Descripción
card:
customerId: ID cliente
customerCard: Ficha del cliente
diff --git a/src/pages/Account/AccountCreate.vue b/src/pages/Account/AccountCreate.vue
index 6b7c049c8..b925ff06a 100644
--- a/src/pages/Account/AccountCreate.vue
+++ b/src/pages/Account/AccountCreate.vue
@@ -6,6 +6,7 @@ import FormModelPopup from 'components/FormModelPopup.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import FetchData from 'components/FetchData.vue';
import VnInput from 'src/components/common/VnInput.vue';
+import VnInputPassword from 'src/components/common/VnInputPassword.vue';
const { t } = useI18n();
const router = useRouter();
@@ -61,10 +62,10 @@ const redirectToAccountBasicData = (_, { id }) => {
hide-selected
:rules="validate('VnUser.roleFk')"
/>
-
await getInitialLdapConfig());
:required="true"
:rules="validate('LdapConfig.rdn')"
/>
-
-
diff --git a/src/pages/Account/AccountSamba.vue b/src/pages/Account/AccountSamba.vue
index 699a638eb..7b36de85f 100644
--- a/src/pages/Account/AccountSamba.vue
+++ b/src/pages/Account/AccountSamba.vue
@@ -8,6 +8,7 @@ import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
import { useArrayData } from 'src/composables/useArrayData';
import useNotify from 'src/composables/useNotify.js';
import axios from 'axios';
+import VnInputPassword from 'src/components/common/VnInputPassword.vue';
const { t } = useI18n();
const { notify } = useNotify();
@@ -143,10 +144,9 @@ onMounted(async () => await getInitialSambaConfig());
v-model="data.adUser"
:rules="validate('SambaConfigs.adUser')"
/>
-
{{ t('account.card.actions.sync.tooltip') }}
-
diff --git a/src/pages/Customer/locale/en.yml b/src/pages/Customer/locale/en.yml
index 1d2497ded..1918838b7 100644
--- a/src/pages/Customer/locale/en.yml
+++ b/src/pages/Customer/locale/en.yml
@@ -95,6 +95,7 @@ customer:
isToBeMailed: Mailing
hasSepaVnl: VNL B2B received
params:
+ id: Id
isWorker: Is Worker
payMethod: Payment Method
workerFk: Author
@@ -102,4 +103,15 @@ customer:
created: Last Update Date
creditInsurance: Credit Insurance
defaulterSinced: Defaulted Since
- hasRecovery: Has Recovery
\ No newline at end of file
+ hasRecovery: Has Recovery
+ socialName: Social name
+ city: City
+ phone: Phone
+ postcode: Postcode
+ campaign: Campaign
+ grouped: Grouped
+ search: Contains
+ itemId: Item Id
+ ticketFk: Ticket Id
+ description: Description
+ quantity: Quantity
diff --git a/src/pages/Customer/locale/es.yml b/src/pages/Customer/locale/es.yml
index 1b56f6805..d5db3df1b 100644
--- a/src/pages/Customer/locale/es.yml
+++ b/src/pages/Customer/locale/es.yml
@@ -97,6 +97,7 @@ customer:
isToBeMailed: Env. emails
hasSepaVnl: Recibido B2B VNL
params:
+ id: ID
isWorker: Es trabajador
payMethod: F. Pago
workerFk: Autor
@@ -104,4 +105,15 @@ customer:
created: Fecha Ú. O.
creditInsurance: Crédito A.
defaulterSinced: Desde
- hasRecovery: Tiene recobro
\ No newline at end of file
+ hasRecovery: Tiene recobro
+ socialName: Razón social
+ campaign: Campaña
+ city: Ciudad
+ phone: Teléfono
+ postcode: Código postal
+ grouped: Agrupado
+ search: Contiene
+ itemId: Id Artículo
+ ticketFk: Id Ticket
+ description: Descripción
+ quantity: Cantidad
diff --git a/src/pages/Entry/locale/en.yml b/src/pages/Entry/locale/en.yml
index 10ef6db64..6e41566d0 100644
--- a/src/pages/Entry/locale/en.yml
+++ b/src/pages/Entry/locale/en.yml
@@ -20,11 +20,3 @@ myEntries:
downloadCsv: Download CSV
wasteRecalc:
recalcOk: The wastes were successfully recalculated
-entry:
- params:
- toShipped: To
- fromShipped: From
- warehouseiNFk: Warehouse
- daysOnward: Days onward
- daysAgo: Days ago
-
\ No newline at end of file
diff --git a/src/pages/Entry/locale/es.yml b/src/pages/Entry/locale/es.yml
index d665a7cc4..7e627b09f 100644
--- a/src/pages/Entry/locale/es.yml
+++ b/src/pages/Entry/locale/es.yml
@@ -23,11 +23,3 @@ myEntries:
downloadCsv: Descargar CSV
wasteRecalc:
recalcOk: Se han recalculado las mermas correctamente
-entry:
- params:
- toShipped: Hasta
- fromShipped: Desde
- warehouseInFk: Alm. entrada
- daysOnward: Días adelante
- daysAgo: Días atras
-
\ No newline at end of file
diff --git a/src/pages/Login/LoginMain.vue b/src/pages/Login/LoginMain.vue
index 44b868ebd..a4c3566a9 100644
--- a/src/pages/Login/LoginMain.vue
+++ b/src/pages/Login/LoginMain.vue
@@ -3,7 +3,7 @@ import { ref } from 'vue';
import { Notify } from 'quasar';
import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router';
-
+import VnInputPassword from 'src/components/common/VnInputPassword.vue';
import { useSession } from 'src/composables/useSession';
import { useLogin } from 'src/composables/useLogin';
@@ -63,11 +63,10 @@ async function onSubmit() {
:rules="[(val) => (val && val.length > 0) || t('login.fieldRequired')]"
color="primary"
/>
-
diff --git a/src/pages/Login/ResetPassword.vue b/src/pages/Login/ResetPassword.vue
index 2751f1ceb..081801e0e 100644
--- a/src/pages/Login/ResetPassword.vue
+++ b/src/pages/Login/ResetPassword.vue
@@ -7,6 +7,7 @@ import axios from 'axios';
import VnInput from 'components/common/VnInput.vue';
import VnOutForm from 'components/ui/VnOutForm.vue';
+import VnInputPassword from 'src/components/common/VnInputPassword.vue';
const quasar = useQuasar();
const router = useRouter();
@@ -54,8 +55,7 @@ async function onSubmit() {
-
-
-
+
-
+
{
it('should fail to log in using wrong password', () => {
cy.get('input[aria-label="Username"]').type('employee');
cy.get('input[aria-label="Password"]').type('wrongPassword');
+ cy.get('.q-field__append > .q-icon');
cy.get('button[type="submit"]').click();
cy.get('.q-notification__message').should(
'have.text',