SettleAccountReceivableDialog.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <q-dialog ref="dialogRef" @hide="onDialogHide">
  3. <q-card
  4. class="q-dialog-plugin overflow-hidden"
  5. style="width: 420px; max-width: 90vw"
  6. >
  7. <DefaultDialogHeader title="Marcar como pago" @close="onDialogCancel" />
  8. <DefaultForm ref="formRef" @submit.prevent="onSubmit">
  9. <q-scroll-area class="form-dialog-scroll-area">
  10. <q-card-section class="row q-col-gutter-md q-pt-none">
  11. <div class="col-12 text-body2">
  12. {{ receivable.history }}
  13. </div>
  14. <DefaultInputDatePicker
  15. v-model="form.payment_date"
  16. v-model:untreated-date="form.payment_date_iso"
  17. v-model:error="validationErrors.payment_date"
  18. class="col-12"
  19. label="Data do pagamento"
  20. lazy-rules="ondemand"
  21. :error-message="validationErrors.payment_date"
  22. :rules="[inputRules.required]"
  23. />
  24. </q-card-section>
  25. </q-scroll-area>
  26. <q-separator />
  27. <q-card-actions align="right" class="q-pa-md q-gutter-sm">
  28. <q-btn
  29. color="negative"
  30. label="Cancelar"
  31. no-caps
  32. outline
  33. @click="onDialogCancel"
  34. />
  35. <q-btn
  36. color="primary"
  37. label="Confirmar"
  38. no-caps
  39. type="submit"
  40. unelevated
  41. :loading="loading"
  42. />
  43. </q-card-actions>
  44. </DefaultForm>
  45. </q-card>
  46. </q-dialog>
  47. </template>
  48. <script setup>
  49. import { ref } from "vue";
  50. import { settleFranchiseeReceivable } from "src/api/franchisee_account_receive";
  51. import { useDialogPluginComponent } from "quasar";
  52. import { useForm } from "src/composables/useForm";
  53. import { useInputRules } from "src/composables/useInputRules";
  54. import { useSubmitHandler } from "src/composables/useSubmitHandler";
  55. import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
  56. import DefaultForm from "src/components/defaults/DefaultForm.vue";
  57. import DefaultInputDatePicker from "src/components/defaults/DefaultInputDatePicker.vue";
  58. defineEmits([...useDialogPluginComponent.emits]);
  59. const { receivable } = defineProps({
  60. receivable: {
  61. required: true,
  62. type: Object,
  63. },
  64. });
  65. const { dialogRef, onDialogCancel, onDialogHide, onDialogOK } =
  66. useDialogPluginComponent();
  67. const { inputRules } = useInputRules();
  68. const formRef = ref(null);
  69. const today = new Date();
  70. const paymentDateIso = [
  71. today.getFullYear(),
  72. String(today.getMonth() + 1).padStart(2, "0"),
  73. String(today.getDate()).padStart(2, "0"),
  74. ].join("-");
  75. const { form } = useForm({
  76. payment_date: today.toLocaleDateString("pt-BR"),
  77. payment_date_iso: paymentDateIso,
  78. });
  79. const {
  80. loading,
  81. validationErrors,
  82. execute: submitForm,
  83. } = useSubmitHandler({
  84. formRef,
  85. onSuccess: (response) => onDialogOK(response),
  86. });
  87. const onSubmit = () =>
  88. submitForm(() =>
  89. settleFranchiseeReceivable(receivable.id, {
  90. payment_date: form.payment_date_iso,
  91. }),
  92. );
  93. </script>