mongo projekcija proširena property-em "hasAttachment"

This commit is contained in:
2025-01-13 16:05:15 +01:00
parent 6ceff261fb
commit 103e371d5f
3 changed files with 40 additions and 13 deletions

View File

@@ -110,13 +110,32 @@ export const fetchAllLocations = withUser(async (user:AuthenticatedUser, year:nu
// fetch all locations for the given year // fetch all locations for the given year
const locations = await dbClient.collection<BillingLocation>("lokacije") const locations = await dbClient.collection<BillingLocation>("lokacije")
.find( .aggregate([
{ {
$match: {
userId, userId,
"yearMonth.year": year, "yearMonth.year": year,
}, },
},
{ {
projection: { $addFields: {
bills: {
$map: {
input: "$bills",
as: "bill",
in: {
_id: "$$bill._id",
name: "$$bill.name",
paid: "$$bill.paid",
payedAmount: "$$bill.payedAmount",
hasAttachment: { $ne: ["$$bill.attachment", null] },
},
},
},
},
},
{
$project: {
"_id": 1, "_id": 1,
// "userId": 0, // "userId": 0,
// "userEmail": 0, // "userEmail": 0,
@@ -130,17 +149,20 @@ export const fetchAllLocations = withUser(async (user:AuthenticatedUser, year:nu
"bills.name": 1, "bills.name": 1,
"bills.paid": 1, "bills.paid": 1,
"bills.payedAmount": 1, "bills.payedAmount": 1,
"bills.hasAttachment": 1,
// "bills.attachment": 0, // "bills.attachment": 0,
// "bills.notes": 0, // "bills.notes": 0,
// "bills.barcodeImage": 1, // "bills.barcodeImage": 1,
}, },
} },
) {
.sort({ $sort: {
"yearMonth.year": -1, "yearMonth.year": -1,
"yearMonth.month": -1, "yearMonth.month": -1,
name: 1, name: 1,
}) },
},
])
.toArray(); .toArray();
return(locations) return(locations)

View File

@@ -42,6 +42,11 @@ export interface Bill {
payedAmount?: number | null; payedAmount?: number | null;
/** attached document (optional) */ /** attached document (optional) */
attachment?: BillAttachment|null; attachment?: BillAttachment|null;
/**
* true if there an attachment
* @description this field enables us to send this info to the client without sending large attachment - it's an optimization
*/
hasAttachment: boolean;
/** (optional) notes */ /** (optional) notes */
notes?: string|null; notes?: string|null;
/** (optional) image data containing PDF471 bar code */ /** (optional) image data containing PDF471 bar code */

View File

@@ -7,7 +7,7 @@ export interface BillBadgeProps {
bill: Bill bill: Bill
}; };
export const BillBadge:FC<BillBadgeProps> = ({ locationId, bill: { _id: billId, name, paid, attachment }}) => export const BillBadge:FC<BillBadgeProps> = ({ locationId, bill: { _id: billId, name, paid, hasAttachment }}) =>
<Link href={`/bill/${locationId}-${billId}/edit`} className={`badge badge-lg ${paid?"badge-success":" badge-outline"} ${ !paid && !!attachment ? "btn-outline btn-success" : "" } cursor-pointer`}> <Link href={`/bill/${locationId}-${billId}/edit`} className={`badge badge-lg ${paid?"badge-success":" badge-outline"} ${ !paid && hasAttachment ? "btn-outline btn-success" : "" } cursor-pointer`}>
{name} {name}
</Link>; </Link>;