show all listings, Bug Fixes

This commit is contained in:
Andreas Knuth 2024-05-09 16:10:01 +02:00
parent 6b61c19bd7
commit d508415de4
29 changed files with 810 additions and 410 deletions

View File

@ -6,7 +6,7 @@
"email": "robert.jackson@texasbizbrokers.com", "email": "robert.jackson@texasbizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "654321" "value": "654321"
} }
], ],
@ -37,7 +37,7 @@
"email": "amanda.taylor@lonestarbizbrokers.com", "email": "amanda.taylor@lonestarbizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "987654" "value": "987654"
} }
], ],
@ -57,7 +57,7 @@
"Caldwell County, TX" "Caldwell County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7i8j9k0l-1m2n-3o4p-5q6r-7s8t9u0v1w2x", "id": "7i8j9k0l-1m2n-3o4p-5q6r-7s8t9u0v1w2x",
@ -66,7 +66,7 @@
"email": "william@biztexas.com", "email": "william@biztexas.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "210987" "value": "210987"
} }
], ],
@ -86,7 +86,7 @@
"Medina County, TX" "Medina County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3y4z5a6b-7c8d-9e0f-1g2h-3i4j5k6l7m8n", "id": "3y4z5a6b-7c8d-9e0f-1g2h-3i4j5k6l7m8n",
@ -95,7 +95,7 @@
"email": "elizabeth.martinez@texasbusinesssales.com", "email": "elizabeth.martinez@texasbusinesssales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "543210" "value": "543210"
} }
], ],
@ -115,7 +115,7 @@
"Galveston County, TX" "Galveston County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "9o0p1q2r-3s4t-5u6v-7w8x-9y0z1a2b3c4d", "id": "9o0p1q2r-3s4t-5u6v-7w8x-9y0z1a2b3c4d",
@ -124,7 +124,7 @@
"email": "daniel@bizbrokersdfw.com", "email": "daniel@bizbrokersdfw.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "876543" "value": "876543"
} }
], ],
@ -144,7 +144,7 @@
"Johnson County, TX" "Johnson County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "5e6f7g8h-9i0j-1k2l-3m4n-5o6p7q8r9s0t", "id": "5e6f7g8h-9i0j-1k2l-3m4n-5o6p7q8r9s0t",
@ -153,7 +153,7 @@
"email": "olivia@businessbrokerstx.com", "email": "olivia@businessbrokerstx.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "109876" "value": "109876"
} }
], ],
@ -173,7 +173,7 @@
"Rusk County, TX" "Rusk County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "1u2v3w4x-5y6z-7a8b-9c0d-1e2f3g4h5i6j", "id": "1u2v3w4x-5y6z-7a8b-9c0d-1e2f3g4h5i6j",
@ -182,7 +182,7 @@
"email": "matthew.lee@texasbizadvisors.com", "email": "matthew.lee@texasbizadvisors.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "432109" "value": "432109"
} }
], ],
@ -202,7 +202,7 @@
"Lynn County, TX" "Lynn County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "7k8l9m0n-1o2p-3q4r-5s6t-7u8v9w0x1y2z", "id": "7k8l9m0n-1o2p-3q4r-5s6t-7u8v9w0x1y2z",
@ -211,7 +211,7 @@
"email": "sophia.wright@texasbizconnection.com", "email": "sophia.wright@texasbizconnection.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "765432" "value": "765432"
} }
], ],
@ -231,7 +231,7 @@
"Zapata County, TX" "Zapata County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "3a4b5c6d-7e8f-9g0h-1i2j-3k4l5m6n7o8p", "id": "3a4b5c6d-7e8f-9g0h-1i2j-3k4l5m6n7o8p",
@ -240,7 +240,7 @@
"email": "ethan@elpasobizbrokers.com", "email": "ethan@elpasobizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "098765" "value": "098765"
} }
], ],
@ -260,7 +260,7 @@
"Presidio County, TX" "Presidio County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "9q0r1s2t-3u4v-5w6x-7y8z-9a0b1c2d3e4f", "id": "9q0r1s2t-3u4v-5w6x-7y8z-9a0b1c2d3e4f",
@ -269,7 +269,7 @@
"email": "ava@texomabizsales.com", "email": "ava@texomabizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "432109" "value": "432109"
} }
], ],
@ -289,7 +289,7 @@
"Marshall County, OK" "Marshall County, OK"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "8a2b1c5d-7e6f-4g3h-9i1j-2k3l4m5n6o7p", "id": "8a2b1c5d-7e6f-4g3h-9i1j-2k3l4m5n6o7p",
@ -298,11 +298,11 @@
"email": "sarah.thompson@businessbrokers.com", "email": "sarah.thompson@businessbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "California", "name": "CA",
"value": "123456" "value": "123456"
}, },
{ {
"name": "Nevada", "name": "NV",
"value": "789012" "value": "789012"
} }
], ],
@ -322,7 +322,7 @@
"Washoe County, NV" "Washoe County, NV"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "4q5r6s7t-8u9v-0w1x-2y3z-4a5b6c7d8e9f", "id": "4q5r6s7t-8u9v-0w1x-2y3z-4a5b6c7d8e9f",
@ -331,7 +331,7 @@
"email": "michael@bizbrokers.net", "email": "michael@bizbrokers.net",
"licensedIn": [ "licensedIn": [
{ {
"name": "Florida", "name": "FL",
"value": "654321" "value": "654321"
} }
], ],
@ -351,7 +351,7 @@
"Volusia County, FL" "Volusia County, FL"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1g2h3i4j-5k6l-7m8n-9o0p-1q2r3s4t5u6v", "id": "1g2h3i4j-5k6l-7m8n-9o0p-1q2r3s4t5u6v",
@ -360,11 +360,11 @@
"email": "emily.davis@bizsaleexperts.com", "email": "emily.davis@bizsaleexperts.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "New York", "name": "NY",
"value": "987654" "value": "987654"
}, },
{ {
"name": "New Jersey", "name": "NJ",
"value": "210987" "value": "210987"
} }
], ],
@ -386,7 +386,7 @@
"Essex County, NJ" "Essex County, NJ"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7w8x9y0z-1a2b-3c4d-5e6f-7g8h9i0j1k2l", "id": "7w8x9y0z-1a2b-3c4d-5e6f-7g8h9i0j1k2l",
@ -395,7 +395,7 @@
"email": "david.wilson@bizacquisitions.com", "email": "david.wilson@bizacquisitions.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "543210" "value": "543210"
} }
], ],
@ -415,7 +415,7 @@
"Travis County, TX" "Travis County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3m4n5o6p-7q8r-9s0t-1u2v-3w4x5y6z7a8b", "id": "3m4n5o6p-7q8r-9s0t-1u2v-3w4x5y6z7a8b",
@ -424,11 +424,11 @@
"email": "jessica@bizbrokerexperts.com", "email": "jessica@bizbrokerexperts.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Illinois", "name": "IL",
"value": "876543" "value": "876543"
}, },
{ {
"name": "Wisconsin", "name": "WI",
"value": "109876" "value": "109876"
} }
], ],
@ -448,7 +448,7 @@
"Dane County, WI" "Dane County, WI"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "5g6h7i8j-9k0l-1m2n-3o4p-5q6r7s8t9u0v", "id": "5g6h7i8j-9k0l-1m2n-3o4p-5q6r7s8t9u0v",
@ -457,11 +457,11 @@
"email": "liam.patel@sunbeltbizbrokers.com", "email": "liam.patel@sunbeltbizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "765432" "value": "765432"
}, },
{ {
"name": "Louisiana", "name": "LA",
"value": "987654" "value": "987654"
} }
], ],
@ -481,7 +481,7 @@
"Dallas County, TX" "Dallas County, TX"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1w2x3y4z-5a6b-7c8d-9e0f-1g2h3i4j5k6l", "id": "1w2x3y4z-5a6b-7c8d-9e0f-1g2h3i4j5k6l",
@ -490,7 +490,7 @@
"email": "emma@newmexicobusinessbrokers.com", "email": "emma@newmexicobusinessbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "New Mexico", "name": "NM",
"value": "543210" "value": "543210"
} }
], ],
@ -510,7 +510,7 @@
"San Juan County, NM" "San Juan County, NM"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7m8n9o0p-1q2r-3s4t-5u6v-7w8x9y0z1a2b", "id": "7m8n9o0p-1q2r-3s4t-5u6v-7w8x9y0z1a2b",
@ -519,7 +519,7 @@
"email": "noah@oklahomabizsales.com", "email": "noah@oklahomabizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Oklahoma", "name": "OK",
"value": "876543" "value": "876543"
} }
], ],
@ -539,7 +539,7 @@
"Pottawatomie County, OK" "Pottawatomie County, OK"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3c4d5e6f-7g8h-9i0j-1k2l-3m4n5o6p7q8r", "id": "3c4d5e6f-7g8h-9i0j-1k2l-3m4n5o6p7q8r",
@ -548,7 +548,7 @@
"email": "isabella.garcia@arkansasbizconnect.com", "email": "isabella.garcia@arkansasbizconnect.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Arkansas", "name": "AR",
"value": "210987" "value": "210987"
} }
], ],
@ -568,7 +568,7 @@
"Washington County, AR" "Washington County, AR"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "9s0t1u2v-3w4x-5y6z-7a8b-9c0d1e2f3g4h", "id": "9s0t1u2v-3w4x-5y6z-7a8b-9c0d1e2f3g4h",
@ -577,7 +577,7 @@
"email": "mason@msbizbrokers.com", "email": "mason@msbizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Mississippi", "name": "MS",
"value": "543210" "value": "543210"
} }
], ],
@ -597,7 +597,7 @@
"Harrison County, MS" "Harrison County, MS"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "5i6j7k8l-9m0n-1o2p-3q4r-5s6t7u8v9w0x", "id": "5i6j7k8l-9m0n-1o2p-3q4r-5s6t7u8v9w0x",
@ -606,7 +606,7 @@
"email": "evelyn.davis@azbizsales.com", "email": "evelyn.davis@azbizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Arizona", "name": "AZ",
"value": "876543" "value": "876543"
} }
], ],
@ -626,7 +626,7 @@
"Mohave County, AZ" "Mohave County, AZ"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "1y2z3a4b-5c6d-7e8f-9g0h-1i2j3k4l5m6n", "id": "1y2z3a4b-5c6d-7e8f-9g0h-1i2j3k4l5m6n",
@ -635,7 +635,7 @@
"email": "harper@bamabizsales.com", "email": "harper@bamabizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Alabama", "name": "AL",
"value": "210987" "value": "210987"
} }
], ],
@ -655,7 +655,7 @@
"Mobile County, AL" "Mobile County, AL"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Marketing and advertising</li><li>Buyer screening and qualification</li><li>Negotiations and deal structuring</li><li>Due diligence coordination</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "7o8p9q0r-1s2t-3u4v-5w6x-7y8z9a0b1c2d", "id": "7o8p9q0r-1s2t-3u4v-5w6x-7y8z9a0b1c2d",
@ -664,7 +664,7 @@
"email": "abigail.martinez@georgiabizconnect.com", "email": "abigail.martinez@georgiabizconnect.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Georgia", "name": "GA",
"value": "543210" "value": "543210"
} }
], ],
@ -684,7 +684,7 @@
"Chatham County, GA" "Chatham County, GA"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "3e4f5g6h-7i8j-9k0l-1m2n-3o4p5q6r7s8t", "id": "3e4f5g6h-7i8j-9k0l-1m2n-3o4p5q6r7s8t",
@ -693,7 +693,7 @@
"email": "benjamin.robinson@gulfcoastbizbrokers.com", "email": "benjamin.robinson@gulfcoastbizbrokers.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Louisiana", "name": "LA",
"value": "876543" "value": "876543"
}, },
{ {
@ -717,7 +717,7 @@
"Jefferson Parish, LA" "Jefferson Parish, LA"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer and seller representation</li><li>Due diligence assistance</li><li>Negotiations and closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "9u0v1w2x-3y4z-5a6b-7c8d-9e0f1g2h3i4j", "id": "9u0v1w2x-3y4z-5a6b-7c8d-9e0f1g2h3i4j",
@ -726,7 +726,7 @@
"email": "charlotte@oklabizsales.com", "email": "charlotte@oklabizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Oklahoma", "name": "OK",
"value": "543210" "value": "543210"
} }
], ],
@ -746,7 +746,7 @@
"Osage County, OK" "Osage County, OK"
], ],
"offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h2>Services Offered</h2><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "5k6l7m8n-9o0p-1q2r-3s4t-5u6v7w8x9y0z", "id": "5k6l7m8n-9o0p-1q2r-3s4t-5u6v7w8x9y0z",
@ -755,7 +755,7 @@
"email": "elijah.nguyen@lonestarbizsales.com", "email": "elijah.nguyen@lonestarbizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "109876" "value": "109876"
} }
], ],
@ -775,7 +775,7 @@
"Galveston County, TX" "Galveston County, TX"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p", "id": "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p",
@ -784,7 +784,7 @@
"email": "avery.brown@nmbizsales.com", "email": "avery.brown@nmbizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "New Mexico", "name": "NM",
"value": "432109" "value": "432109"
} }
], ],
@ -804,7 +804,7 @@
"Grant County, NM" "Grant County, NM"
], ],
"offeredServices": "<h3>What We Offer</h3><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h3>What We Offer</h3><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7q8r9s0t-1u2v-3w4x-5y6z-7a8b9c0d1e2f", "id": "7q8r9s0t-1u2v-3w4x-5y6z-7a8b9c0d1e2f",
@ -813,7 +813,7 @@
"email": "scarlett@arkanbizsales.com", "email": "scarlett@arkanbizsales.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Arkansas", "name": "AR",
"value": "765432" "value": "765432"
} }
], ],
@ -833,7 +833,7 @@
"Boone County, AR" "Boone County, AR"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Detailed market analysis</li><li>Dedicated buyer and seller representation</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Detailed market analysis</li><li>Dedicated buyer and seller representation</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "3g4h5i6j-7k8l-9m0n-1o2p-3q4r5s6t7u8v", "id": "3g4h5i6j-7k8l-9m0n-1o2p-3q4r5s6t7u8v",
@ -842,7 +842,7 @@
"email": "levi.kim@magnoliabizconnect.com", "email": "levi.kim@magnoliabizconnect.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Mississippi", "name": "MS",
"value": "098765" "value": "098765"
} }
], ],
@ -862,7 +862,7 @@
"Tate County, MS" "Tate County, MS"
], ],
"offeredServices": "<h4>Our Services Include</h4><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h4>Our Services Include</h4><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "9w0x1y2z-3a4b-5c6d-7e8f-9g0h1i2j3k4l", "id": "9w0x1y2z-3a4b-5c6d-7e8f-9g0h1i2j3k4l",
@ -871,7 +871,7 @@
"email": "mila.singh@pelicanstatebiz.com", "email": "mila.singh@pelicanstatebiz.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Louisiana", "name": "LA",
"value": "432109" "value": "432109"
} }
], ],
@ -891,7 +891,7 @@
"St. Landry Parish, LA" "St. Landry Parish, LA"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "5m6n7o8p-9q0r-1s2t-3u4v-5w6x7y8z9a0b", "id": "5m6n7o8p-9q0r-1s2t-3u4v-5w6x7y8z9a0b",
@ -900,7 +900,7 @@
"email": "ezra.garcia@grandcanyonbiz.com", "email": "ezra.garcia@grandcanyonbiz.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Arizona", "name": "AZ",
"value": "765432" "value": "765432"
} }
], ],
@ -920,7 +920,7 @@
"Mohave County, AZ" "Mohave County, AZ"
], ],
"offeredServices": "<h3>Services We Provide</h3><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h3>Services We Provide</h3><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1c2d3e4f-5g6h-7i8j-9k0l-1m2n3o4p5q6r", "id": "1c2d3e4f-5g6h-7i8j-9k0l-1m2n3o4p5q6r",
@ -929,7 +929,7 @@
"email": "nora@alabamabizconnect.com", "email": "nora@alabamabizconnect.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Alabama", "name": "AL",
"value": "098765" "value": "098765"
} }
], ],
@ -949,7 +949,7 @@
"Clarke County, AL" "Clarke County, AL"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Detailed market analysis</li><li>Dedicated buyer and seller representation</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Detailed market analysis</li><li>Dedicated buyer and seller representation</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7s8t9u0v-1w2x-3y4z-5a6b-7c8d9e0f1g2h", "id": "7s8t9u0v-1w2x-3y4z-5a6b-7c8d9e0f1g2h",
@ -958,7 +958,7 @@
"email": "lucas.patel@peachtreebiz.com", "email": "lucas.patel@peachtreebiz.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Georgia", "name": "GA",
"value": "432109" "value": "432109"
} }
], ],
@ -978,7 +978,7 @@
"Bryan County, GA" "Bryan County, GA"
], ],
"offeredServices": "<h2>What We Offer</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>", "offeredServices": "<h2>What We Offer</h2><ul><li>Business valuation</li><li>Market analysis</li><li>Buyer search and qualification</li><li>Due diligence coordination</li><li>Financing assistance</li><li>Closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3i4j5k6l-7m8n-9o0p-1q2r-3s4t5u6v7w8x", "id": "3i4j5k6l-7m8n-9o0p-1q2r-3s4t5u6v7w8x",
@ -987,7 +987,7 @@
"email": "penelope@soonestatebiz.com", "email": "penelope@soonestatebiz.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Oklahoma", "name": "OK",
"value": "765432" "value": "765432"
} }
], ],
@ -1007,7 +1007,7 @@
"Pottawatomie County, OK" "Pottawatomie County, OK"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Thorough buyer screening and qualification</li><li>Skilled negotiations and deal structuring</li><li>Detailed due diligence coordination</li><li>Professional closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "9y0z1a2b-3c4d-5e6f-7g8h-9i0j1k2l3m4n", "id": "9y0z1a2b-3c4d-5e6f-7g8h-9i0j1k2l3m4n",
@ -1016,7 +1016,7 @@
"email": "asher.chavez@desertbizgroup.com", "email": "asher.chavez@desertbizgroup.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "New Mexico", "name": "NM",
"value": "098765" "value": "098765"
} }
], ],
@ -1036,7 +1036,7 @@
"Sandoval County, NM" "Sandoval County, NM"
], ],
"offeredServices": "<h4>Services We Provide</h4><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>", "offeredServices": "<h4>Services We Provide</h4><ul><li>Business listings</li><li>Buyer search and qualification</li><li>Due diligence support</li><li>Financing assistance</li><li>Closing coordination</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "5s6t7u8v-9w0x-1y2z-3a4b-5c6d7e8f9g0h", "id": "5s6t7u8v-9w0x-1y2z-3a4b-5c6d7e8f9g0h",
@ -1045,11 +1045,11 @@
"email": "daniel.hernandez@nationalbizsolutions.com", "email": "daniel.hernandez@nationalbizsolutions.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "California", "name": "CA",
"value": "135790" "value": "135790"
}, },
{ {
"name": "Nevada", "name": "NV",
"value": "086429" "value": "086429"
} }
], ],
@ -1069,7 +1069,7 @@
"Washoe County, NV" "Washoe County, NV"
], ],
"offeredServices": "<h3>Our Services</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h3>Our Services</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1i2j3k4l-5m6n-7o8p-9q0r-1s2t3u4v5w6x", "id": "1i2j3k4l-5m6n-7o8p-9q0r-1s2t3u4v5w6x",
@ -1078,11 +1078,11 @@
"email": "olivia.patel@bizusasolutions.com", "email": "olivia.patel@bizusasolutions.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Texas", "name": "TX",
"value": "753951" "value": "753951"
}, },
{ {
"name": "Louisiana", "name": "LA",
"value": "159753" "value": "159753"
} }
], ],
@ -1102,7 +1102,7 @@
"Jefferson Parish, LA" "Jefferson Parish, LA"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7y8z9a0b-1c2d-3e4f-5g6h-7i8j9k0l1m2n", "id": "7y8z9a0b-1c2d-3e4f-5g6h-7i8j9k0l1m2n",
@ -1111,11 +1111,11 @@
"email": "liam.garcia@usabizadvisors.com", "email": "liam.garcia@usabizadvisors.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Florida", "name": "FL",
"value": "369147" "value": "369147"
}, },
{ {
"name": "Georgia", "name": "GA",
"value": "258147" "value": "258147"
} }
], ],
@ -1135,7 +1135,7 @@
"Gwinnett County, GA" "Gwinnett County, GA"
], ],
"offeredServices": "<h4>What We Offer</h4><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h4>What We Offer</h4><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3o4p5q6r-7s8t-9u0v-1w2x-3y4z5a6b7c8d", "id": "3o4p5q6r-7s8t-9u0v-1w2x-3y4z5a6b7c8d",
@ -1144,11 +1144,11 @@
"email": "sophia.lee@americanbizsolutions.com", "email": "sophia.lee@americanbizsolutions.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "New York", "name": "NY",
"value": "246810" "value": "246810"
}, },
{ {
"name": "New Jersey", "name": "NJ",
"value": "135790" "value": "135790"
} }
], ],
@ -1168,7 +1168,7 @@
"Bergen County, NJ" "Bergen County, NJ"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "9e0f1g2h-3i4j-5k6l-7m8n-9o0p1q2r3s4t", "id": "9e0f1g2h-3i4j-5k6l-7m8n-9o0p1q2r3s4t",
@ -1177,7 +1177,7 @@
"email": "ava.kim@bizamericaadvisors.com", "email": "ava.kim@bizamericaadvisors.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Illinois", "name": "IL",
"value": "753951" "value": "753951"
}, },
{ {
@ -1201,7 +1201,7 @@
"Dane County, WI" "Dane County, WI"
], ],
"offeredServices": "<h3>Services We Provide</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h3>Services We Provide</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "5u6v7w8x-9y0z-1a2b-3c4d-5e6f7g8h9i0j", "id": "5u6v7w8x-9y0z-1a2b-3c4d-5e6f7g8h9i0j",
@ -1210,11 +1210,11 @@
"email": "noah.nguyen@nationwidebizadvisors.com", "email": "noah.nguyen@nationwidebizadvisors.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Washington", "name": "WA",
"value": "357159" "value": "357159"
}, },
{ {
"name": "Oregon", "name": "OR",
"value": "086429" "value": "086429"
} }
], ],
@ -1234,7 +1234,7 @@
"Washington County, OR" "Washington County, OR"
], ],
"offeredServices": "<h3>Our Services</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h3>Our Services</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "1k2l3m4n-5o6p-7q8r-9s0t-1u2v3w4x5y6z", "id": "1k2l3m4n-5o6p-7q8r-9s0t-1u2v3w4x5y6z",
@ -1243,11 +1243,11 @@
"email": "emma.patel@americanbusinessadvisors.com", "email": "emma.patel@americanbusinessadvisors.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Arizona", "name": "AZ",
"value": "246810" "value": "246810"
}, },
{ {
"name": "New Mexico", "name": "NM",
"value": "135790" "value": "135790"
} }
], ],
@ -1267,7 +1267,7 @@
"Santa Fe County, NM" "Santa Fe County, NM"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "7a8b9c0d-1e2f-3g4h-5i6j-7k8l9m0n1o2p", "id": "7a8b9c0d-1e2f-3g4h-5i6j-7k8l9m0n1o2p",
@ -1276,11 +1276,11 @@
"email": "william.johnson@bizusagroup.com", "email": "william.johnson@bizusagroup.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Colorado", "name": "CO",
"value": "753951" "value": "753951"
}, },
{ {
"name": "Utah", "name": "UT",
"value": "159753" "value": "159753"
} }
], ],
@ -1300,7 +1300,7 @@
"Utah County, UT" "Utah County, UT"
], ],
"offeredServices": "<h4>What We Offer</h4><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h4>What We Offer</h4><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"male" "gender": "male"
}, },
{ {
"id": "3q4r5s6t-7u8v-9w0x-1y2z-3a4b5c6d7e8f", "id": "3q4r5s6t-7u8v-9w0x-1y2z-3a4b5c6d7e8f",
@ -1309,11 +1309,11 @@
"email": "isabella.kim@nationalbusinesssolutions.com", "email": "isabella.kim@nationalbusinesssolutions.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "Michigan", "name": "MI",
"value": "369147" "value": "369147"
}, },
{ {
"name": "Ohio", "name": "OH",
"value": "258147" "value": "258147"
} }
], ],
@ -1333,7 +1333,7 @@
"Franklin County, OH" "Franklin County, OH"
], ],
"offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>", "offeredServices": "<ul><li>Comprehensive business valuation services</li><li>Targeted marketing and advertising campaigns</li><li>Extensive buyer database</li><li>Thorough due diligence assistance</li><li>Skilled negotiations and closing support</li></ul>",
"gender":"female" "gender": "female"
}, },
{ {
"id": "9g0h1i2j-3k4l-5m6n-7o8p-9q0r1s2t3u4v", "id": "9g0h1i2j-3k4l-5m6n-7o8p-9q0r1s2t3u4v",
@ -1342,11 +1342,11 @@
"email": "mia.hernandez@usabusinessgroup.com", "email": "mia.hernandez@usabusinessgroup.com",
"licensedIn": [ "licensedIn": [
{ {
"name": "North Carolina", "name": "NC",
"value": "753951" "value": "753951"
}, },
{ {
"name": "South Carolina", "name": "SC",
"value": "159753" "value": "159753"
} }
], ],
@ -1366,6 +1366,6 @@
"Charleston County, SC" "Charleston County, SC"
], ],
"offeredServices": "<h3>Services We Provide</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>", "offeredServices": "<h3>Services We Provide</h3><ul><li>Comprehensive business valuation</li><li>Targeted marketing and advertising</li><li>Extensive buyer network</li><li>Thorough due diligence coordination</li><li>Skilled negotiations and deal structuring</li><li>Professional closing support</li></ul>",
"gender":"female" "gender": "female"
} }
] ]

