diff --git a/Jenkinsfile b/Jenkinsfile
index be20b1021..11f25b2dd 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -75,16 +75,12 @@ pipeline {
steps {
sh 'npm run test:unit:ci'
}
- post {
+ post {
always {
- script {
- try {
- junit 'junitresults.xml'
- junit 'junit.xml'
- } catch (e) {
- echo e.toString()
- }
- }
+ junit(
+ testResults: 'junitresults.xml',
+ allowEmptyResults: true
+ )
}
}
}
diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue
index 9bb05d439..c8fa5809c 100644
--- a/src/components/CrudModel.vue
+++ b/src/components/CrudModel.vue
@@ -176,8 +176,8 @@ async function remove(data) {
.dialog({
component: VnConfirm,
componentProps: {
- title: t('confirmDeletion'),
- message: t('confirmDeletionMessage'),
+ title: t('globals.confirmDeletion'),
+ message: t('globals.confirmDeletionMessage'),
newData,
ids,
},
@@ -317,16 +317,3 @@ watch(formUrl, async () => {
color="primary"
/>
-
-
- {
- "en": {
- "confirmDeletion": "Confirm deletion",
- "confirmDeletionMessage": "Are you sure you want to delete this?"
- },
- "es": {
- "confirmDeletion": "Confirmar eliminación",
- "confirmDeletionMessage": "Seguro que quieres eliminar?"
- }
- }
-
diff --git a/src/components/EditPictureForm.vue b/src/components/EditPictureForm.vue
index 9f69896b5..3d7f3615b 100644
--- a/src/components/EditPictureForm.vue
+++ b/src/components/EditPictureForm.vue
@@ -272,7 +272,7 @@ const makeRequest = async () => {
class="cursor-pointer q-mr-sm"
@click="openInputFile()"
>
-
+
{{
diff --git a/src/components/FetchData.vue b/src/components/FetchData.vue
index 4f5d7a57d..5b3dcbea7 100644
--- a/src/components/FetchData.vue
+++ b/src/components/FetchData.vue
@@ -59,11 +59,4 @@ async function fetch(fetchFilter = {}) {
//
}
}
-
-const render = () => {
- return h('div', []);
-};
-
-
-
diff --git a/src/components/FormModel.vue b/src/components/FormModel.vue
index 9fd16088c..c8d83b6c4 100644
--- a/src/components/FormModel.vue
+++ b/src/components/FormModel.vue
@@ -1,6 +1,7 @@
+
+ (warehouses = data)" auto-load />
+ (companies = data)" auto-load />
+
+ (allowedContentTypes = data.join(','))"
+ auto-load
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('globals.selectFile') }}
+
+
+ {{
+ t('contentTypesInfo', { allowedContentTypes })
+ }}
+
+
+
+
+
+
+
+
+
+
+en:
+ contentTypesInfo: Allowed file types {allowedContentTypes}
+ EntryDmsDescription: Reference {reference}
+es:
+ Generate identifier for original file: Generar identificador para archivo original
+ contentTypesInfo: Tipos de archivo permitidos {allowedContentTypes}
+ EntryDmsDescription: Referencia {reference}
+
+
diff --git a/src/components/common/VnDmsList.vue b/src/components/common/VnDmsList.vue
new file mode 100644
index 000000000..5057c0790
--- /dev/null
+++ b/src/components/common/VnDmsList.vue
@@ -0,0 +1,316 @@
+
+
+
+
+
+
+
+
+ {{ props.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}:
+ {{ col.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+en:
+ contentTypesInfo: Allowed file types {allowedContentTypes}
+es:
+ contentTypesInfo: Tipos de archivo permitidos {allowedContentTypes}
+ Generate identifier for original file: Generar identificador para archivo original
+
diff --git a/src/components/common/VnSmsDialog.vue b/src/components/common/VnSmsDialog.vue
index 8bb8c3858..59021cef4 100644
--- a/src/components/common/VnSmsDialog.vue
+++ b/src/components/common/VnSmsDialog.vue
@@ -94,16 +94,6 @@ async function send() {
-
-
-
-
-
-
-
-
en:
- CustomerDefaultLanguage: This customer uses {locale} as their default language
templates:
pendingPayment: 'Your order is pending of payment.
Please, enter the website and make the payment with a credit card. Thank you.'
- minAmount: 'A minimum amount of 50€ (VAT excluded) is required for your order
+ minAmount: 'A minimum amount of 50€ (VAT excluded) is required for your order
{ orderId } of { shipped } to receive it without additional shipping costs.'
orderChanges: 'Order {orderId} of { shipped }: { changes }'
en: English
@@ -197,7 +186,6 @@ en:
pt: Portuguese
es:
Send SMS: Enviar SMS
- CustomerDefaultLanguage: Este cliente utiliza {locale} como idioma por defecto
Language: Idioma
Phone: Móvil
Subject: Asunto
@@ -205,7 +193,7 @@ es:
templates:
pendingPayment: 'Su pedido está pendiente de pago.
Por favor, entre en la página web y efectue el pago con tarjeta. Muchas gracias.'
- minAmount: 'Es necesario un importe mínimo de 50€ (Sin IVA) en su pedido
+ minAmount: 'Es necesario un importe mínimo de 50€ (Sin IVA) en su pedido
{ orderId } del día { shipped } para recibirlo sin portes adicionales.'
orderChanges: 'Pedido {orderId} día { shipped }: { changes }'
en: Inglés
@@ -222,7 +210,7 @@ fr:
templates:
pendingPayment: 'Votre commande est en attente de paiement.
Veuillez vous connecter sur le site web et effectuer le paiement par carte. Merci beaucoup.'
- minAmount: 'Un montant minimum de 50€ (TVA non incluse) est requis pour votre commande
+ minAmount: 'Un montant minimum de 50€ (TVA non incluse) est requis pour votre commande
{ orderId } du { shipped } afin de la recevoir sans frais de port supplémentaires.'
orderChanges: 'Commande { orderId } du { shipped }: { changes }'
en: Anglais
@@ -239,7 +227,7 @@ pt:
templates:
pendingPayment: 'Seu pedido está pendente de pagamento.
Por favor, acesse o site e faça o pagamento com cartão. Muito obrigado.'
- minAmount: 'É necessário um valor mínimo de 50€ (sem IVA) em seu pedido
+ minAmount: 'É necessário um valor mínimo de 50€ (sem IVA) em seu pedido
{ orderId } do dia { shipped } para recebê-lo sem custos de envio adicionais.'
orderChanges: 'Pedido { orderId } dia { shipped }: { changes }'
en: Inglês
diff --git a/src/components/ui/CardDescriptor.vue b/src/components/ui/CardDescriptor.vue
index 241937a4e..345c8d088 100644
--- a/src/components/ui/CardDescriptor.vue
+++ b/src/components/ui/CardDescriptor.vue
@@ -188,16 +188,18 @@ const emit = defineEmits(['onFetch']);
.label {
color: var(--vn-label);
font-size: 12px;
- width: 47%;
+ ::after {
+ content: ':';
+ }
}
.value {
color: var(--vn-text);
font-size: 14px;
margin-left: 12px;
- width: 47%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
+ text-align: left;
}
.info {
margin-left: 5px;
diff --git a/src/components/ui/VnLv.vue b/src/components/ui/VnLv.vue
index 0e4a055eb..72c05ae6a 100644
--- a/src/components/ui/VnLv.vue
+++ b/src/components/ui/VnLv.vue
@@ -1,8 +1,9 @@
@@ -521,37 +515,50 @@ const selectSalesPersonId = (id) => {
class="full-width q-mt-md"
row-key="id"
:visible-columns="visibleColumns"
+ @row-click="(evt, row, id) => navigateToTravelId(row.id)"
>
-
-
-
+
+ {{ value }}
+
+
+
+
+
-
- {{ dashIfEmpty(col.value) }}
-
-
-
-
-
+
+ {{ props.row.id }}
+
+
+
+
+
+
+
+ {{ props.row.salesPerson }}
+
+ -
+
+
+
+
+
+
diff --git a/src/pages/Entry/Card/EntryBuysImport.vue b/src/pages/Entry/Card/EntryBuysImport.vue
index 21f0beada..3e0ac1410 100644
--- a/src/pages/Entry/Card/EntryBuysImport.vue
+++ b/src/pages/Entry/Card/EntryBuysImport.vue
@@ -44,7 +44,7 @@ const columns = computed(() => [
align: 'left',
},
{
- label: t('entry.buys.description'),
+ label: t('globals.description'),
name: 'description',
field: 'description',
align: 'left',
@@ -214,7 +214,7 @@ const redirectToBuysView = () => {
class="cursor-pointer"
@click="inputFileRef.pickFiles()"
>
- {{ t('Select a file') }}
+ {{ t('globals.selectFile') }}
@@ -292,6 +292,6 @@ const redirectToBuysView = () => {
es:
- Select a file: Selecciona un fichero
+ globals.selectFile: Selecciona un fichero
Some of the imported buys does not have an item: Algunas de las compras importadas no tienen un artículo
diff --git a/src/pages/Entry/Card/EntryDms.vue b/src/pages/Entry/Card/EntryDms.vue
new file mode 100644
index 000000000..bab1ea6c2
--- /dev/null
+++ b/src/pages/Entry/Card/EntryDms.vue
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/src/pages/Entry/Card/EntryNotes.vue b/src/pages/Entry/Card/EntryNotes.vue
index f56e59253..0d2e5e51a 100644
--- a/src/pages/Entry/Card/EntryNotes.vue
+++ b/src/pages/Entry/Card/EntryNotes.vue
@@ -63,7 +63,7 @@ onMounted(() => {
diff --git a/src/pages/Entry/EntryLatestBuys.vue b/src/pages/Entry/EntryLatestBuys.vue
index f4a423f3b..09a6a2f27 100644
--- a/src/pages/Entry/EntryLatestBuys.vue
+++ b/src/pages/Entry/EntryLatestBuys.vue
@@ -59,7 +59,7 @@ const columns = computed(() => [
align: 'left',
},
{
- label: t('entry.latestBuys.description'),
+ label: t('globals.description'),
field: 'description',
name: 'description',
align: 'left',
@@ -214,7 +214,7 @@ const editTableCellFormFieldsOptions = [
{ field: 'grouping', label: t('entry.latestBuys.grouping') },
{ field: 'packageValue', label: t('entry.latestBuys.packageValue') },
{ field: 'weight', label: t('entry.latestBuys.weight') },
- { field: 'description', label: t('entry.latestBuys.description') },
+ { field: 'description', label: t('globals.description') },
{ field: 'size', label: t('entry.latestBuys.size') },
{ field: 'weightByPiece', label: t('entry.latestBuys.weightByPiece') },
{ field: 'packingOut', label: t('entry.latestBuys.packingOut') },
diff --git a/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
index 2a29a3d0e..f557c8ef4 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
@@ -174,7 +174,12 @@ async function upsert() {
@on-fetch="(data) => (userConfig = data)"
auto-load
/>
-
+
@@ -509,7 +514,7 @@ async function upsert() {
@click="inputFileRef.pickFiles()"
>
- {{ t('Select a file') }}
+ {{ t('globals.selectFile') }}
@@ -618,7 +623,7 @@ async function upsert() {
@click="inputFileRef.pickFiles()"
>
- {{ t('Select a file') }}
+ {{ t('globals.selectFile') }}
@@ -687,7 +692,6 @@ async function upsert() {
Generate identifier for original file: Generar identificador para archivo original
File: Fichero
Create document: Crear documento
- Select a file: Seleccione un fichero
Allowed content types: Tipos de archivo permitidos
The company can't be empty: La empresa no puede estar vacía
The warehouse can't be empty: El almacén no puede estar vacío
diff --git a/src/pages/Item/Card/ItemDescriptor.vue b/src/pages/Item/Card/ItemDescriptor.vue
index 362fcfc67..8c986e627 100644
--- a/src/pages/Item/Card/ItemDescriptor.vue
+++ b/src/pages/Item/Card/ItemDescriptor.vue
@@ -1,5 +1,5 @@
@@ -21,6 +25,7 @@ const $props = defineProps({
:id="$props.id"
:summary="ItemSummary"
:dated="dated"
+ :sale-fk="saleFk"
/>
diff --git a/src/pages/Route/Card/RouteSummary.vue b/src/pages/Route/Card/RouteSummary.vue
index a10ca088e..df4495d3a 100644
--- a/src/pages/Route/Card/RouteSummary.vue
+++ b/src/pages/Route/Card/RouteSummary.vue
@@ -199,7 +199,7 @@ const openBuscaman = async (route, ticket) => {
{{ dashIfEmpty(entity?.route?.description) }}
diff --git a/src/pages/Ticket/Card/TicketSummary.vue b/src/pages/Ticket/Card/TicketSummary.vue
index fe7dcee9a..f3e01d06b 100644
--- a/src/pages/Ticket/Card/TicketSummary.vue
+++ b/src/pages/Ticket/Card/TicketSummary.vue
@@ -270,7 +270,7 @@ async function changeState(value) {
{{ t('ticket.summary.visible') }}
{{ t('ticket.summary.available') }}
{{ t('ticket.summary.quantity') }}
- {{ t('ticket.summary.description') }}
+ {{ t('globals.description') }}
{{ t('ticket.summary.price') }}
{{ t('ticket.summary.discount') }}
{{ t('globals.amount') }}
@@ -425,7 +425,7 @@ async function changeState(value) {
{{ t('ticket.summary.quantity') }}
- {{ t('ticket.summary.description') }}
+ {{ t('globals.description') }}
{{ t('ticket.summary.price') }}
{{ t('ticket.summary.taxClass') }}
{{ t('globals.amount') }}
diff --git a/src/pages/Travel/Card/TravelThermographsForm.vue b/src/pages/Travel/Card/TravelThermographsForm.vue
index 6758cb6ff..4462846cb 100644
--- a/src/pages/Travel/Card/TravelThermographsForm.vue
+++ b/src/pages/Travel/Card/TravelThermographsForm.vue
@@ -300,7 +300,7 @@ const onThermographCreated = async (data) => {
import('src/pages/Entry/Card/EntryNotes.vue'),
},
+ {
+ path: 'dms',
+ name: 'EntryDms',
+ meta: {
+ title: 'dms',
+ icon: 'smb_share',
+ },
+ component: () => import('src/pages/Entry/Card/EntryDms.vue'),
+ },
{
path: 'log',
name: 'EntryLog',
diff --git a/test/cypress/integration/claim/claimDevelopment.spec.js b/test/cypress/integration/claim/claimDevelopment.spec.js
index 88ccbfab8..26c7ee196 100755
--- a/test/cypress/integration/claim/claimDevelopment.spec.js
+++ b/test/cypress/integration/claim/claimDevelopment.spec.js
@@ -13,7 +13,7 @@ describe('ClaimDevelopment', () => {
it('should reset line', () => {
cy.selectOption(firstLineReason, 'Novato');
cy.resetCard();
- cy.getValue(firstLineReason).should('have.value', 'Prisas');
+ cy.getValue(firstLineReason).should('equal', 'Prisas');
});
it('should edit line', () => {
@@ -23,7 +23,7 @@ describe('ClaimDevelopment', () => {
cy.login('developer');
cy.visit(`/#/claim/${claimId}/development`);
- cy.getValue(firstLineReason).should('have.value', 'Novato');
+ cy.getValue(firstLineReason).should('equal', 'Novato');
//Restart data
cy.selectOption(firstLineReason, 'Prisas');
diff --git a/test/cypress/integration/entry/entryDms.spec.js b/test/cypress/integration/entry/entryDms.spec.js
new file mode 100644
index 000000000..79a9c5162
--- /dev/null
+++ b/test/cypress/integration/entry/entryDms.spec.js
@@ -0,0 +1,41 @@
+describe('WagonTypeCreate', () => {
+ const entryId = 1;
+
+ beforeEach(() => {
+ 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('.q-file').selectFile('test/cypress/fixtures/image.jpg', {
+ force: true,
+ });
+
+ cy.get("tbody > tr").then((value) => {
+ //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})`
+ cy.waitForElement(newRowSelector);
+
+ //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)
+
+ // //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(`tbody :nth-child(${newFileTd}) > :nth-child(5) > .q-tr > :nth-child(1) > span`).then((value) => {
+ // cy.log(value)
+ // });
+ });
+});
diff --git a/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js b/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
index 5024b2f1c..306c0b8c0 100644
--- a/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
@@ -18,7 +18,7 @@ describe('InvoiceInIntrastat', () => {
cy.visit(`/#/invoice-in/1/intrastat`);
cy.getValue(firstLineCode).should(
- 'have.value',
+ 'equal',
'Plantas vivas: Esqueje/injerto, Vid'
);
});
diff --git a/test/cypress/integration/invoiceIn/invoiceInVat.spec.js b/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
index 26c7750ad..811374b98 100644
--- a/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInVat.spec.js
@@ -21,7 +21,7 @@ describe('InvoiceInVat', () => {
cy.saveCard();
cy.visit(`/#/invoice-in/1/vat`);
- cy.getValue(firstLineVat).should('have.value', 'H.P. IVA 21% CEE');
+ cy.getValue(firstLineVat).should('equal', 'H.P. IVA 21% CEE');
});
it('should add a new row', () => {
diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js
index 6d627e631..f075d500f 100755
--- a/test/cypress/support/commands.js
+++ b/test/cypress/support/commands.js
@@ -42,7 +42,7 @@ Cypress.Commands.add('login', (user) => {
});
Cypress.Commands.add('waitForElement', (element) => {
- cy.get(element, { timeout: 2000 }).should('be.visible');
+ cy.get(element, { timeout: 5000 }).should('be.visible');
});
Cypress.Commands.add('getValue', (selector) => {
@@ -55,7 +55,13 @@ Cypress.Commands.add('getValue', (selector) => {
return cy.get(
selector +
'> .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > input'
- );
+ ).invoke('val')
+ }
+ // Si es un QSelect
+ if ($el.find('span').length) {
+ return cy.get(
+ selector + ' span'
+ ).then(($span) => { return $span[0].innerText })
}
// Puedes añadir un log o lanzar un error si el elemento no es reconocido
cy.log('Elemento no soportado');
@@ -126,12 +132,13 @@ Cypress.Commands.add('validateRow', (rowSelector, expectedValues) => {
cy.get(rowSelector).within(() => {
for (const [index, value] of expectedValues.entries()) {
cy.log('CHECKING ', index, value);
+ if(value === undefined) continue
if (typeof value == 'boolean') {
const prefix = value ? '' : 'not.';
cy.getValue(`:nth-child(${index + 1})`).should(`${prefix}be.checked`);
continue;
}
- cy.getValue(`:nth-child(${index + 1})`).should('have.value', value);
+ cy.getValue(`:nth-child(${index + 1})`).should('equal', value)
}
});
});