mirror of
https://github.com/hanzo-io/cloud.git
synced 2026-10-30 18:57:42 +00:00
206 lines
4.4 KiB
Vue
206 lines
4.4 KiB
Vue
<template>
|
|
<div class="p-4">
|
|
<ObjectList :options="partnerCustomerList" />
|
|
<Dialog
|
|
v-model="contributionDialog"
|
|
:options="{
|
|
size: '3xl',
|
|
title: 'Last 6 Month\'s Contribution'
|
|
}"
|
|
>
|
|
<template #body-content>
|
|
<template v-if="showInvoice">
|
|
<div
|
|
v-if="showInvoice.status === 'Empty'"
|
|
class="text-base text-gray-600"
|
|
>
|
|
Nothing to show
|
|
</div>
|
|
<PartnerCustomerInvoices
|
|
:customerTeam="showInvoice.name"
|
|
:customerCurrency="showInvoice.currency"
|
|
/>
|
|
</template>
|
|
</template>
|
|
</Dialog>
|
|
<Dialog
|
|
v-model="transferCreditsDialog"
|
|
:options="{ title: 'Transfer Credits' }"
|
|
>
|
|
<template #body-content>
|
|
<p class="pb-3 text-p-base">
|
|
Enter the equivalent amount of credits (in {{ $team.doc.currency }})
|
|
you wish to transfer.
|
|
</p>
|
|
<FormControl placeholder="Amount" v-model="amount" autocomplete="off" />
|
|
<ErrorMessage
|
|
class="mt-2"
|
|
:message="$resources.transferCredits.error"
|
|
/>
|
|
</template>
|
|
<template #actions>
|
|
<Button
|
|
type="primary"
|
|
variant="solid"
|
|
class="w-full"
|
|
:loading="$resources.transferCredits.loading"
|
|
@click="
|
|
$resources.transferCredits.submit({
|
|
amount: amount,
|
|
customer: customerTeam.name,
|
|
partner: $team.doc.name
|
|
})
|
|
"
|
|
>
|
|
Transfer
|
|
</Button>
|
|
</template>
|
|
</Dialog>
|
|
<Dialog
|
|
v-model="showConfirmationDialog"
|
|
:options="{ title: 'Credits Transferred Successfully' }"
|
|
>
|
|
<template #body-content>
|
|
<p class="text-p-base">
|
|
{{ formatCurrency(amount) }} credits have been transferred to
|
|
<strong>{{ customerTeam.billing_name }}</strong>
|
|
</p>
|
|
<span class="text-base font-medium text-gray-700"
|
|
>Credits available: {{ creditBalance() }}</span
|
|
>
|
|
</template>
|
|
</Dialog>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import PartnerCustomerInvoices from './PartnerCustomerInvoices.vue';
|
|
import ObjectList from '../ObjectList.vue';
|
|
import { Dialog, ErrorMessage } from 'frappe-ui';
|
|
import { toast } from 'vue-sonner';
|
|
import { userCurrency } from '../../utils/format';
|
|
|
|
export default {
|
|
name: 'PartnerCustomers',
|
|
components: {
|
|
PartnerCustomerInvoices,
|
|
Dialog,
|
|
ErrorMessage,
|
|
ObjectList
|
|
},
|
|
data() {
|
|
return {
|
|
contributionDialog: false,
|
|
showInvoice: null,
|
|
transferCreditsDialog: false,
|
|
customerTeam: null,
|
|
amount: 0.0,
|
|
showConfirmationDialog: false
|
|
};
|
|
},
|
|
resources: {
|
|
transferCredits() {
|
|
return {
|
|
url: 'press.api.partner.transfer_credits',
|
|
onSuccess(data) {
|
|
this.amount = data;
|
|
this.transferCreditsDialog = false;
|
|
this.showConfirmationDialog = true;
|
|
toast.success('Credits Transferred');
|
|
}
|
|
};
|
|
},
|
|
getBalance: {
|
|
url: 'press.api.billing.get_balance_credit',
|
|
auto: true
|
|
}
|
|
},
|
|
computed: {
|
|
partnerCustomerList() {
|
|
return {
|
|
resource() {
|
|
return {
|
|
url: 'press.api.partner.get_partner_customers',
|
|
transform(data) {
|
|
return data.map(d => {
|
|
return {
|
|
email: d.user,
|
|
billing_name: d.billing_name || '',
|
|
payment_mode: d.payment_mode || '',
|
|
currency: d.currency,
|
|
name: d.name
|
|
};
|
|
});
|
|
},
|
|
initialData: [],
|
|
auto: true
|
|
};
|
|
},
|
|
columns: [
|
|
{
|
|
label: 'Name',
|
|
fieldname: 'billing_name'
|
|
},
|
|
{
|
|
label: 'Email',
|
|
fieldname: 'email'
|
|
},
|
|
{
|
|
label: 'Payment Mode',
|
|
fieldname: 'payment_mode'
|
|
},
|
|
{
|
|
label: 'Currency',
|
|
fieldname: 'currency',
|
|
width: 0.5
|
|
},
|
|
{
|
|
label: 'Contributions',
|
|
type: 'Button',
|
|
width: 0.5,
|
|
align: 'center',
|
|
Button: ({ row }) => {
|
|
return {
|
|
label: 'View',
|
|
onClick: () => {
|
|
this.showInvoice = row;
|
|
this.contributionDialog = true;
|
|
}
|
|
};
|
|
}
|
|
},
|
|
{
|
|
label: '',
|
|
type: 'Button',
|
|
width: 0.8,
|
|
align: 'right',
|
|
key: 'actions',
|
|
Button: ({ row }) => {
|
|
return {
|
|
label: 'Transfer Credits',
|
|
onClick: () => {
|
|
this.transferCreditsDialog = true;
|
|
this.customerTeam = row;
|
|
}
|
|
};
|
|
}
|
|
}
|
|
]
|
|
};
|
|
}
|
|
},
|
|
methods: {
|
|
formatCurrency(value) {
|
|
if (value === 0) {
|
|
return '';
|
|
}
|
|
return userCurrency(value);
|
|
},
|
|
creditBalance() {
|
|
return this.formatCurrency(
|
|
parseFloat(this.$resources.getBalance.data) - parseFloat(this.amount)
|
|
);
|
|
}
|
|
}
|
|
};
|
|
</script>
|