View File

@ -0,0 +1 @@
ALTER TABLE "commercials" ADD COLUMN "listingsCategory" varchar(255);

View File

@ -0,0 +1,480 @@
{
"id": "da786c6a-fd5f-4629-bd5e-3ecd42ab1f2c",
"prevId": "ad48c6eb-2d04-442f-9242-b6765553c7c4",
"version": "5",
"dialect": "pg",
"tables": {
"businesses": {
"name": "businesses",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"userId": {
"name": "userId",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"type": {
"name": "type",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"title": {
"name": "title",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"state": {
"name": "state",
"type": "char(2)",
"primaryKey": false,
"notNull": false
},
"price": {
"name": "price",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"favoritesForUser": {
"name": "favoritesForUser",
"type": "varchar(30)[]",
"primaryKey": false,
"notNull": false
},
"draft": {
"name": "draft",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"listingsCategory": {
"name": "listingsCategory",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"realEstateIncluded": {
"name": "realEstateIncluded",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"leasedLocation": {
"name": "leasedLocation",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"franchiseResale": {
"name": "franchiseResale",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"salesRevenue": {
"name": "salesRevenue",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"cashFlow": {
"name": "cashFlow",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"supportAndTraining": {
"name": "supportAndTraining",
"type": "text",
"primaryKey": false,
"notNull": false
},
"employees": {
"name": "employees",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"established": {
"name": "established",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"internalListingNumber": {
"name": "internalListingNumber",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"reasonForSale": {
"name": "reasonForSale",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"brokerLicencing": {
"name": "brokerLicencing",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"internals": {
"name": "internals",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created": {
"name": "created",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"updated": {
"name": "updated",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"visits": {
"name": "visits",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"lastVisit": {
"name": "lastVisit",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {
"businesses_userId_users_id_fk": {
"name": "businesses_userId_users_id_fk",
"tableFrom": "businesses",
"tableTo": "users",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"commercials": {
"name": "commercials",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"userId": {
"name": "userId",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"type": {
"name": "type",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"title": {
"name": "title",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"state": {
"name": "state",
"type": "char(2)",
"primaryKey": false,
"notNull": false
},
"price": {
"name": "price",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"favoritesForUser": {
"name": "favoritesForUser",
"type": "varchar(30)[]",
"primaryKey": false,
"notNull": false
},
"listingsCategory": {
"name": "listingsCategory",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"hideImage": {
"name": "hideImage",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"draft": {
"name": "draft",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"zipCode": {
"name": "zipCode",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"county": {
"name": "county",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"website": {
"name": "website",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"phoneNumber": {
"name": "phoneNumber",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"imageOrder": {
"name": "imageOrder",
"type": "varchar(200)[]",
"primaryKey": false,
"notNull": false
},
"imagePath": {
"name": "imagePath",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"created": {
"name": "created",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"updated": {
"name": "updated",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"visits": {
"name": "visits",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"lastVisit": {
"name": "lastVisit",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {
"commercials_userId_users_id_fk": {
"name": "commercials_userId_users_id_fk",
"tableFrom": "commercials",
"tableTo": "users",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"users": {
"name": "users",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"firstname": {
"name": "firstname",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"lastname": {
"name": "lastname",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"phoneNumber": {
"name": "phoneNumber",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"companyName": {
"name": "companyName",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"companyOverview": {
"name": "companyOverview",
"type": "text",
"primaryKey": false,
"notNull": false
},
"companyWebsite": {
"name": "companyWebsite",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"companyLocation": {
"name": "companyLocation",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"offeredServices": {
"name": "offeredServices",
"type": "text",
"primaryKey": false,
"notNull": false
},
"areasServed": {
"name": "areasServed",
"type": "varchar(100)[]",
"primaryKey": false,
"notNull": false
},
"hasProfile": {
"name": "hasProfile",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"hasCompanyLogo": {
"name": "hasCompanyLogo",
"type": "boolean",
"primaryKey": false,
"notNull": false
},
"licensedIn": {
"name": "licensedIn",
"type": "varchar(50)[]",
"primaryKey": false,
"notNull": false
},
"gender": {
"name": "gender",
"type": "gender",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {
"gender": {
"name": "gender",
"values": {
"male": "male",
"female": "female"
}
}
},
"schemas": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}

View File

@ -22,6 +22,13 @@
"when": 1714982539265, "when": 1714982539265,
"tag": "0002_black_zaladane", "tag": "0002_black_zaladane",
"breakpoints": true "breakpoints": true
},
{
"idx": 3,
"version": "5",
"when": 1715254754561,
"tag": "0003_tough_hobgoblin",
"breakpoints": true
} }
] ]
} }

View File

@ -1,8 +1,7 @@
import { integer, serial, text, pgTable, timestamp, jsonb, varchar, char, numeric, boolean, uuid, real, doublePrecision, pgEnum } from 'drizzle-orm/pg-core'; import { boolean, char, doublePrecision, integer, pgEnum, pgTable, text, timestamp, uuid, varchar } from 'drizzle-orm/pg-core';
import { InferInsertModel, InferModel, InferModelFromColumns, InferSelectModel, relations, sql } from 'drizzle-orm';
export const PG_CONNECTION = 'PG_CONNECTION'; export const PG_CONNECTION = 'PG_CONNECTION';
export const genderEnum = pgEnum('gender', ['male','female']); export const genderEnum = pgEnum('gender', ['male', 'female']);
export const users = pgTable('users', { export const users = pgTable('users', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
firstname: varchar('firstname', { length: 255 }).notNull(), firstname: varchar('firstname', { length: 255 }).notNull(),
@ -18,20 +17,20 @@ export const users = pgTable('users', {
areasServed: varchar('areasServed', { length: 100 }).array(), areasServed: varchar('areasServed', { length: 100 }).array(),
hasProfile: boolean('hasProfile'), hasProfile: boolean('hasProfile'),
hasCompanyLogo: boolean('hasCompanyLogo'), hasCompanyLogo: boolean('hasCompanyLogo'),
licensedIn:varchar('licensedIn', { length: 50 }).array(), licensedIn: varchar('licensedIn', { length: 50 }).array(),
gender: genderEnum('gender'), gender: genderEnum('gender'),
}); });
export const businesses = pgTable('businesses', { export const businesses = pgTable('businesses', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('userId').references(()=>users.id), userId: uuid('userId').references(() => users.id),
type: integer('type'), type: integer('type'),
title: varchar('title', { length: 255 }), title: varchar('title', { length: 255 }),
description: text('description'), description: text('description'),
city: varchar('city', { length: 255 }), city: varchar('city', { length: 255 }),
state: char('state', { length: 2 }), state: char('state', { length: 2 }),
price: doublePrecision('price'), price: doublePrecision('price'),
favoritesForUser: varchar('favoritesForUser',{length:30}).array(), favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
draft: boolean('draft'), draft: boolean('draft'),
listingsCategory: varchar('listingsCategory', { length: 255 }), listingsCategory: varchar('listingsCategory', { length: 255 }),
realEstateIncluded: boolean('realEstateIncluded'), realEstateIncluded: boolean('realEstateIncluded'),
@ -54,26 +53,26 @@ export const businesses = pgTable('businesses', {
export const commercials = pgTable('commercials', { export const commercials = pgTable('commercials', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('userId').references(()=>users.id), userId: uuid('userId').references(() => users.id),
type: integer('type'), type: integer('type'),
title: varchar('title', { length: 255 }), title: varchar('title', { length: 255 }),
description: text('description'), description: text('description'),
city: varchar('city', { length: 255 }), city: varchar('city', { length: 255 }),
state: char('state', { length: 2 }), state: char('state', { length: 2 }),
price: doublePrecision('price'), price: doublePrecision('price'),
favoritesForUser: varchar('favoritesForUser',{length:30}).array(), favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
listingsCategory: varchar('listingsCategory', { length: 255 }),
hideImage: boolean('hideImage'), hideImage: boolean('hideImage'),
draft: boolean('draft'), draft: boolean('draft'),
zipCode:integer('zipCode'), zipCode: integer('zipCode'),
county:varchar('county', { length: 255 }), county: varchar('county', { length: 255 }),
email: varchar('email', { length: 255 }), email: varchar('email', { length: 255 }),
website: varchar('website', { length: 255 }), website: varchar('website', { length: 255 }),
phoneNumber: varchar('phoneNumber', { length: 255 }), phoneNumber: varchar('phoneNumber', { length: 255 }),
imageOrder:varchar('imageOrder',{length:200}).array(), imageOrder: varchar('imageOrder', { length: 200 }).array(),
imagePath:varchar('imagePath',{length:50}), imagePath: varchar('imagePath', { length: 50 }),
created: timestamp('created'), created: timestamp('created'),
updated: timestamp('updated'), updated: timestamp('updated'),
visits: integer('visits'), visits: integer('visits'),
lastVisit: timestamp('lastVisit'), lastVisit: timestamp('lastVisit'),
}); });

View File

@ -1,48 +1,52 @@
import { Body, Controller, Delete, Get, Inject, Param, Post, Put, UploadedFile, UseInterceptors } from '@nestjs/common'; import { Body, Controller, Delete, Get, Inject, Param, Post, Put } from '@nestjs/common';
import { ListingsService } from './listings.service.js';
import { WINSTON_MODULE_PROVIDER } from 'nest-winston'; import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
import { Logger } from 'winston'; import { Logger } from 'winston';
import { FileInterceptor } from '@nestjs/platform-express'; import { commercials } from '../drizzle/schema.js';
import { FileService } from '../file/file.service.js'; import { FileService } from '../file/file.service.js';
import { ImageProperty, ListingCriteria } from '../models/main.model.js'; import { ListingCriteria } from '../models/main.model.js';
import { commercials} from '../drizzle/schema.js'; import { ListingsService } from './listings.service.js';
@Controller('listings/commercialProperty') @Controller('listings/commercialProperty')
export class CommercialPropertyListingsController { export class CommercialPropertyListingsController {
constructor(
constructor(private readonly listingsService:ListingsService,private fileService:FileService,@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger) { private readonly listingsService: ListingsService,
} private fileService: FileService,
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
) {}
@Get(':id') @Get(':id')
findById(@Param('id') id:string): any { findById(@Param('id') id: string): any {
return this.listingsService.findById(id,commercials); return this.listingsService.findById(id, commercials);
}
@Get('user/:userid')
findByUserId(@Param('userid') userid: string): any {
return this.listingsService.findByUserId(userid, commercials);
} }
// @Get('user/:userid')
// findByUserId(@Param('userid') userid:string): any {
// return this.listingsService.findByUserId(userid,commercials);
// }
@Post('search') @Post('search')
async find(@Body() criteria: ListingCriteria): Promise<any> { async find(@Body() criteria: ListingCriteria): Promise<any> {
return await this.listingsService.findListingsByCriteria(criteria,commercials); return await this.listingsService.findListingsByCriteria(criteria, commercials);
}
@Get('states/all')
getStates(): any {
return this.listingsService.getStates(commercials);
} }
@Post() @Post()
async create(@Body() listing: any){ async create(@Body() listing: any) {
this.logger.info(`Save Listing`); this.logger.info(`Save Listing`);
return await this.listingsService.createListing(listing,commercials) return await this.listingsService.createListing(listing, commercials);
} }
@Put() @Put()
async update(@Body() listing: any){ async update(@Body() listing: any) {
this.logger.info(`Save Listing`); this.logger.info(`Save Listing`);
return await this.listingsService.updateListing(listing.id,listing,commercials) return await this.listingsService.updateListing(listing.id, listing, commercials);
} }
@Delete(':id') @Delete(':id')
deleteById(@Param('id') id:string){ deleteById(@Param('id') id: string) {
this.listingsService.deleteListing(id,commercials) this.listingsService.deleteListing(id, commercials);
} }
@Put('imageOrder/:id') @Put('imageOrder/:id')
async changeImageOrder(@Param('id') id:string,@Body() imageOrder: string[]) { async changeImageOrder(@Param('id') id: string, @Body() imageOrder: string[]) {
this.listingsService.updateImageOrder(id, imageOrder) this.listingsService.updateImageOrder(id, imageOrder);
} }
} }

View File

@ -27,7 +27,6 @@ export interface BusinessListing {
price?: number; price?: number;
favoritesForUser?: string[]; favoritesForUser?: string[];
draft?: boolean; draft?: boolean;
listingsCategory?: string;
realEstateIncluded?: boolean; realEstateIncluded?: boolean;
leasedLocation?: boolean; leasedLocation?: boolean;
franchiseResale?: boolean; franchiseResale?: boolean;
@ -44,6 +43,7 @@ export interface BusinessListing {
updated?: Date; updated?: Date;
visits?: number; visits?: number;
lastVisit?: Date; lastVisit?: Date;
listingsCategory?: string;
} }
export interface CommercialPropertyListing { export interface CommercialPropertyListing {
@ -69,4 +69,5 @@ export interface CommercialPropertyListing {
updated?: Date; updated?: Date;
visits?: number; visits?: number;
lastVisit?: Date; lastVisit?: Date;
listingsCategory?: string;
} }

View File

@ -51,7 +51,7 @@
</li> </li>
</ul> </ul>
@if(listing && user && (user.id===listing?.userId || isAdmin())){ @if(listing && user && (user.id===listing?.userId || isAdmin())){
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editListing', listing.id]"></button> <button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editBusinessListing', listing.id]"></button>
} }
</div> </div>
<div class="col-12 md:col-6"> <div class="col-12 md:col-6">

View File

@ -61,9 +61,9 @@ export class DetailsBusinessListingComponent {
private sanitizer: DomSanitizer, private sanitizer: DomSanitizer,
private location: Location, private location: Location,
) { ) {
this.mailinfo = { sender: {}, userId: '', email: '' };
this.userService.getUserObservable().subscribe(user => { this.userService.getUserObservable().subscribe(user => {
this.user = user; this.user = user;
this.mailinfo = { sender: {}, userId: '', email: user.email };
}); });
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
} }
@ -79,6 +79,7 @@ export class DetailsBusinessListingComponent {
return this.userService.hasAdminRole(); return this.userService.hasAdminRole();
} }
async mail() { async mail() {
this.mailinfo.email = this.user.email;
this.mailinfo.userId = this.listing.userId; this.mailinfo.userId = this.listing.userId;
this.mailinfo.listing = this.listing; this.mailinfo.listing = this.listing;
await this.mailService.mail(this.mailinfo); await this.mailService.mail(this.mailinfo);

View File

@ -51,9 +51,10 @@
</ng-template> --> </ng-template> -->
</p-galleria> </p-galleria>
@if(listing && user && (user.id===listing?.userId || isAdmin())){ @if(listing && user && (user.id===listing?.userId || isAdmin())){
<button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editListing', listing.id]"></button> <button pButton pRipple label="Edit" icon="pi pi-file-edit" class="w-auto" [routerLink]="['/editCommercialPropertyListing', listing.id]"></button>
} }
</div> </div>
@if (mailinfo){
<div class="col-12 md:col-6"> <div class="col-12 md:col-6">
<div class="surface-card p-4 border-round p-fluid"> <div class="surface-card p-4 border-round p-fluid">
<div class="font-medium text-xl text-primary text-900 mb-3">Contact The Author of This Listing</div> <div class="font-medium text-xl text-primary text-900 mb-3">Contact The Author of This Listing</div>
@ -85,6 +86,7 @@
<button pButton pRipple label="Submit" icon="pi pi-file" class="w-auto" (click)="mail()"></button> <button pButton pRipple label="Submit" icon="pi pi-file" class="w-auto" (click)="mail()"></button>
</div> </div>
</div> </div>
}
</div> </div>
} }
</div> </div>

View File

@ -62,9 +62,9 @@ export class DetailsCommercialPropertyListingComponent {
private sanitizer: DomSanitizer, private sanitizer: DomSanitizer,
private location: Location, private location: Location,
) { ) {
this.mailinfo = { sender: {}, userId: '', email: '' };
this.userService.getUserObservable().subscribe(user => { this.userService.getUserObservable().subscribe(user => {
this.user = user; this.user = user;
this.mailinfo = { sender: {}, userId: '', email: user.email };
}); });
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
} }
@ -81,6 +81,7 @@ export class DetailsCommercialPropertyListingComponent {
return this.userService.hasAdminRole(); return this.userService.hasAdminRole();
} }
async mail() { async mail() {
this.mailinfo.email = this.user.email;
this.mailinfo.userId = this.listing.userId; this.mailinfo.userId = this.listing.userId;
this.mailinfo.listing = this.listing; this.mailinfo.listing = this.listing;
await this.mailService.mail(this.mailinfo); await this.mailService.mail(this.mailinfo);

View File

@ -92,11 +92,12 @@
} }
</div> </div>
</li> </li>
@if(businessListings?.length>0){
<li class="flex align-items-center py-3 px-2 flex-wrap surface-ground"> <li class="flex align-items-center py-3 px-2 flex-wrap surface-ground">
<div class="text-500 w-full md:w-2 font-medium">My Listings For Sale</div> <div class="text-500 w-full md:w-2 font-medium">My Business Listings For Sale</div>
<div class="text-900 w-full md:w-10"> <div class="text-900 w-full md:w-10">
<div class="grid mt-0 mr-0"> <div class="grid mt-0 mr-0">
@for (listing of userListings; track listing) { @for (listing of businessListings; track listing) {
<div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-business-listing', listing.id]"> <div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-business-listing', listing.id]">
<div class="p-3 border-1 surface-border border-round surface-card"> <div class="p-3 border-1 surface-border border-round surface-card">
<div class="text-900 mb-2"> <div class="text-900 mb-2">
@ -112,6 +113,30 @@
</div> </div>
</div> </div>
</li> </li>
} @if(commercialPropListings?.length>0){
<li class="flex align-items-center py-3 px-2 flex-wrap surface-ground">
<div class="text-500 w-full md:w-2 font-medium">My Commercial Property Listings For Sale</div>
<div class="text-900 w-full md:w-10">
<div class="grid mt-0 mr-0">
@for (listing of commercialPropListings; track listing) {
<div class="col-12 md:col-6 cursor-pointer" [routerLink]="['/details-commercial-property-listing', listing.id]">
<div class="p-3 border-1 surface-border border-round surface-card">
<div class="text-900 mb-2 flex align-items-center">
@if (listing.imageOrder?.length>0){
<img src="property/{{ listing.imagePath }}/{{ listing.imageOrder[0] }}" class="mr-3" style="width: 45px; height: 45px" />
} @else {
<img src="assets/images/placeholder_properties.jpg" class="mr-3" style="width: 45px; height: 45px" />
}
<span class="font-medium">{{ selectOptions.getCommercialProperty(listing.type) }}</span>
</div>
<div class="text-700">{{ listing.title }}</div>
</div>
</div>
}
</div>
</div>
</li>
}
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@ import { ActivatedRoute, Router } from '@angular/router';
import { MessageService } from 'primeng/api'; import { MessageService } from 'primeng/api';
import { GalleriaModule } from 'primeng/galleria'; import { GalleriaModule } from 'primeng/galleria';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { BusinessListing, User } from '../../../../../../bizmatch-server/src/models/db.model'; import { BusinessListing, CommercialPropertyListing, User } from '../../../../../../bizmatch-server/src/models/db.model';
import { KeyValue, ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model'; import { KeyValue, ListingCriteria } from '../../../../../../bizmatch-server/src/models/main.model';
import { environment } from '../../../../environments/environment'; import { environment } from '../../../../environments/environment';
import { ImageService } from '../../../services/image.service'; import { ImageService } from '../../../services/image.service';
@ -28,7 +28,8 @@ export class DetailsUserComponent {
user$: Observable<User>; user$: Observable<User>;
environment = environment; environment = environment;
criteria: ListingCriteria; criteria: ListingCriteria;
userListings: BusinessListing[]; businessListings: BusinessListing[];
commercialPropListings: CommercialPropertyListing[];
companyOverview: SafeHtml; companyOverview: SafeHtml;
offeredServices: SafeHtml; offeredServices: SafeHtml;
userLicensedIn: KeyValue[]; userLicensedIn: KeyValue[];
@ -49,7 +50,10 @@ export class DetailsUserComponent {
this.userLicensedIn = this.user.licensedIn.map(l => { this.userLicensedIn = this.user.licensedIn.map(l => {
return { name: l.split('|')[0], value: l.split('|')[1] }; return { name: l.split('|')[0], value: l.split('|')[1] };
}); });
this.userListings = await this.listingsService.getListingByUserId(this.id); const results = await Promise.all([await this.listingsService.getListingByUserId(this.id, 'business'), await this.listingsService.getListingByUserId(this.id, 'commercialProperty')]);
// Zuweisen der Ergebnisse zu den Member-Variablen der Klasse
this.businessListings = results[0];
this.commercialPropListings = results[1];
this.user$ = this.userService.getUserObservable(); this.user$ = this.userService.getUserObservable();
this.companyOverview = this.sanitizer.bypassSecurityTrustHtml(this.user.companyOverview); this.companyOverview = this.sanitizer.bypassSecurityTrustHtml(this.user.companyOverview);
this.offeredServices = this.sanitizer.bypassSecurityTrustHtml(this.user.offeredServices); this.offeredServices = this.sanitizer.bypassSecurityTrustHtml(this.user.offeredServices);

View File

@ -27,25 +27,25 @@
<div class="w-12 lg:w-6 text-center lg:text-right flex"> <div class="w-12 lg:w-6 text-center lg:text-right flex">
<div class="mt-5"> <div class="mt-5">
<ul class="flex flex-column align-items-left gap-3 px-2 py-3 list-none surface-border"> <ul class="flex flex-column align-items-left gap-3 px-2 py-3 list-none surface-border">
<li><button pButton pRipple icon="pi pi-user" (click)="activeTabAction = 'business'" label="Businesses" [ngClass]="{ 'p-button-text text-700': activeTabAction !== 'business' }"></button></li> <li><button pButton pRipple icon="pi pi-user" (click)="changeTab('business')" label="Businesses" [ngClass]="{ 'p-button-text text-700': activeTabAction !== 'business' }"></button></li>
<li> <li>
<button <button
pButton pButton
pRipple pRipple
icon="pi pi-shield" icon="pi pi-shield"
(click)="activeTabAction = 'commercialProperty'" (click)="changeTab('commercialProperty')"
label="Commercial Property" label="Commercial Property"
[ngClass]="{ 'p-button-text text-700': activeTabAction != 'commercialProperty' }" [ngClass]="{ 'p-button-text text-700': activeTabAction != 'commercialProperty' }"
></button> ></button>
</li> </li>
<li> <li>
<button pButton pRipple icon="pi pi-globe" (click)="activeTabAction = 'broker'" label="Professionals/Brokers Directory" [ngClass]="{ 'p-button-text text-700': activeTabAction != 'broker' }"></button> <button pButton pRipple icon="pi pi-globe" (click)="changeTab('broker')" label="Professionals/Brokers Directory" [ngClass]="{ 'p-button-text text-700': activeTabAction != 'broker' }"></button>
</li> </li>
</ul> </ul>
</div> </div>
<div class="mt-5"> <div [ngClass]="{ 'mt-5': activeTabAction === 'business', 'mt-11': activeTabAction === 'commercialProperty', 'mt-22': activeTabAction === 'broker' }">
<div class="flex flex-column align-items-right gap-3 px-2 py-3 my-3 surface-border"> <div class="flex flex-column align-items-right gap-3 px-2 py-3 my-3 surface-border">
<p-dropdown [options]="selectOptions.states" [(ngModel)]="criteria.state" optionLabel="name" optionValue="value" [showClear]="true" placeholder="State" [style]="{ width: '200px' }"></p-dropdown> <p-dropdown [options]="states" [(ngModel)]="criteria.state" optionLabel="name" optionValue="value" [showClear]="true" placeholder="State" [style]="{ width: '200px' }"></p-dropdown>
@if(activeTabAction === 'business'){ @if(activeTabAction === 'business'){
<p-dropdown [options]="selectOptions.typesOfBusiness" [(ngModel)]="criteria.type" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Category" [style]="{ width: '200px' }"></p-dropdown> <p-dropdown [options]="selectOptions.typesOfBusiness" [(ngModel)]="criteria.type" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Category" [style]="{ width: '200px' }"></p-dropdown>
} @if(activeTabAction === 'commercialProperty'){ } @if(activeTabAction === 'commercialProperty'){
@ -61,10 +61,8 @@
} @if(activeTabAction === 'business' || activeTabAction === 'commercialProperty'){ } @if(activeTabAction === 'business' || activeTabAction === 'commercialProperty'){
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.minPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Min Price" [style]="{ width: '200px' }"></p-dropdown> <p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.minPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Min Price" [style]="{ width: '200px' }"></p-dropdown>
<p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.maxPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Max Price" [style]="{ width: '200px' }"></p-dropdown> <p-dropdown [options]="selectOptions.prices" [(ngModel)]="criteria.maxPrice" optionLabel="name" optionValue="value" [showClear]="true" placeholder="Max Price" [style]="{ width: '200px' }"></p-dropdown>
} @else {
<div style="height: 46px">&nbsp;</div>
} }
<button pButton pRipple label="Find" class="ml-3 font-bold" [style]="{ width: '170px' }" (click)="search()"></button> <button pButton pRipple label="Find" class="ml-3 font-bold" [style]="{ width: '200px' }" (click)="search()"></button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -16,3 +16,9 @@
.p-button-white { .p-button-white {
color: aliceblue; color: aliceblue;
} }
.mt-11 {
margin-top: 5.9rem !important;
}
.mt-22 {
margin-top: 9.7rem !important;
}

View File

@ -11,6 +11,7 @@ import { StyleClassModule } from 'primeng/styleclass';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { User } from '../../../../../bizmatch-server/src/models/db.model'; import { User } from '../../../../../bizmatch-server/src/models/db.model';
import { ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model'; import { ListingCriteria } from '../../../../../bizmatch-server/src/models/main.model';
import { ListingsService } from '../../services/listings.service';
import { SelectOptionsService } from '../../services/select-options.service'; import { SelectOptionsService } from '../../services/select-options.service';
import { UserService } from '../../services/user.service'; import { UserService } from '../../services/user.service';
import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../utils/utils'; import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../utils/utils';
@ -22,22 +23,38 @@ import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from
styleUrl: './home.component.scss', styleUrl: './home.component.scss',
}) })
export class HomeComponent { export class HomeComponent {
activeTabAction = 'business'; activeTabAction: 'business' | 'commercialProperty' | 'broker' = 'business';
type: string; type: string;
maxPrice: string; maxPrice: string;
minPrice: string; minPrice: string;
criteria: ListingCriteria; criteria: ListingCriteria;
user$: Observable<User>; user$: Observable<User>;
public constructor(private router: Router, private activatedRoute: ActivatedRoute, public selectOptions: SelectOptionsService, public userService: UserService) { states = [];
public constructor(private router: Router, private activatedRoute: ActivatedRoute, public selectOptions: SelectOptionsService, public userService: UserService, private listingsService: ListingsService) {
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
resetCriteria(this.criteria); resetCriteria(this.criteria);
} }
ngOnInit() { async ngOnInit() {
this.user$ = this.userService.getUserObservable(); this.user$ = this.userService.getUserObservable();
if (this.activeTabAction === 'business' || this.activeTabAction === 'commercialProperty') {
const statesResult = await this.listingsService.getAllStates(this.activeTabAction);
this.states = statesResult.map(s => s.state).map(ls => ({ name: this.selectOptions.getState(ls as string), value: ls }));
} else {
this.states = [];
}
}
async changeTab(tabname: 'business' | 'commercialProperty' | 'broker') {
this.activeTabAction = tabname;
if (this.activeTabAction === 'business' || this.activeTabAction === 'commercialProperty') {
const statesResult = await this.listingsService.getAllStates(this.activeTabAction);
this.states = statesResult.map(s => s.state).map(ls => ({ name: this.selectOptions.getState(ls as string), value: ls }));
} else {
this.states = this.selectOptions.states;
}
} }
search() { search() {
this.router.navigate([`${this.activeTabAction}Listings`]); const data = { keep: true };
this.router.navigate([`${this.activeTabAction}Listings`], { state: { data } });
} }
login() { login() {

View File

@ -8,7 +8,7 @@
<div class="col-2"> <div class="col-2">
<p-inputGroup> <p-inputGroup>
<input id="name" type="text" pInputText [(ngModel)]="criteria.name" placeholder="Name" /> <input id="name" type="text" pInputText [(ngModel)]="criteria.name" placeholder="Name" />
<button type="button" pButton icon="pi pi-times" class="p-button-danger" (click)="reset()"></button> <button type="button" pButton icon="pi pi-times" class="p-button-secondary" (click)="reset()"></button>
</p-inputGroup> </p-inputGroup>
</div> </div>
<div class="col-1 col-offset-7"> <div class="col-1 col-offset-7">

View File

@ -18,7 +18,7 @@ import { ImageService } from '../../../services/image.service';
import { ListingsService } from '../../../services/listings.service'; import { ListingsService } from '../../../services/listings.service';
import { SelectOptionsService } from '../../../services/select-options.service'; import { SelectOptionsService } from '../../../services/select-options.service';
import { UserService } from '../../../services/user.service'; import { UserService } from '../../../services/user.service';
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils'; import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
@Component({ @Component({
selector: 'app-broker-listings', selector: 'app-broker-listings',
@ -54,14 +54,13 @@ export class BrokerListingsComponent {
private router: Router, private router: Router,
private cdRef: ChangeDetectorRef, private cdRef: ChangeDetectorRef,
private imageService: ImageService, private imageService: ImageService,
private route: ActivatedRoute,
) { ) {
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
this.criteria.type = undefined; this.criteria.type = undefined;
this.router.getCurrentNavigation(); this.route.data.subscribe(async () => {
this.activatedRoute.snapshot; if (!this.router.getCurrentNavigation().extras.state) {
this.activatedRoute.params.subscribe(params => { resetCriteria(this.criteria);
if (this.activatedRoute.snapshot.fragment === '') {
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
} }
this.init(); this.init();
}); });

View File

@ -42,7 +42,7 @@
<div class="wrapper"> <div class="wrapper">
<div class="grid"> <div class="grid">
@for (listing of listings; track listing.id) { @for (listing of listings; track listing.id) {
<div *ngIf="listing.listingsCategory === 'business'" class="col-12 lg:col-3 p-3"> <div class="col-12 lg:col-3 p-3">
<div class="shadow-2 border-round surface-card mb-3 h-full flex-column justify-content-between flex"> <div class="shadow-2 border-round surface-card mb-3 h-full flex-column justify-content-between flex">
<div class="p-4 h-full flex flex-column"> <div class="p-4 h-full flex flex-column">
<div class="flex align-items-center"> <div class="flex align-items-center">

View File

@ -18,7 +18,7 @@ import { environment } from '../../../../environments/environment';
import { ImageService } from '../../../services/image.service'; import { ImageService } from '../../../services/image.service';
import { ListingsService } from '../../../services/listings.service'; import { ListingsService } from '../../../services/listings.service';
import { SelectOptionsService } from '../../../services/select-options.service'; import { SelectOptionsService } from '../../../services/select-options.service';
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils'; import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
@Component({ @Component({
selector: 'app-business-listings', selector: 'app-business-listings',
@ -65,15 +65,14 @@ export class BusinessListingsComponent {
private router: Router, private router: Router,
private cdRef: ChangeDetectorRef, private cdRef: ChangeDetectorRef,
private imageService: ImageService, private imageService: ImageService,
private route: ActivatedRoute,
) { ) {
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
this.router.getCurrentNavigation(); this.criteria.type = undefined;
this.activatedRoute.snapshot; this.route.data.subscribe(async () => {
this.activatedRoute.params.subscribe(params => { if (!this.router.getCurrentNavigation().extras.state) {
if (this.activatedRoute.snapshot.fragment === '') { resetCriteria(this.criteria);
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
} }
this.category = (<any>params).type;
this.init(); this.init();
}); });
} }

View File

@ -17,7 +17,7 @@ import { environment } from '../../../../environments/environment';
import { ImageService } from '../../../services/image.service'; import { ImageService } from '../../../services/image.service';
import { ListingsService } from '../../../services/listings.service'; import { ListingsService } from '../../../services/listings.service';
import { SelectOptionsService } from '../../../services/select-options.service'; import { SelectOptionsService } from '../../../services/select-options.service';
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../../utils/utils'; import { getCriteriaStateObject, getSessionStorageHandler, resetCriteria } from '../../../utils/utils';
@Component({ @Component({
selector: 'app-commercial-property-listings', selector: 'app-commercial-property-listings',
@ -50,14 +50,13 @@ export class CommercialPropertyListingsComponent {
private router: Router, private router: Router,
private cdRef: ChangeDetectorRef, private cdRef: ChangeDetectorRef,
private imageService: ImageService, private imageService: ImageService,
private route: ActivatedRoute,
) { ) {
this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler); this.criteria = onChange(getCriteriaStateObject(), getSessionStorageHandler);
this.criteria.type = undefined; this.criteria.type = undefined;
this.router.getCurrentNavigation(); this.route.data.subscribe(async () => {
this.activatedRoute.snapshot; if (!this.router.getCurrentNavigation().extras.state) {
this.activatedRoute.params.subscribe(params => { resetCriteria(this.criteria);
if (this.activatedRoute.snapshot.fragment === '') {
this.criteria = onChange(createGenericObject<ListingCriteria>(), getSessionStorageHandler);
} }
this.init(); this.init();
}); });

View File

@ -1,23 +0,0 @@
#sky-line {
background-image: url(../../../assets/images/bw-sky.jpg);
height: 204px;
background-position: bottom;
background-size: cover;
margin-bottom: -1px;
}
.search{
background-color: #343F69;
}
::ng-deep p-paginator div {
background-color: var(--surface-200) !important;
// background-color: var(--surface-400) !important;
}
.rounded-image {
border-radius: 6px;
// width: 100px;
max-width: 100px;
height: 45px;
border: 1px solid rgba(0,0,0,0.2);
padding: 1px 1px;
object-fit: contain;
}

View File

@ -1,124 +0,0 @@
import { ChangeDetectorRef, Component } from '@angular/core';
import { ButtonModule } from 'primeng/button';
import { CheckboxModule } from 'primeng/checkbox';
import { InputTextModule } from 'primeng/inputtext';
import { StyleClassModule } from 'primeng/styleclass';
import { SelectOptionsService } from '../../services/select-options.service';
import { DropdownModule } from 'primeng/dropdown';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { ToggleButtonModule } from 'primeng/togglebutton';
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
import { ListingsService } from '../../services/listings.service';
import { Observable, lastValueFrom } from 'rxjs';
import { PaginatorModule } from 'primeng/paginator';
import onChange from 'on-change';
import { createGenericObject, getCriteriaStateObject, getSessionStorageHandler } from '../../utils/utils';
import { InitEditableRow } from 'primeng/table';
import { environment } from '../../../environments/environment';
import { UserService } from '../../services/user.service';
import { ImageService } from '../../services/image.service';
import { ListingCriteria, ListingType } from '../../../../../bizmatch-server/src/models/main.model';
import { User } from '../../../../../bizmatch-server/src/models/db.model';
@Component({
selector: 'app-listings',
standalone: true,
imports: [CommonModule, StyleClassModule, ButtonModule, CheckboxModule, InputTextModule, DropdownModule, FormsModule, StyleClassModule, ToggleButtonModule, RouterModule, PaginatorModule],
templateUrl: './listings.component.html',
styleUrls: ['./listings.component.scss', '../pages.scss']
})
export class ListingsComponent {
// environment=environment;
// listings: Array<ListingType>;
// users: Array<User>
// filteredListings: Array<ListingType>;
// criteria:ListingCriteria;
// realEstateChecked: boolean;
// maxPrice: string;
// minPrice: string;
// type:string;
// states = [];
// statesSet = new Set();
// state:string;
// first: number = 0;
// rows: number = 12;
// totalRecords:number = 0;
// ts = new Date().getTime()
// public category: 'business' | 'commercialProperty' | 'professionals_brokers' | undefined;
// constructor(public selectOptions: SelectOptionsService,
// private listingsService:ListingsService,
// private userService:UserService,
// private activatedRoute: ActivatedRoute,
// private router:Router,
// private cdRef:ChangeDetectorRef,
// private imageService:ImageService) {
// this.criteria = onChange(getCriteriaStateObject(),getSessionStorageHandler);
// this.router.getCurrentNavigation()
// this.activatedRoute.snapshot
// this.activatedRoute.params.subscribe(params => {
// if (this.activatedRoute.snapshot.fragment===''){
// this.criteria = onChange(createGenericObject<ListingCriteria>(),getSessionStorageHandler)
// this.first=0;
// }
// this.category = (<any>params).type;
// this.criteria.listingsCategory=this.category;
// this.init()
// })
// }
// async ngOnInit(){
// }
// async init(){
// if (this.category==='business' || this.category==='commercialProperty'){
// this.users=[]
// this.listings=await this.listingsService.getListings(this.criteria);
// this.setStates();
// this.totalRecords=this.listings.length
// this.cdRef.markForCheck();
// this.cdRef.detectChanges();
// } else {
// this.listings=[]
// this.filteredListings=[];
// this.users=await this.userService.search(this.criteria);
// const profiles = await this.imageService.getProfileImagesForUsers(this.users.map(u=>u.id));
// const logos = await this.imageService.getCompanyLogosForUsers(this.users.map(u=>u.id));
// this.users.forEach(u=>{
// u.hasProfile=profiles[u.id]
// u.hasCompanyLogo=logos[u.id]
// })
// this.cdRef.markForCheck();
// this.cdRef.detectChanges();
// }
// }
// setStates(){
// this.statesSet=new Set();
// this.listings.forEach(l=>{
// if (l.state){
// this.statesSet.add(l.state)
// }
// })
// this.states = [...this.statesSet].map((ls) =>({name:this.selectOptions.getState(ls as string),value:ls}))
// }
// async search() {
// this.listings= await this.listingsService.getListings(this.criteria);
// this.setStates();
// this.totalRecords=this.listings.length
// this.filteredListings =[...this.listings].splice(this.first,this.rows);
// this.cdRef.markForCheck();
// this.cdRef.detectChanges();
// }
// onPageChange(event: any) {
// this.criteria.start=event.first;
// this.criteria.length=event.rows;
// this.criteria.page=event.page;
// this.criteria.pageCount=event.pageCount;
// }
// imageErrorHandler(listing: ListingType) {
// listing.hideImage = true; // Bild ausblenden, wenn es nicht geladen werden kann
// }
}

View File

@ -80,7 +80,9 @@ export class AccountComponent {
printInvoice(invoice: Invoice) {} printInvoice(invoice: Invoice) {}
async updateProfile(user: User) { async updateProfile(user: User) {
this.user.licensedIn = this.userLicensedIn.map(l => `${l.name}|${l.value}`);
await this.userService.save(this.user); await this.userService.save(this.user);
this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'Acount changes have been persisted', life: 3000 });
} }
onUploadCompanyLogo(event: any) { onUploadCompanyLogo(event: any) {

View File

@ -103,7 +103,7 @@
@for (image of propertyImages; track image) { @for (image of propertyImages; track image) {
<span cdkDropList mixedCdkDropList> <span cdkDropList mixedCdkDropList>
<div cdkDrag mixedCdkDragSizeHelper class="image-wrap"> <div cdkDrag mixedCdkDragSizeHelper class="image-wrap">
<img src="property/{{ listing.id }}/{{ image }}" [alt]="image" class="shadow-2" cdkDrag /> <img src="property/{{ listing.imagePath }}/{{ image }}" [alt]="image" class="shadow-2" cdkDrag />
<fa-icon [icon]="faTrash" (click)="deleteConfirm(image)"></fa-icon> <fa-icon [icon]="faTrash" (click)="deleteConfirm(image)"></fa-icon>
</div> </div>
</span> </span>

View File

@ -28,7 +28,7 @@
<tr> <tr>
<td class="wide-column line-height-3">{{ listing.title }}</td> <td class="wide-column line-height-3">{{ listing.title }}</td>
<td>{{ selectOptions.getListingsCategory(listing.listingsCategory) }}</td> <td>{{ selectOptions.getListingsCategory(listing.listingsCategory) }}</td>
<td>{{ selectOptions.getState(listing.city) }}</td> <td>{{ selectOptions.getState(listing.state) }}</td>
<td> <td>
@if(isBusinessListing(listing)){ @if(isBusinessListing(listing)){
<button pButton pRipple icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2" [routerLink]="['/editBusinessListing', listing.id]"></button> <button pButton pRipple icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2" [routerLink]="['/editBusinessListing', listing.id]"></button>

View File

@ -34,12 +34,14 @@ export class MyListingComponent {
const keycloakUser = this.userService.getKeycloakUser(); const keycloakUser = this.userService.getKeycloakUser();
const email = keycloakUser.email; const email = keycloakUser.email;
this.user = await this.userService.getByMail(email); this.user = await this.userService.getByMail(email);
this.myListings = await this.listingsService.getListingByUserId(this.user.id); const result = await Promise.all([await this.listingsService.getListingByUserId(this.user.id, 'business'), await this.listingsService.getListingByUserId(this.user.id, 'commercialProperty')]);
this.myListings = [...result[0], ...result[1]];
} }
async deleteListing(listing: ListingType) { async deleteListing(listing: ListingType) {
await this.listingsService.deleteListing(listing.id, getListingType(listing)); await this.listingsService.deleteListing(listing.id, getListingType(listing));
this.myListings = await this.listingsService.getListingByUserId(this.user.id); const result = await Promise.all([await this.listingsService.getListingByUserId(this.user.id, 'business'), await this.listingsService.getListingByUserId(this.user.id, 'commercialProperty')]);
this.myListings = [...result[0], ...result[1]];
} }
confirm(event: Event, listing: ListingType) { confirm(event: Event, listing: ListingType) {

View File

@ -23,8 +23,8 @@ export class ListingsService {
const result = this.http.get<ListingType>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/${id}`); const result = this.http.get<ListingType>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/${id}`);
return result; return result;
} }
getListingByUserId(userid: string): Promise<ListingType[]> { getListingByUserId(userid: string, listingsCategory: 'business' | 'commercialProperty'): Promise<ListingType[]> {
return lastValueFrom(this.http.get<BusinessListing[]>(`${this.apiBaseUrl}/bizmatch/listings/business/user/${userid}`)); return lastValueFrom(this.http.get<BusinessListing[]>(`${this.apiBaseUrl}/bizmatch/listings/${listingsCategory}/user/${userid}`));
} }
async save(listing: any, listingsCategory: 'business' | 'professionals_brokers' | 'commercialProperty') { async save(listing: any, listingsCategory: 'business' | 'professionals_brokers' | 'commercialProperty') {
if (listing.id) { if (listing.id) {