From 94cc401fc57c142874188b61d7313a902da25270 Mon Sep 17 00:00:00 2001 From: pjsilvestre Date: Mon, 2 Dec 2019 13:06:38 -0800 Subject: [PATCH] Implement fulfilment system --- express-app/routes/donation-form.js | 26 +++-- express-app/routes/my-donations.js | 56 +++++++++- express-app/routes/my-requests.js | 52 +++++++++- express-app/views/my-donations.pug | 155 +++++++++++++++++++--------- express-app/views/my-requests.pug | 123 +++++++++++++++------- 5 files changed, 311 insertions(+), 101 deletions(-) diff --git a/express-app/routes/donation-form.js b/express-app/routes/donation-form.js index 3be33d5..aec4bbd 100644 --- a/express-app/routes/donation-form.js +++ b/express-app/routes/donation-form.js @@ -65,17 +65,19 @@ router.post('/', (req, res) => { ); } - let requested = false; - let request_accepted = false; - let expired = false; - let fulfilled_donator = false; - let fulfilled_donatee = false; - - let halal = req.body.halal ? true : false; - let kosher = req.body.kosher ? true : false; - let pescatarian = req.body.pescatarian ? true : false; - let vegan = req.body.vegan ? true : false; - let vegetarian = req.body.vegetarian ? true : false; + const requested = false; + const request_accepted = false; + const expired = false; + const fulfilled_donator = false; + const fulfilled_donatee = false; + const hidden_donator = false; + const hidden_donatee = false; + + const halal = req.body.halal ? true : false; + const kosher = req.body.kosher ? true : false; + const pescatarian = req.body.pescatarian ? true : false; + const vegan = req.body.vegan ? true : false; + const vegetarian = req.body.vegetarian ? true : false; // create payload to send to Firestore let data = { @@ -93,6 +95,8 @@ router.post('/', (req, res) => { expired: expired, fulfilled_donator: fulfilled_donator, fulfilled_donatee: fulfilled_donatee, + hidden_donator: hidden_donator, + hidden_donatee: hidden_donatee, halal: halal, kosher: kosher, diff --git a/express-app/routes/my-donations.js b/express-app/routes/my-donations.js index 6cfe4dd..432eaa0 100644 --- a/express-app/routes/my-donations.js +++ b/express-app/routes/my-donations.js @@ -118,9 +118,59 @@ router.post('/accept', (req, res) => { unsubscribe(); }); -/* POST my-donations page, deleting a donation, redirecting to my-donations*/ +/* POST my-donations page, fulfilling a request, redirecting to my-donations */ +router.post('/fulfill', (req, res) => { + let unsubscribe = firebase.auth().onAuthStateChanged(async user => { + if (!user) { + res.redirect('/'); + } else { + try { + let donation_id = req.body.donation_id; + await database + .collection('donations') + .doc(donation_id) + .update({ + fulfilled_donator: true, + }); + } catch (error) { + res.render('index', { user: user, errorMessage: error }); + } + + res.redirect('/my-donations'); + } + }); + + unsubscribe(); +}); + +/* POST my-donations page, hiding a donation, redirecting to my-donations */ +router.post('/hide', (req, res) => { + let unsubscribe = firebase.auth().onAuthStateChanged(async user => { + if (!user) { + res.redirect('/'); + } else { + try { + let donation_id = req.body.donation_id; + await database + .collection('donations') + .doc(donation_id) + .update({ + hidden_donator: true, + }); + } catch (error) { + res.render('index', { user: user, errorMessage: error }); + } + + res.redirect('/my-donations'); + } + }); + + unsubscribe(); +}); + +/* POST my-donations page, deleting a donation, redirecting to my-donations */ router.post('/delete', (req, res) => { - firebase.auth().onAuthStateChanged(async user => { + let unsubscribe = firebase.auth().onAuthStateChanged(async user => { if (!user) { res.redirect('/'); } else { @@ -139,6 +189,8 @@ router.post('/delete', (req, res) => { } } }); + + unsubscribe(); }); module.exports = router; diff --git a/express-app/routes/my-requests.js b/express-app/routes/my-requests.js index 713a92c..f8a6325 100644 --- a/express-app/routes/my-requests.js +++ b/express-app/routes/my-requests.js @@ -91,7 +91,57 @@ router.get('/', (req, res) => { unsubscribe(); }); -/* POST my-requests page, cancelling a request, redirecting to my-requests*/ +/* POST my-requests page, fulfilling a request, redirecting to my-requests */ +router.post('/fulfill', (req, res) => { + let unsubscribe = firebase.auth().onAuthStateChanged(async user => { + if (!user) { + res.redirect('/'); + } else { + try { + let donation_id = req.body.donation_id; + await database + .collection('donations') + .doc(donation_id) + .update({ + fulfilled_donatee: true, + }); + } catch (error) { + res.render('index', { user: user, errorMessage: error }); + } + + res.redirect('/my-requests'); + } + }); + + unsubscribe(); +}); + +/* POST my-requests page, hiding a request, redirecting to my-requests */ +router.post('/hide', (req, res) => { + let unsubscribe = firebase.auth().onAuthStateChanged(async user => { + if (!user) { + res.redirect('/'); + } else { + try { + let donation_id = req.body.donation_id; + await database + .collection('donations') + .doc(donation_id) + .update({ + hidden_donatee: true, + }); + } catch (error) { + res.render('index', { user: user, errorMessage: error }); + } + + res.redirect('/my-requests'); + } + }); + + unsubscribe(); +}); + +/* POST my-requests page, cancelling a request, redirecting to my-requests */ router.post('/cancel', (req, res) => { let unsubscribe = firebase.auth().onAuthStateChanged(async user => { if (!user) { diff --git a/express-app/views/my-donations.pug b/express-app/views/my-donations.pug index 2a1356d..a18c805 100644 --- a/express-app/views/my-donations.pug +++ b/express-app/views/my-donations.pug @@ -6,55 +6,108 @@ block content div(class="container") h1 Your Donations: div(class="card-deck") + each donation in donations - if donation.requested && !donation.request_accepted - div(class="card text-center") - h5(class="card-header")=`${donation.food_item} requested by ${donation.donatee}!` - ul(class="list-group list-group-flush") - li(class="list-group-item")=`Amount: ${donation.amount}` - if donation.dietary_restrictions !== "" - li(class="list-group-item")=`${donation.dietary_restrictions}` - li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` - li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` - li(class="list-group-item")=`Expires: ${donation.expiration_date}` - div(class="card-footer") - form(action="/my-donations/accept" method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-warning") Accept Request - form(action=("/my-donations/delete") method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-danger") Delete Donation - else if donation.requested && donation.request_accepted - div(class="card text-center") - h5(class="card-header")=`${donation.food_item} requested by ${donation.donatee}!` - ul(class="list-group list-group-flush") - li(class="list-group-item")=`Amount: ${donation.amount}` - if donation.dietary_restrictions !== "" - li(class="list-group-item")=`${donation.dietary_restrictions}` - li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` - li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` - li(class="list-group-item")=`Expires: ${donation.expiration_date}` - div(class="card-footer") - form - input(type="hidden") - button(type="submit" class="btn btn-success") Fulfill Request - form(action=("/my-donations/delete") method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-danger") Delete Donation - else - div(class="card text-center") - h5(class="card-header")=`${donation.food_item}` - ul(class="list-group list-group-flush") - li(class="list-group-item")=`Amount: ${donation.amount}` - if donation.dietary_restrictions !== "" - li(class="list-group-item")=`${donation.dietary_restrictions}` - li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` - li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` - li(class="list-group-item")=`Expires: ${donation.expiration_date}` - div(class="card-footer") - form - input(type="hidden") - button(type="submit" class="btn btn-secondary" disabled) No Requests - form(action=("/my-donations/delete") method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-danger") Delete Donation \ No newline at end of file + + if !donation.hidden_donator + + if donation.requested + + if !donation.request_accepted + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item} requested by ${donation.donatee}!` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form(action="/my-donations/accept" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-warning") Accept Request + form(action="/my-donations/delete" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Delete Donation + + else if donation.request_accepted + + if !donation.fulfilled_donator + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item} requested by ${donation.donatee}!` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form(action="/my-donations/fulfill" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-success") Fulfill Request + form(action=("/my-donations/delete") method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Delete Donation + + else if donation.fulfilled_donator + + if !donation.fulfilled_donatee + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item} requested by ${donation.donatee}!` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-info" disabled) Waiting for donatee to fulfill... + form(action=("/my-donations/delete") method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger" disabled) Delete Donation + + else if donation.fulfilled_donatee + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item} request by ${donation.donatee} fulfilled!` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-success" disabled) Request fulfilled! + form(action=("/my-donations/hide") method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Hide Donation + + else if !donation.requested + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item}` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-secondary" disabled) No Requests + form(action=("/my-donations/delete") method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Delete Donation \ No newline at end of file diff --git a/express-app/views/my-requests.pug b/express-app/views/my-requests.pug index eaebb2d..453c20b 100644 --- a/express-app/views/my-requests.pug +++ b/express-app/views/my-requests.pug @@ -6,40 +6,91 @@ block content div(class="container") h1 Your Requests: div(class="card-deck") + each donation in donations - if donation.request_accepted - div(class="card text-center") - h5(class="card-header")=`${donation.food_item}` - ul(class="list-group list-group-flush") - li(class="list-group-item")=`Amount: ${donation.amount}` - li(class="list-group-item")=`Donated by: ${donation.donator}` - if donation.dietary_restrictions !== "" - li(class="list-group-item")=`${donation.dietary_restrictions}` - li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` - li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` - li(class="list-group-item")=`Expires: ${donation.expiration_date}` - div(class="card-footer") - form(action="/my-requests/fulfill" method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-success") Request Accepted - Fulfill - form(action="/my-requests/cancel" method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-danger") Cancel Request - else - div(class="card text-center") - h5(class="card-header")=`${donation.food_item}` - ul(class="list-group list-group-flush") - li(class="list-group-item")=`Amount: ${donation.amount}` - li(class="list-group-item")=`Donated by: ${donation.donator}` - if donation.dietary_restrictions !== "" - li(class="list-group-item")=`${donation.dietary_restrictions}` - li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` - li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` - li(class="list-group-item")=`Expires: ${donation.expiration_date}` - div(class="card-footer") - form() - input(type="hidden") - button(type="submit" class="btn btn-secondary" disabled) Request Pending - form(action="/my-requests/cancel" method="POST") - input(type="hidden" name="donation_id" value=donation.id) - button(type="submit" class="btn btn-danger") Cancel Request \ No newline at end of file + + if !donation.hidden_donatee + + if donation.request_accepted + + if !donation.fulfilled_donatee + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item}` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + li(class="list-group-item")=`Donated by: ${donation.donator}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form(action="/my-requests/fulfill" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-success") Request Accepted - Fulfill + form(action="/my-requests/cancel" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Cancel Request + + else if donation.fulfilled_donatee + + if !donation.fulfilled_donator + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item}` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + li(class="list-group-item")=`Donated by: ${donation.donator}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-info" disabled) Waiting for donor to fulfill... + form + input(type="hidden") + button(type="submit" class="btn btn-danger" disabled) Cancel Request + + else if donation.fulfilled_donator + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item}` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + li(class="list-group-item")=`Donated by: ${donation.donator}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-success" disabled) Request fulfilled! + form(action=("/my-requests/hide") method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Hide Donation + + else if !donation.requested_accepted + + div(class="card text-center") + h5(class="card-header")=`${donation.food_item}` + ul(class="list-group list-group-flush") + li(class="list-group-item")=`Amount: ${donation.amount}` + li(class="list-group-item")=`Donated by: ${donation.donator}` + if donation.dietary_restrictions !== "" + li(class="list-group-item")=`${donation.dietary_restrictions}` + li(class="list-group-item")=`Meeting Point: ${donation.meeting_point}` + li(class="list-group-item")=`Pickup Date: ${donation.pickup_date}` + li(class="list-group-item")=`Expires: ${donation.expiration_date}` + div(class="card-footer") + form + input(type="hidden") + button(type="submit" class="btn btn-secondary" disabled) Request Pending + form(action="/my-requests/cancel" method="POST") + input(type="hidden" name="donation_id" value=donation.id) + button(type="submit" class="btn btn-danger") Cancel Request \ No newline at end of file