Kaynağa Gözat

feat: :sparkles: feat (agendamento) permite cancelar agendamento autorizado

alterada regra para permitir cancelar um agendamento autorizado caso seja para uma data/hora futura

fase:dev | origin: escopo
Gustavo Zanatta 1 gün önce
ebeveyn
işleme
aadb0b6b74

+ 16 - 2
src/pages/parceiros-convenios/AgendamentosParceiroPage.vue

@@ -77,6 +77,7 @@
                   size="sm"
                   :unelevated="props.row.status === 'confirmado'"
                   :outline="props.row.status !== 'confirmado'"
+                  :disable="!canApprove(props.row)"
                   :loading="actionId === props.row.id && actionType === 'approve'"
                   @click.prevent.stop="onApprove(props.row)"
                 />
@@ -88,6 +89,7 @@
                   size="sm"
                   :unelevated="props.row.status === 'recusado' || props.row.status === 'cancelado'"
                   :outline="props.row.status !== 'recusado' && props.row.status !== 'cancelado'"
+                  :disable="!canReject(props.row)"
                   :loading="actionId === props.row.id && actionType === 'reject'"
                   @click.prevent.stop="onReject(props.row)"
                 />
@@ -184,8 +186,20 @@ const formatDateTime = (date, time) => {
   return time ? `${dateStr} ${time}` : dateStr;
 };
 
+const isFutureDateTime = (row) => {
+  if (!row.date) return false;
+  const dt = new Date(`${row.date}T${row.time || "00:00"}`);
+  if (isNaN(dt)) return false;
+  return dt.getTime() > Date.now();
+};
+
+const canApprove = (row) => row.status === "pendente";
+
+const canReject = (row) =>
+  row.status === "pendente" || (row.status === "confirmado" && isFutureDateTime(row));
+
 const onApprove = (row) => {
-  if (row.status !== "pendente") return;
+  if (!canApprove(row)) return;
   $q.dialog({ component: ApproveAppointmentDialog }).onOk(async ({ date, time }) => {
     actionId.value   = row.id;
     actionType.value = "approve";
@@ -203,7 +217,7 @@ const onApprove = (row) => {
 };
 
 const onReject = (row) => {
-  if (row.status !== "pendente") return;
+  if (!canReject(row)) return;
   $q.dialog({
     title: t("common.ui.messages.confirm_action"),
     message: t("agendamento.confirm_reject"),