feat: add pendingRent and pendingRentDays fields to rental interface and update status badge logic

This commit is contained in:
sazzadulalambd
2026-05-10 01:31:22 +06:00
parent 0924d84983
commit 93e1d289ca
2 changed files with 23 additions and 3 deletions

View File

@@ -55,6 +55,8 @@ interface Rental {
monthlyRate: number; monthlyRate: number;
totalPaid: number; totalPaid: number;
dueRental: number; dueRental: number;
pendingRent?: number;
pendingRentDays?: number;
paymentStatus: PaymentStatus; paymentStatus: PaymentStatus;
penaltyLevel: PenaltyLevel; penaltyLevel: PenaltyLevel;
penaltyAmount: number; penaltyAmount: number;
@@ -103,6 +105,8 @@ const mockRentals: Rental[] = [
monthlyRate: 3500, monthlyRate: 3500,
totalPaid: 38500, totalPaid: 38500,
dueRental: 0, dueRental: 0,
pendingRent: 0,
pendingRentDays: 0,
paymentStatus: 'paid', paymentStatus: 'paid',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -148,6 +152,8 @@ const mockRentals: Rental[] = [
monthlyRate: 3500, monthlyRate: 3500,
totalPaid: 3000, totalPaid: 3000,
dueRental: 3500, dueRental: 3500,
pendingRent: 3500,
pendingRentDays: 5,
paymentStatus: 'partial', paymentStatus: 'partial',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -186,6 +192,8 @@ const mockRentals: Rental[] = [
monthlyRate: 12000, monthlyRate: 12000,
totalPaid: 82000, totalPaid: 82000,
dueRental: 0, dueRental: 0,
pendingRent: 0,
pendingRentDays: 0,
paymentStatus: 'paid', paymentStatus: 'paid',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -218,6 +226,8 @@ const mockRentals: Rental[] = [
monthlyRate: 2200, monthlyRate: 2200,
totalPaid: 2600, totalPaid: 2600,
dueRental: 600, dueRental: 600,
pendingRent: 600,
pendingRentDays: 3,
paymentStatus: 'overdue', paymentStatus: 'overdue',
penaltyLevel: 'day3', penaltyLevel: 'day3',
penaltyAmount: 1000, penaltyAmount: 1000,

View File

@@ -47,6 +47,8 @@ interface Rental {
monthlyRate: number; monthlyRate: number;
totalPaid: number; totalPaid: number;
dueRental: number; dueRental: number;
pendingRent?: number;
pendingRentDays?: number;
paymentStatus: PaymentStatus; paymentStatus: PaymentStatus;
penaltyLevel: PenaltyLevel; penaltyLevel: PenaltyLevel;
penaltyAmount: number; penaltyAmount: number;
@@ -130,6 +132,8 @@ const mockRentals: Rental[] = [
monthlyRate: 3500, monthlyRate: 3500,
totalPaid: 38500, totalPaid: 38500,
dueRental: 0, dueRental: 0,
pendingRent: 0,
pendingRentDays: 0,
paymentStatus: 'paid', paymentStatus: 'paid',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -162,6 +166,8 @@ const mockRentals: Rental[] = [
monthlyRate: 3500, monthlyRate: 3500,
totalPaid: 3000, totalPaid: 3000,
dueRental: 3500, dueRental: 3500,
pendingRent: 3500,
pendingRentDays: 5,
paymentStatus: 'partial', paymentStatus: 'partial',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -193,6 +199,8 @@ const mockRentals: Rental[] = [
monthlyRate: 12000, monthlyRate: 12000,
totalPaid: 82000, totalPaid: 82000,
dueRental: 0, dueRental: 0,
pendingRent: 0,
pendingRentDays: 0,
paymentStatus: 'paid', paymentStatus: 'paid',
penaltyLevel: 'none', penaltyLevel: 'none',
penaltyAmount: 0, penaltyAmount: 0,
@@ -225,6 +233,8 @@ const mockRentals: Rental[] = [
monthlyRate: 2200, monthlyRate: 2200,
totalPaid: 2600, totalPaid: 2600,
dueRental: 600, dueRental: 600,
pendingRent: 600,
pendingRentDays: 3,
paymentStatus: 'overdue', paymentStatus: 'overdue',
penaltyLevel: 'day3', penaltyLevel: 'day3',
penaltyAmount: 1000, penaltyAmount: 1000,
@@ -304,7 +314,7 @@ export default function RentalsPage() {
return { style: styles[status], label: labels[status] || status }; return { style: styles[status], label: labels[status] || status };
}; };
const getPaymentStatusBadge = (status: PaymentStatus) => { const getPaymentStatusBadge = (status: PaymentStatus, pendingRent?: number, pendingRentDays?: number) => {
const styles: Record<PaymentStatus, string> = { const styles: Record<PaymentStatus, string> = {
paid: 'bg-green-100 text-green-700', paid: 'bg-green-100 text-green-700',
partial: 'bg-amber-100 text-amber-700', partial: 'bg-amber-100 text-amber-700',
@@ -317,7 +327,7 @@ export default function RentalsPage() {
overdue: 'Overdue', overdue: 'Overdue',
unpaid: 'Unpaid', unpaid: 'Unpaid',
}; };
return { style: styles[status], label: labels[status] || status }; return { style: styles[status], label: labels[status] || status, pendingRent: pendingRent || 0, pendingRentDays: pendingRentDays || 0 };
}; };
const getPenaltyBadge = (level: PenaltyLevel) => { const getPenaltyBadge = (level: PenaltyLevel) => {
@@ -540,7 +550,7 @@ export default function RentalsPage() {
<tbody className="divide-y divide-slate-50"> <tbody className="divide-y divide-slate-50">
{filteredRentals.map(rental => { {filteredRentals.map(rental => {
const statusBadge = getStatusBadge(rental.status); const statusBadge = getStatusBadge(rental.status);
const paymentBadge = getPaymentStatusBadge(rental.paymentStatus); const paymentBadge = getPaymentStatusBadge(rental.paymentStatus, rental.pendingRent, rental.pendingRentDays);
const penaltyBadge = getPenaltyBadge(rental.penaltyLevel); const penaltyBadge = getPenaltyBadge(rental.penaltyLevel);
const typeBadge = getTypeBadge(rental.type); const typeBadge = getTypeBadge(rental.type);
return ( return (