mongo projekcija proširena property-em "hasAttachment"
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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>;
|
||||||
Reference in New Issue
Block a user