From 9d96ac4772eac045ddd39583ada5eb86fcd7322c Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Mon, 8 Jul 2019 20:37:14 +0200 Subject: [PATCH] Add cancelation charges --- .../components/SingleIncidentsTable.js | 61 ++++++++-- .../components/MemberIncidentsTables/index.js | 27 +++- client/src/constants/constants.js | 47 +++++++ client/src/constants/enums.js | 10 ++ client/src/constants/menuItems.js | 13 -- .../components/MemberSummary.js | 25 +++- constants/constants.js | 5 + controllers/integration.js | 20 +-- cronServices/checkBookingChanges.js | 33 +++++ environment.env | 2 + ...servations-table-remove-old-primary-key.js | 14 +++ ...-reservations-table-add-new-primary-key.js | 14 +++ ...9-create-booking-change-incidents-table.js | 34 ++++++ ...olumn-to-the-booking-reservations-table.js | 14 +++ models/bookingChangeIncident.js | 19 +++ models/bookingReservation.js | 7 +- package.json | 3 +- routes/index.js | 6 +- services/integration/bookingChangeCharges.js | 115 ++++++++++++++++++ services/integration/reports.js | 90 +++++++++++++- services/officeRnD/bookings.js | 80 +++++++++++- 21 files changed, 575 insertions(+), 64 deletions(-) create mode 100644 cronServices/checkBookingChanges.js create mode 100644 migrations/20190626135045-alter-booking-reservations-table-remove-old-primary-key.js create mode 100644 migrations/20190626173324-alter-booking-reservations-table-add-new-primary-key.js create mode 100644 migrations/20190708114639-create-booking-change-incidents-table.js create mode 100644 migrations/20190708120732-add-reservation-hourly-price-column-to-the-booking-reservations-table.js create mode 100644 models/bookingChangeIncident.js create mode 100644 services/integration/bookingChangeCharges.js diff --git a/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js b/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js index 5c1d91e..98e778a 100644 --- a/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js +++ b/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js @@ -4,33 +4,48 @@ import ReactTable from 'react-table'; import 'react-table/react-table.css'; import { NavLink } from 'react-router-dom'; -import {incidentsReportHeaderTitles} from '../../../constants/menuItems'; +import {incidentsReportHeaderTitles} from '../../../constants/constants'; import { + incidentTableTypes, incidentDescriptions, incidentLevelDescriptions, UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION, UNLOCKED_INCIDENT_STANDALONE, UNSCHEDULED_INCIDENT_AFTER_RESERVATION, UNSCHEDULED_INCIDENT_BEFORE_RESERVATION, UNSCHEDULED_INCIDENT_STANDALONE } from '../../../constants/enums'; +import { doorLockRelatedWithReservationIncidentHeaders, standaloneDoorLockIncidentHeaders, bookingChangeIncidentHeaders } from '../../../constants/constants'; const SingleIncidentsTable = props => { - const { loading, title, openMemberSummaryOnMemberClick, showBookingTimes, showDoorLockEntryTimes, hideMemberName } = props; + const { + loading, + title, + openMemberSummaryOnMemberClick, + hideMemberName, + tableType + } = props; const incidents = props.incidents ? props.incidents : []; - const columns = []; - if (incidents && incidents.length > 0){ - const incidentHeaders = Object.keys(incidentsReportHeaderTitles); - incidentHeaders.forEach((header) => { + if (incidents && incidents.length > 0){ + let tableHeaders; + switch (tableType) { + case incidentTableTypes.INCIDENTS_RELATED_TO_RESERVATIONS: + tableHeaders = doorLockRelatedWithReservationIncidentHeaders; + break; + case incidentTableTypes.STANDALONE_INCIDENTS: + tableHeaders = standaloneDoorLockIncidentHeaders; + break; + case incidentTableTypes.BOOKING_CHANGE_INCIDENTS: + tableHeaders = bookingChangeIncidentHeaders; + break; + default: + break; + } + + tableHeaders.forEach((header) => { const columnTitle = incidentsReportHeaderTitles[header]; let showColumn = true; - if ((header === 'bookingStart' || header === 'bookingEnd') && !showBookingTimes){ - showColumn = false; - } - if ((header === 'unlockTimestamp' || header === 'lockTimestamp') && !showDoorLockEntryTimes){ - showColumn = false; - } if (header === 'memberName' && hideMemberName){ showColumn = false; } @@ -55,6 +70,16 @@ const SingleIncidentsTable = props => { urlValue = `/practice-summary-report/${memberId}`; cellValue = props.value; break; + case 'reservation': + const bookingStart = props.row['_original'].bookingStart; + const bookingEnd = props.row['_original'].bookingEnd; + cellValue = `${bookingStart}\n${bookingEnd}`; + break; + case 'doorLockTimestamps': + const unlockTimestamp = props.row['_original'].unlockTimestamp; + const lockTimestamp = props.row['_original'].lockTimestamp; + cellValue = `${unlockTimestamp ? unlockTimestamp : '---'}\n${lockTimestamp ? lockTimestamp : '---'}`; + break; case 'incidentType': cellValue = incidentDescriptions[props.value]; break; @@ -85,6 +110,16 @@ const SingleIncidentsTable = props => { cellValue = `$ ${totalFeeFormatted}`; columnContentsAlignment = columnAlignments.right; break; + case 'oldReservation': + const oldBookingStart = props.row['_original'].oldBookingStart; + const oldBookingEnd = props.row['_original'].oldBookingEnd; + cellValue = `${oldBookingStart}\n${oldBookingEnd}`; + break; + case 'newReservation': + const newBookingStart = props.row['_original'].newBookingStart; + const newBookingEnd = props.row['_original'].newBookingEnd; + cellValue = `${newBookingStart}\n${newBookingEnd}`; + break; default: cellValue = props.value; } @@ -92,7 +127,7 @@ const SingleIncidentsTable = props => { if (openMemberSummaryOnMemberClick && urlValue){ return {cellValue} }else{ - return
{cellValue}
+ return
{cellValue}
} } }); diff --git a/client/src/components/MemberIncidentsTables/index.js b/client/src/components/MemberIncidentsTables/index.js index ed05541..ad6706a 100644 --- a/client/src/components/MemberIncidentsTables/index.js +++ b/client/src/components/MemberIncidentsTables/index.js @@ -3,7 +3,8 @@ import {Accordion, Label} from 'semantic-ui-react'; import SingleIncidentsTable from './components/SingleIncidentsTable'; import { UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION, UNLOCKED_INCIDENT_STANDALONE, UNSCHEDULED_INCIDENT_AFTER_RESERVATION, - UNSCHEDULED_INCIDENT_BEFORE_RESERVATION, UNSCHEDULED_INCIDENT_STANDALONE + UNSCHEDULED_INCIDENT_BEFORE_RESERVATION, UNSCHEDULED_INCIDENT_STANDALONE, BOOKING_MOVED_TO_ANOTHER_DAY, BOOKING_SHORTENED, + incidentTableTypes } from '../../constants/enums'; export default function MemberIncidentsTables (props) { @@ -11,6 +12,7 @@ export default function MemberIncidentsTables (props) { const incidentsRelatedToReservations = []; const standaloneIncidents = []; + const bookingChangeIncidents = []; if (Array.isArray(incidents)){ incidents.forEach((incident) => { @@ -25,6 +27,12 @@ export default function MemberIncidentsTables (props) { case UNSCHEDULED_INCIDENT_STANDALONE: standaloneIncidents.push(incident); break; + case BOOKING_MOVED_TO_ANOTHER_DAY: + case BOOKING_SHORTENED: + bookingChangeIncidents.push(incident); + break; + default: + break; } } }); @@ -35,8 +43,8 @@ export default function MemberIncidentsTables (props) { loading={pendingIncidents} incidents={incidentsRelatedToReservations} openMemberSummaryOnMemberClick - showBookingTimes hideMemberName={hideMemberName} + tableType={incidentTableTypes.INCIDENTS_RELATED_TO_RESERVATIONS} /> ); @@ -45,8 +53,18 @@ export default function MemberIncidentsTables (props) { loading={pendingIncidents} incidents={standaloneIncidents} openMemberSummaryOnMemberClick - showDoorLockEntryTimes hideMemberName={hideMemberName} + tableType={incidentTableTypes.STANDALONE_INCIDENTS} + /> + ); + + const bookingChangeIncidentsTable = ( + ); @@ -63,7 +81,8 @@ export default function MemberIncidentsTables (props) { }, { key: 'reservation-modification-incidents', - title: {content: