diff --git a/src/components/EntityCalendar.vue b/src/components/EntityCalendar.vue new file mode 100644 index 000000000..e6e54a832 --- /dev/null +++ b/src/components/EntityCalendar.vue @@ -0,0 +1,152 @@ + + + + + \ No newline at end of file diff --git a/src/components/EntityCalendarGrid.vue b/src/components/EntityCalendarGrid.vue new file mode 100644 index 000000000..09ccaad07 --- /dev/null +++ b/src/components/EntityCalendarGrid.vue @@ -0,0 +1,126 @@ + + + \ No newline at end of file diff --git a/src/composables/getWeekdays.js b/src/composables/getWeekdays.js new file mode 100644 index 000000000..d619103da --- /dev/null +++ b/src/composables/getWeekdays.js @@ -0,0 +1,10 @@ +import { ref } from 'vue'; +import moment from 'moment'; + +export default function useWeekdaysOrder() { + + const firstDay = moment().weekday(1).day(); + const weekdays = [...Array(7).keys()].map(i => (i + firstDay) % 7); + + return ref(weekdays); +} diff --git a/src/css/app.scss b/src/css/app.scss index dd5dbe247..351eeb599 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -343,3 +343,20 @@ input::-webkit-inner-spin-button { .q-item__section--main ~ .q-item__section--side { padding-inline: 0; } + +.calendars-header { + height: 45px; + display: flex; + justify-content: space-between; + align-items: center; + background-color: $primary; + font-weight: bold; + font-size: 16px; +} + +.calendars-container { + max-width: 800px; + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} \ No newline at end of file diff --git a/src/pages/Route/Vehicle/Card/VehicleEventInclusionForm.vue b/src/pages/Route/Vehicle/Card/VehicleEventInclusionForm.vue new file mode 100644 index 000000000..06141736c --- /dev/null +++ b/src/pages/Route/Vehicle/Card/VehicleEventInclusionForm.vue @@ -0,0 +1,183 @@ + + + + + + es: + Started: Inicio + Finished: Fin + Add vehicle event: Agregar evento + Edit vehicle event: Editar evento + diff --git a/src/pages/Route/Vehicle/Card/VehicleEvents.vue b/src/pages/Route/Vehicle/Card/VehicleEvents.vue new file mode 100644 index 000000000..5a90c9586 --- /dev/null +++ b/src/pages/Route/Vehicle/Card/VehicleEvents.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/pages/Route/Vehicle/Card/VehicleEventsPanel.vue b/src/pages/Route/Vehicle/Card/VehicleEventsPanel.vue new file mode 100644 index 000000000..e3f22e93b --- /dev/null +++ b/src/pages/Route/Vehicle/Card/VehicleEventsPanel.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/src/pages/Route/Vehicle/VehicleCalendar.vue b/src/pages/Route/Vehicle/VehicleCalendar.vue new file mode 100644 index 000000000..681bb966a --- /dev/null +++ b/src/pages/Route/Vehicle/VehicleCalendar.vue @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/src/pages/Route/Vehicle/VehicleCalendarGrid.vue b/src/pages/Route/Vehicle/VehicleCalendarGrid.vue new file mode 100644 index 000000000..99b6602c8 --- /dev/null +++ b/src/pages/Route/Vehicle/VehicleCalendarGrid.vue @@ -0,0 +1,97 @@ + + + \ No newline at end of file diff --git a/src/pages/Route/Vehicle/locale/en.yml b/src/pages/Route/Vehicle/locale/en.yml index af6f78fd1..aa1c6d185 100644 --- a/src/pages/Route/Vehicle/locale/en.yml +++ b/src/pages/Route/Vehicle/locale/en.yml @@ -15,6 +15,8 @@ vehicle: remove: Vehicle removed search: Search Vehicle searchInfo: Search by id or number plate + deleteTitle: This item will be deleted + deleteSubtitle: Are you sure you want to continue? params: vehicleTypeFk: Type vehicleStateFk: State diff --git a/src/pages/Route/Vehicle/locale/es.yml b/src/pages/Route/Vehicle/locale/es.yml index 9fd0d3e91..463784c55 100644 --- a/src/pages/Route/Vehicle/locale/es.yml +++ b/src/pages/Route/Vehicle/locale/es.yml @@ -15,6 +15,8 @@ vehicle: remove: Vehículo eliminado search: Buscar Vehículo searchInfo: Buscar por id o matrícula + deleteTitle: Este elemento será eliminado + deleteSubtitle: ¿Seguro que quieres continuar? params: vehicleTypeFk: Tipo vehicleStateFk: Estado diff --git a/src/pages/Worker/Card/WorkerCalendarItem.vue b/src/pages/Worker/Card/WorkerCalendarItem.vue index 86d227ad3..071fa06be 100644 --- a/src/pages/Worker/Card/WorkerCalendarItem.vue +++ b/src/pages/Worker/Card/WorkerCalendarItem.vue @@ -11,6 +11,7 @@ import '@quasar/quasar-ui-qcalendar/src/QCalendarVariables.scss'; import { useWeekdayStore } from 'src/stores/useWeekdayStore'; import useNotify from 'src/composables/useNotify.js'; import axios from 'axios'; +import useWeekdaysOrder from 'src/composables/getWeekdays'; const props = defineProps({ year: { @@ -44,6 +45,7 @@ const { locale } = useI18n(); const calendarRef = ref(null); const weekdayStore = useWeekdayStore(); +const weekDays = useWeekdaysOrder(); const selectedDate = ref(); const calendarEventDates = []; const today = ref(date.formatDate(Date.vnNew(), 'YYYY-MM-DD')); @@ -182,7 +184,7 @@ watch(_year, (newValue) => { no-outside-days :selected-dates="calendarEventDates" no-active-date - :weekdays="[1, 2, 3, 4, 5, 6, 0]" + :weekdays="weekDays" short-weekday-label :locale="locale" :now="today" diff --git a/src/pages/Worker/Card/WorkerTimeControlCalendar.vue b/src/pages/Worker/Card/WorkerTimeControlCalendar.vue index 46ae4b698..e9b9cc915 100644 --- a/src/pages/Worker/Card/WorkerTimeControlCalendar.vue +++ b/src/pages/Worker/Card/WorkerTimeControlCalendar.vue @@ -4,6 +4,8 @@ import { useI18n } from 'vue-i18n'; import { QCalendarMonth } from '@quasar/quasar-ui-qcalendar/src/index.js'; import QCalendarMonthWrapper from 'src/components/ui/QCalendarMonthWrapper.vue'; +import useWeekdaysOrder from 'src/composables/getWeekdays'; + const $props = defineProps({ modelValue: { type: String, @@ -32,6 +34,7 @@ const emit = defineEmits(['update:modelValue', 'clickDate', 'onMoved']); const { locale } = useI18n(); const calendarRef = ref(null); +const weekDays = useWeekdaysOrder(); const stateClasses = { CONFIRMED: { @@ -135,7 +138,7 @@ const paintWorkWeeks = async () => { ref="calendarRef" v-model="value" show-work-weeks - :weekdays="[1, 2, 3, 4, 5, 6, 0]" + :weekdays="weekDays" :selected-dates="selectedDates" :min-weekday-label="1" :locale="locale" diff --git a/src/pages/Zone/ZoneCalendar.vue b/src/pages/Zone/ZoneCalendar.vue index 7cae59698..c2c66d753 100644 --- a/src/pages/Zone/ZoneCalendar.vue +++ b/src/pages/Zone/ZoneCalendar.vue @@ -10,6 +10,7 @@ import { QCalendarMonth } from '@quasar/quasar-ui-qcalendar/src/index.js'; import '@quasar/quasar-ui-qcalendar/src/QCalendarVariables.scss'; import { useWeekdayStore } from 'src/stores/useWeekdayStore'; +import useWeekdaysOrder from 'src/composables/getWeekdays'; import axios from 'axios'; const props = defineProps({ @@ -46,6 +47,7 @@ const route = useRoute(); const calendarRef = ref(null); const weekdayStore = useWeekdayStore(); +const weekDays = useWeekdaysOrder(); const showZoneClosingTable = ref(false); const zoneClosingData = ref(null); const today = ref(date.formatDate(Date.vnNew(), 'YYYY-MM-DD')); @@ -161,7 +163,7 @@ const handleDateClick = (timestamp) => { show-work-weeks no-outside-days no-active-date - :weekdays="[1, 2, 3, 4, 5, 6, 0]" + :weekdays="weekDays" short-weekday-label :locale="locale" :now="today" diff --git a/src/pages/Zone/ZoneCalendarGrid.vue b/src/pages/Zone/ZoneCalendarGrid.vue index 1ef687b3f..026b15735 100644 --- a/src/pages/Zone/ZoneCalendarGrid.vue +++ b/src/pages/Zone/ZoneCalendarGrid.vue @@ -229,22 +229,3 @@ onUnmounted(() => arrayData.destroy()); - - diff --git a/src/router/modules/route.js b/src/router/modules/route.js index 2b7cfc5be..08ba1701f 100644 --- a/src/router/modules/route.js +++ b/src/router/modules/route.js @@ -170,6 +170,7 @@ const vehicleCard = { 'VehicleBasicData', 'VehicleNotes', 'VehicleDms', + 'VehicleEvents' ], }, children: [ @@ -209,6 +210,15 @@ const vehicleCard = { }, component: () => import('src/pages/Route/Vehicle/VehicleDms.vue'), }, + { + name: 'VehicleEvents', + path: 'events', + meta: { + title: 'calendar', + icon: 'vn:calendar', + }, + component: () => import('src/pages/Route/Vehicle/Card/VehicleEvents.vue'), + }, ], }; diff --git a/test/cypress/integration/route/vehicle/vehicleEvents.spec.js b/test/cypress/integration/route/vehicle/vehicleEvents.spec.js new file mode 100644 index 000000000..f03e11b29 --- /dev/null +++ b/test/cypress/integration/route/vehicle/vehicleEvents.spec.js @@ -0,0 +1,27 @@ +describe('Vehicle', () => { + + beforeEach(() => { + cy.viewport(1920, 1080); + cy.login('deliveryAssistant'); + cy.visit(`/#/route/vehicle/3/events`); + }); + + it('should add, edit and delete a vehicle event', () => { + cy.get('.q-page-sticky > div > .q-btn').click(); + cy.dataCy('Started_inputDate').type('01/01/2001'); + cy.dataCy('Finished_inputDate').type('08/02/2001'); + cy.get(':nth-child(5)').find('[data-cy="Description_input"]').clear().type('Test'); + cy.selectOption('[data-cy="State_input"]', 3); + cy.get('.q-mt-lg > .q-btn--standard').click(); + + cy.get('.q-current-day > .q-calendar-month__day--content > .q-btn').click(); + cy.dataCy('Started_inputDate').clear().type('03/02/2001'); + cy.dataCy('Finished_inputDate').clear().type('15/03/2001'); + cy.get(':nth-child(5)').find('[data-cy="Description_input"]').clear().type('Test2'); + cy.selectOption('[data-cy="State_input"]', 5); + cy.get('.q-mt-lg > .q-btn--standard').click(); + + cy.dataCy('delete_event').eq(0).click(); + cy.dataCy('VnConfirm_confirm').click(); + }); +}); \ No newline at end of file