diff --git a/src/pages/InvoiceOut/InvoiceOutList.vue b/src/pages/InvoiceOut/InvoiceOutList.vue
index 41f247c2a..c8930b0c1 100644
--- a/src/pages/InvoiceOut/InvoiceOutList.vue
+++ b/src/pages/InvoiceOut/InvoiceOutList.vue
@@ -12,6 +12,8 @@ import InvoiceOutSummary from './Card/InvoiceOutSummary.vue';
import { toCurrency, toDate } from 'src/filters/index';
import { QBtn } from 'quasar';
import CustomerDescriptorProxy from '../Customer/Card/CustomerDescriptorProxy.vue';
+import RightMenu from 'src/components/common/RightMenu.vue';
+import InvoiceOutFilter from './InvoiceOutFilter.vue';
const { t } = useI18n();
const { viewSummary } = useSummaryDialog();
@@ -178,6 +180,11 @@ watchEffect(selectedRows);
:label="t('searchInvoice')"
data-key="invoiceOut"
/>
+
+
+
+
+
{
}
}
"
- :limit="0"
:columns="columns"
auto-load
:is-editable="false"
diff --git a/src/pages/Item/ItemTypeCreate.vue b/src/pages/Item/ItemTypeCreate.vue
index b7b06bbe6..290a40389 100644
--- a/src/pages/Item/ItemTypeCreate.vue
+++ b/src/pages/Item/ItemTypeCreate.vue
@@ -15,7 +15,6 @@ const router = useRouter();
const newItemTypeForm = reactive({});
-const workersOptions = ref([]);
const categoriesOptions = ref([]);
const temperaturesOptions = ref([]);
@@ -25,12 +24,6 @@ const redirectToItemTypeBasicData = (_, { id }) => {
- (workersOptions = data)"
- :filter="{ order: 'firstName ASC', fields: ['id', 'firstName'] }"
- auto-load
- />
(categoriesOptions = data)"
@@ -61,7 +54,9 @@ const redirectToItemTypeBasicData = (_, { id }) => {
- (workersOptions = data)"
- :filter="{ order: 'firstName ASC', fields: ['id', 'firstName'] }"
- auto-load
- />
(categoriesOptions = data)"
@@ -50,7 +43,9 @@ const temperaturesOptions = ref([]);
{
- (clientOptions = data)"
- :filter="{ fields: ['id', 'name', 'defaultAddressFk'], order: 'id' }"
- auto-load
- />
{
diff --git a/src/pages/Order/Card/OrderFilter.vue b/src/pages/Order/Card/OrderFilter.vue
index be47eed54..917369919 100644
--- a/src/pages/Order/Card/OrderFilter.vue
+++ b/src/pages/Order/Card/OrderFilter.vue
@@ -17,10 +17,6 @@ const props = defineProps({
const agencyFilter = { fields: ['id', 'name'] };
const agencyList = ref(null);
-const salesPersonFilter = {
- fields: ['id', 'nickname'],
-};
-const salesPersonList = ref(null);
const sourceList = ref([]);
@@ -32,14 +28,6 @@ const sourceList = ref([]);
auto-load
@on-fetch="(data) => (agencyList = data)"
/>
- (salesPersonList = data)"
- :params="{ departmentCodes: ['VT'] }"
- auto-load
- />
-import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
-import FetchData from 'components/FetchData.vue';
import VnFilterPanel from 'components/ui/VnFilterPanel.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
@@ -14,22 +12,9 @@ const props = defineProps({
});
const emit = defineEmits(['search']);
-
-const workers = ref();
-
-function setWorkers(data) {
- workers.value = data;
-}
-
{
:key="index"
class="row q-gutter-md q-mb-md"
>
-
+
{{ t('components.iban_tooltip') }}
@@ -113,6 +117,7 @@ const setWireTransfer = async () => {
option-label="bic"
option-value="id"
hide-selected
+ :required="true"
:roles-allowed-to-create="['financial']"
>
diff --git a/src/pages/Supplier/SupplierList.vue b/src/pages/Supplier/SupplierList.vue
index 9fdf606a2..1df40e7ea 100644
--- a/src/pages/Supplier/SupplierList.vue
+++ b/src/pages/Supplier/SupplierList.vue
@@ -3,6 +3,8 @@ import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import VnTable from 'components/VnTable/VnTable.vue';
import VnSearchbar from 'components/ui/VnSearchbar.vue';
+import RightMenu from 'src/components/common/RightMenu.vue';
+import SupplierListFilter from './SupplierListFilter.vue';
const { t } = useI18n();
const tableRef = ref();
@@ -99,6 +101,11 @@ const columns = computed(() => [
+
+
+
+
+
[
return data;
},
}"
+ :right-search="false"
order="id ASC"
:columns="columns"
/>
diff --git a/src/pages/Ticket/TicketCreateDialog.vue b/src/pages/Ticket/TicketCreateDialog.vue
index 1493adc53..4138884bf 100644
--- a/src/pages/Ticket/TicketCreateDialog.vue
+++ b/src/pages/Ticket/TicketCreateDialog.vue
@@ -27,7 +27,6 @@ const initialFormState = reactive({
warehouseId: user.value.warehouseFk,
landed: null,
});
-const clientOptions = ref([]);
const agenciesOptions = ref([]);
const addressesOptions = ref([]);
const warehousesOptions = ref([]);
@@ -111,12 +110,6 @@ const redirectToTicketList = (_, { id }) => {
- (clientOptions = data)"
- :filter="{ fields: ['id', 'name', 'defaultAddressFk'], order: 'id' }"
- auto-load
- />
(warehousesOptions = data)"
@@ -137,7 +130,9 @@ const redirectToTicketList = (_, { id }) => {
(states = data)" auto-load />
(agencies = data)" auto-load />
(warehouses = data)" auto-load />
- (workers = data)"
- auto-load
- />
@@ -66,23 +60,19 @@ const warehouses = ref([]);
-
-
-
-
-
+
diff --git a/src/pages/Travel/TravelFilter.vue b/src/pages/Travel/TravelFilter.vue
index c024ba927..8b17f861a 100644
--- a/src/pages/Travel/TravelFilter.vue
+++ b/src/pages/Travel/TravelFilter.vue
@@ -124,6 +124,12 @@ defineExpose({ states });
lazy-rules
is-outlined
/>
+
diff --git a/src/pages/Travel/TravelList.vue b/src/pages/Travel/TravelList.vue
index ccbb2a977..bad1db15d 100644
--- a/src/pages/Travel/TravelList.vue
+++ b/src/pages/Travel/TravelList.vue
@@ -158,15 +158,6 @@ const columns = computed(() => [
cardVisible: true,
create: true,
},
- {
- align: 'left',
- name: 'daysOnward',
- label: t('travel.travelList.tableVisibleColumns.daysOnward'),
- visible: false,
- columnFilter: {
- inWhere: false,
- },
- },
{
align: 'right',
label: '',
diff --git a/src/pages/Worker/Card/WorkerCalendarFilter.vue b/src/pages/Worker/Card/WorkerCalendarFilter.vue
index 2b81b6eaf..67b7df907 100644
--- a/src/pages/Worker/Card/WorkerCalendarFilter.vue
+++ b/src/pages/Worker/Card/WorkerCalendarFilter.vue
@@ -3,9 +3,11 @@ import WorkerEventLabel from 'pages/Worker/Card/WorkerEventLabel.vue';
import FetchData from 'components/FetchData.vue';
import { useI18n } from 'vue-i18n';
import VnSelect from 'components/common/VnSelect.vue';
+import useNotify from 'src/composables/useNotify';
import { useRoute } from 'vue-router';
-import { computed, ref } from 'vue';
+import { computed, ref, watch } from 'vue';
import { toDateFormat } from '../../../filters/date';
+const { notify } = useNotify();
const { t } = useI18n();
const route = useRoute();
@@ -33,6 +35,13 @@ const props = defineProps({
},
});
+watch(
+ () => props.contractHolidays,
+ (newValue) => {
+ checkHolidays(newValue);
+ },
+ { deep: true, immediate: true }
+);
const emit = defineEmits(['update:businessFk', 'update:year', 'update:absenceType']);
const selectedBusinessFk = computed({
@@ -53,12 +62,22 @@ const selectedAbsenceType = computed({
},
});
-const generateYears = () => {
+function generateYears() {
const now = Date.vnNew();
const maxYear = now.getFullYear() + 1;
return Array.from({ length: 5 }, (_, i) => String(maxYear - i)) || [];
-};
+}
+
+function checkHolidays(contractHolidays) {
+ if (!contractHolidays) return;
+ if (
+ contractHolidays.holidaysEnjoyed > contractHolidays.totalHolidays ||
+ contractHolidays.hoursEnjoyed > contractHolidays.totalHours
+ ) {
+ notify(t('Vacation days have been exceeded'), 'negative');
+ }
+}
const absenceTypeList = ref([]);
const contractList = ref([]);
diff --git a/src/pages/Worker/WorkerList.vue b/src/pages/Worker/WorkerList.vue
index 19e2ad306..98be023db 100644
--- a/src/pages/Worker/WorkerList.vue
+++ b/src/pages/Worker/WorkerList.vue
@@ -29,6 +29,7 @@ const postcodesOptions = ref([]);
const user = useState().getUser();
const defaultPayMethod = ref();
+const bankEntitiesRef = ref();
const columns = computed(() => [
{
align: 'left',
@@ -119,6 +120,12 @@ onBeforeMount(async () => {
).data?.payMethodFk;
});
+async function handleNewBankEntity(data, resp) {
+ await bankEntitiesRef.value.fetch();
+ data.bankEntityFk = resp.id;
+ bankEntitiesOptions.value.push(resp);
+}
+
function handleLocation(data, location) {
const { town, code, provinceFk, countryFk } = location ?? {};
data.postcode = code;
@@ -178,6 +185,7 @@ async function autofillBic(worker) {
auto-load
/>
(bankEntitiesOptions = data)"
auto-load
@@ -345,7 +353,9 @@ async function autofillBic(worker) {
>
bankEntitiesOptions.push(data)"
+ @on-data-saved="
+ (_, resp) => handleNewBankEntity(data, resp)
+ "
/>
diff --git a/src/pages/Zone/ZoneDeliveryPanel.vue b/src/pages/Zone/ZoneDeliveryPanel.vue
index 088811b01..423095d6e 100644
--- a/src/pages/Zone/ZoneDeliveryPanel.vue
+++ b/src/pages/Zone/ZoneDeliveryPanel.vue
@@ -94,9 +94,9 @@ watch(
url="Postcodes/location"
:fields="['geoFk', 'code', 'townFk', 'countryFk']"
sort-by="code, townFk"
- option-value="code"
+ option-value="geoFk"
option-label="code"
- option-filter="code"
+ :filter-options="['code', 'geoFk']"
hide-selected
dense
outlined
diff --git a/test/cypress/integration/claim/claimNotes.spec.js b/test/cypress/integration/claim/claimNotes.spec.js
index a4a493cda..d7a918db1 100644
--- a/test/cypress/integration/claim/claimNotes.spec.js
+++ b/test/cypress/integration/claim/claimNotes.spec.js
@@ -1,4 +1,6 @@
describe('ClaimNotes', () => {
+ const saveBtn = '.q-field__append > .q-btn > .q-btn__content > .q-icon';
+ const firstNote = '.q-infinite-scroll :nth-child(1) > .q-card__section--vert';
beforeEach(() => {
cy.login('developer');
cy.visit(`/#/claim/${2}/notes`);
@@ -7,7 +9,7 @@ describe('ClaimNotes', () => {
it('should add a new note', () => {
const message = 'This is a new message.';
cy.get('.q-textarea').type(message);
- cy.get('.q-field__append > .q-btn > .q-btn__content > .q-icon').click(); //save
- cy.get(':nth-child(1) > .q-card__section--vert').should('have.text', message);
+ cy.get(saveBtn).click();
+ cy.get(firstNote).should('have.text', message);
});
});
diff --git a/test/cypress/integration/entry/myEntry.spec.js b/test/cypress/integration/entry/myEntry.spec.js
index dca74dec2..4addec1c4 100644
--- a/test/cypress/integration/entry/myEntry.spec.js
+++ b/test/cypress/integration/entry/myEntry.spec.js
@@ -11,7 +11,7 @@ describe('EntryMy when is supplier', () => {
it('should open buyLabel when is supplier', () => {
cy.get(
- '[to="/null/2"] > .q-card > .column > .q-btn > .q-btn__content > .q-icon'
+ '[to="/null/3"] > .q-card > .column > .q-btn > .q-btn__content > .q-icon'
).click();
cy.get('.q-card__actions > .q-btn').click();
cy.window().its('open').should('be.called');
diff --git a/test/cypress/integration/ticket/ticketDescriptor.spec.js b/test/cypress/integration/ticket/ticketDescriptor.spec.js
index cc3a1d65a..0ba2723a2 100644
--- a/test/cypress/integration/ticket/ticketDescriptor.spec.js
+++ b/test/cypress/integration/ticket/ticketDescriptor.spec.js
@@ -1,7 +1,8 @@
///
describe('Ticket descriptor', () => {
- const toCloneOpt = '[role="menu"] .q-list > :nth-child(8)';
- const setWeightOpt = '[role="menu"] .q-list > :nth-child(13)';
+ const listItem = '[role="menu"] .q-list .q-item';
+ const toCloneOpt = 'To clone ticket';
+ const setWeightOpt = 'Set weight';
const warehouseValue = ':nth-child(1) > :nth-child(6) > .value > span';
const summaryHeader = '.summaryHeader > div';
const weight = 25;
@@ -14,7 +15,7 @@ describe('Ticket descriptor', () => {
it('should clone the ticket without warehouse', () => {
cy.visit('/#/ticket/1/summary');
cy.openActionsDescriptor();
- cy.get(toCloneOpt).click();
+ cy.contains(listItem, toCloneOpt).click();
cy.clickConfirm();
cy.get(warehouseValue).contains('Warehouse One');
cy.get(summaryHeader)
@@ -28,7 +29,7 @@ describe('Ticket descriptor', () => {
it('should set the weight of the ticket', () => {
cy.visit('/#/ticket/10/summary');
cy.openActionsDescriptor();
- cy.get(setWeightOpt).click();
+ cy.contains(listItem, setWeightOpt).click();
cy.intercept('POST', /\/api\/Tickets\/\d+\/setWeight/).as('weight');
cy.get('.q-dialog input').type(weight);
cy.clickConfirm();
diff --git a/test/cypress/integration/vnComponent/vnLocation.spec.js b/test/cypress/integration/vnComponent/vnLocation.spec.js
index 78dc38899..c1b0cf929 100644
--- a/test/cypress/integration/vnComponent/vnLocation.spec.js
+++ b/test/cypress/integration/vnComponent/vnLocation.spec.js
@@ -64,7 +64,7 @@ describe('VnLocation', () => {
`${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(3) > .q-icon`
).click();
cy.get(
- `#q-portal--dialog--4 > .q-dialog > ${createForm.prefix} > .vn-row > .q-select > ${createForm.sufix} > :nth-child(1) input`
+ `#q-portal--dialog--5 > .q-dialog > ${createForm.prefix} > .vn-row > .q-select > ${createForm.sufix} > :nth-child(1) input`
).should('have.value', province);
});
});
@@ -133,6 +133,8 @@ describe('VnLocation', () => {
);
cy.get('.q-mt-lg > .q-btn--standard').click();
cy.get(`${createForm.prefix}`).should('not.exist');
+ cy.waitForElement('.q-form');
+
checkVnLocation(postCode, province);
});
it('Create city', () => {
@@ -144,10 +146,12 @@ describe('VnLocation', () => {
cy.get(
`${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(2) > .q-icon`
).click();
- cy.selectOption('#q-portal--dialog--2 .q-select', 'one');
- cy.get('#q-portal--dialog--2 .q-input').type(province);
- cy.get('#q-portal--dialog--2 .q-btn--standard').click();
+ cy.selectOption('#q-portal--dialog--3 .q-select', 'one');
+ cy.get('#q-portal--dialog--3 .q-input').type(province);
+ cy.get('#q-portal--dialog--3 .q-btn--standard').click();
cy.get('#q-portal--dialog--1 .q-btn--standard').click();
+ cy.waitForElement('.q-form');
+
checkVnLocation(postCode, province);
});