|
|
@@ -0,0 +1,207 @@
|
|
|
+<template>
|
|
|
+ <q-dialog ref="dialogRef" @hide="onDialogHide">
|
|
|
+ <q-card class="q-dialog-plugin" style="width: 700px; max-width: 90vw">
|
|
|
+ <DefaultDialogHeader :title="title" @close="onDialogCancel" />
|
|
|
+ <q-form ref="formRef" @submit="onOKClick">
|
|
|
+ <q-card-section class="row q-col-gutter-sm">
|
|
|
+ <DefaultInputDatePicker
|
|
|
+ v-model:untreated-date="form.date"
|
|
|
+ :label="$t('provider_blocked_days.date')"
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ :error="serverErrors?.date"
|
|
|
+ :error-message="serverErrors?.date"
|
|
|
+ :max-date="null"
|
|
|
+ class="col-6"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-select
|
|
|
+ v-model="form.period"
|
|
|
+ :options="periodOptions"
|
|
|
+ :label="$t('provider_blocked_days.period')"
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ :error="!!serverErrors?.period"
|
|
|
+ :error-message="serverErrors?.period"
|
|
|
+ emit-value
|
|
|
+ map-options
|
|
|
+ class="col-6"
|
|
|
+ @update:model-value="onPeriodChange"
|
|
|
+ />
|
|
|
+
|
|
|
+ <DefaultInputTimePicker
|
|
|
+ v-model:untreated-time="form.init_hour"
|
|
|
+ :label="$t('provider_blocked_days.init_hour')"
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ :error="!!serverErrors?.init_hour"
|
|
|
+ :error-message="serverErrors?.init_hour"
|
|
|
+ :disable="form.period === 'all'"
|
|
|
+ class="col-md-6 col-12"
|
|
|
+ />
|
|
|
+
|
|
|
+ <DefaultInputTimePicker
|
|
|
+ v-model:untreated-time="form.end_hour"
|
|
|
+ :label="$t('provider_blocked_days.end_hour')"
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ :error="!!serverErrors?.end_hour"
|
|
|
+ :error-message="serverErrors?.end_hour"
|
|
|
+ :disable="form.period === 'all'"
|
|
|
+ class="col-md-6 col-12"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-input
|
|
|
+ v-model="form.reason"
|
|
|
+ :label="$t('provider_blocked_days.reason')"
|
|
|
+ :error="!!serverErrors?.reason"
|
|
|
+ :error-message="serverErrors?.reason"
|
|
|
+ type="textarea"
|
|
|
+ class="col-12"
|
|
|
+ />
|
|
|
+ </q-card-section>
|
|
|
+
|
|
|
+ <q-card-actions align="right">
|
|
|
+ <q-btn
|
|
|
+ flat
|
|
|
+ :label="$t('common.actions.cancel')"
|
|
|
+ color="negative"
|
|
|
+ @click="onDialogCancel"
|
|
|
+ />
|
|
|
+ <q-btn
|
|
|
+ type="submit"
|
|
|
+ :label="$t('common.actions.save')"
|
|
|
+ :loading="loading"
|
|
|
+ :disable="!hasUpdatedFields"
|
|
|
+ color="primary"
|
|
|
+ />
|
|
|
+ </q-card-actions>
|
|
|
+ </q-form>
|
|
|
+ </q-card>
|
|
|
+ </q-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, computed, onMounted } from 'vue'
|
|
|
+import { useDialogPluginComponent } from 'quasar'
|
|
|
+import { useI18n } from 'vue-i18n'
|
|
|
+// import { useFormUpdateTracker } from 'src/composables/useFormUpdateTracker'
|
|
|
+import { useSubmitHandler } from 'src/composables/useSubmitHandler'
|
|
|
+import { useFormUpdateTracker } from "src/composables/useFormUpdateTracker";
|
|
|
+import {
|
|
|
+ createProviderBlockedDay,
|
|
|
+ updateProviderBlockedDay
|
|
|
+} from 'src/api/providerBlockedDay'
|
|
|
+import DefaultDialogHeader from 'src/components/defaults/DefaultDialogHeader.vue'
|
|
|
+import DefaultInputDatePicker from 'src/components/defaults/DefaultInputDatePicker.vue'
|
|
|
+import DefaultInputTimePicker from 'src/components/defaults/DefaultInputTimePicker.vue'
|
|
|
+import { useInputRules } from "src/composables/useInputRules";
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ blockedDay: {
|
|
|
+ type: Object,
|
|
|
+ default: null
|
|
|
+ },
|
|
|
+ providerId: {
|
|
|
+ type: Number,
|
|
|
+ required: true
|
|
|
+ },
|
|
|
+ title: {
|
|
|
+ type: Function,
|
|
|
+ default: () => ''
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+defineEmits([...useDialogPluginComponent.emits])
|
|
|
+const { t } = useI18n()
|
|
|
+const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()
|
|
|
+const { inputRules } = useInputRules();
|
|
|
+const formRef = ref(null)
|
|
|
+// const loading = ref(false)
|
|
|
+// const serverErrors = ref({})
|
|
|
+
|
|
|
+// const form = ref({
|
|
|
+// provider_id: props.providerId,
|
|
|
+// date: null,
|
|
|
+// period: null,
|
|
|
+// reason: null,
|
|
|
+// init_hour: null,
|
|
|
+// end_hour: null
|
|
|
+// })
|
|
|
+// const { form, getUpdatedFields, hasUpdatedFields } = useFormUpdateTracker({
|
|
|
+// user_id: provider ? provider?.user_id : null,
|
|
|
+// document: provider ? provider?.document : "",
|
|
|
+// rg: provider ? provider?.rg : "",
|
|
|
+// birth_date: provider ? provider?.birth_date : null,
|
|
|
+// is_approved: provider ? provider?.is_approved : false,
|
|
|
+// daily_price_8h: provider ? Number(provider?.daily_price_8h) : null,
|
|
|
+// daily_price_6h: provider ? Number(provider?.daily_price_6h) : null,
|
|
|
+// daily_price_4h: provider ? Number(provider?.daily_price_4h) : null,
|
|
|
+// daily_price_2h: provider ? Number(provider?.daily_price_2h) : null,
|
|
|
+// });
|
|
|
+const { form, getUpdatedFields, hasUpdatedFields } = useFormUpdateTracker({
|
|
|
+ provider_id: props.blockedDay ? props.blockedDay.provider_id : null,
|
|
|
+ date: props.blockedDay ? props.blockedDay.date : null,
|
|
|
+ period: props.blockedDay ? props.blockedDay.period : null,
|
|
|
+ reason: props.blockedDay ? props.blockedDay.reason : null,
|
|
|
+ init_hour: props.blockedDay ? props.blockedDay.init_hour : null,
|
|
|
+ end_hour: props.blockedDay ? props.blockedDay.end_hour : null
|
|
|
+})
|
|
|
+
|
|
|
+const periodOptions = computed(() => [
|
|
|
+ {
|
|
|
+ label: t('provider_blocked_days.periods.morning'),
|
|
|
+ value: 'morning'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: t('provider_blocked_days.periods.afternoon'),
|
|
|
+ value: 'afternoon'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: t('provider_blocked_days.periods.all'),
|
|
|
+ value: 'all'
|
|
|
+ }
|
|
|
+])
|
|
|
+
|
|
|
+const onPeriodChange = () => {
|
|
|
+ if (form.period === 'all') {
|
|
|
+ form.init_hour = '00:00'
|
|
|
+ form.end_hour = '23:59'
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const {
|
|
|
+ loading,
|
|
|
+ serverErrors,
|
|
|
+ execute: submitForm,
|
|
|
+} = useSubmitHandler({
|
|
|
+ onSuccess: () => onDialogOK(true),
|
|
|
+ formRef: formRef,
|
|
|
+});
|
|
|
+
|
|
|
+const onOKClick = async () => {
|
|
|
+
|
|
|
+ if(props.blockedDay) {
|
|
|
+ await submitForm(() => updateProviderBlockedDay(props.blockedDay.id, getUpdatedFields.value));
|
|
|
+ } else {
|
|
|
+ await submitForm(() => createProviderBlockedDay({ ...form }));
|
|
|
+ }
|
|
|
+// const submitFunction = props.blockedDay
|
|
|
+// ? () => updateProviderBlockedDay(props.blockedDay.id, submitData)
|
|
|
+// : () => createProviderBlockedDay(submitData)
|
|
|
+
|
|
|
+// const result = await useSubmitHandler(
|
|
|
+// submitFunction,
|
|
|
+// loading,
|
|
|
+// serverErrors,
|
|
|
+// hasChanged,
|
|
|
+// props.blockedDay ? 'edit' : 'create'
|
|
|
+// )
|
|
|
+
|
|
|
+// if (result.success) {
|
|
|
+// onDialogOK(true)
|
|
|
+// }
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ if(props.providerId) {
|
|
|
+ form.provider_id = props.providerId
|
|
|
+ }
|
|
|
+})
|
|
|
+</script>
|