|
|
@@ -139,6 +139,39 @@
|
|
|
</q-card>
|
|
|
</div>
|
|
|
|
|
|
+ <div v-if="withdrawalInProgress" class="q-mx-md q-mt-sm">
|
|
|
+ <q-card
|
|
|
+ class="balance-card withdrawal-progress-card bg-surface"
|
|
|
+ flat
|
|
|
+ >
|
|
|
+ <q-card-section class="row items-center no-wrap q-pa-md">
|
|
|
+ <q-icon
|
|
|
+ class="q-mr-sm"
|
|
|
+ color="primary"
|
|
|
+ name="mdi-bank-transfer-out"
|
|
|
+ size="26px"
|
|
|
+ />
|
|
|
+
|
|
|
+ <div class="col">
|
|
|
+ <div class="text-primary font12 fontbold">
|
|
|
+ {{ $t("provider.payments.withdrawal_in_progress_title") }}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="text-grey-6 font12 q-mt-xs">
|
|
|
+ {{
|
|
|
+ $t("provider.payments.withdrawal_in_progress_desc", {
|
|
|
+ amount: formatCurrency(parseAmount(withdrawalInProgress.net_amount)),
|
|
|
+ date: formatIsoDate(withdrawalInProgress.created_at),
|
|
|
+ })
|
|
|
+ }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <q-spinner-dots color="primary" size="24px" />
|
|
|
+ </q-card-section>
|
|
|
+ </q-card>
|
|
|
+ </div>
|
|
|
+
|
|
|
<div class="q-mx-md q-mt-md">
|
|
|
<q-card
|
|
|
class="balance-card bg-secondary shadow-card"
|
|
|
@@ -286,6 +319,7 @@ import { avatarColors, formatCurrency } from "src/helpers/utils";
|
|
|
import {
|
|
|
getBalance,
|
|
|
getWithdrawalFees,
|
|
|
+ getWithdrawals,
|
|
|
requestWithdrawal,
|
|
|
} from "src/api/providerWithdrawal";
|
|
|
|
|
|
@@ -296,6 +330,7 @@ import { useQuasar } from "quasar";
|
|
|
|
|
|
import MovimentacoesDialog from "src/components/payments/MovimentacoesDialog.vue";
|
|
|
import WithdrawConfirmDialog from "src/components/payments/WithdrawConfirmDialog.vue";
|
|
|
+import WithdrawSuccessDialog from "src/components/payments/WithdrawSuccessDialog.vue";
|
|
|
|
|
|
const $q = useQuasar();
|
|
|
|
|
|
@@ -309,6 +344,8 @@ const withdrawLoading = ref(false);
|
|
|
const saldoDisponivel = ref(0);
|
|
|
const saldoALiberar = ref(0);
|
|
|
|
|
|
+const withdrawalInProgress = ref(null);
|
|
|
+
|
|
|
const paymentTransferFeeAmount = ref(3.67);
|
|
|
|
|
|
const services = ref([]);
|
|
|
@@ -341,6 +378,7 @@ const canWithdraw = computed(
|
|
|
() =>
|
|
|
saldoDisponivel.value > 0 &&
|
|
|
withdrawalNetAmount.value > 0 &&
|
|
|
+ !withdrawalInProgress.value &&
|
|
|
!withdrawLoading.value,
|
|
|
);
|
|
|
|
|
|
@@ -367,16 +405,24 @@ const periodDays = {
|
|
|
year: 365,
|
|
|
};
|
|
|
|
|
|
+const withdrawalInProgressStatuses = [
|
|
|
+ "pending_transfer",
|
|
|
+ "processing",
|
|
|
+];
|
|
|
+
|
|
|
const loadData = async () => {
|
|
|
servicesLoading.value = true;
|
|
|
|
|
|
try {
|
|
|
- const [balance, splits, fees] = await Promise.all([
|
|
|
+ const [balance, splits, fees, withdrawals] = await Promise.all([
|
|
|
getBalance(),
|
|
|
getPaymentSplits(),
|
|
|
loadWithdrawalFees(),
|
|
|
+ loadWithdrawals(),
|
|
|
]);
|
|
|
|
|
|
+ withdrawalInProgress.value = findWithdrawalInProgress(withdrawals);
|
|
|
+
|
|
|
const paymentSplits = splits || [];
|
|
|
|
|
|
const availableFromSplits = sumSplits(
|
|
|
@@ -436,6 +482,19 @@ const loadData = async () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+const loadWithdrawals = async () => {
|
|
|
+ try {
|
|
|
+ return await getWithdrawals();
|
|
|
+ } catch {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const findWithdrawalInProgress = (withdrawals) =>
|
|
|
+ (withdrawals || []).find((withdrawal) =>
|
|
|
+ withdrawalInProgressStatuses.includes(withdrawal.status),
|
|
|
+ ) ?? null;
|
|
|
+
|
|
|
const loadWithdrawalFees = async () => {
|
|
|
try {
|
|
|
return await getWithdrawalFees();
|
|
|
@@ -474,6 +533,14 @@ const onSacar = () => {
|
|
|
});
|
|
|
|
|
|
saldoDisponivel.value = 0;
|
|
|
+
|
|
|
+ withdrawalInProgress.value = findWithdrawalInProgress(
|
|
|
+ await loadWithdrawals(),
|
|
|
+ );
|
|
|
+
|
|
|
+ $q.dialog({
|
|
|
+ component: WithdrawSuccessDialog,
|
|
|
+ });
|
|
|
} catch (error) {
|
|
|
$q.notify({
|
|
|
type: "negative",
|
|
|
@@ -697,6 +764,10 @@ onMounted(loadData);
|
|
|
border-radius: 8px !important;
|
|
|
}
|
|
|
|
|
|
+.withdrawal-progress-card {
|
|
|
+ border: 1px dashed var(--q-primary);
|
|
|
+}
|
|
|
+
|
|
|
.text-name {
|
|
|
max-width: 130px;
|
|
|
overflow: hidden;
|