|
@@ -354,6 +354,7 @@
|
|
|
<script setup>
|
|
<script setup>
|
|
|
import { computed, ref, watch, onMounted, nextTick } from "vue";
|
|
import { computed, ref, watch, onMounted, nextTick } from "vue";
|
|
|
import { useDialogPluginComponent, useQuasar } from "quasar";
|
|
import { useDialogPluginComponent, useQuasar } from "quasar";
|
|
|
|
|
+import { addYears, format } from "date-fns";
|
|
|
import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
|
|
import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
|
|
|
import DefaultInput from "src/components/defaults/DefaultInput.vue";
|
|
import DefaultInput from "src/components/defaults/DefaultInput.vue";
|
|
|
import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
|
|
import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
|
|
@@ -399,10 +400,21 @@ const loadingMedias = ref(false);
|
|
|
|
|
|
|
|
const trimTime = (t) => (t ? t.slice(0, 5) : null);
|
|
const trimTime = (t) => (t ? t.slice(0, 5) : null);
|
|
|
|
|
|
|
|
|
|
+const defaultContractDates = (() => {
|
|
|
|
|
+ if (props.contract) return null;
|
|
|
|
|
+
|
|
|
|
|
+ const start = new Date();
|
|
|
|
|
+ return {
|
|
|
|
|
+ signature_date: format(start, "dd/MM/yyyy"),
|
|
|
|
|
+ end_date: format(addYears(start, 1), "dd/MM/yyyy"),
|
|
|
|
|
+ };
|
|
|
|
|
+})();
|
|
|
|
|
+
|
|
|
const { form } = useFormUpdateTracker({
|
|
const { form } = useFormUpdateTracker({
|
|
|
protocol: props.contract?.protocol ?? null,
|
|
protocol: props.contract?.protocol ?? null,
|
|
|
- signature_date: props.contract?.signature_date ?? null,
|
|
|
|
|
- end_date: props.contract?.end_date ?? null,
|
|
|
|
|
|
|
+ signature_date:
|
|
|
|
|
+ props.contract?.signature_date ?? defaultContractDates?.signature_date ?? null,
|
|
|
|
|
+ end_date: props.contract?.end_date ?? defaultContractDates?.end_date ?? null,
|
|
|
package_id: props.contract?.class_package_unit_id ?? null,
|
|
package_id: props.contract?.class_package_unit_id ?? null,
|
|
|
class_quantity: props.contract?.class_quantity ?? null,
|
|
class_quantity: props.contract?.class_quantity ?? null,
|
|
|
weekday: props.contract?.weekday ?? null,
|
|
weekday: props.contract?.weekday ?? null,
|
|
@@ -425,6 +437,61 @@ const { form } = useFormUpdateTracker({
|
|
|
late_fee: props.contract?.fine_cancelled ?? null,
|
|
late_fee: props.contract?.fine_cancelled ?? null,
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+const dateOverrideConfirmed = ref(false);
|
|
|
|
|
+const dateConfirmationOpen = ref(false);
|
|
|
|
|
+const restoringDefaultDates = ref(false);
|
|
|
|
|
+const completeDatePattern = /^\d{2}\/\d{2}\/\d{4}$/;
|
|
|
|
|
+
|
|
|
|
|
+function restoreDefaultContractDates() {
|
|
|
|
|
+ restoringDefaultDates.value = true;
|
|
|
|
|
+ form.signature_date = defaultContractDates.signature_date;
|
|
|
|
|
+ form.end_date = defaultContractDates.end_date;
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ restoringDefaultDates.value = false;
|
|
|
|
|
+ dateConfirmationOpen.value = false;
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+watch(
|
|
|
|
|
+ [() => form.signature_date, () => form.end_date],
|
|
|
|
|
+ ([signatureDate, endDate]) => {
|
|
|
|
|
+ if (
|
|
|
|
|
+ props.contract ||
|
|
|
|
|
+ dateOverrideConfirmed.value ||
|
|
|
|
|
+ dateConfirmationOpen.value ||
|
|
|
|
|
+ restoringDefaultDates.value
|
|
|
|
|
+ ) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const datesAreStillDefault =
|
|
|
|
|
+ signatureDate === defaultContractDates.signature_date &&
|
|
|
|
|
+ endDate === defaultContractDates.end_date;
|
|
|
|
|
+ if (datesAreStillDefault) return;
|
|
|
|
|
+
|
|
|
|
|
+ // Evita abrir a confirmação enquanto o usuário ainda está digitando a data.
|
|
|
|
|
+ const datesAreComplete =
|
|
|
|
|
+ (!signatureDate || completeDatePattern.test(signatureDate)) &&
|
|
|
|
|
+ (!endDate || completeDatePattern.test(endDate));
|
|
|
|
|
+ if (!datesAreComplete) return;
|
|
|
|
|
+
|
|
|
|
|
+ dateConfirmationOpen.value = true;
|
|
|
|
|
+ $q.dialog({
|
|
|
|
|
+ title: "Alterar duração do contrato?",
|
|
|
|
|
+ message:
|
|
|
|
|
+ "As datas foram preenchidas automaticamente para a duração de um ano. Tem certeza de que deseja alterá-las?",
|
|
|
|
|
+ ok: { color: "primary", label: "Sim" },
|
|
|
|
|
+ cancel: { color: "primary", outline: true, label: "Não" },
|
|
|
|
|
+ persistent: true,
|
|
|
|
|
+ })
|
|
|
|
|
+ .onOk(() => {
|
|
|
|
|
+ dateOverrideConfirmed.value = true;
|
|
|
|
|
+ dateConfirmationOpen.value = false;
|
|
|
|
|
+ })
|
|
|
|
|
+ .onCancel(restoreDefaultContractDates);
|
|
|
|
|
+ },
|
|
|
|
|
+);
|
|
|
|
|
+
|
|
|
const enrollmentInstallmentOptions = Array.from({ length: 12 }, (_, i) => ({
|
|
const enrollmentInstallmentOptions = Array.from({ length: 12 }, (_, i) => ({
|
|
|
value: i + 1,
|
|
value: i + 1,
|
|
|
label: `${i + 1}x`,
|
|
label: `${i + 1}x`,
|