diff --git a/src/components/common/VnModule.vue b/src/components/common/VnModule.vue
index 038ee1d60..747a7c951 100644
--- a/src/components/common/VnModule.vue
+++ b/src/components/common/VnModule.vue
@@ -12,7 +12,7 @@ const $props = defineProps({
},
});
onMounted(
- () => (stateStore.leftDrawer = useQuasar().screen.gt.xs ? $props.leftDrawer : false)
+ () => (stateStore.leftDrawer = useQuasar().screen.gt.xs ? $props.leftDrawer : false),
);
const teleportRef = ref({});
@@ -35,8 +35,14 @@ onMounted(() => {
-
-
+
+
+
+
+
+
+
+
diff --git a/src/pages/Customer/Card/CustomerSummary.vue b/src/pages/Customer/Card/CustomerSummary.vue
index 324da0771..c98bf1ffb 100644
--- a/src/pages/Customer/Card/CustomerSummary.vue
+++ b/src/pages/Customer/Card/CustomerSummary.vue
@@ -325,7 +325,7 @@ const sumRisk = ({ clientRisks }) => {
-
+
diff --git a/src/pages/Customer/components/CustomerSummaryTable.vue b/src/pages/Customer/components/CustomerSummaryTable.vue
index bb6f4442b..09c7e714c 100644
--- a/src/pages/Customer/components/CustomerSummaryTable.vue
+++ b/src/pages/Customer/components/CustomerSummaryTable.vue
@@ -20,7 +20,12 @@ const { t } = useI18n();
const route = useRoute();
const router = useRouter();
const { viewSummary } = useSummaryDialog();
-
+const $props = defineProps({
+ id: {
+ type: Number,
+ default: null,
+ },
+});
const filter = {
include: [
{
@@ -43,7 +48,7 @@ const filter = {
},
},
],
- where: { clientFk: route.params.id },
+ where: { clientFk: $props.id ?? route.params.id },
order: ['shipped DESC', 'id'],
limit: 30,
};
diff --git a/src/pages/Order/Card/OrderCatalog.vue b/src/pages/Order/Card/OrderCatalog.vue
index 4b3992f21..dbb66c0ec 100644
--- a/src/pages/Order/Card/OrderCatalog.vue
+++ b/src/pages/Order/Card/OrderCatalog.vue
@@ -10,6 +10,7 @@ import OrderCatalogFilter from 'src/pages/Order/Card/OrderCatalogFilter.vue';
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
import { useArrayData } from 'src/composables/useArrayData';
import RightMenu from 'src/components/common/RightMenu.vue';
+import { onUnmounted } from 'vue';
const route = useRoute();
const router = useRouter();
@@ -23,16 +24,40 @@ const catalogParams = {
const arrayData = useArrayData(dataKey, {
url: 'Orders/CatalogFilter',
userParams: catalogParams,
+ exprBuilder,
+ searchUrl: 'table',
});
const store = arrayData.store;
const tags = ref([]);
const itemRefs = ref({});
-onMounted(() => {
+onMounted(async () => {
stateStore.rightDrawer = true;
checkOrderConfirmation();
+
+ if (
+ arrayData.store.userParams &&
+ Object.keys(arrayData.store.userParams).some((key) => !key.startsWith('order'))
+ ) {
+ await arrayData.fetch({});
+ }
});
+onUnmounted(() => {
+ arrayData.destroy();
+});
+
+function exprBuilder(param, value) {
+ switch (param) {
+ case 'categoryFk':
+ case 'typeFk':
+ return { [param]: value };
+ case 'search':
+ if (/^\d+$/.test(value)) return { 'i.id': value };
+ else return { 'i.name': { like: `%${value}%` } };
+ }
+}
+
async function checkOrderConfirmation() {
const response = await axios.get(`Orders/${route.params.id}`);
if (response.data.isConfirmed === 1) {
@@ -96,6 +121,7 @@ watch(
:tag-value="tagValue"
:tags="tags"
:initial-catalog-params="catalogParams"
+ :arrayData
/>
diff --git a/src/pages/Order/Card/OrderCatalogFilter.vue b/src/pages/Order/Card/OrderCatalogFilter.vue
index 76e608983..d16a92017 100644
--- a/src/pages/Order/Card/OrderCatalogFilter.vue
+++ b/src/pages/Order/Card/OrderCatalogFilter.vue
@@ -24,6 +24,10 @@ const props = defineProps({
type: Array,
required: true,
},
+ arrayData: {
+ type: Object,
+ required: true,
+ },
});
const { t } = useI18n();
@@ -74,17 +78,6 @@ const loadTypes = async (id) => {
typeList.value = data;
};
-function exprBuilder(param, value) {
- switch (param) {
- case 'categoryFk':
- case 'typeFk':
- return { [param]: value };
- case 'search':
- if (/^\d+$/.test(value)) return { 'i.id': value };
- else return { 'i.name': { like: `%${value}%` } };
- }
-}
-
const applyTags = (tagInfo, params, search) => {
if (!tagInfo || !tagInfo.values.length) {
params.tagGroups = null;
@@ -152,9 +145,8 @@ function addOrder(value, field, params) {
:data-key="props.dataKey"
:hidden-tags="['filter', 'orderFk', 'orderBy']"
:unremovable-params="['orderFk', 'orderBy']"
- :expr-builder="exprBuilder"
:custom-tags="['tagGroups', 'categoryFk']"
- :redirect="false"
+ :arrayData
>
diff --git a/src/pages/Route/Vehicle/Card/VehicleSummary.vue b/src/pages/Route/Vehicle/Card/VehicleSummary.vue
index 981870cb2..e4b0a9497 100644
--- a/src/pages/Route/Vehicle/Card/VehicleSummary.vue
+++ b/src/pages/Route/Vehicle/Card/VehicleSummary.vue
@@ -22,7 +22,12 @@ const links = {
};
-
+
{{ entity.id }} - {{ entity.numberPlate }}
diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue
index 05bd14075..94b4623aa 100644
--- a/src/pages/Ticket/TicketAdvance.vue
+++ b/src/pages/Ticket/TicketAdvance.vue
@@ -456,6 +456,7 @@ watch(
:pagination="{ rowsPerPage: 0 }"
:no-data-label="t('globals.noResults')"
:right-search="false"
+ :order="['futureTotalWithVat ASC']"
auto-load
:disable-option="{ card: true }"
>
diff --git a/src/pages/Worker/Card/WorkerCalendarItem.vue b/src/pages/Worker/Card/WorkerCalendarItem.vue
index 893a81c6d..86d227ad3 100644
--- a/src/pages/Worker/Card/WorkerCalendarItem.vue
+++ b/src/pages/Worker/Card/WorkerCalendarItem.vue
@@ -79,7 +79,7 @@ const editEvent = async (event) => {
};
const { data } = await axios.patch(
`Workers/${route.params.id}/updateAbsence`,
- params
+ params,
);
if (data) emit('refresh');
@@ -108,14 +108,14 @@ const handleDateSelected = (date) => {
if (!event) createEvent(_date);
};
-const handleEventSelected = (event, { year, month, day }) => {
+const handleEventSelected = async (event, { year, month, day }) => {
if (!props.absenceType) {
notify(t('Choose an absence type from the right menu'), 'warning');
return;
}
const date = new Date(year, month - 1, day);
- if (!event?.absenceId) createEvent(date);
+ if (!event?.absenceId) await createEvent(date);
else if (event.type == props.absenceType.code) deleteEvent(event, date);
else editEvent(event);
};
diff --git a/src/stores/useStateStore.js b/src/stores/useStateStore.js
index e48b67279..ca447bc11 100644
--- a/src/stores/useStateStore.js
+++ b/src/stores/useStateStore.js
@@ -7,7 +7,11 @@ export const useStateStore = defineStore('stateStore', () => {
const rightDrawer = ref(false);
const rightAdvancedDrawer = ref(false);
const subToolbar = ref(false);
+ const cardDescriptor = ref(null);
+ function cardDescriptorChangeValue(descriptor) {
+ cardDescriptor.value = descriptor;
+ }
function toggleLeftDrawer() {
leftDrawer.value = !leftDrawer.value;
}
@@ -49,6 +53,8 @@ export const useStateStore = defineStore('stateStore', () => {
}
return {
+ cardDescriptor,
+ cardDescriptorChangeValue,
leftDrawer,
rightDrawer,
rightAdvancedDrawer,
diff --git a/test/cypress/integration/route/vehicle/vehicleList.spec.js b/test/cypress/integration/route/vehicle/vehicleList.spec.js
new file mode 100644
index 000000000..2b3c9cdbc
--- /dev/null
+++ b/test/cypress/integration/route/vehicle/vehicleList.spec.js
@@ -0,0 +1,59 @@
+describe('Vehicle list', () => {
+ const selectors = {
+ saveFormBtn: 'FormModelPopup_save',
+ summaryPopupBtn: 'tr:last-child > .q-table--col-auto-width > .q-btn',
+ summaryGoToSummaryBtn: '.header > .q-icon',
+ summaryHeader: '.summaryHeader > div',
+ numberPlate: 'tr:last-child > [data-col-field="numberPlate"] > .no-padding',
+ };
+
+ const data = {
+ 'Nº Plate': { val: '9465-LPA' },
+ 'Trade Mark': { val: 'WAYNE INDUSTRIES' },
+ Model: { val: 'BATREMOLQUE' },
+ Type: { val: 'remolque', type: 'select' },
+ Warehouse: { val: 'Warehouse One', type: 'select' },
+ Country: { val: 'Portugal', type: 'select' },
+ Description: { val: 'Exclusive for batpod transport' },
+ };
+
+ const expected = data['Nº Plate'].val;
+ const summaryUrl = '/summary';
+
+ beforeEach(() => {
+ cy.viewport(1920, 1080);
+ cy.login('developer');
+ cy.visit(`/#/route/vehicle/list`);
+ cy.typeSearchbar('{enter}');
+ });
+
+ it('should list vehicles', () => {
+ cy.get('.q-table')
+ .children()
+ .should('be.visible')
+ .should('have.length.greaterThan', 0);
+ });
+
+ it('Should add new vehicle', () => {
+ cy.addBtnClick();
+ cy.fillInForm(data);
+ cy.dataCy(selectors.saveFormBtn).should('be.visible').click();
+
+ cy.checkNotification('Data created');
+ cy.get(selectors.summaryHeader).should('contain', expected);
+ cy.url().should('include', summaryUrl);
+ });
+
+ it('should open summary by clicking a vehicle', () => {
+ cy.get(selectors.numberPlate).click();
+ cy.get(selectors.summaryHeader).should('contain', expected);
+ cy.url().should('include', summaryUrl);
+ });
+
+ it('should redirect to vehicle summary when click summary icon on summary pop-up', () => {
+ cy.get(selectors.summaryPopupBtn).click();
+ cy.get(selectors.summaryHeader).should('contain', expected);
+ cy.get(selectors.summaryGoToSummaryBtn).click();
+ cy.url().should('include', summaryUrl);
+ });
+});