diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 118761b23..e680fb290 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -22,7 +22,6 @@ import { useVnConfirm } from 'composables/useVnConfirm';
import useNotify from 'src/composables/useNotify.js';
import axios from 'axios';
import VnTable from 'src/components/VnTable/VnTable.vue';
-import VnUsesMana from 'src/components/ui/VnUsesMana.vue';
import VnConfirm from 'src/components/ui/VnConfirm.vue';
import TicketProblems from 'src/components/TicketProblems.vue';
import RightMenu from 'src/components/common/RightMenu.vue';
@@ -33,6 +32,7 @@ const { t } = useI18n();
const { notify } = useNotify();
const { openConfirmationModal } = useVnConfirm();
const editPriceProxyRef = ref(null);
+const editManaProxyRef = ref(null);
const stateBtnDropdownRef = ref(null);
const quasar = useQuasar();
const arrayData = useArrayData('Ticket');
@@ -53,7 +53,6 @@ const transfer = ref({
sales: [],
});
const tableRef = ref([]);
-const canProceed = ref();
watch(
() => route.params.id,
@@ -133,7 +132,6 @@ const columns = computed(() => [
align: 'left',
label: t('globals.amount'),
name: 'amount',
- format: (row) => toCurrency(getSaleTotal(row)),
},
{
align: 'left',
@@ -183,8 +181,6 @@ const resetChanges = async () => {
};
const rowToUpdate = ref(null);
const changeQuantity = async (sale) => {
- canProceed.value = await isSalePrepared(sale);
- if (!canProceed.value) return;
if (
!sale.itemFk ||
sale.quantity == null ||
@@ -193,11 +189,21 @@ const changeQuantity = async (sale) => {
return;
if (!sale.id) return addSale(sale);
+ if (await isSalePrepared(sale)) {
+ await confirmUpdate(() => updateQuantity(sale));
+ } else await updateQuantity(sale);
+};
+
+const updateQuantity = async (sale) => {
try {
+ let { quantity, id } = sale;
if (!rowToUpdate.value) return;
rowToUpdate.value = null;
sale.isNew = false;
- await updateQuantity(sale);
+ const params = { quantity: quantity };
+ await axios.post(`Sales/${id}/updateQuantity`, params);
+ notify('globals.dataSaved', 'positive');
+ tableRef.value.reload();
} catch (e) {
const { quantity } = tableRef.value.CrudModelRef.originalData.find(
(s) => s.id === sale.id,
@@ -207,12 +213,6 @@ const changeQuantity = async (sale) => {
}
};
-const updateQuantity = async ({ quantity, id }) => {
- const params = { quantity: quantity };
- await axios.post(`Sales/${id}/updateQuantity`, params);
- notify('globals.dataSaved', 'positive');
-};
-
const addSale = async (sale) => {
const params = {
barcode: sale.itemFk,
@@ -237,13 +237,17 @@ const addSale = async (sale) => {
sale.isNew = false;
arrayData.fetch({});
};
+const changeConcept = async (sale) => {
+ if (await isSalePrepared(sale)) {
+ await confirmUpdate(() => updateConcept(sale));
+ } else await updateConcept(sale);
+};
const updateConcept = async (sale) => {
- canProceed.value = await isSalePrepared(sale);
- if (!canProceed.value) return;
const data = { newConcept: sale.concept };
await axios.post(`Sales/${sale.id}/updateConcept`, data);
notify('globals.dataSaved', 'positive');
+ tableRef.value.reload();
};
const DEFAULT_EDIT = {
@@ -295,33 +299,43 @@ const onOpenEditDiscountPopover = async (sale) => {
};
}
};
-
-const updatePrice = async (sale) => {
- canProceed.value = await isSalePrepared(sale);
- if (!canProceed.value) return;
+const changePrice = async (sale) => {
const newPrice = edit.value.price;
if (newPrice != null && newPrice != sale.price) {
- await axios.post(`Sales/${sale.id}/updatePrice`, { newPrice });
- sale.price = newPrice;
- edit.value = { ...DEFAULT_EDIT };
- notify('globals.dataSaved', 'positive');
+ if (await isSalePrepared(sale)) {
+ await confirmUpdate(() => updatePrice(sale, newPrice));
+ } else updatePrice(sale, newPrice);
}
-
await getMana();
};
+const updatePrice = async (sale, newPrice) => {
+ await axios.post(`Sales/${sale.id}/updatePrice`, { newPrice });
+ sale.price = newPrice;
+ edit.value = { ...DEFAULT_EDIT };
+ notify('globals.dataSaved', 'positive');
+ tableRef.value.reload();
+};
const changeDiscount = async (sale) => {
- canProceed.value = await isSalePrepared(sale);
- if (!canProceed.value) return;
const newDiscount = edit.value.discount;
- if (newDiscount != null && newDiscount != sale.discount) updateDiscount([sale]);
+ if (newDiscount != null && newDiscount != sale.discount) {
+ if (await isSalePrepared(sale))
+ await confirmUpdate(() => updateDiscount([sale], newDiscount));
+ else await updateDiscount([sale], newDiscount);
+ }
+};
+
+const updateDiscounts = async (sales, newDiscount = null) => {
+ const salesTracking = await fetchSalesTracking();
+
+ const someSaleIsPrepared = salesTracking.some((sale) =>
+ matchSale(salesTracking, sale),
+ );
+ if (someSaleIsPrepared) await confirmUpdate(() => updateDiscount(sales, newDiscount));
+ else updateDiscount(sales, newDiscount);
};
const updateDiscount = async (sales, newDiscount = null) => {
- for (const sale of sales) {
- const canProceed = await isSalePrepared(sale);
- if (!canProceed) return;
- }
const saleIds = sales.map((sale) => sale.id);
const _newDiscount = newDiscount || edit.value.discount;
const params = {
@@ -424,9 +438,13 @@ onMounted(async () => {
const items = ref([]);
const newRow = ref({});
+const changeItem = async (sale) => {
+ if (await isSalePrepared(sale)) {
+ await confirmUpdate(() => updateItem(sale));
+ } else await updateItem(sale);
+};
+
const updateItem = async (row) => {
- canProceed.value = await isSalePrepared(row);
- if (!canProceed.value) return;
const selectedItem = items.value.find((item) => item.id === row.itemFk);
if (selectedItem) {
row.item = selectedItem;
@@ -470,7 +488,18 @@ const endNewRow = (row) => {
}
};
-async function isSalePrepared(item) {
+async function confirmUpdate(cb) {
+ await quasar
+ .dialog({
+ component: VnConfirm,
+ componentProps: {
+ title: t('Item prepared'),
+ message: t('This item is already prepared. Do you want to continue?'),
+ },
+ })
+ .onOk(cb);
+}
+async function fetchSalesTracking() {
const filter = {
params: {
where: { ticketFk: route.params.id },
@@ -482,48 +511,37 @@ async function isSalePrepared(item) {
filter: JSON.stringify(filter),
},
});
-
- const matchingSale = data.find((sale) => sale.itemFk === item.itemFk);
- if (!matchingSale) {
- return true;
- }
-
- if (
- matchingSale.hasSaleGroupDetail ||
- matchingSale.isControled ||
- matchingSale.isPrepared ||
- matchingSale.isPrevious ||
- matchingSale.isPreviousSelected
- ) {
- try {
- await new Promise((resolve, reject) => {
- quasar
- .dialog({
- component: VnConfirm,
- componentProps: {
- title: t('Item prepared'),
- message: t(
- 'This item is already prepared. Do you want to continue?',
- ),
- data: item,
- },
- })
- .onOk(() => resolve(true))
- .onCancel(() => reject(new Error('cancelled')));
- });
- } catch (error) {
- tableRef.value.reload();
- return false;
- }
- }
- return true;
+ return data;
}
+async function isSalePrepared(sale) {
+ const data = await fetchSalesTracking();
+ return matchSale(data, sale);
+}
+function matchSale(data, sale) {
+ const matchingSale = data.find(({ itemFk }) => itemFk === sale.itemFk);
+
+ if (!matchingSale) {
+ return false;
+ }
+
+ return isPrepared(matchingSale);
+}
+function isPrepared(sale) {
+ const flagsToCheck = [
+ 'hasSaleGroupDetail',
+ 'isControled',
+ 'isPrepared',
+ 'isPrevious',
+ 'isPreviousSelected',
+ ];
+ return flagsToCheck.some((flag) => sale[flag] === 1);
+}
watch(
() => newRow.value.itemFk,
(newItemFk) => {
if (newItemFk) {
- updateItem(newRow.value);
+ changeItem(newRow.value);
}
},
);
@@ -584,7 +602,7 @@ watch(
:mana="mana"
:ticket-config="ticketConfig"
@get-mana="getMana()"
- @update-discounts="updateDiscount"
+ @update-discounts="updateDiscounts"
@refresh-table="resetChanges"
/>
@@ -741,16 +759,21 @@ watch(
-
+
(rowToUpdate = row)"
@focus="edit.oldQuantity = row.quantity"
/>
@@ -764,10 +787,12 @@ watch(
editManaProxyRef.save(row)"
v-model.number="edit.price"
:label="t('basicData.price')"
type="number"
@@ -781,31 +806,30 @@ watch(
{{ toPercentage(row.discount / 100) }}
+
-
- {
- changeDiscount(row);
- popup.hide();
- }
- "
- v-model.number="edit.discount"
- :label="t('ticketSale.discount')"
- type="number"
- />
-
+ editManaProxyRef.save(row)"
+ v-model.number="edit.discount"
+ :label="t('ticketSale.discount')"
+ type="number"
+ />
{{ toPercentage(row.discount / 100) }}
+
+ {{ toCurrency(getSaleTotal(row)) }}
+
diff --git a/src/pages/Travel/Card/TravelThermographsForm.vue b/src/pages/Travel/Card/TravelThermographsForm.vue
index 7aec32972..446e5d506 100644
--- a/src/pages/Travel/Card/TravelThermographsForm.vue
+++ b/src/pages/Travel/Card/TravelThermographsForm.vue
@@ -209,7 +209,7 @@ const onThermographCreated = async (data) => {
}"
sort-by="thermographFk ASC"
option-label="thermographFk"
- option-filter-value="id"
+ option-filter-value="thermographFk"
:disable="viewAction === 'edit'"
:tooltip="t('New thermograph')"
:roles-allowed-to-create="['logistic']"
diff --git a/src/pages/Worker/Card/WorkerFormation.vue b/src/pages/Worker/Card/WorkerFormation.vue
index e05eca7f8..e8680f7dd 100644
--- a/src/pages/Worker/Card/WorkerFormation.vue
+++ b/src/pages/Worker/Card/WorkerFormation.vue
@@ -119,7 +119,7 @@ const columns = computed(() => [
:url="`Workers/${entityId}/trainingCourse`"
:url-create="`Workers/${entityId}/trainingCourse`"
save-url="TrainingCourses/crud"
- :filter="courseFilter"
+ :user-filter="courseFilter"
:create="{
urlCreate: 'trainingCourses',
title: t('Create training course'),
diff --git a/src/pages/Worker/Card/WorkerMedical.vue b/src/pages/Worker/Card/WorkerMedical.vue
index c220df76a..b3a599af7 100644
--- a/src/pages/Worker/Card/WorkerMedical.vue
+++ b/src/pages/Worker/Card/WorkerMedical.vue
@@ -8,6 +8,17 @@ const { t } = useI18n();
const route = useRoute();
const entityId = computed(() => route.params.id);
+const centerFilter = {
+ include: [
+ {
+ relation: 'center',
+ scope: {
+ fields: ['id', 'name'],
+ },
+ },
+ ],
+};
+
const columns = [
{
align: 'left',
@@ -33,7 +44,7 @@ const columns = [
create: true,
component: 'select',
attrs: {
- url: 'medicalCenters',
+ url: 'centers',
fields: ['id', 'name'],
},
},
@@ -84,6 +95,7 @@ const columns = [
ref="tableRef"
data-key="WorkerMedical"
:url="`Workers/${entityId}/medicalReview`"
+ :user-filter="centerFilter"
save-url="MedicalReviews/crud"
:create="{
urlCreate: 'medicalReviews',
diff --git a/test/cypress/integration/ticket/ticketSale.spec.js b/test/cypress/integration/ticket/ticketSale.spec.js
index aed8dc85a..63562bd26 100644
--- a/test/cypress/integration/ticket/ticketSale.spec.js
+++ b/test/cypress/integration/ticket/ticketSale.spec.js
@@ -1,122 +1,208 @@
///
describe('TicketSale', () => {
- beforeEach(() => {
- cy.login('developer');
- cy.viewport(1920, 1080);
- cy.visit('/#/ticket/31/sale');
- });
-
- const firstRow = 'tbody > :nth-child(1)';
-
- const selectFirstRow = () => {
- cy.waitForElement(firstRow);
- cy.get(firstRow).find('.q-checkbox__inner').click();
- };
-
- it('it should add item to basket', () => {
- cy.window().then((win) => {
- cy.stub(win, 'open').as('windowOpen');
+ describe('Free ticket #31', () => {
+ beforeEach(() => {
+ cy.login('developer');
+ cy.viewport(1920, 1080);
+ cy.visit('/#/ticket/31/sale');
});
- cy.dataCy('ticketSaleAddToBasketBtn').should('exist');
- cy.dataCy('ticketSaleAddToBasketBtn').click();
- cy.get('@windowOpen').should('be.calledWithMatch', /\/order\/\d+\/catalog/);
- });
- it('should send SMS', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.waitForElement('[data-cy="sendShortageSMSItem"]');
- cy.dataCy('sendShortageSMSItem').should('exist');
- cy.dataCy('sendShortageSMSItem').click();
- cy.dataCy('vnSmsDialog').should('exist');
- cy.dataCy('sendSmsBtn').click();
- cy.checkNotification('SMS sent');
- });
+ const firstRow = 'tbody > :nth-child(1)';
- it('should recalculate price when "Recalculate price" is clicked', () => {
- cy.intercept('POST', '**/recalculatePrice').as('recalculatePrice');
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.waitForElement('[data-cy="recalculatePriceItem"]');
- cy.dataCy('recalculatePriceItem').should('exist');
- cy.dataCy('recalculatePriceItem').click();
- cy.wait('@recalculatePrice').its('response.statusCode').should('eq', 200);
- cy.checkNotification('Data saved');
- });
+ const selectFirstRow = () => {
+ cy.waitForElement(firstRow);
+ cy.get(firstRow).find('.q-checkbox__inner').click();
+ };
- it('should update discount when "Update discount" is clicked', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.waitForElement('[data-cy="updateDiscountItem"]');
- cy.dataCy('updateDiscountItem').should('exist');
- cy.dataCy('updateDiscountItem').click();
- cy.waitForElement('[data-cy="ticketSaleDiscountInput"]');
- cy.dataCy('ticketSaleDiscountInput').find('input').focus();
- cy.dataCy('ticketSaleDiscountInput').find('input').type('10');
- cy.dataCy('saveManaBtn').click();
- cy.waitForElement('.q-notification__message');
- cy.checkNotification('Data saved');
- });
+ it('it should add item to basket', () => {
+ cy.window().then((win) => {
+ cy.stub(win, 'open').as('windowOpen');
+ });
+ cy.dataCy('ticketSaleAddToBasketBtn').should('exist');
+ cy.dataCy('ticketSaleAddToBasketBtn').click();
+ cy.get('@windowOpen').should('be.calledWithMatch', /\/order\/\d+\/catalog/);
+ });
- it('adds claim', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.dataCy('createClaimItem').click();
- cy.dataCy('VnConfirm_confirm').click();
- cy.url().should('contain', 'claim/');
- // Delete created claim to avoid cluttering the database
- cy.dataCy('descriptor-more-opts').click();
- cy.dataCy('deleteClaim').click();
- cy.dataCy('VnConfirm_confirm').click();
- cy.checkNotification('Data deleted');
- });
+ it('should send SMS', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.waitForElement('[data-cy="sendShortageSMSItem"]');
+ cy.dataCy('sendShortageSMSItem').should('exist');
+ cy.dataCy('sendShortageSMSItem').click();
+ cy.dataCy('vnSmsDialog').should('exist');
+ cy.dataCy('sendSmsBtn').click();
+ cy.checkNotification('SMS sent');
+ });
- it('marks row as reserved', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.waitForElement('[data-cy="markAsReservedItem"]');
- cy.dataCy('markAsReservedItem').click();
- cy.dataCy('ticketSaleReservedIcon').should('exist');
- });
+ it('should recalculate price when "Recalculate price" is clicked', () => {
+ cy.intercept('POST', '**/recalculatePrice').as('recalculatePrice');
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.waitForElement('[data-cy="recalculatePriceItem"]');
+ cy.dataCy('recalculatePriceItem').should('exist');
+ cy.dataCy('recalculatePriceItem').click();
+ cy.wait('@recalculatePrice').its('response.statusCode').should('eq', 200);
+ cy.checkNotification('Data saved');
+ });
- it('unmarks row as reserved', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.waitForElement('[data-cy="unmarkAsReservedItem"]');
- cy.dataCy('unmarkAsReservedItem').click();
- cy.dataCy('ticketSaleReservedIcon').should('not.exist');
- });
+ it('should update discount when "Update discount" is clicked', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.waitForElement('[data-cy="updateDiscountItem"]');
+ cy.dataCy('updateDiscountItem').should('exist');
+ cy.dataCy('updateDiscountItem').click();
+ cy.waitForElement('[data-cy="ticketSaleDiscountInput"]');
+ cy.dataCy('ticketSaleDiscountInput').find('input').focus();
+ cy.dataCy('ticketSaleDiscountInput').find('input').type('10');
+ cy.dataCy('saveManaBtn').click();
+ cy.waitForElement('.q-notification__message');
+ cy.checkNotification('Data saved');
+ });
- it('refunds row with warehouse', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.dataCy('ticketSaleRefundItem').click();
- cy.dataCy('ticketSaleRefundWithWarehouse').click();
- cy.checkNotification('The following refund ticket have been created');
- });
+ it('adds claim', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.dataCy('createClaimItem').click();
+ cy.dataCy('VnConfirm_confirm').click();
+ cy.url().should('contain', 'claim/');
+ // Delete created claim to avoid cluttering the database
+ cy.dataCy('descriptor-more-opts').click();
+ cy.dataCy('deleteClaim').click();
+ cy.dataCy('VnConfirm_confirm').click();
+ cy.checkNotification('Data deleted');
+ });
- it('refunds row without warehouse', () => {
- selectFirstRow();
- cy.dataCy('ticketSaleMoreActionsDropdown').click();
- cy.dataCy('ticketSaleRefundItem').click();
- cy.dataCy('ticketSaleRefundWithoutWarehouse').click();
- cy.checkNotification('The following refund ticket have been created');
- });
+ it('marks row as reserved', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.waitForElement('[data-cy="markAsReservedItem"]');
+ cy.dataCy('markAsReservedItem').click();
+ cy.dataCy('ticketSaleReservedIcon').should('exist');
+ });
- it('transfer sale to a new ticket', () => {
- cy.visit('/#/ticket/32/sale');
- cy.get('.q-item > .q-item__label').should('have.text', ' #32');
- selectFirstRow();
- cy.dataCy('ticketSaleTransferBtn').click();
- cy.dataCy('ticketTransferPopup').should('exist');
- cy.dataCy('ticketTransferNewTicketBtn').click();
- //check the new ticket has been created succesfully
- cy.get('.q-item > .q-item__label').should('not.have.text', ' #32');
- });
+ it('unmarks row as reserved', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.waitForElement('[data-cy="unmarkAsReservedItem"]');
+ cy.dataCy('unmarkAsReservedItem').click();
+ cy.dataCy('ticketSaleReservedIcon').should('not.exist');
+ });
- it('should redirect to ticket logs', () => {
- cy.get(firstRow).find('.q-btn:last').click();
- cy.url().should('match', /\/ticket\/31\/log/);
+ it('refunds row with warehouse', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.dataCy('ticketSaleRefundItem').click();
+ cy.dataCy('ticketSaleRefundWithWarehouse').click();
+ cy.checkNotification('The following refund ticket have been created');
+ });
+
+ it('refunds row without warehouse', () => {
+ selectFirstRow();
+ cy.dataCy('ticketSaleMoreActionsDropdown').click();
+ cy.dataCy('ticketSaleRefundItem').click();
+ cy.dataCy('ticketSaleRefundWithoutWarehouse').click();
+ cy.checkNotification('The following refund ticket have been created');
+ });
+
+ it('transfer sale to a new ticket', () => {
+ cy.visit('/#/ticket/32/sale');
+ cy.get('.q-item > .q-item__label').should('have.text', ' #32');
+ selectFirstRow();
+ cy.dataCy('ticketSaleTransferBtn').click();
+ cy.dataCy('ticketTransferPopup').should('exist');
+ cy.dataCy('ticketTransferNewTicketBtn').click();
+ //check the new ticket has been created succesfully
+ cy.get('.q-item > .q-item__label').should('not.have.text', ' #32');
+ });
+
+ it('should redirect to ticket logs', () => {
+ cy.get(firstRow).find('.q-btn:last').click();
+ cy.url().should('match', /\/ticket\/31\/log/);
+ });
+ });
+ describe('Ticket prepared #23', () => {
+ beforeEach(() => {
+ cy.login('developer');
+ cy.viewport(1920, 1080);
+ cy.visit('/#/ticket/23/sale');
+ });
+
+ const firstRow = 'tbody > :nth-child(1)';
+
+ const selectFirstRow = () => {
+ cy.waitForElement(firstRow);
+ cy.get(firstRow).find('.q-checkbox__inner').click();
+ };
+
+ it('update price', () => {
+ const price = Number((Math.random() * 99 + 1).toFixed(2));
+ cy.waitForElement(firstRow);
+ cy.get(':nth-child(10) > .q-btn').click();
+ cy.waitForElement('[data-cy="ticketEditManaProxy"]');
+ cy.dataCy('ticketEditManaProxy').should('exist');
+ cy.waitForElement('[data-cy="Price_input"]');
+ cy.dataCy('Price_input').clear();
+ cy.dataCy('Price_input').type(price);
+ cy.dataCy('saveManaBtn').click();
+ handleVnConfirm();
+
+ cy.get(':nth-child(10) > .q-btn > .q-btn__content').should(
+ 'have.text',
+ `€${price}`,
+ );
+ });
+ it('update dicount', () => {
+ const discount = Math.floor(Math.random() * 100) + 1;
+ selectFirstRow();
+ cy.get(':nth-child(11) > .q-btn').click();
+ cy.waitForElement('[data-cy="ticketEditManaProxy"]');
+ cy.dataCy('ticketEditManaProxy').should('exist');
+ cy.waitForElement('[data-cy="Disc_input"]');
+ cy.dataCy('Disc_input').clear();
+ cy.dataCy('Disc_input').type(discount);
+ cy.dataCy('saveManaBtn').click();
+ handleVnConfirm();
+
+ cy.get(':nth-child(11) > .q-btn > .q-btn__content').should(
+ 'have.text',
+ `${discount}.00%`,
+ );
+ });
+
+ it('change concept', () => {
+ const quantity = Math.floor(Math.random() * 100) + 1;
+ cy.waitForElement(firstRow);
+ cy.get(':nth-child(8) > .row').click();
+ cy.get(
+ '.q-menu > [data-v-ca3f07a4=""] > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > [data-cy="undefined_input"]',
+ )
+ .type(quantity)
+ .type('{enter}');
+ handleVnConfirm();
+
+ cy.get(':nth-child(8) >.row').should('contain.text', `${quantity}`);
+ });
+ it('changequantity ', () => {
+ const quantity = Math.floor(Math.random() * 100) + 1;
+ cy.waitForElement(firstRow);
+ cy.dataCy('ticketSaleQuantityInput').clear();
+ cy.dataCy('ticketSaleQuantityInput').type(quantity).trigger('tab');
+ cy.get('.q-page > :nth-child(6)').click();
+
+ handleVnConfirm();
+
+ cy.get('[data-cy="ticketSaleQuantityInput"]')
+ .find('[data-cy="undefined_input"]')
+ .should('have.value', `${quantity}`);
+ });
});
});
+
+function handleVnConfirm() {
+ cy.get('[data-cy="VnConfirm_confirm"] > .q-btn__content > .block').click();
+ cy.waitForElement('.q-notification__message');
+
+ cy.get('.q-notification__message').should('be.visible');
+ cy.checkNotification('Data saved');
+}