1 Commits
3 changed files with 32 additions and 29 deletions
+17 -17
View File
@@ -166,13 +166,13 @@ export default function BalancesPage() {
return ( return (
<div className="animate-in fade-in space-y-6 pb-12 duration-500"> <div className="animate-in fade-in space-y-6 pb-12 duration-500">
<div> <div>
<span className="text-xs font-semibold text-slate-400">Keuangan / Saldo</span> <span className="text-xs font-semibold text-slate-400">Keuangan / Kas</span>
<h2 className="flex items-center gap-2 text-xl font-black tracking-tight text-slate-900 dark:text-white"> <h2 className="flex items-center gap-2 text-xl font-black tracking-tight text-slate-900 dark:text-white">
<Wallet className="h-6 w-6 text-[#1B2CC1]" /> <Wallet className="h-6 w-6 text-[#1B2CC1]" />
Buku Saldo Kas & Hutang
</h2> </h2>
<p className="mt-1 text-sm text-slate-500"> <p className="mt-1 text-sm text-slate-500">
Pantau riwayat saldo lebih atau kurang dari transaksi pesanan. Pantau riwayat uang deposit (lebih bayar) dan hutang (kurang bayar).
</p> </p>
</div> </div>
@@ -186,7 +186,7 @@ export default function BalancesPage() {
: 'text-slate-500 hover:text-slate-700 dark:hover:text-slate-300' : 'text-slate-500 hover:text-slate-700 dark:hover:text-slate-300'
)} )}
> >
Saldo Saya (Penitip) Kas Anda
</button> </button>
<button <button
onClick={() => setActiveTab('CREATOR')} onClick={() => setActiveTab('CREATOR')}
@@ -197,7 +197,7 @@ export default function BalancesPage() {
: 'text-slate-500 hover:text-slate-700 dark:hover:text-slate-300' : 'text-slate-500 hover:text-slate-700 dark:hover:text-slate-300'
)} )}
> >
Saldo Orang (Kreator) Kas Penitip
</button> </button>
</div> </div>
@@ -210,10 +210,10 @@ export default function BalancesPage() {
<div className="space-y-5"> <div className="space-y-5">
<div className="rounded-xl border border-blue-100 bg-blue-50 p-4 dark:border-blue-900/50 dark:bg-blue-950/30"> <div className="rounded-xl border border-blue-100 bg-blue-50 p-4 dark:border-blue-900/50 dark:bg-blue-950/30">
<h3 className="mb-1 text-sm font-bold text-blue-900 dark:text-blue-100"> <h3 className="mb-1 text-sm font-bold text-blue-900 dark:text-blue-100">
Saldo Anda di Kreator Lain Deposit & Hutang Anda
</h3> </h3>
<p className="text-xs leading-relaxed text-blue-700 dark:text-blue-300"> <p className="text-xs leading-relaxed text-blue-700 dark:text-blue-300">
Jika saldo <strong>positif</strong> (hijau), Anda memiliki deposit yang bisa digunakan Jika kas <strong>positif</strong> (hijau), Anda memiliki deposit yang bisa digunakan
untuk pesanan berikutnya. Jika <strong>negatif</strong> (merah), Anda berhutang. untuk pesanan berikutnya. Jika <strong>negatif</strong> (merah), Anda berhutang.
</p> </p>
</div> </div>
@@ -223,9 +223,9 @@ export default function BalancesPage() {
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-slate-100 dark:bg-slate-800"> <div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-slate-100 dark:bg-slate-800">
<Wallet className="h-7 w-7 text-slate-300 dark:text-slate-600" /> <Wallet className="h-7 w-7 text-slate-300 dark:text-slate-600" />
</div> </div>
<p className="text-sm font-semibold text-slate-500">Belum ada catatan saldo</p> <p className="text-sm font-semibold text-slate-500">Belum ada catatan kas</p>
<p className="mt-1 text-xs text-slate-400"> <p className="mt-1 text-xs text-slate-400">
Saldo muncul saat ada sisa atau kekurangan bayar dari PO. Kas muncul saat ada deposit atau hutang dari PO.
</p> </p>
</div> </div>
) : ( ) : (
@@ -295,7 +295,7 @@ export default function BalancesPage() {
{/* Amount */} {/* Amount */}
<div className="shrink-0 text-right"> <div className="shrink-0 text-right">
<p className="text-[10px] font-semibold tracking-wider text-slate-400 uppercase"> <p className="text-[10px] font-semibold tracking-wider text-slate-400 uppercase">
Total Saldo {isPositive ? 'Total Deposit' : 'Total Hutang'}
</p> </p>
<p <p
className={cn( className={cn(
@@ -354,12 +354,12 @@ export default function BalancesPage() {
<div className="space-y-5"> <div className="space-y-5">
<div className="rounded-xl border border-amber-100 bg-amber-50 p-4 dark:border-amber-900/50 dark:bg-amber-950/30"> <div className="rounded-xl border border-amber-100 bg-amber-50 p-4 dark:border-amber-900/50 dark:bg-amber-950/30">
<h3 className="mb-1 text-sm font-bold text-amber-900 dark:text-amber-100"> <h3 className="mb-1 text-sm font-bold text-amber-900 dark:text-amber-100">
Saldo Orang Lain di Anda Kas & Hutang Penitip di Anda
</h3> </h3>
<p className="text-xs leading-relaxed text-amber-700 dark:text-amber-300"> <p className="text-xs leading-relaxed text-amber-700 dark:text-amber-300">
Saldo <strong>positif</strong> = Anda memegang uang lebih milik penitip. Klik{' '} Kas <strong>positif</strong> = Anda memegang uang deposit milik penitip. Klik{' '}
<strong>Kembalikan</strong> untuk mencatatnya. Saldo <strong>negatif</strong> = <strong>Kembalikan</strong> untuk mencatatnya. Kas <strong>negatif</strong> = penitip
penitip masih berhutang ke Anda. masih berhutang ke Anda.
</p> </p>
</div> </div>
@@ -368,9 +368,9 @@ export default function BalancesPage() {
<div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-slate-100 dark:bg-slate-800"> <div className="mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-slate-100 dark:bg-slate-800">
<Wallet className="h-7 w-7 text-slate-300 dark:text-slate-600" /> <Wallet className="h-7 w-7 text-slate-300 dark:text-slate-600" />
</div> </div>
<p className="text-sm font-semibold text-slate-500">Tidak ada catatan saldo</p> <p className="text-sm font-semibold text-slate-500">Tidak ada catatan kas</p>
<p className="mt-1 text-xs text-slate-400"> <p className="mt-1 text-xs text-slate-400">
Saldo muncul saat ada kelebihan atau kekurangan bayar. Kas muncul saat ada deposit atau hutang dari PO.
</p> </p>
</div> </div>
) : ( ) : (
@@ -443,7 +443,7 @@ export default function BalancesPage() {
{/* Amount */} {/* Amount */}
<div className="shrink-0 text-right"> <div className="shrink-0 text-right">
<p className="text-[10px] font-semibold tracking-wider text-slate-400 uppercase"> <p className="text-[10px] font-semibold tracking-wider text-slate-400 uppercase">
{isPositive ? 'Anda Hutang' : 'Piutang Anda'} {isPositive ? 'Total Deposit' : 'Total Piutang'}
</p> </p>
<p <p
className={cn( className={cn(
+14 -11
View File
@@ -669,7 +669,10 @@ export async function getBalancesAsCreator(creator_id: string) {
const [submissions, withdrawals] = await Promise.all([ const [submissions, withdrawals] = await Promise.all([
prisma.submission.findMany({ prisma.submission.findMany({
where: { order: { creator_id } }, where: { order: { creator_id } },
include: { user: { select: { id: true, name: true, photo: true } } }, include: {
user: { select: { id: true, name: true, photo: true } },
order: { select: { status: true } },
},
}), }),
prisma.balanceWithdrawal.findMany({ prisma.balanceWithdrawal.findMany({
where: { creator_id }, where: { creator_id },
@@ -681,12 +684,12 @@ export async function getBalancesAsCreator(creator_id: string) {
submissions.forEach((sub) => { submissions.forEach((sub) => {
let diff = 0 let diff = 0
if (sub.payment_status === 'LUNAS') { const shouldCountBill = sub.bill != null && (sub.order.status === 'CLOSE' || sub.payment_status === 'LUNAS')
if (sub.bill != null) {
diff = (sub.paid_amount || 0) - sub.bill if (shouldCountBill) {
} diff = (sub.paid_amount || 0) - sub.bill!
} else { } else {
diff = -(sub.saldo_used || 0) diff = (sub.paid_amount || 0) - (sub.saldo_used || 0)
} }
if (diff !== 0) { if (diff !== 0) {
@@ -732,12 +735,12 @@ export async function getBalancesAsSubmittor(user_id: string) {
submissions.forEach((sub) => { submissions.forEach((sub) => {
let diff = 0 let diff = 0
if (sub.payment_status === 'LUNAS') { const shouldCountBill = sub.bill != null && (sub.order.status === 'CLOSE' || sub.payment_status === 'LUNAS')
if (sub.bill != null) {
diff = (sub.paid_amount || 0) - sub.bill if (shouldCountBill) {
} diff = (sub.paid_amount || 0) - sub.bill!
} else { } else {
diff = -(sub.saldo_used || 0) diff = (sub.paid_amount || 0) - (sub.saldo_used || 0)
} }
if (diff !== 0) { if (diff !== 0) {
+1 -1
View File
@@ -29,7 +29,7 @@ const menuItems = [
desc: 'Kelola PO buatan Anda', desc: 'Kelola PO buatan Anda',
}, },
{ name: 'Pesanan Saya', href: '/my-purchases', icon: ShoppingBag, desc: 'Riwayat titipan Anda' }, { name: 'Pesanan Saya', href: '/my-purchases', icon: ShoppingBag, desc: 'Riwayat titipan Anda' },
{ name: 'Buku Saldo', href: '/balances', icon: Wallet, desc: 'Pantau riwayat saldo' }, { name: 'Kas & Hutang', href: '/balances', icon: Wallet, desc: 'Pantau kas dan hutang' },
{ name: 'Laporan', href: '/reports', icon: BarChart2, desc: 'Ringkasan transaksi' }, { name: 'Laporan', href: '/reports', icon: BarChart2, desc: 'Ringkasan transaksi' },
] ]