|
|
@@ -64,13 +64,31 @@
|
|
|
>
|
|
|
<q-item-section>Visualizar arquivo</q-item-section>
|
|
|
</q-item>
|
|
|
- <q-item
|
|
|
- v-close-popup
|
|
|
- clickable
|
|
|
- @click="handleContractActions(row)"
|
|
|
- >
|
|
|
- <q-item-section>Ações do Contrato</q-item-section>
|
|
|
- </q-item>
|
|
|
+ <template v-if="row.status === 'frozen' || row.status === 'cancelled'">
|
|
|
+ <q-item
|
|
|
+ v-close-popup
|
|
|
+ clickable
|
|
|
+ @click="handleReactivate(row)"
|
|
|
+ >
|
|
|
+ <q-item-section>Reativar Contrato</q-item-section>
|
|
|
+ </q-item>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <q-item
|
|
|
+ v-close-popup
|
|
|
+ clickable
|
|
|
+ @click="handleFreeze(row)"
|
|
|
+ >
|
|
|
+ <q-item-section>Congelar Contrato</q-item-section>
|
|
|
+ </q-item>
|
|
|
+ <q-item
|
|
|
+ v-close-popup
|
|
|
+ clickable
|
|
|
+ @click="handleCancel(row)"
|
|
|
+ >
|
|
|
+ <q-item-section>Cancelar Contrato</q-item-section>
|
|
|
+ </q-item>
|
|
|
+ </template>
|
|
|
</q-list>
|
|
|
</q-menu>
|
|
|
</q-btn>
|
|
|
@@ -86,12 +104,13 @@ import { ref, onMounted } from "vue";
|
|
|
import { useQuasar } from "quasar";
|
|
|
import DefaultTable from "src/components/defaults/DefaultTable.vue";
|
|
|
import CreateContractDialog from "src/pages/students/components/CreateContractDialog.vue";
|
|
|
-import ContractActionsDialog from "src/pages/students/components/ContractActionsDialog.vue";
|
|
|
import ContractActionConfirmDialog from "src/pages/students/components/ContractActionConfirmDialog.vue";
|
|
|
import {
|
|
|
getStudentContracts,
|
|
|
attachContractFile,
|
|
|
- updateContractStatus,
|
|
|
+ freezeContract,
|
|
|
+ cancelContract,
|
|
|
+ reactivateContract,
|
|
|
} from "src/api/studentContract";
|
|
|
|
|
|
const props = defineProps({
|
|
|
@@ -158,43 +177,49 @@ function openFile(url) {
|
|
|
window.open(url, "_blank");
|
|
|
}
|
|
|
|
|
|
-const actionLabels = {
|
|
|
- frozen: {
|
|
|
- title: "Congelar Contrato",
|
|
|
- message:
|
|
|
- "Você tem certeza que deseja CONGELAR este contrato? isso irá gerar multas e cancelamento da cobrança recorrente.",
|
|
|
- },
|
|
|
- cancelled: {
|
|
|
- title: "Cancelar Contrato",
|
|
|
- message:
|
|
|
- "Você tem certeza que deseja CANCELAR este contrato? isso irá gerar multas e cancelamento da cobrança recorrente.",
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
-function handleContractActions(contract) {
|
|
|
+function confirmAction(title, message, apiFn, contract) {
|
|
|
$q.dialog({
|
|
|
- component: ContractActionsDialog,
|
|
|
- }).onOk((status) => {
|
|
|
- const { title, message } = actionLabels[status];
|
|
|
- $q.dialog({
|
|
|
- component: ContractActionConfirmDialog,
|
|
|
- componentProps: { title, message },
|
|
|
- }).onOk(async () => {
|
|
|
- try {
|
|
|
- const updated = await updateContractStatus(contract.id, status);
|
|
|
- const idx = rows.value.findIndex((r) => r.id === contract.id);
|
|
|
- if (idx !== -1) rows.value[idx] = updated;
|
|
|
- } catch (e) {
|
|
|
- console.error(e);
|
|
|
- $q.notify({
|
|
|
- type: "negative",
|
|
|
- message: "Erro ao atualizar status do contrato.",
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
+ component: ContractActionConfirmDialog,
|
|
|
+ componentProps: { title, message },
|
|
|
+ }).onOk(async () => {
|
|
|
+ try {
|
|
|
+ const updated = await apiFn(contract.id);
|
|
|
+ const idx = rows.value.findIndex((r) => r.id === contract.id);
|
|
|
+ if (idx !== -1) rows.value[idx] = updated;
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ $q.notify({ type: "negative", message: "Erro ao atualizar status do contrato." });
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+function handleFreeze(contract) {
|
|
|
+ confirmAction(
|
|
|
+ "Congelar Contrato",
|
|
|
+ "Você tem certeza que deseja CONGELAR este contrato? Isso irá gerar multas e cancelamento da cobrança recorrente.",
|
|
|
+ freezeContract,
|
|
|
+ contract,
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+function handleCancel(contract) {
|
|
|
+ confirmAction(
|
|
|
+ "Cancelar Contrato",
|
|
|
+ "Você tem certeza que deseja CANCELAR este contrato? Isso irá gerar multas e cancelamento da cobrança recorrente.",
|
|
|
+ cancelContract,
|
|
|
+ contract,
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+function handleReactivate(contract) {
|
|
|
+ confirmAction(
|
|
|
+ "Reativar Contrato",
|
|
|
+ "Você tem certeza que deseja REATIVAR este contrato?",
|
|
|
+ reactivateContract,
|
|
|
+ contract,
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
function statusColor(status) {
|
|
|
if (status === "active") return "positive";
|
|
|
if (status === "frozen") return "info";
|