{"version":3,"sources":["GlobalFunctions.js","Contexts/InvoiceDataContext.js","Contexts/AppStateContext.js","Components/ApproveRejectInvoice.js","Components/ChargeSummaryTable.js","Components/AccountingSummaryTable.js","Mappings.js","Components/AuthenticatedRoute.js","tge-logo-lockup-dark-fern-rgb.svg","Components/TextFieldAdvanceOnEnter.js","Components/MfaDialog.js","Components/survey/newSurvey.jsx","Components/survey/surveyDetails.js","Components/LoginPageMfa.js","tge-logo-lockup-white.svg","Components/NavBar.js","Components/SideMenu.js","Components/InvoiceCard.js","Components/FinanceCard.js","Components/DpcStatusCard.js","Components/Dashboard.js","Components/Snack.js","Components/ChangePasswordForm.js","Components/SettingsPage.js","Reducers/LclDataReducer.js","Contexts/LclDataContext.js","Reducers/ParcelDataReducer.js","Contexts/ParcelDataContext.js","Reducers/HourlyDataReducer.js","Contexts/HourlyDataContext.js","Reducers/LinehaulDataReducer.js","Contexts/LinehaulFixedDataContext.js","Reducers/LinehaulFloatingDataReducer.js","Contexts/LinehaulFloatingDataContext.js","Components/ButtonApprove.js","Components/ButtonDownload.js","Components/lcl/ApproveLcl.js","Components/ButtonDelete.js","Components/lcl/DeleteLcl.js","Components/ButtonRestore.js","Components/lcl/RestoreLcl.js","Components/ButtonUpload.js","Components/ButtonEdit.js","Components/UploadFileSection.js","Components/lcl/EditLcl.js","Components/lcl/ViewLcl.js","Components/lcl/LclActionMenu.js","Components/lcl/LclDataTable.js","Components/ButtonCreate.js","Components/lcl/CreateLcl.js","Components/ButtonLoadMore.js","Components/lcl/LclDisplayDay.js","Components/parcel/ApproveParcel.js","Components/parcel/DeleteParcel.js","Components/parcel/RestoreParcel.js","Components/parcel/EditParcel.js","Components/parcel/ViewParcel.js","Components/parcel/ParcelActionMenu.js","Components/parcel/ParcelDataTable.js","Components/parcel/CreateParcel.js","Components/parcel/ParcelDisplayDay.js","Components/linehaulFixed/ApproveLinehaulFixed.js","Components/linehaulFixed/EditLinehaulFixed.js","Components/linehaulFixed/DeleteLinehaulFixed.js","Components/linehaulFixed/ViewLinehaulFixed.js","Components/linehaulFixed/LinehaulFixedActionMenu.js","Components/linehaulFixed/LinehaulFixedDataTable.js","Components/linehaulFixed/CreateLinehaulFixed.js","Components/linehaulFixed/CreateLinehaulFixedFab.js","Components/linehaulFixed/LinehaulFixedDisplayDay.js","Components/linehaulFloating/ApproveLinehaulFloating.js","Components/linehaulFloating/EditLinehaulFloating.js","Components/linehaulFloating/DeleteLinehaulFloating.js","Components/linehaulFloating/ViewLinehaulFloating.js","Components/linehaulFloating/LinehaulFloatingActionMenu.js","Components/linehaulFloating/LinehaulFloatingDataTable.js","Components/linehaulFloating/CreateLinehaulFloating.js","Components/linehaulFloating/CreateLinehaulFloatingFab.js","Components/linehaulFloating/LinehaulFloatingDisplayDay.js","Components/hourly/SelectConNote.js","Components/hourly/BranchItem.js","Components/hourly/CreateBranchItem.js","Components/hourly/AssignBranchInputComponent.js","Components/hourly/CreateHourly.js","Components/hourly/ApproveHourly.js","Components/hourly/EditHourly.js","Components/hourly/DeleteHourly.js","Components/hourly/ViewHourly.js","Components/hourly/HourlyActionMenu.js","Components/hourly/HourlyItem.js","Components/hourly/HourlyDisplayDay.js","Components/InvoicePreviewTable.js","Components/ConfirmSubmitDialog.js","Components/TruckViewPage.js","Components/DefaultRoute.js","Components/WeekRoute.js","Components/TruckRoute.js","Components/InvoicePage.js","Components/CustomTable.js","Components/DatePicker.js","Components/WeeklyAuditPage.js","Components/DateTextField.js","Components/InvoiceAuditPage.js","Components/MasterData/InputComponents.js","Components/MasterData/UserEntityClass.js","Components/MasterData/EntityForm.js","Components/MasterData/EntityFormControl.js","Components/MasterData/EntityTable.js","Components/MasterData/EntityTableFilter.js","Components/MasterData/ResetPasswordCard.js","Components/MasterData/UserPage.js","Components/MasterData/VendorEntityClass.js","Components/MasterData/VendorPage.js","Components/MasterData/TruckEntityClass.js","Components/MasterData/TruckPage.js","Components/MasterData/BranchEntityClass.js","Components/MasterData/BranchPage.js","Components/MasterData/RateEntityClass.js","Components/MasterData/RatePage.js","Components/MasterData/RouteEntityClass.js","Components/MasterData/RoutePage.js","Components/MasterData/MasterDataPage.js","Components/PageRoute.js","Components/App.js","index.js","Contexts/UserDataContext.js"],"names":["getMonday","date","setDate","getDate","getDay","formatDate","yyyy","String","getFullYear","MM","getMonth","padStart","dd","HH","getHours","mm","getMinutes","ss","getSeconds","fff","getMilliseconds","getFormattedAucklandDatetime","now","Date","aucklandTime","toLocaleTimeString","timeZone","hour","minute","second","hour12","toLocaleString","year","month","day","setNzTimeZero","utcDate","offset","getAucklandTimezoneOffset","iso","toString","nzZeroTimeIso","valueOf","toISOString","split","nzZeroTimeDate","getWeekDates","week","utc_now","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","zeroTime","monday","sunday","start","end","startDate","endDate","getDateFromWeekAndDay","currentDate","dateString","dateIsoString","getDayOfWeekFromDate","getWeekFromDate","givenMonday","Math","round","getTime","getSingleDayString","startDayTime","endDayTime","downloadData","body","fileName","contentType","data","buf","Buffer","from","blob","Blob","type","url","URL","createObjectURL","element","document","createElement","style","display","setAttribute","appendChild","click","removeChild","getToken","sessionStorage","getItem","setToken","token","setItem","getDeviceId","localStorage","setDeviceId","deviceId","getFloatingRate","truckPayments","weekStartDate","rate","some","payment","floatingRate","paymentStartDate","paymentEndDate","displayMoney","value","dollars","floor","cents","toFixed","getCurrentBranchesObject","branchArray","filter","branch","branchStartDate","branchEndDate","reduce","acc","cur","id","getCurrentBranchesArray","InvoiceDataContext","createContext","InvoiceDataContextProvider","props","invoiceData","setInvoiceData","useState","invoiceDataModel","displayName","displayValue","netTotal","truckId","approvalState","invoiceStatuses","vendorTradingName","_jsx","Provider","updateInvoice","invoice","idx","findIndex","slice","children","AppStateContext","AppStateContextProvider","appState","setAppState","menuOpen","tab","allTablesClosed","dayAcc","dayCur","tableOpen","setTableOpen","scrollOffsetY","setScrollOffsetY","undefined","setScrollPosition","useCallback","window","pageYOffset","documentElement","parentNode","scrollTop","console","log","clearScrollPosition","scrollToPosition","scrollTo","invoiceTableFilterText","setInvoiceTableFilterText","fetch","setFetch","axios","require","ApproveRejectInvoice","_ref","invoiceId","others","userData","setUserData","useContext","UserDataContext","history","useHistory","open","setOpen","loading","setLoading","formData","setFormData","values","comments","valid","sendApproveRequest","async","endPoint","roleId","roles","tollAdmin","tollManager","_userData$invoiceStat","res","method","headers","Authorization","newStatus","adminApproved","managerApproved","error","sendRejectRequest","rejected","handleChange","event","target","name","_jsxs","_Fragment","Tooltip","title","IconButton","onClick","VisibilityIcon","Dialog","onClose","DialogTitle","Divider","DialogContent","ChargeSummaryTable","AccountingSummaryTable","TextField","disabled","fullWidth","label","InputLabelProps","shrink","adminComments","managerComments","onChange","submitted","DialogActions","Button","variant","color","userName","push","setTimeout","revokeObjectURL","useStyles","makeStyles","theme","header","padding","spacing","fontSize","fontWeight","rest","rows","setRows","classes","useEffect","fetchData","Table","TableHead","TableRow","TableCell","className","TableBody","map","dpcType","description","netAmount","faf","costCentre","accountCode","statuses","bug","draft","added","changed","deleted","restored","amended","addedApproved","changedApproved","deletedApproved","hourlyLinked","sysAdmin","ownerDriver","tollSystemAdmin","getApprovalState","action","currentStatus","dataType","dpcIncomplete","dpcPending","unsubmitted","na","invoiceStatusOptions","pageSize","AuthenticatedRoute","component","Component","redirectPath","verifyToken","Object","keys","includes","Backdrop","CircularProgress","size","Route","loggedIn","Redirect","to","TextFieldAdvanceOnEnter","onEnter","otherProps","onKeyPress","key","preventDefault","defaultProps","advanceFocus","focusableElements","querySelectorAll","forEach","ele","i","activeElement","length","focus","flexColContainer","flexDirection","flexColItem","margin","feedback","maxHeight","MfaDialog","verifyMfa","mfaKey","setMfaKey","errorMessage","setErrorMessage","Boolean","mfaRequired","DialogContentText","autoFocus","placeholder","Box","border","borderRadius","borderColor","Survey","onConfirm","onCancel","show","confirmButtonText","cancelButtonText","MuiDialog","maxWidth","useTheme","typography","body2","paddingTop","justifyContent","width","paddingBottom","surveyStartDate","surveyEndDate","mailTo","container","field","textAlign","headerIcon","forgotPassword","svg","height","version","position","right","bottom","LoginPage","login","formValues","setFormValues","username","password","authenticate","currDate","isShowSurvey","setisShowSurvey","closeSurvey","Typography","commit","substring","process","REACT_APP_ENV","Container","Grid","justify","alignItems","item","xs","src","toll_logo","alt","text","handleClick","Link","SurveyMessage","root","flexGrow","menuButton","marginRight","menuIcon","ButtonAppBar","logout","AppBar","Toolbar","edge","MenuIcon","HomeIcon","left","SideMenu","Drawer","anchor","List","ListItem","ListItemText","primary","button","ListItemIcon","SettingsIcon","MeetingRoomIcon","GroupIcon","InvoiceCard","Card","CardHeader","CardContent","CardActions","FinanceCard","noPadding","extraPadding","paddingLeft","paddingRight","loadParent","loadChild","InvoiceStatusCard","weeks","reqArray","trucks","truckObj","driverId","request","statusObj","Axios","invoiceState","err","sendRequests","tradingName","TruckIcon","_userData$invoiceStat2","_userData$invoiceStat3","_userData$invoiceStat4","Dashboard","firstName","sm","DpcStatusCard","message","success","backgroundColor","green","palette","dark","Snack","snackOpen","setSnackOpen","other","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","SnackbarContent","clsx","CheckCircleIcon","CloseIcon","block","marginTop","ChangePasswordForm","passwordForm","setPasswordForm","password1","password2","passwordFeedback","setPasswordFeedback","handlePasswordChange","newPassword","response","resetPassword","JSON","stringify","changePassword","passwordStrengthTests","test","strengthTest","pass","helperText","main","SettingsPage","freq","setFreq","daily","enableDaily","weekly","enableWeekly","showError","setShowError","LclDataReducer","state","itemId","items","itemData","newObj","eventDateTime","oldObj","userAdded","LclDataContext","LclDataContextProvider","lclData","dispatch","useReducer","createLclModel","params","types","P","D","branchShortCodeObject","branches","shortCode","validate","allValues","mapToRequestValue","getIsoString","time","replace","eventTimeString","textFieldProps","eventType","select","MenuItem","branchName","eventAddress","conNoteNum","sender","receiver","location","zone","eventItems","kg","Number","InputProps","endAdornment","InputAdornment","m3","dpc","startAdornment","stopPay","homeDelivery","totalDPC","calculateValue","reason","driverComments","getValueFromRequest","multiline","rowsMax","defaultLcl","driver","modifiedTime","eventAddr1","loadToDelivery","carrier","eventDate","eventTime","consignmentID","pod","eu","signature","consignmentDeliveryID","totalItems","ParcelDataReducer","ParcelDataContext","ParcelDataContextProvider","parcelData","createParcelModel","cNote","senderName","sendSuburb","receiverName","receiverSuburb","puBranch","delBranch","mode","defaultParcel","cNoteDate","fPayer","drBranch","crBranch","truck","carrierName","domicile","receiverPOD","deliveryID","shortDate","fMode","HourlyDataReducer","startTime","HourlyDataContext","HourlyDataContextProvider","hourlyData","createBranchModel","branchesObject","assignedBranchId","branchId","assignedAmount","hoursDiff","endTime","totalHours","isNaN","createHourlyModel","startTimeString","endTimeString","hourlyRate","changedRateCons","con","join","hours","totalCharge","charge","changedRateAssignedBranches","assignedBranch","assignedBranchTotal","requiredColumns","blankHourly","LinehaulDataReducer","LinehaulFixedDataContext","LinehaulFixedDataContextProvider","linehaulFixedData","getRoutesIdArray","routes","route","getRouteObjectFromId","idArray","Array","accountCodeKeys","n","costCentreKeys","percentageKeys","routeName","routeRate","routeFaf","accountCodes","e","costCentres","percentages","buildRoutesObjFromRoutesIdArray","arr","routesObj","truckRoutesObj","truckRouteObj","alphabeticalComparator","a","b","s1","s2","linehaulFixedModel","routeId","getChildren","routeStartDate","routeEndDate","sort","adjustment","tripCost","totalCost","fixedColumns","defaultFixed","getActiveRoutesObj","getActiveRoutesIdArray","routeObj","LinehaulFloatingDataReducer","LinehaulFloatingDataContext","LinehaulFloatingDataContextProvider","linehaulFloatingData","createFloatingModel","km","tripRate","originBranchId","destinationBranchId","floatingColumns","defaultFloating","ButtonOverride","controller","callback","sendRequest","requestStatus","file","ApproveDpc","originalData","setOriginalData","lclModel","displayColumns","reasons","req","fetchOriginalData","direction","col","ButtonDownload","ButtonApprove","DeleteDpc","React","Fragment","ButtonDelete","dispatchLcl","dispatchParcel","dispatchLinehaulFixed","dispatchHourly","RestoreDpc","ButtonRestore","ButtonUpload","files","setFiles","maxFileSize","multiple","accept","_input","useRef","current","ref","f","ButtonEdit","newItemData","sendUploadRequest","promises","fileData","FormData","append","Promise","all","then","catch","finally","UploadFileSection","deleteFile","DeleteIcon","EditDpc","enabledColumns","View","ActionMenu","setMenuOpen","anchorEl","setAnchorEl","setAction","handleClose","lockedStatus","actions","approve","delete","restore","edit","view","currentTarget","MoreHoriz","Menu","Visibility","Check","DeleteForever","Restore","Edit","ApproveLcl","DeleteLcl","RestoreLcl","EditLcl","ViewLcl","cell","strikeThrough","textDecoration","LclDataTable","sortedRows","id_A","id_B","LclActionMenu","newItemId","uuidv4","CreateDpc","Fab","AddIcon","ButtonCreate","ButtonLoadMore","remaining","onClickLoadMore","parseInt","days","divider","add","table","LclDisplayDay","_lclSummary$totalStop","_lclSummary$totalHome","_lclSummary$totalDpc","_lclSummary$totalReco","_lclSummary$totalStop2","_lclSummary$totalHome2","_lclSummary$totalDpc2","lclSummary","setlclSummaryPerEventDate","currentDayRemaining","isShowLoadMoreButton","currentListTotal","totalRecords","overallTotalDpc","totalStopPay","totalHomeDelivery","totalDpc","Accordion","expanded","isExpanded","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","CreateLcl","loadMore","lclSummaryPerEventDate","isSelectedToLoadMore","currentIndex","weekDay","currentPage","parcelDataModel","DeleteParcel","EditParcel","ApproveParcel","RestoreParcel","ViewParcel","ParcelDataTable","parcelModel","ParcelActionMenu","CreateParcel","ParcelDisplayDay","_parcelSummary$totalR","_parcelSummary$totalD","parcelSummary","setParcelSummaryPerEventDate","parcelSummaryPerEventDate","marginBottom","flexRowContainer","flexRowItem","overflow","textOverflow","ApproveLinehaul","percentage","CreateLinehaul","newFormData","Delete","ApproveLinehaulFixed","DeleteLinehaulFixed","EditLinehaulFixed","ViewLinehaulFixed","LinehaulDataTable","align","row","LinehaulFixedActionMenu","CreateLinehaulFixed","CreateLinehaulFab","LinehaulFixedDisplayDay","CreateLinehaulFixedFab","LinehaulFixedDataTable","floatingModel","setAssignedBranchId","requestApprove","newVal","editFloating","EditLinehaulFloating","linehaulFloatingModel","disableAll","ApproveLinehaulFloating","DeleteLinehaulFloating","ViewLinehaulFloating","LinehaulFloatingActionMenu","CreateLinehaulFloating","LinehaulFloatingDisplayDay","CreateLinehaulFloatingFab","LinehaulFloatingDataTable","bold","SelectConNote","conNoteList","selectedList","setSelectedList","filterExpression","setFilterExpression","filteredList","setFilteredList","reg","RegExp","toLowerCase","conNoteListExclSelected","conNote","sortTime","sortedFilteredList","sortedSelectedList","handleAdd","match","dpcId","handleRemove","gridContainer","gridTemplateColumns","gridGap","BranchItem","branchObj","deleteItem","branchModel","DeleteForeverIcon","CreateBranchItem","createItem","defaultForm","changedRateId","AssignBranchInputComponent","setValue","handleDelete","random","CreateHourly","hourlyModel","setConNoteList","fetchConNoteList","scroll","newList","Approve","branchObjArray","setBranchObjArray","newData","requestChange","editHourly","EditHourly","_itemData$cur","calcItemData","index","self","indexOf","approvedStatus","ApproveHourly","DeleteHourly","ViewHourly","flexContainer","marginLeft","HourlyItem","fetchedObj","calculatedObj","displayObj","HourlyActionMenu","gapRight","HourlyDisplayDay","hourlySummary","setHourlySummaryPerEventDate","hourlyToday","lclToday","parcelToday","hourlySummaryPerEventDate","InvoicePreviewTable","setFetched","totalExclGst","ConfirmSubmitDialog","previewFetched","setPreviewFetched","submitting","setSubmitting","setFeedback","toLocaleDateString","sendSubmitRequest","TruckViewPage","firstRender","dataFetched","dispatchLinehaulFloating","saveOpen","setSaveOpen","setTruckObj","floatingLinehaulRate","setFloatingLinehaulRate","requestLinehaulFixedData","requestLinehaulFloatingData","lclPage","startDateParam","endDateParam","listingType","_lclSummaryPerEventDa","find","x","numberOfRecordsEventDate","totalStopPayPerEventDate","totalDpcPerEventDate","totalHomeDeliveryPerEventDate","requestLclData","parcelPage","_parcelSummaryPerEven","requestParcelData","hourlyPage","_hourlySummaryPerEven","requestHourlyData","NavigateBefore","NavigateNext","Paper","Tabs","newTab","textColor","Tab","DefaultRoute","redirect","WeekRoute","Switch","path","exact","TruckRoute","createStyles","formControl","minWidth","chips","flexWrap","chip","noLabel","tableHeader","menuList","InvoicePage","page","setPage","rowsPerPage","setRowsPerPage","count","setCount","tableRows","setTableRows","dialogOpen","setDialogOpen","selectedTrucksInvoice","setSelectedTrucksInvoice","parse","startDateInvoice","setStartDateInvoice","endDateInvoice","setEndDateInvoice","approvalStateInvoice","setApprovalStateInvoice","userSearchedInvoice","setUserSearchedInvoice","shouldFetchInvoicesWithFilter","setShouldFetchInvoicesWithFilter","fetchInvoicesWithFilter","invoiceString","inputTruckId","searchFilters","truckIds","post","MuiPickersUtilsProvider","utils","DateFnsUtils","inputProps","inputMode","autoComplete","DatePicker","autoOk","inputVariant","views","format","option","handleProceed","invoiceStarteDate","TablePagination","onChangePage","newPage","handlePageChange","onChangeRowsPerPage","handleRowsPerPageChange","tableIcons","Add","forwardRef","AddBox","Clear","DeleteOutline","DetailPanel","ChevronRight","Export","SaveAlt","Filter","FilterList","FirstPage","LastPage","NextPage","PreviousPage","ChevronLeft","ResetSearch","Search","SortArrow","ArrowDownward","ThirdStateCheck","Remove","ViewColumn","createMuiTheme","MuiPaper","square","overrides","CustomTable","showCompleteTable","HelperTable","ThemeProvider","fromTable","columns","getParent","defaultAlign","defaultSort","options","cellStyle","sorting","MaterialTable","elevation","actionsColumnIndex","paging","search","showTitle","toolbar","emptyRowsWhenPaging","pageSizeOptions","headerStyle","borderBottom","grey","rowStyle","rowData","hasParent","parentChildData","icons","KeyboardDatePicker","clearable","WeeklyAuditPage","searchDate","setSearchDate","rawData","setRawData","weekEndDate","components","render","outstandingCount","outstandingFileName","GetApp","unibisFileName","DateTextField","timeString","stringValue","setStringValue","setValid","newDateString","newDate","lowerCaseButtonTheme","textTransform","DownloadButton","_ref3","InvoiceAuditPage","searchTerms","setSearchTerms","today","lastMonth","setMonth","vendorNumber","datesFrom","datesTo","setData","handleDownloadFile","invoiceDate","disableFuture","_ref2","detailPanel","invoicePDFFileName","transactionsFileName","supportingDocs","submittedDateTime","preApprovedDateTime","approvedDateTime","active","activeFocus","light","waiting","warning","waitingFocus","padBox","GenericNumericInputComponent","onUpdate","strVal","setStrVal","GenericCurrencyInputComponent","GenericPercentageInputComponent","parseFloat","GenericDisabledTextInputComponent","_ref4","GenericFreeTextInputComponent","_ref5","GenericDateIsoStringInputComponent","_ref7","setDateString","setTimeString","SelectUserIdInputComponent","_ref8","userList","setUserList","val","setVal","getUsers","user","SelectOwnerDriverUserIdInputComponent","_ref9","SelectTollAdminUserIdInputComponent","_ref10","SelectTollManagerUserIdInputComponent","_ref11","SelectActiveInputComponent","_ref12","SelectStateInputComponent","_ref13","SelectRoleIdInputComponent","_ref14","roleList","setRoleList","fetchRoles","role","roleDescription","SelectVendorIdInputComponent","_ref15","vendors","setVendors","getVendors","vendor","SelectTruckIdInputComponent","_ref16","distinctList","setDistinctList","getTrucks","SelectLclCostCentreInputComponent","_ref20","branchList","setBranchList","requestActive","requestWaiting","resActive","resWaiting","uniqueList","fetchCostCentres","lclLinehaulCostCentre","SelectBranchByShortCode","_ref22","SelectLclOrParcel","_ref23","SelectCostCentreWeight","_ref24","onDelete","isParcel","handleUpdate","fieldName","updated","userDefinition","entity","inputComponent","isValid","vendorId","lastName","email","defaultUser","EntityForm","initialData","entityDefinition","onSubmit","disabledColumns","fieldValue","EntityFormControl","buttonComponent","mounted","setMounted","onExited","headerCell","EntityTable","tableColumns","editColumns","formTitle","onEdit","filteredRows","setFilteredRows","filterTokens","arrayDisplayString","tok","buttonProps","rowsPerPageOptions","handleChangePage","EntityTableFilter","expression","setExpression","spacer","ResetPasswordCard","userId","setUserId","setKey","errors","tableFilter","extendedIcon","center","UserPage","filterParameters","setFilterParameters","fetchUsers","newUser","onSuccessCallback","onFailCallback","editedUser","vendorDefinition","gstNo","_ref18","InputMask","mask","maskChar","contactName","phone","mobile","street","suburb","city","postCode","defaultVendor","VendorPage","vendorList","setVendorList","fetchVendors","newEntity","editedEntity","truckDefinition","adminUserId","managerUserId","backupUserId","backupAdminUserId","backupManagerUserId","defaultTruck","TruckPage","truckList","setTruckList","fetchTrucks","newTruck","editedTruck","branchDefinition","parcelCostCentre","linehaulFAF","defaultBranch","BranchPage","setbranchList","fetchBranches","rateDefinition","baseFee","topup","ccArr","_ref25","newValue","tempVal","handleCreate","percentSumTo100","allBranchSelected","cc","allCcSelected","defaultRate","RatePage","rateList","setRateList","fetchDistinctBranches","fetchRates","rateListWthCcArr","truckPaymentBasefees","truckPaymentTopups","routeDefinition","_ref21","setFilter","dpcTypeId","_ref17","adjustmentCostCentre","costCentre1","accountCode1","percentage1","percentageSum","costCentre2","accountCode2","percentage2","costCentre3","accountCode3","percentage3","costCentre4","accountCode4","percentage4","costCentre5","accountCode5","percentage5","defaultRoute","sum","abs","RoutePage","routeList","setRouteList","fetchRoutes","tabs","MasterDataPage","setTab","entityPageList","pageContainer","PageRoute","useIdleTimer","timeout","onIdle","NavBar","App","origin","head","innerHTML","LoginPageMfa","themeType","staging","contrastText","secondary","background","default","ReactDOM","CssBaseline","UserDataContextProvider","BrowserRouter","getElementById","mfaGuid","status","removeInvoiceSearchFilters","stop","removeItem","mfaCode"],"mappings":"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AAK,cAEH,MAAO,IACFof,EACH,CAACpY,GAAU,IACNoY,EAAMpY,GACT,CAACnG,GAAO,IACHue,EAAMpY,GAASnG,GAClB,CAACb,GAAM,IACFof,EAAMpY,GAASnG,GAAMb,GACxB,CAACqf,GAAS,IACLD,EAAMpY,GAASnG,GAAMb,GAAKqf,MAC1BE,EAEHtY,cAAe8J,aACb7F,EACA8F,EAAO5N,KACPmc,EAAStY,cACT,eASd,IAAK,cAkCH,MAAO,IACFmY,EACH,CAACpY,GAAU,IACNoY,EAAMpY,GACT,CAACnG,GAAO,IACHue,EAAMpY,GAASnG,GAClB,CAACb,GAAM,IACFof,EAAMpY,GAASnG,GAAMb,GACxB,CAACqf,GAAS,IACLD,EAAMpY,GAASnG,GAAMb,GAAKqf,GAC7BpY,cAAe+I,KAASK,aAOpC,IAAK,eACH,MAAO,IACF+O,EACH,CAACpY,GAAU,IACNoY,EAAMpY,GACT,CAACnG,GAAO,IACHue,EAAMpY,GAASnG,GAClB,CAACb,GAAM,IACFof,EAAMpY,GAASnG,GAAMb,GACxB,CAACqf,GAAS,IACLE,EACHtY,cAAe8J,aACb7F,EACA8F,EAAO5N,KACPmc,EAAStY,cACT,eAQd,IAAK,eACH,MAAO,IACFmY,EACH,CAACpY,GAAU,IACNoY,EAAMpY,GACT,CAACnG,GAAO,IACHue,EAAMpY,GAASnG,GAClB,CAACb,GAAM,IACFof,EAAMpY,GAASnG,GAAMb,GACxB,CAACqf,GAAS,IACLD,EAAMpY,GAASnG,GAAMb,GAAKqf,GAC7BpY,cAAe8J,aACb7F,EACA8F,EAAO5N,KACPmc,EAAStY,cACT,eASd,IAAK,cACH,MAAO,IACFmY,EACH,CAACpY,GAAU,IACNoY,EAAMpY,GACT,CAACnG,GAAO,IACHue,EAAMpY,GAASnG,GAClB,CAACb,GAAM,IACFof,EAAMpY,GAASnG,GAAMb,GACxB,CAACqf,GAAS,IACLD,EAAMpY,GAASnG,GAAMb,GAAKqf,GAC7BpY,cAAe8J,aACb7F,EACA8F,EAAO5N,KACPmc,EAAStY,cACT,eAQd,QACE,OAAOmY,EACX,ECpMWwE,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","file":"static/js/main.e8009a55.chunk.js","sourcesContent":["// const zeroTime = (date) => {\r\n// date.setHours(0);\r\n// date.setMinutes(0);\r\n// date.setSeconds(0);\r\n// date.setMilliseconds(0);\r\n// return date;\r\n// };\r\n\r\n//gets the monday of the week the date is in\r\nconst getMonday = (date) => {\r\n date.setDate(date.getDate() - 1);\r\n date.setDate(date.getDate() - date.getDay() + 1);\r\n return date;\r\n};\r\n\r\nexport const formatDate = (date) => ({\r\n yyyy: String(date.getFullYear()),\r\n MM: String(date.getMonth() + 1).padStart(2, \"0\"),\r\n dd: String(date.getDate()).padStart(2, \"0\"),\r\n HH: String(date.getHours()).padStart(2, \"0\"),\r\n mm: String(date.getMinutes()).padStart(2, \"0\"),\r\n ss: String(date.getSeconds()).padStart(2, \"0\"),\r\n fff: String(date.getMilliseconds()).padStart(3, \"0\"),\r\n});\r\n\r\nconst getAucklandTimezoneOffset = () => {\r\n const now = new Date();\r\n // get the timezone offset between UTC and Pacfic/Auckland time in miliseconds\r\n // this code has vulnerabilities due to it using system local time\r\n // relying on client system settings to be correct is bad...\r\n // but I have no other option ¯\\_(ツ)_/¯\r\n\r\n // Abuse the Intl API to get a local ISO 8601 string for a given time zone.\r\n let iso = getFormattedAucklandDatetime();\r\n\r\n // .toLocaleString has no options to include miliseconds\r\n // Include the milliseconds from the original timestamp\r\n iso += \".\" + now.getMilliseconds().toString().padStart(3, \"0\");\r\n\r\n // Lie to the Date object constructor that it's a UTC time.\r\n const lie = new Date(iso + \"Z\");\r\n\r\n // Return the difference in timestamps in miliseconds\r\n // Positive values are West of GMT, opposite of ISO 8601\r\n // this matches the output of `Date.getTimeZoneOffset`\r\n return -(lie - now);\r\n};\r\n\r\nconst getFormattedAucklandDatetime = () => \r\n{\r\n const now = new Date();\r\n const timeOptions = {\r\n timeZone: \"Pacific/Auckland\", \r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\",\r\n hour12: false,\r\n };\r\n const aucklandTime = now.toLocaleTimeString(\"en-NZ\", timeOptions);\r\n const currYear = now.toLocaleString(\"en-NZ\", { timeZone: \"Pacific/Auckland\", hour12: false, year: \"numeric\" });\r\n const currMonth = now.toLocaleString(\"en-NZ\", { timeZone: \"Pacific/Auckland\", hour12: false, month: \"2-digit\" })\r\n const currDay = now.toLocaleString(\"en-NZ\", { timeZone: \"Pacific/Auckland\", hour12: false, day: \"2-digit\" })\r\n const formattedOutput = currYear + \"-\" + currMonth + \"-\" + currDay + \"T\" + aucklandTime\r\n\r\n return formattedOutput;\r\n}\r\n\r\nconst setNzTimeZero = (utcDate) => {\r\n // sets time to 00:00:00.000 in Pacific/Auckland time\r\n\r\n // get the offset\r\n const offset = getAucklandTimezoneOffset();\r\n\r\n // shift the time forward by the offset to make it NZ time\r\n const nzDate = new Date(utcDate.valueOf() - offset);\r\n\r\n // drop/zero the time\r\n const nzZeroTimeIso = nzDate.toISOString().split(\"T\")[0];\r\n\r\n // parse the zerotime date\r\n const nzZeroTimeDate = new Date(nzZeroTimeIso);\r\n\r\n // shift the time back by the offset to make it UTC time\r\n const utcNzZeroTimeDate = new Date(nzZeroTimeDate.valueOf() + offset);\r\n\r\n return utcNzZeroTimeDate;\r\n};\r\n\r\nexport const getWeekDates = (week) => {\r\n //week is the number of weeks ago\r\n\r\n // get current time in UTC\r\n var date = new Date()\r\n var utc_now = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),\r\n date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\r\n // zero the time in NZ\r\n const zeroTime = setNzTimeZero(utc_now);\r\n\r\n // get the monday of the week which the date falls in\r\n const monday = getMonday(zeroTime);\r\n\r\n // shift the monday depending on the desired week\r\n monday.setDate(monday.getDate() - 7 * week);\r\n\r\n // get the sunday\r\n const sunday = new Date(monday.valueOf() - 1);\r\n sunday.setDate(sunday.getDate() + 7);\r\n\r\n const start = formatDate(monday);\r\n const end = formatDate(sunday);\r\n\r\n // const timezoneOffset = new Date().getTimezoneOffset() / 60;\r\n\r\n // // const startIso = `${start.yyyy}-${start.MM}-${start.dd}T${start.HH}:${\r\n // // start.mm\r\n // // }:${start.ss}.${start.fff}+${timezoneOffset * -1}`;\r\n\r\n // // const endIso = `${end.yyyy}-${end.MM}-${end.dd}T${end.HH}:${end.mm}:${\r\n // // end.ss\r\n // // }.${end.fff}+${timezoneOffset * -1}`;\r\n\r\n return {\r\n start,\r\n end,\r\n startDate: monday,\r\n endDate: sunday,\r\n // startIso,\r\n // endIso,\r\n };\r\n};\r\n\r\nexport const getDateFromWeekAndDay = (week, day) => {\r\n // week is the number of weeks ago\r\n const monday = getMonday(setNzTimeZero(new Date()));\r\n monday.setDate(monday.getDate() - 7 * week);\r\n const currentDate = new Date(monday.valueOf());\r\n currentDate.setDate(currentDate.getDate() + day);\r\n\r\n const dateString = formatDate(currentDate);\r\n\r\n return {\r\n date: currentDate,\r\n dateString,\r\n dateIsoString: `${dateString.yyyy}-${dateString.MM}-${dateString.dd}T00:00:00`,\r\n // dateIsoString: currentDate.toISOString(),\r\n };\r\n};\r\n\r\nexport const getDayOfWeekFromDate = (dateString) => {\r\n const date = new Date(dateString);\r\n date.setDate(date.getDate() - 1);\r\n return date.getDay();\r\n};\r\n\r\nexport const getWeekFromDate = (dateString) => {\r\n const monday = getMonday(setNzTimeZero(new Date()));\r\n const givenMonday = getMonday(setNzTimeZero(new Date(dateString)));\r\n return Math.round(\r\n (monday.getTime() - givenMonday.getTime()) / (86400000 * 7)\r\n );\r\n};\r\n\r\nexport const getSingleDayString = (dateString) => ({\r\n startDayTime: dateString + 'T00:00:00.000',\r\n endDayTime: dateString + 'T23:59:59.999' \r\n})\r\n\r\nexport const downloadData = (body) => {\r\n const { fileName, contentType, data } = body;\r\n const buf = Buffer.from(data, \"base64\");\r\n const blob = new Blob([buf], { type: contentType });\r\n const url = URL.createObjectURL(blob);\r\n\r\n let element = document.createElement(\"a\");\r\n element.style.display = \"none\";\r\n element.setAttribute(\"href\", url);\r\n element.setAttribute(\"download\", fileName);\r\n document.body.appendChild(element);\r\n element.click();\r\n document.body.removeChild(element);\r\n};\r\n\r\n// login and auth functions\r\n\r\nexport const getToken = () => sessionStorage.getItem(\"token\");\r\nexport const setToken = (token) => sessionStorage.setItem(\"token\", token);\r\n\r\nexport const getStoredUserData = () =>\r\n JSON.parse(sessionStorage.getItem(\"userData\") || \"{}\");\r\nexport const setStoredUserData = (userData) =>\r\n sessionStorage.setItem(\"userData\", JSON.stringify(userData));\r\n\r\nexport const getDeviceId = () => localStorage.getItem(\"deviceId\");\r\nexport const setDeviceId = (deviceId) =>\r\n localStorage.setItem(\"deviceId\", deviceId);\r\n\r\nexport const getFloatingRate = (week, truckPayments) => {\r\n const { startDate: weekStartDate } = getWeekDates(week);\r\n // console.log(truckObj);\r\n // console.log(weekStartDate);\r\n let rate;\r\n truckPayments.some((payment) => {\r\n if (payment.floatingRate) {\r\n const paymentStartDate = new Date(payment.startDate);\r\n // console.log(paymentStartDate);\r\n if (!payment.endDate) {\r\n if (paymentStartDate <= weekStartDate) {\r\n // console.log(paymentStartDate, weekStartDate);\r\n // console.log(paymentStartDate <= weekStartDate);\r\n rate = payment.floatingRate;\r\n return true;\r\n }\r\n } else {\r\n const paymentEndDate = new Date(payment.endDate);\r\n if (\r\n paymentStartDate <= weekStartDate &&\r\n weekStartDate <= paymentEndDate\r\n ) {\r\n // console.log(paymentStartDate, weekStartDate, paymentEndDate);\r\n rate = payment.floatingRate;\r\n\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n return rate;\r\n};\r\n\r\nexport const displayMoney = (value) => {\r\n const dollars = Math.floor(value);\r\n const decimal = value - dollars;\r\n // toFixed(10) because JavaScript numbers can store base10 numbers to 10 decimal places\r\n const cents = (decimal * 100).toFixed(10);\r\n const centsRounded = Math.round(cents);\r\n return `${dollars}.${centsRounded}`;\r\n};\r\n\r\nexport const getCurrentBranchesObject = (branchArray, week) => {\r\n const { startDate, endDate } = getWeekDates(week);\r\n\r\n const currentBranches = branchArray.filter((branch) => {\r\n const branchStartDate = new Date(branch.startDate);\r\n const branchEndDate = new Date(branch.endDate);\r\n\r\n if (!branch.endDate) {\r\n if (branchStartDate < endDate) {\r\n // if no end date and start date is before week end date\r\n return true;\r\n }\r\n return false;\r\n }\r\n if (branchEndDate <= startDate || endDate <= branchStartDate) {\r\n // if no overlap\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n const branchesObject = currentBranches.reduce((acc, cur) => {\r\n acc[cur.id] = cur;\r\n return acc;\r\n }, {});\r\n\r\n return branchesObject;\r\n};\r\n\r\nexport const getCurrentBranchesArray = (branchArray, week) => {\r\n const { startDate, endDate } = getWeekDates(week);\r\n\r\n const currentBranches = branchArray.filter((branch) => {\r\n const branchStartDate = new Date(branch.startDate);\r\n const branchEndDate = new Date(branch.endDate);\r\n\r\n if (!branch.endDate) {\r\n if (branchStartDate < endDate) {\r\n // if no end date and start date is before week end date\r\n return true;\r\n }\r\n return false;\r\n }\r\n if (branchEndDate <= startDate || endDate <= branchStartDate) {\r\n // if no overlap\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n return currentBranches;\r\n};\r\n","import React, { useState, createContext } from \"react\";\r\nimport { invoiceStatuses } from \"../Mappings\";\r\n\r\nexport const InvoiceDataContext = createContext();\r\n\r\nconst InvoiceDataContextProvider = (props) => {\r\n const [invoiceData, setInvoiceData] = useState([]);\r\n\r\n const invoiceDataModel = {\r\n id: {\r\n displayName: \"Invoice ID\",\r\n displayValue: (value) => value,\r\n },\r\n netTotal: {\r\n displayName: \"Total Amount\",\r\n displayValue: (value) => `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n },\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (value) => value.split(\"T\")[0],\r\n },\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (value) => value.split(\"T\")[0],\r\n },\r\n truckId: {\r\n displayName: \"Truck ID\",\r\n displayValue: (value) => value,\r\n },\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (value) => invoiceStatuses[value],\r\n },\r\n vendorTradingName: {\r\n displayName: \"Trading Name\",\r\n displayValue: (value) => value,\r\n },\r\n };\r\n\r\n const updateInvoice = (id, invoice) => {\r\n const idx = invoiceData.findIndex((invoice) => invoice.id === id);\r\n setInvoiceData([\r\n ...invoiceData.slice(0, idx),\r\n { ...invoiceData[idx], ...invoice },\r\n ...invoiceData.slice(idx + 1),\r\n ]);\r\n };\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceDataContextProvider;\r\n","import React, { useState, createContext, useEffect, useCallback } from \"react\";\r\n\r\nexport const AppStateContext = createContext();\r\n\r\nconst AppStateContextProvider = (props) => {\r\n const [appState, setAppState] = useState({\r\n menuOpen: false,\r\n invoiceStatuses: {},\r\n tab: 0,\r\n });\r\n\r\n const allTablesClosed = [0, 1, 2, 3, 4, 5, 6].reduce(\r\n (dayAcc, dayCur) => ({\r\n ...dayAcc,\r\n [dayCur]: false,\r\n }),\r\n {}\r\n );\r\n\r\n // [0, 1, 2, 3, 4].reduce(\r\n // (weekAcc, weekCur) => ({\r\n // ...weekAcc,\r\n // [weekCur]: [0, 1, 2, 3, 4, 5, 6].reduce(\r\n // (dayAcc, dayCur) => ({\r\n // ...dayAcc,\r\n // [dayCur]: false,\r\n // }),\r\n // {}\r\n // ),\r\n // }),\r\n // {}\r\n // )\r\n\r\n const [tableOpen, setTableOpen] = useState(allTablesClosed);\r\n\r\n const [scrollOffsetY, setScrollOffsetY] = useState(undefined);\r\n\r\n // const getScrollPosition = () =>\r\n // window.pageYOffset !== undefined\r\n // ? window.pageYOffset\r\n // : (document.documentElement || document.body.parentNode || document.body)\r\n // .scrollTop;\r\n\r\n const setScrollPosition = useCallback(() => {\r\n const offset =\r\n window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : (\r\n document.documentElement ||\r\n document.body.parentNode ||\r\n document.body\r\n ).scrollTop;\r\n console.log(\"setting scroll position to\", offset);\r\n setScrollOffsetY(offset);\r\n }, []);\r\n\r\n const clearScrollPosition = useCallback(\r\n () => setScrollOffsetY(undefined),\r\n [setScrollOffsetY]\r\n );\r\n\r\n const scrollToPosition = useCallback(() => {\r\n if (scrollOffsetY) {\r\n console.log(\"scrolling to\", scrollOffsetY);\r\n window.scrollTo(0, scrollOffsetY);\r\n // check if the scroll actually happened\r\n // if (getScrollPosition() === scrollOffsetY) {\r\n // setScrollOffsetY(undefined);\r\n // }\r\n }\r\n }, [scrollOffsetY]);\r\n\r\n const [invoiceTableFilterText, setInvoiceTableFilterText] = useState(\"\");\r\n\r\n // const [loading, setLoading] = useState(true);\r\n // const [authenticating, setAuthenticating] = useState(true);\r\n // const [fetching, setFetching] = useState(false);\r\n // const [fetched, setFetched] = useState(false);\r\n const [fetch, setFetch] = useState(false);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default AppStateContextProvider;\r\n","import React, { useContext, useState, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Button,\r\n IconButton,\r\n Divider,\r\n Tooltip,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { InvoiceDataContext } from \"../Contexts/InvoiceDataContext\";\r\nimport { roles, invoiceStatuses } from \"../Mappings\";\r\nimport ChargeSummaryTable from \"./ChargeSummaryTable\";\r\nimport AccountingSummaryTable from \"./AccountingSummaryTable\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\n// this stupid component always causes problems.\r\nconst ApproveRejectInvoice = ({\r\n truckId,\r\n week,\r\n invoiceId,\r\n invoice,\r\n ...others\r\n}) => {\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const { invoiceData, setInvoiceData, updateInvoice } =\r\n useContext(InvoiceDataContext);\r\n // const invoice = invoiceData[invoiceData.findIndex((invoice) => invoice.id === invoiceId)];\r\n const history = useHistory();\r\n const [open, setOpen] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const [formData, setFormData] = useState({\r\n values: { comments: \"\" },\r\n valid: { comments: false },\r\n });\r\n const { scrollToPosition, setScrollPosition } = useContext(AppStateContext);\r\n\r\n const sendApproveRequest = async () => {\r\n let endPoint = \"\";\r\n if (userData.roleId === roles.tollAdmin) {\r\n endPoint = \"adminapprove\";\r\n } else if (userData.roleId === roles.tollManager) {\r\n endPoint = \"managerapprove\";\r\n }\r\n try {\r\n setLoading(true);\r\n const res = await axios({\r\n method: \"POST\",\r\n url: `/invoices/${endPoint}/${invoiceId}/${formData.values.comments}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n setLoading(false);\r\n let newStatus;\r\n if (userData.roleId === roles.tollAdmin) {\r\n newStatus = invoiceStatuses.adminApproved;\r\n } else if (userData.roleId === roles.tollManager) {\r\n newStatus = invoiceStatuses.managerApproved;\r\n }\r\n setOpen(false);\r\n updateInvoice(invoice.id, {\r\n ...invoice,\r\n approvalState: newStatus,\r\n [userData.roleId === roles.tollAdmin\r\n ? \"adminComments\"\r\n : \"managerComments\"]: formData.values.comments,\r\n });\r\n\r\n // userData.invoiceStatuses[truckId][week] = res.data;\r\n // setUserData({ ...userData }); // force fetch statuses again\r\n\r\n setUserData({\r\n ...userData,\r\n invoiceStatuses: {\r\n ...userData.invoiceStatuses,\r\n [truckId]: {\r\n ...userData.invoiceStatuses?.[truckId],\r\n [week]: res.data,\r\n },\r\n },\r\n }); // force fetch statuses again\r\n } catch (error) {\r\n console.log(error);\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const sendRejectRequest = async () => {\r\n try {\r\n setLoading(true);\r\n const res = await axios({\r\n method: \"POST\",\r\n url: `/invoices/reject/${invoiceId}/${formData.values.comments}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n setLoading(false);\r\n setOpen(false);\r\n updateInvoice(invoice.id, {\r\n ...invoice,\r\n approvalState: invoiceStatuses.rejected,\r\n [userData.roleId === roles.tollAdmin\r\n ? \"adminComments\"\r\n : \"managerComments\"]: formData.values.comments,\r\n });\r\n\r\n setUserData({\r\n ...userData,\r\n invoiceStatuses: {\r\n ...userData.invoiceStatuses,\r\n [truckId]: {\r\n ...userData.invoiceStatuses[truckId],\r\n [week]: res.data,\r\n },\r\n },\r\n }); // force fetch statuses again\r\n } catch (error) {\r\n console.log(error);\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const sendPdfRequest = async () => {\r\n // window.open(\"/invoices/GeneratePdfInvoice/318-20200524\"); // this opens properly\r\n\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `/files/GetInvoicePDF/${invoice.id}`,\r\n headers: {\r\n Authorization: `bearer ${userData.token}`,\r\n \"Content-Type\": \"application/pdf\",\r\n },\r\n });\r\n\r\n const buf = Buffer.from(res.data.data, \"base64\");\r\n const blob = new Blob([buf], { type: \"application/pdf\" });\r\n const url = URL.createObjectURL(blob);\r\n window.open(url); // this opens a blank pdf\r\n\r\n setTimeout(function () {\r\n window.URL.revokeObjectURL(url);\r\n }, 600000); //garbage collect after 10mins \r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const handleChange = (event) => {\r\n setFormData({\r\n values: { ...formData.values, [event.target.name]: event.target.value },\r\n valid: {\r\n ...formData.valid,\r\n [event.target.name]: event.target.value !== \"\",\r\n },\r\n });\r\n };\r\n\r\n // useEffect(() => {\r\n // console.log(invoice);\r\n // // fdsfd\r\n // }, []);\r\n\r\n return (\r\n <>\r\n \r\n {\r\n setScrollPosition();\r\n setOpen(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n setOpen(false)}>\r\n Approve or Reject Invoice\r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n {/* Admin comments: {invoice.adminComments} */}\r\n {/* Manager comments: {invoice.managerComments} */}\r\n \r\n \r\n \r\n {userData.roleId === roles.tollAdmin && (\r\n \r\n \r\n \r\n )}\r\n {userData.roleId === roles.tollManager && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {\r\n const url = `/${userData.userName}/trucks/${truckId}/weeks/${week}`;\r\n console.log(url);\r\n history.push(url);\r\n }}\r\n disabled={loading || week > 4}\r\n >\r\n View DPC data\r\n \r\n\r\n {userData.roleId === roles.tollAdmin && (\r\n <>\r\n sendRejectRequest()}\r\n >\r\n Reject\r\n \r\n sendApproveRequest()}\r\n >\r\n Approve\r\n \r\n \r\n )}\r\n\r\n {userData.roleId === roles.tollManager && (\r\n <>\r\n sendRejectRequest()}\r\n >\r\n Reject\r\n \r\n sendApproveRequest()}\r\n >\r\n Approve\r\n \r\n \r\n )}\r\n\r\n \r\n view pdf\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveRejectInvoice;\r\n\r\nApproveRejectInvoice.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n invoiceId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport {\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nfunction ChargeSummaryTable(props) {\r\n const { invoiceId, ...rest } = props;\r\n const { userData } = useContext(UserDataContext);\r\n const [rows, setRows] = useState([]);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `/invoices/getInvoiceActivities/${invoiceId}`,\r\n headers: {\r\n Authorization: `bearer ${userData.token}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n });\r\n console.log(res.data);\r\n setRows(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n Activity\r\n Charge\r\n F.A.F\r\n \r\n \r\n \r\n {rows.map((dpcType) => (\r\n \r\n {dpcType.description}\r\n {`$${(Math.round(dpcType.netAmount * 100) / 100).toFixed(\r\n 2\r\n )}`}\r\n {`$${(Math.round(dpcType.faf * 100) / 100).toFixed(\r\n 2\r\n )}`}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ChargeSummaryTable;\r\n\r\nChargeSummaryTable.propTypes = {\r\n invoiceId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport {\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nfunction AccountingSummaryTable(props) {\r\n const { invoiceId, ...rest } = props;\r\n const { userData } = useContext(UserDataContext);\r\n const [rows, setRows] = useState([]);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `/invoices/getInvoiceTables/${invoiceId}`,\r\n headers: {\r\n Authorization: `bearer ${userData.token}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n });\r\n console.log(res.data);\r\n setRows(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n Cost Centre\r\n Account Code\r\n Amount\r\n \r\n \r\n \r\n {rows.map((dpcType) => (\r\n \r\n {dpcType.costCentre}\r\n {dpcType.accountCode}\r\n {`$${(Math.round(dpcType.netAmount * 100) / 100).toFixed(\r\n 2\r\n )}`}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default AccountingSummaryTable;\r\n\r\nAccountingSummaryTable.propTypes = {\r\n invoiceId: PropTypes.string.isRequired,\r\n};\r\n","export const statuses = {\r\n bug: 0,\r\n draft: 1,\r\n added: 2,\r\n changed: 3,\r\n deleted: 4,\r\n restored: 5,\r\n rejected: 6,\r\n amended: 7,\r\n addedApproved: 8,\r\n changedApproved: 9,\r\n deletedApproved: 10,\r\n hourlyLinked: 11,\r\n\r\n 0: \"There is a bug, please contact support\",\r\n 1: \"Draft\",\r\n 2: \"Added\",\r\n 3: \"Changed\",\r\n 4: \"Deleted\",\r\n 5: \"Restored\",\r\n 6: \"Rejected\",\r\n 7: \"Amended > Approved\",\r\n 8: \"Added > Approved\",\r\n 9: \"Changed > Approved\",\r\n 10: \"Deleted > Approved\",\r\n 11: \"Hourly\",\r\n};\r\n\r\nexport const roles = {\r\n sysAdmin: 1,\r\n tollAdmin: 2,\r\n tollManager: 3,\r\n ownerDriver: 4,\r\n tollSystemAdmin: 5,\r\n\r\n 1: \"System Administrator\",\r\n 2: \"TGE Administrator\",\r\n 3: \"TGE Manager\",\r\n 4: \"Owner Driver\",\r\n 5: \"TGE System Administrator\",\r\n};\r\n\r\nexport function getApprovalState(roleId, action, currentStatus, dataType) {\r\n console.log(roles[roleId], action, statuses[currentStatus], dataType);\r\n switch (action) {\r\n case \"CREATE_ITEM\":\r\n if (roleId === roles.tollAdmin) {\r\n return statuses.amended;\r\n }\r\n if (roleId === roles.ownerDriver) {\r\n return statuses.added;\r\n }\r\n return statuses.bug;\r\n\r\n case \"UPDATE_ITEM\":\r\n if (roleId === roles.tollAdmin) {\r\n return statuses.amended;\r\n }\r\n if (roleId === roles.ownerDriver) {\r\n if (currentStatus === statuses.added) {\r\n if (dataType === \"lcl\" || dataType === \"parcel\") {\r\n return statuses.added;\r\n } else if (\r\n dataType === \"hourly\" ||\r\n dataType === \"linehaul\" ||\r\n dataType === \"linehaulFloating\"\r\n ) {\r\n return statuses.changed;\r\n }\r\n }\r\n if (currentStatus === statuses.draft) {\r\n return statuses.changed;\r\n }\r\n if (currentStatus === statuses.changed) {\r\n return statuses.changed;\r\n }\r\n }\r\n return statuses.bug;\r\n\r\n case \"APPROVE_ITEM\":\r\n if (currentStatus === statuses.added) {\r\n return statuses.addedApproved;\r\n }\r\n if (currentStatus === statuses.changed) {\r\n return statuses.changedApproved;\r\n }\r\n if (currentStatus === statuses.deleted) {\r\n return statuses.deletedApproved;\r\n }\r\n return statuses.bug;\r\n\r\n case \"DELETE_ITEM\":\r\n if (roleId === roles.tollAdmin) {\r\n return statuses.deletedApproved;\r\n }\r\n if (roleId === roles.ownerDriver) {\r\n return statuses.deleted;\r\n }\r\n return statuses.bug;\r\n\r\n case \"RESTORE_ITEM\":\r\n return statuses.restored;\r\n // return statuses.bug;\r\n\r\n default:\r\n console.log(\"getApprovalState default clause\");\r\n return statuses.bug;\r\n }\r\n}\r\n\r\nexport const invoiceStatuses = {\r\n dpcIncomplete: 1,\r\n dpcPending: 2,\r\n unsubmitted: 3,\r\n submitted: 4,\r\n rejected: 5,\r\n adminApproved: 6,\r\n managerApproved: 7,\r\n na: 8,\r\n\r\n 1: \"DPC Incomplete\",\r\n 2: \"DPC Pending\",\r\n 3: \"Unsubmitted\",\r\n 4: \"Submitted\",\r\n 5: \"Rejected\",\r\n 6: \"Admin Approved\",\r\n 7: \"Manager Approved\",\r\n 8: \"N/A\",\r\n};\r\n\r\nexport const linehaulTypes = {\r\n 1: \"Round Trip\",\r\n 2: \"Fixed Trip\",\r\n 3: \"Floating Trip\",\r\n roundTrip: 1,\r\n fixedTrip: 2,\r\n floatingTrip: 3,\r\n};\r\n\r\nexport const branchNames = {\r\n 1: \"Ashburton\",\r\n 2: \"Auckland\",\r\n 3: \"Blenheim\",\r\n 4: \"Christchurch\",\r\n 5: \"Cromwell\",\r\n 6: \"Dargaville\",\r\n 7: \"Dunedin\",\r\n 8: \"Gisborne\",\r\n 9: \"Greymouth\",\r\n 10: \"Hamilton\",\r\n 11: \"Hastings\",\r\n 12: \"Invercargill\",\r\n 13: \"Kaikohe\",\r\n 14: \"Kaitaia\",\r\n 15: \"Kerikeri\",\r\n 16: \"Masterton\",\r\n 17: \"Nelson\",\r\n 18: \"New Plymouth\",\r\n 19: \"Oamaru\",\r\n 20: \"Palmerston North\",\r\n 21: \"Queenstown\",\r\n 22: \"Rotorua\",\r\n 23: \"Taupo\",\r\n 24: \"Tauranga\",\r\n 25: \"Timaru\",\r\n 26: \"Wanganui\",\r\n 27: \"Wellington\",\r\n 28: \"Whangarei\",\r\n};\r\n\r\nexport const invoiceStatusOptions = [\r\n { value: 1, label: \"DPC Incomplete\" },\r\n { value: 2, label: \"DPC Pending\" },\r\n { value: 3, label: \"Unsubmitted\" },\r\n { value: 4, label: \"Submitted\" },\r\n { value: 5, label: \"Rejected\" },\r\n { value: 6, label: \"Admin Approved\" },\r\n { value: 7, label: \"Manager Approved\" },\r\n { value: 8, label: \"N/A\" },\r\n];\r\n\r\nexport const pageSize = 100;","import { Backdrop, CircularProgress } from \"@material-ui/core\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\nconst AuthenticatedRoute = ({\r\n component: Component,\r\n redirectPath,\r\n ...rest\r\n}) => {\r\n const { userData, verifyToken } = useContext(UserDataContext);\r\n const [loading, setLoading] = useState(true);\r\n\r\n console.log(\"authenticated route render\");\r\n\r\n useEffect(() => {\r\n // if it is undetermined whether the user is logged in\r\n if (!Object.keys(userData).includes(\"loggedIn\")) {\r\n verifyToken();\r\n }\r\n }, [userData, verifyToken]);\r\n\r\n useEffect(() => {\r\n // if it is determined whether the user is logged in\r\n if (loading && Object.keys(userData).includes(\"loggedIn\")) {\r\n setLoading(false);\r\n }\r\n }, [userData, loading]);\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n userData.loggedIn ? : \r\n }\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default AuthenticatedRoute;\r\n","export default __webpack_public_path__ + \"static/media/tge-logo-lockup-dark-fern-rgb.5044264a.svg\";","import React from \"react\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst advanceFocus = () => {\r\n // increment focus to next focusable element\r\n const focusableElements = document.querySelectorAll(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n let idx = 0;\r\n // theres probably a better way to check which is the next element\r\n focusableElements.forEach((ele, i) => {\r\n if (ele === document.activeElement) {\r\n idx = i;\r\n return;\r\n }\r\n });\r\n focusableElements[(idx + 1) % focusableElements.length].focus();\r\n};\r\n\r\nconst TextFieldAdvanceOnEnter = props => {\r\n const { onEnter, ...otherProps } = props;\r\n return (\r\n {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n onEnter();\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nTextFieldAdvanceOnEnter.propTypes = {\r\n onEnter: PropTypes.func\r\n};\r\n\r\nTextFieldAdvanceOnEnter.defaultProps = {\r\n onEnter: advanceFocus\r\n};\r\n\r\nexport default TextFieldAdvanceOnEnter;\r\n","import React, { useContext, useState } from \"react\";\r\nimport {\r\n Box,\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n Divider,\r\n makeStyles,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(1, 0, 0, 0),\r\n },\r\n feedback: {\r\n maxHeight: \"160px\",\r\n },\r\n}));\r\n\r\nconst MfaDialog = (props) => {\r\n const { onClose, open, ...rest } = props;\r\n const { userData, verifyMfa } = useContext(UserDataContext);\r\n const [mfaKey, setMfaKey] = useState(\"\");\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const classes = useStyles();\r\n\r\n const handleSubmit = async () => {\r\n setLoading(true);\r\n await verifyMfa(mfaKey, setErrorMessage);\r\n setLoading(false);\r\n };\r\n\r\n return (\r\n \r\n Multifactor Authentication\r\n \r\n\r\n \r\n \r\n Please enter the code that was sent to your email address.\r\n \r\n setMfaKey(event.target.value)}\r\n fullWidth\r\n placeholder=\"Enter code\"\r\n disabled={loading}\r\n />\r\n \r\n\r\n {errorMessage !== \"\" ? (\r\n \r\n \r\n {errorMessage}\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n Submit\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MfaDialog;\r\n","import {\r\n Button,\r\n Dialog as MuiDialog,\r\n DialogContent,\r\n DialogProps as MuiDialogProps,\r\n DialogTitle,\r\n useTheme,\r\n Box\r\n} from \"@material-ui/core\";\r\n import React from 'react' \r\n\r\n \r\n export const Survey = ({\r\n onConfirm,\r\n onCancel,\r\n show = true,\r\n title = 'Please confirm',\r\n confirmButtonText = 'OK',\r\n cancelButtonText = 'Cancel',\r\n ...props\r\n }) => (\r\n \r\n {title}\r\n \r\n \r\n We have a few questions about your experience of using TGE OD Web Portal.\r\n \r\n \r\n It would only take a couple of minutes. Your feedback is important to us.\r\n \r\n \r\n Click Yes to participate\r\n \r\n \r\n \r\n \r\n \r\n Click No to skip or if you have already filled the survey\r\n \r\n \r\n \r\n \r\n \r\n The survey will be available until 16th December 6pm.\r\n \r\n \r\n \r\n )\r\n \r\n export default Survey\r\n ","\r\nexport const currentSurveyLink = 'https://form.jotform.com/223267663742865'\r\nexport const surveyTitle = 'Kia Ora!'\r\nexport const surveyStartDate = new Date('2022-11-30')\r\nexport const surveyEndDate = new Date('2022-12-16 18:01:00') //set end date to be real end date +1 minute so we wont have to worry about time","import React, { useState, useContext, useEffect } from \"react\";\r\nimport { Link, useHistory } from \"react-router-dom\";\r\nimport {\r\n Container,\r\n Backdrop,\r\n CircularProgress,\r\n Grid,\r\n Button,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport toll_logo from \"../tge-logo-lockup-dark-fern-rgb.svg\";\r\nimport TextFieldAdvanceOnEnter from \"./TextFieldAdvanceOnEnter\";\r\nimport version from \"../version.json\";\r\nimport MfaDialog from \"./MfaDialog\";\r\nimport SurveyMessage from './survey/newSurvey.jsx'\r\nimport { \r\n surveyTitle, \r\n currentSurveyLink,\r\n surveyStartDate,\r\n surveyEndDate\r\n} from './survey/surveyDetails'\r\n\r\nconst mailTo = \"nationaltransportcompliance@teamglobalexp.co.nz\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(3),\r\n },\r\n field: {\r\n padding: theme.spacing(2),\r\n textAlign: \"left\",\r\n },\r\n header: {\r\n padding: theme.spacing(2),\r\n textAlign: \"center\",\r\n },\r\n headerIcon: {\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n padding: theme.spacing(2),\r\n },\r\n feedback: {\r\n padding: theme.spacing(2),\r\n textAlign: \"center\",\r\n color: \"red\",\r\n },\r\n forgotPassword: {\r\n paddingTop: theme.spacing(2),\r\n textAlign: \"center\",\r\n },\r\n svg: {\r\n height: \"auto\",\r\n width: \"100%\",\r\n \r\n },\r\n version: {\r\n position: \"absolute\",\r\n right: \"5px\",\r\n bottom: \"5px\",\r\n },\r\n}));\r\n\r\nconst LoginPage = (props) => {\r\n const { ...otherProps } = props;\r\n const { userData, login } = useContext(UserDataContext);\r\n const history = useHistory();\r\n const [formValues, setFormValues] = useState({\r\n username: \"\",\r\n password: \"\",\r\n });\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const classes = useStyles();\r\n const [loading, setLoading] = useState(false);\r\n \r\n\r\n const authenticate = async () => {\r\n try {\r\n console.log(\"logging in\");\r\n setLoading(true);\r\n await login(formValues.username, formValues.password, setErrorMessage);\r\n\r\n console.log(userData);\r\n } catch (error) {\r\n console.log(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleClick = () => {\r\n authenticate();\r\n };\r\n\r\n const currDate = new Date()\r\n const [isShowSurvey, setisShowSurvey] = useState(currDate >= surveyStartDate && currDate < surveyEndDate);\r\n\r\n const openSurvey = (url) => {\r\n window.open(url, '_blank', 'noopener,noreferrer');\r\n };\r\n \r\n const closeSurvey = () => {\r\n setisShowSurvey(false);\r\n }\r\n\r\n useEffect(() => {\r\n setLoading(false);\r\n if (userData.loggedIn) {\r\n history.push(`/${userData.userName}/dashboard`);\r\n }\r\n }, [userData, history]);\r\n\r\n return (\r\n <>\r\n \r\n {version.commit.substring(0, 7)} {process.env.REACT_APP_ENV}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \"toll\r\n \r\n \r\n \r\n Team Global Express NZ Owner Driver Portal\r\n \r\n \r\n \r\n \r\n setFormValues({ ...formValues, username: event.target.value })\r\n }\r\n fullWidth\r\n placeholder=\"Enter username\"\r\n type=\"text\"\r\n />\r\n \r\n \r\n \r\n setFormValues({ ...formValues, password: event.target.value })\r\n }\r\n onEnter={() => authenticate()}\r\n fullWidth\r\n placeholder=\"Enter password\"\r\n type=\"password\"\r\n />\r\n \r\n \r\n \r\n Log in\r\n \r\n \r\n {errorMessage && (\r\n \r\n {errorMessage}\r\n \r\n )}\r\n \r\n \r\n For any technical issues, including password resets, please\r\n contact Helpdesk 0800 006 206 or{\" \"}\r\n \r\n {mailTo}\r\n \r\n
\r\n For any other queries, please escalate to your Branch\r\n Administrator\r\n
\r\n
\r\n
\r\n
\r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n closeSurvey()}\r\n onConfirm={() => {\r\n closeSurvey()\r\n openSurvey(currentSurveyLink)\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default LoginPage;\r\n","export default __webpack_public_path__ + \"static/media/tge-logo-lockup-white.b663ca08.svg\";","import React, { useContext } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport toll_logo from \"../tge-logo-lockup-white.svg\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\nimport HomeIcon from \"@material-ui/icons/Home\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(1),\r\n },\r\n title: {\r\n flexGrow: 1,\r\n textAlign: \"left\",\r\n },\r\n menuIcon: {\r\n width: \"auto\",\r\n height: \"50px\",\r\n padding: theme.spacing(1),\r\n '& img': {\r\n width: \"100%\",\r\n height: \"100%\", \r\n }\r\n }\r\n}));\r\n\r\nconst ButtonAppBar = () => {\r\n const classes = useStyles();\r\n const { appState, setAppState, clearScrollPosition } =\r\n useContext(AppStateContext);\r\n const { userData, logout } = useContext(UserDataContext);\r\n const history = useHistory();\r\n\r\n return (\r\n \r\n \r\n setAppState({ ...appState, menuOpen: true })}\r\n >\r\n \r\n \r\n\r\n
\r\n \"toll\r\n
\r\n\r\n
\r\n {\r\n clearScrollPosition();\r\n history.push(`/${userData.userName}/dashboard`);\r\n }}\r\n >\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ButtonAppBar;\r\n","import React, { useState, useContext } from \"react\";\r\nimport { roles } from \"../Mappings\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport List from \"@material-ui/core/List\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport MeetingRoomIcon from \"@material-ui/icons/MeetingRoom\";\r\nimport SettingsIcon from \"@material-ui/icons/Settings\";\r\nimport version from \"../version.json\";\r\nimport GroupIcon from \"@material-ui/icons/Group\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n fontWeight: \"bold\",\r\n },\r\n version: {\r\n position: \"absolute\",\r\n bottom: \"5px\",\r\n left: \"5px\",\r\n },\r\n}));\r\n\r\nconst SideMenu = () => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const { appState, setAppState } = useContext(AppStateContext);\r\n const { userData, setUserData, logout } = useContext(UserDataContext);\r\n\r\n return (\r\n setAppState({ ...appState, menuOpen: false })}\r\n >\r\n \r\n \r\n \r\n Team Global Express NZ Owner Driver Portal\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n history.push(`/${userData.userName}/settings`)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {userData.roleId === roles.tollSystemAdmin && (\r\n {\r\n history.push(`/${userData.userName}/master-data`);\r\n setAppState({ ...appState, menuOpen: false });\r\n }}\r\n >\r\n \r\n \r\n \r\n Master Data Management\r\n \r\n )}\r\n \r\n \r\n {version.commit.substring(0, 7)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SideMenu;\r\n","import React, { useContext } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n CardActions,\r\n Button,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\n\r\n\r\nconst InvoiceCard = () => {\r\n const history = useHistory();\r\n const { userData } = useContext(UserDataContext);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n\r\n View / Approve invoices\r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default InvoiceCard;\r\n","import React, { useContext } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Card, CardContent, CardHeader, Divider, CardActions, Button, Typography } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\nconst FinanceCard = () => {\r\n const history = useHistory();\r\n const { userData } = useContext(UserDataContext);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n View finance / audit information about historical data.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FinanceCard;\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n Card,\r\n CardHeader,\r\n ListItem,\r\n ListItemIcon,\r\n Divider,\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n Typography,\r\n CardContent,\r\n CircularProgress,\r\n} from \"@material-ui/core\";\r\nimport { invoiceStatuses } from \"../Mappings\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport TruckIcon from \"@material-ui/icons/LocalShipping\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nimport Axios from \"axios\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noPadding: {\r\n padding: theme.spacing(0),\r\n },\r\n extraPadding: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n paddingLeft: theme.spacing(4),\r\n paddingRight: theme.spacing(4),\r\n },\r\n loadParent: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n },\r\n loadChild: {},\r\n}));\r\n\r\nconst InvoiceStatusCard = () => {\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const weeks = [0, 1, 2, 3, 4];\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n const sendRequests = async () => {\r\n try {\r\n setLoading(true);\r\n console.log(\"fetch invoice states\");\r\n\r\n const weeks = [0, 1, 2, 3, 4];\r\n\r\n const reqArray = userData.trucks.reduce((acc, truckObj) => {\r\n const { truckId } = truckObj;\r\n const weeklyStatuses = weeks.map((week) => {\r\n const { startDate, endDate } = getWeekDates(week);\r\n return {\r\n driverId: truckId,\r\n // startDate: startIso,\r\n // endDate: endIso,\r\n startDate: startDate.toISOString(),\r\n endDate: endDate.toISOString(),\r\n week: week,\r\n };\r\n });\r\n return [...acc, ...weeklyStatuses];\r\n }, []);\r\n\r\n const request = {\r\n method: \"POST\",\r\n url: `/invoices/getStates`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: reqArray,\r\n };\r\n\r\n const res = await Axios(request);\r\n\r\n const statusObj = res.data.reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur.driverId]: {\r\n ...acc[cur.driverId],\r\n [cur.week]: cur.invoiceState,\r\n },\r\n }),\r\n {}\r\n );\r\n\r\n console.log(\"updating userData from DpcStatusCard\");\r\n setUserData({ ...userData, invoiceStatuses: statusObj });\r\n } catch (err) {\r\n console.log(err);\r\n throw err;\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n if (!userData.invoiceStatuses) {\r\n sendRequests();\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n {!loading && (\r\n \r\n \r\n \r\n \r\n \r\n Truck ID\r\n \r\n \r\n \r\n \r\n Trading Name\r\n \r\n \r\n \r\n \r\n Week -4\r\n \r\n \r\n \r\n \r\n Week -3\r\n \r\n \r\n \r\n \r\n Week -2\r\n \r\n \r\n \r\n \r\n Week -1\r\n \r\n \r\n \r\n \r\n Current Week\r\n \r\n \r\n \r\n \r\n \r\n {userData.trucks.map(({ truckId, tradingName }, idx) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n #{truckId}\r\n \r\n \r\n \r\n \r\n {tradingName}\r\n \r\n \r\n {[4, 3, 2, 1, 0].map((week) => (\r\n \r\n {\r\n history.push(\r\n `/${userData.userName}/trucks/${truckId}/weeks/${week}`\r\n );\r\n }}\r\n disabled={\r\n userData.invoiceStatuses?.[truckId]?.[week] ===\r\n invoiceStatuses.na\r\n }\r\n >\r\n {invoiceStatuses[\r\n userData.invoiceStatuses?.[truckId]?.[week]\r\n ] || \"\"}\r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n
\r\n )}\r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default InvoiceStatusCard;\r\n\r\n/*\r\n{userData.trucks.map((truckObj) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n #{truckObj.truckId}\r\n \r\n \r\n {[4, 3, 2, 1, 0].map((week) => {\r\n return (\r\n \r\n {\r\n history.push(\r\n `/${userData.userName}/trucks/${truckObj.truckId}/weeks/${week}`\r\n );\r\n }}\r\n >\r\n {invoiceStatuses[\r\n userData.invoiceStatuses[truckObj.truckId]?.[week]\r\n ] || \"\"}\r\n \r\n \r\n );\r\n })}\r\n \r\n))}\r\n*/\r\n\r\n// setLoading(true);\r\n// console.log(\"fetch invoice states\");\r\n\r\n// const weeks = [0, 1, 2, 3, 4];\r\n\r\n// const reqArray = userData.trucks.reduce((acc, truckObj) => {\r\n// const { truckId } = truckObj;\r\n// const weeklyStatuses = weeks.map((week) => {\r\n// const { startDate, endDate } = getWeekDates(week);\r\n// return {\r\n// driverId: truckId,\r\n// startDate: startDate.toISOString(),\r\n// endDate: endDate.toISOString(),\r\n// week: week,\r\n// };\r\n// });\r\n// return [...acc, ...weeklyStatuses];\r\n// }, []);\r\n\r\n// const request = {\r\n// method: \"POST\",\r\n// url: `/invoices/getStates`,\r\n// headers: {\r\n// \"Content-Type\": \"application/json\",\r\n// Authorization: `bearer ${userData.token}`,\r\n// },\r\n// data: reqArray,\r\n// };\r\n\r\n// const res = await Axios(request);\r\n\r\n// const statusObj = res.data.reduce(\r\n// (acc, cur) => ({\r\n// ...acc,\r\n// [cur.driverId]: {\r\n// ...acc[cur.driverId],\r\n// [cur.week]: cur.invoiceState,\r\n// },\r\n// }),\r\n// {}\r\n// );\r\n\r\n// console.log(\"updating userData from DpcStatusCard\");\r\n// setLoading(false);\r\n// setUserData({ ...userData, invoiceStatuses: statusObj });\r\n\r\n// ---------------------------------------------------------\r\n\r\n// const [fetch, setFetch] = useState(false);\r\n\r\n// const openReqLimit = 5;\r\n// const [openReqCount, setOpenReqCount] = useState(0);\r\n\r\n// console.log(\"invoice status card render\");\r\n\r\n// // build the array of request objects\r\n\r\n// const launchRequest = async (requestObj) => {\r\n// setOpenReqCount(openReqCount + 1);\r\n// const res = await Axios(requestObj);\r\n// const { driverId, week, invoiceState } = res.data;\r\n// setUserData({\r\n// ...userData,\r\n// invoiceStatuses: {\r\n// ...userData.invoiceStatuses,\r\n// [driverId]: {\r\n// ...userData?.invoiceStatuses?.[driverId],\r\n// [week]: invoiceState,\r\n// },\r\n// },\r\n// });\r\n// setOpenReqCount(openReqCount - 1);\r\n// };\r\n\r\n// useEffect(() => {\r\n// // initially launch the first request\r\n// // if (!userData.invoiceStatuses) {\r\n// // while (openReqCount < openReqLimit && reqArray.length > 0) {\r\n// // launchRequest(reqArray.shift());\r\n// // }\r\n// // }\r\n// if (!userData.invoiceStatuses) {\r\n// console.log(\"setFetch\");\r\n// setFetch(true);\r\n// // launchRequest(reqArray.shift());\r\n// }\r\n// }, []);\r\n\r\n// useEffect(() => {\r\n// if (fetch) {\r\n// // launch more requests to keep the open req count at the limit\r\n// if (reqArray.length > 0 && openReqCount < openReqLimit) {\r\n// // if there are more requests to send\r\n// launchRequest(reqArray.shift());\r\n// }\r\n\r\n// // else if (openReqCount === 0) {\r\n// // // if no open requests\r\n// // setLoading(false);\r\n// // }\r\n// }\r\n// }, [fetch, openReqCount]);\r\n\r\n// useEffect(() => {\r\n// const launchAll = async () => {\r\n// setLoading(true);\r\n// const reqArray = userData.trucks.map((truckObj) => {\r\n// return {\r\n// method: \"POST\",\r\n// url: `/invoices/getStates`,\r\n// headers: {\r\n// \"Content-Type\": \"application/json\",\r\n// Authorization: `bearer ${userData.token}`,\r\n// },\r\n// data: weeks.map((week) => {\r\n// const { startDate, endDate } = getWeekDates(week);\r\n// return {\r\n// driverId: truckObj.truckId,\r\n// startDate: startDate.toISOString(),\r\n// endDate: endDate.toISOString(),\r\n// week: week,\r\n// };\r\n// }),\r\n// };\r\n// });\r\n\r\n// const responses = await Axios.all(reqArray)\r\n\r\n// const statusObj = res.data.reduce(\r\n// (acc, cur) => ({\r\n// ...acc,\r\n// [cur.driverId]: {\r\n// ...acc[cur.driverId],\r\n// [cur.week]: cur.invoiceState,\r\n// },\r\n// }),\r\n// {}\r\n// );\r\n// setUserData({\r\n// ...userData,\r\n// invoiceStatuses: { ...userData.invoiceStatuses, ...statusObj },\r\n// });\r\n\r\n// setLoading(false);\r\n// };\r\n\r\n// if (!userData.invoiceStatuses) {\r\n// launchAll();\r\n// }\r\n// }, []);\r\n","import React, { useContext } from \"react\";\r\nimport { Grid, Typography } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport InvoiceCard from \"./InvoiceCard\";\r\nimport FinanceCard from \"./FinanceCard\";\r\nimport DpcStatusCard from \"./DpcStatusCard\";\r\nimport { roles } from \"../Mappings\";\r\n\r\nconst Dashboard = () => {\r\n const { userData } = useContext(UserDataContext);\r\n\r\n console.log(\"dashboard render\");\r\n\r\n return (\r\n \r\n \r\n {userData.firstName}'s Dashboard\r\n \r\n\r\n \r\n \r\n \r\n\r\n {[roles.tollAdmin, roles.tollManager, roles.tollSystemAdmin].includes(\r\n userData.roleId\r\n ) && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Dashboard;\r\n","import React, { useState, useContext } from \"react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CardActions from \"@material-ui/core/CardActions\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardHeader from \"@material-ui/core/CardHeader\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Snackbar from \"@material-ui/core/Snackbar\";\r\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport InfoIcon from \"@material-ui/icons/Info\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport { amber, green } from \"@material-ui/core/colors\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n message: {\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n },\r\n success: {\r\n backgroundColor: green[600]\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark\r\n }\r\n}));\r\n\r\nconst Snack = props => {\r\n const { snackOpen, setSnackOpen, variant, message, ...other } = props;\r\n const classes = useStyles();\r\n return (\r\n setSnackOpen(false)}\r\n open={snackOpen}\r\n >\r\n \r\n \r\n {message}\r\n \r\n }\r\n action={[\r\n setSnackOpen(false)}>\r\n \r\n \r\n ]}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default Snack;\r\n","import React, { useState, useContext } from \"react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport {\r\n Card,\r\n CardActions,\r\n CardContent,\r\n CardHeader,\r\n Button,\r\n Divider,\r\n TextField,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport Snack from \"./Snack\";\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n block: {\r\n marginTop: theme.spacing(4),\r\n },\r\n field: {\r\n padding: theme.spacing(2),\r\n },\r\n action: {\r\n padding: theme.spacing(2),\r\n },\r\n feedback: {\r\n color: \"red\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nconst ChangePasswordForm = () => {\r\n const classes = useStyles();\r\n const [snackOpen, setSnackOpen] = useState(false);\r\n const [passwordForm, setPasswordForm] = useState({\r\n password1: \"\",\r\n password2: \"\",\r\n feedback: \"\",\r\n });\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const [passwordFeedback, setPasswordFeedback] = useState(\"\");\r\n\r\n const changePassword = async (token, newPassword) => {\r\n const request = {\r\n method: \"POST\",\r\n url: `/users/changepassword`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${token}`,\r\n },\r\n data: { password: newPassword },\r\n };\r\n try {\r\n const response = await axios(request);\r\n setSnackOpen(true);\r\n setPasswordForm({ ...passwordForm, feedback: \"\" });\r\n setUserData({ ...userData, resetPassword: false });\r\n return response;\r\n } catch (error) {\r\n // setSnackOpen(true);\r\n setPasswordForm({ ...passwordForm, feedback: \"\" });\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n };\r\n\r\n const handlePasswordChange = async () => {\r\n if (passwordForm.password1 === passwordForm.password2) {\r\n changePassword(userData.token, passwordForm.password1);\r\n } else {\r\n setPasswordForm({ ...passwordForm, feedback: \"Passwords do not match\" });\r\n }\r\n };\r\n\r\n const passwordStrengthTests = [\r\n {\r\n test: (password) => password.length >= 8,\r\n feedback: \"Password must be at least 8 characters long.\",\r\n },\r\n {\r\n test: (password) => password.length <= 20,\r\n feedback: \"Password must be no longer than 20 characters.\",\r\n },\r\n {\r\n test: (password) => /[a-z]+/.test(password),\r\n feedback: \"Password must contain at least one lowercase letter.\",\r\n },\r\n {\r\n test: (password) => /[A-Z]+/.test(password),\r\n feedback: \"Password must contain at least one uppercase letter.\",\r\n },\r\n {\r\n test: (password) => /\\d+/.test(password),\r\n feedback: \"Password must contain at least one digit.\",\r\n },\r\n {\r\n test: (password) => /[!@#$%^&*_\\-.?]+/.test(password),\r\n feedback: \"Password must contain at least one symbol.\",\r\n },\r\n ];\r\n\r\n const onUpdatePassword = (event) => {\r\n const failSome = passwordStrengthTests.some((strengthTest) => {\r\n const pass = strengthTest.test(event.target.value);\r\n !pass && setPasswordFeedback(strengthTest.feedback);\r\n return !pass;\r\n });\r\n\r\n !failSome && setPasswordFeedback(\"\");\r\n\r\n setPasswordForm({\r\n ...passwordForm,\r\n password1: event.target.value,\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {passwordForm.feedback}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n setPasswordForm({\r\n ...passwordForm,\r\n password2: event.target.value,\r\n })\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n handlePasswordChange()}\r\n disabled={passwordFeedback !== \"\"}\r\n >\r\n Submit\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ChangePasswordForm;\r\n","import React, { useState, useContext } from \"react\";\r\n\r\nimport {\r\n Divider,\r\n Grid,\r\n CardActions,\r\n CardContent,\r\n Card,\r\n CardHeader,\r\n Button,\r\n FormControlLabel,\r\n Checkbox,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport ChangePasswordForm from \"./ChangePasswordForm\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n block: {\r\n marginTop: theme.spacing(4),\r\n },\r\n field: {\r\n padding: theme.spacing(2),\r\n },\r\n action: {\r\n padding: theme.spacing(2),\r\n },\r\n message: {\r\n padding: theme.spacing(2),\r\n color: theme.palette.error.main,\r\n paddingBottom: 0,\r\n },\r\n}));\r\n\r\nconst SettingsPage = () => {\r\n const classes = useStyles();\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n\r\n // Local state.\r\n const [freq, setFreq] = useState({\r\n daily: userData.enableDaily,\r\n weekly: userData.enableWeekly,\r\n });\r\n const [showError, setShowError] = useState(\r\n !(userData.enableDaily || userData.enableWeekly)\r\n );\r\n\r\n const call = async (type, checked) => {\r\n try {\r\n await axios({\r\n method: \"POST\",\r\n url: `/users/${type}/${checked}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const callAll = async (calls) => {\r\n for (let i = 0; i < calls.length; i++) {\r\n await calls[i]();\r\n }\r\n };\r\n\r\n // Function which consolidates the logic between both updates.\r\n const updateFreq = (newFreq) => {\r\n // Update local state.\r\n setFreq(newFreq);\r\n\r\n // Validate selection.\r\n const canUpdate = newFreq.daily || newFreq.weekly;\r\n const error = !canUpdate;\r\n\r\n // Update whether the error message can be shown.\r\n if (error !== showError) {\r\n setShowError(error);\r\n }\r\n\r\n // Only if we can update should we push any data changes to the user data context.\r\n if (canUpdate) {\r\n // Backend update.\r\n const calls = [];\r\n if (newFreq.daily !== userData.enableDaily) {\r\n calls.push(() => call(\"setDaily\", newFreq.daily));\r\n }\r\n if (newFreq.weekly !== userData.enableWeekly) {\r\n calls.push(() => call(\"setWeekly\", newFreq.weekly));\r\n }\r\n\r\n // Make sure to push any deactivate request last, so as not to move through an invalid state.\r\n if (!newFreq.daily) {\r\n calls.reverse();\r\n }\r\n callAll(calls);\r\n\r\n // Frontend update.\r\n setUserData({\r\n ...userData,\r\n enableDaily: newFreq.daily,\r\n enableWeekly: newFreq.weekly,\r\n });\r\n }\r\n };\r\n\r\n const onChangeDaily = (event) => {\r\n const newFreq = {\r\n ...freq,\r\n daily: event.target.checked,\r\n };\r\n updateFreq(newFreq);\r\n };\r\n\r\n const onChangeWeekly = (event) => {\r\n const newFreq = {\r\n ...freq,\r\n weekly: event.target.checked,\r\n };\r\n updateFreq(newFreq);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {/* \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n }\r\n label=\"Daily\"\r\n />\r\n \r\n \r\n \r\n }\r\n label=\"Weekly\"\r\n />\r\n \r\n \r\n {showError && (\r\n <>\r\n \r\n \r\n Please select at least one email frequency.\r\n \r\n \r\n )}\r\n \r\n \r\n */}\r\n\r\n \r\n {/* Change Password Card */}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SettingsPage;\r\n","import { statuses, getApprovalState } from \"../Mappings\";\r\nimport { getDayOfWeekFromDate } from \"../GlobalFunctions\";\r\n\r\nexport const LclDataReducer = (state, action) => {\r\n console.log(action);\r\n const {\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n startDate,\r\n items,\r\n itemData,\r\n roleId,\r\n ...others\r\n } = action;\r\n switch (action.type) {\r\n case \"INSERT_NEW_ITEMS\":\r\n // dispatch({type: \"INSERT_NEW_ITEMS\", truckId, week, day, items: [...blaah]} )\r\n let newObj = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {} };\r\n for (let i = 0; i < items.length; i++) {\r\n const day = getDayOfWeekFromDate(items[i].eventDateTime);\r\n newObj[day][items[i].id] = items[i];\r\n }\r\n // console.log({ ...state, [truckId]: { ...state[truckId], [week]: { ...newObj } } });\r\n return {\r\n ...state,\r\n [truckId]: { ...state[truckId], [week]: { ...newObj } },\r\n };\r\n\r\n case \"UPDATE_LIST_ITEMS\":\r\n // dispatch({type: \"UPDATE_LIST_ITEMS\", truckId, week, day, items: [...blaah]} )\r\n const day = getDayOfWeekFromDate(items[0].eventDateTime);\r\n let oldObj = { ...state[truckId][week] } \r\n for (let i = 0; i < items.length; i++) { \r\n oldObj[day][items[i].id] = items[i];\r\n } \r\n\r\n return {\r\n ...state,\r\n [truckId]: { ...state[truckId], [week]: { ...oldObj } },\r\n };\r\n\r\n case \"CREATE_ITEM\":\r\n if (!state[truckId]) {\r\n state[truckId] = {};\r\n }\r\n if (!state[truckId][week]) {\r\n state[truckId][week] = {};\r\n }\r\n if (!state[truckId][week][day]) {\r\n state[truckId][week][day] = {};\r\n }\r\n\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"lcl\"\r\n ),\r\n userAdded: true,\r\n },\r\n ...state[truckId][week][day],\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"UPDATE_ITEM\":\r\n // example call: diapatch({type: \"UPDATE_ITEM\", truckId, week, day, itemId, itemData)\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n ...itemData,\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"lcl\"\r\n ),\r\n // state[truckId][week][day][itemId].approvalState === statuses.added ? statuses.added : statuses.changed\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"DELETE_ITEM\":\r\n // example call: dispatch({type: \"DELETE_ITEM\", truckId, week, day, itemId})\r\n // if (state[truckId][week][day][itemId].approvalState === statuses.added) {\r\n // const { [itemId]: dontWant, ...others } = state[truckId][week][day];\r\n // return {\r\n // ...state,\r\n // [truckId]: {\r\n // ...state[truckId],\r\n // [week]: {\r\n // ...state[truckId][week],\r\n // [day]: {\r\n // ...others\r\n // }\r\n // }\r\n // }\r\n // };\r\n // } else {\r\n // return {\r\n // ...state,\r\n // [truckId]: {\r\n // ...state[truckId],\r\n // [week]: {\r\n // ...state[truckId][week],\r\n // [day]: {\r\n // ...state[truckId][week][day],\r\n // [itemId]: {\r\n // ...state[truckId][week][day][itemId],\r\n // approvalState: statuses.deleted\r\n // }\r\n // }\r\n // }\r\n // }\r\n // };\r\n // }\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"lcl\"\r\n ),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"RESTORE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"lcl\"\r\n ),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"APPROVE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"lcl\"\r\n ),\r\n // evolveStatus.approve(itemData.approvalState, roleId),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"REJECT_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: statuses.rejected,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n console.error(\"reducer default clause\");\r\n return state;\r\n }\r\n};\r\n","import React, {\r\n createContext,\r\n useReducer,\r\n useContext,\r\n useCallback,\r\n} from \"react\";\r\nimport { LclDataReducer } from \"../Reducers/LclDataReducer\";\r\nimport { UserDataContext } from \"./UserDataContext\";\r\nimport { roles } from \"../Mappings\";\r\nimport { statuses } from \"../Mappings\";\r\nimport {\r\n getCurrentBranchesArray,\r\n getCurrentBranchesObject,\r\n getDateFromWeekAndDay,\r\n} from \"../GlobalFunctions\";\r\nimport { MenuItem, InputAdornment } from \"@material-ui/core\";\r\n\r\nexport const LclDataContext = createContext();\r\n\r\nconst LclDataContextProvider = (props) => {\r\n const [lclData, dispatch] = useReducer(LclDataReducer, {});\r\n const { userData } = useContext(UserDataContext);\r\n\r\n console.log(\"Rerender\");\r\n\r\n const defaultLcl = {\r\n id: 0,\r\n reason: \"\",\r\n approvalState: 0,\r\n userAdded: false,\r\n driverComments: \"\",\r\n adminComments: \"\",\r\n managerComments: \"\",\r\n driver: 0,\r\n modifiedTime: \"1900-01-01T00:00:00\",\r\n branch: \"\",\r\n eventType: \"\",\r\n eventAddress: \"\",\r\n eventAddr1: \"\",\r\n loadToDelivery: \"1900-01-01T00:00:00\",\r\n carrier: \"\",\r\n eventDate: \"1900-01-01\",\r\n eventTime: \"00:00:00\",\r\n conNoteNum: \"\",\r\n consignmentID: 0,\r\n sender: \"\",\r\n receiver: \"\",\r\n location: \"\",\r\n zone: \"\",\r\n pod: \"\",\r\n eventItems: \"\",\r\n kg: 0,\r\n m3: 0,\r\n dpc: 0,\r\n eu: \"\",\r\n eventDateTime: \"1900-01-01T00:00:00\",\r\n signature: null,\r\n consignmentDeliveryID: 0,\r\n totalItems: 0,\r\n stopPay: 0,\r\n totalDPC: 0,\r\n };\r\n\r\n const comments = {\r\n [roles.tollAdmin]: \"adminComments\",\r\n [roles.ownerDriver]: \"driverComments\",\r\n [roles.tollManager]: \"managerComments\",\r\n }[userData.roleId];\r\n\r\n const getIsoString = (time, allValues) => {\r\n const { dateIsoString } = getDateFromWeekAndDay(\r\n allValues.week,\r\n allValues.day\r\n );\r\n return dateIsoString.replace(\"00:00:00\", `${time}:00`);\r\n };\r\n\r\n const createLclModel = useCallback(\r\n (params) => {\r\n const types = {\r\n P: \"Pickup\",\r\n D: \"Delivery\",\r\n };\r\n\r\n const currentBranchArray = getCurrentBranchesArray(\r\n userData.branches,\r\n params.week\r\n );\r\n const branchShortCodeObject = currentBranchArray.reduce((acc, cur) => {\r\n acc[cur.shortCode] = cur;\r\n return acc;\r\n }, {});\r\n\r\n return {\r\n branchShortCodeObject, //test only\r\n eventDateTime: {\r\n displayName: \"Time\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) =>\r\n getIsoString(allValues.eventTimeString, allValues),\r\n },\r\n\r\n eventTimeString: {\r\n displayName: \"Time\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.eventTimeString !== \"\",\r\n mapToRequestValue: (allValues) => allValues.eventTimeString,\r\n textFieldProps: {\r\n name: \"eventTimeString\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n eventType: {\r\n displayName: \"Type\",\r\n displayValue: (value) => types[value],\r\n validate: (allValues) => allValues.eventType !== \"\",\r\n mapToRequestValue: (allValues) => allValues.eventType,\r\n textFieldProps: {\r\n name: \"eventType\",\r\n select: true,\r\n children: Object.keys(types).map((type) => (\r\n \r\n {types[type]}\r\n \r\n )),\r\n },\r\n },\r\n\r\n branch: {\r\n displayName: \"Branch\",\r\n displayValue: (value) => value,\r\n // displayValue: (value) => console.log(value),\r\n validate: (allValues) => allValues.branch !== \"\",\r\n mapToRequestValue: (allValues) => allValues.branch,\r\n textFieldProps: {\r\n name: \"branch\",\r\n select: true,\r\n children: Object.keys(branchShortCodeObject).map((shortCode) => (\r\n \r\n {branchShortCodeObject[shortCode].branchName}\r\n \r\n )),\r\n },\r\n },\r\n\r\n eventAddress: {\r\n displayName: \"Address\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.eventAddress !== \"\",\r\n mapToRequestValue: (allValues) => allValues.eventAddress,\r\n textFieldProps: {\r\n name: \"eventAddress\",\r\n },\r\n },\r\n\r\n conNoteNum: {\r\n displayName: \"Con-note Number\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.conNoteNum !== \"\",\r\n mapToRequestValue: (allValues) => allValues.conNoteNum,\r\n textFieldProps: {\r\n name: \"conNoteNum\",\r\n },\r\n },\r\n\r\n sender: {\r\n displayName: \"Sender\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => {\r\n if (allValues.type === \"P\") {\r\n return allValues.sender !== \"\";\r\n } else {\r\n return true;\r\n }\r\n },\r\n mapToRequestValue: (allValues) => allValues.sender,\r\n textFieldProps: {\r\n name: \"sender\",\r\n },\r\n },\r\n\r\n receiver: {\r\n displayName: \"Receiver\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => {\r\n if (allValues.type === \"D\") {\r\n return allValues.receiver !== \"\";\r\n } else {\r\n return true;\r\n }\r\n },\r\n mapToRequestValue: (allValues) => allValues.receiver,\r\n textFieldProps: {\r\n name: \"receiver\",\r\n },\r\n },\r\n\r\n location: {\r\n displayName: \"Location\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => /^([a-z]|[A-Z])+$/.test(allValues.location),\r\n mapToRequestValue: (allValues) => allValues.location,\r\n textFieldProps: {\r\n name: \"location\",\r\n },\r\n },\r\n\r\n zone: {\r\n displayName: \"Zone\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => /^([01]?\\d)$|^(20)$/.test(allValues.zone),\r\n mapToRequestValue: (allValues) => allValues.zone,\r\n textFieldProps: {\r\n name: \"zone\",\r\n },\r\n },\r\n\r\n eventItems: {\r\n displayName: \"Items\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => /^\\d+$/.test(allValues.eventItems),\r\n mapToRequestValue: (allValues) => allValues.eventItems,\r\n textFieldProps: {\r\n name: \"eventItems\",\r\n },\r\n },\r\n\r\n kg: {\r\n displayName: \"Weight\",\r\n displayValue: (value) => `${Math.round(value)}kg`,\r\n validate: (allValues) => /^\\d+(\\.\\d{1,3})?$/.test(allValues.kg),\r\n mapToRequestValue: (allValues) => Number(allValues.kg),\r\n textFieldProps: {\r\n name: \"kg\",\r\n InputProps: { endAdornment: kg },\r\n },\r\n },\r\n\r\n m3: {\r\n displayName: \"Volume\",\r\n displayValue: (value) =>\r\n `${(Math.round(value * 1000) / 1000).toFixed(3)}m³`,\r\n validate: (allValues) => /^\\d+(\\.\\d{1,3})?$/.test(allValues.m3),\r\n mapToRequestValue: (allValues) => Number(allValues.m3),\r\n textFieldProps: {\r\n name: \"m3\",\r\n InputProps: {\r\n endAdornment: (\r\n \r\n m\r\n \r\n 3\r\n \r\n \r\n ),\r\n },\r\n },\r\n },\r\n\r\n dpc: {\r\n displayName: \"DPC\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => /^-?\\d+(\\.\\d{1,12})?$/.test(allValues.dpc),\r\n mapToRequestValue: (allValues) => Number(allValues.dpc),\r\n textFieldProps: {\r\n name: \"dpc\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n stopPay: {\r\n displayName: \"Stop Pay\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => /^-?\\d+(\\.\\d{1,12})?$/.test(allValues.stopPay),\r\n mapToRequestValue: (allValues) => Number(allValues.stopPay),\r\n textFieldProps: {\r\n name: \"stopPay\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n homeDelivery: {\r\n displayName: \"Home Delivery\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) =>\r\n /^-?\\d+(\\.\\d{1,12})?$/.test(allValues.homeDelivery),\r\n mapToRequestValue: (allValues) => Number(allValues.homeDelivery),\r\n textFieldProps: {\r\n name: \"homeDelivery\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n totalDPC: {\r\n displayName: \"Total DPC\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => true,\r\n calculateValue: (allValues) =>\r\n Number(allValues.dpc) + Number(allValues.stopPay),\r\n mapToRequestValue: (allValues) => Number(allValues.totalDPC),\r\n textFieldProps: {\r\n name: \"totalDPC\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n reason: {\r\n displayName: \"Reason\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.reason !== \"\",\r\n mapToRequestValue: (allValues) => allValues.reason,\r\n textFieldProps: {\r\n name: \"reason\",\r\n placeholder: \"Choose one\",\r\n select: true,\r\n },\r\n },\r\n\r\n driverComments: {\r\n displayName: \"Driver Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.driverComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"driverComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n adminComments: {\r\n displayName: \"Admin Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.adminComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"adminComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n managerComments: {\r\n displayName: \"Manager Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.managerComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"managerComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (value, allValues) => statuses[value],\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.approvalState,\r\n getValueFromRequest: (value) => value,\r\n },\r\n };\r\n },\r\n [userData.branches]\r\n );\r\n\r\n // const displayColumns = [\r\n // \"eventTime\",\r\n // \"eventType\",\r\n // \"branch\",\r\n // \"eventAddress\",\r\n // \"conNoteNum\",\r\n // \"sender\",\r\n // \"receiver\",\r\n // \"location\",\r\n // \"zone\",\r\n // \"eventItems\",\r\n // \"kg\",\r\n // \"m3\",\r\n // \"dpc\",\r\n // \"stopPay\",\r\n // \"homeDelivery\",\r\n // \"reason\",\r\n // ];\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default LclDataContextProvider;\r\n","import { statuses, getApprovalState } from \"../Mappings\";\r\nimport { getDayOfWeekFromDate } from \"../GlobalFunctions\";\r\n\r\nexport const ParcelDataReducer = (state, action) => {\r\n console.log(action);\r\n const {\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n startDate,\r\n items,\r\n itemData,\r\n roleId,\r\n ...others\r\n } = action;\r\n switch (action.type) {\r\n case \"INSERT_NEW_ITEMS\":\r\n let newObj = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {} };\r\n items.forEach((item) => {\r\n const day = getDayOfWeekFromDate(item.eventDate);\r\n newObj[day][item.id] = item;\r\n });\r\n return {\r\n ...state,\r\n [truckId]: { ...state[truckId], [week]: { ...newObj } },\r\n };\r\n\r\n case \"UPDATE_LIST_ITEMS\":\r\n const day = getDayOfWeekFromDate(items[0].eventDate);\r\n let oldObj = { ...state[truckId][week] } \r\n items.forEach((item) => { \r\n oldObj[day][item.id] = item;\r\n });\r\n return {\r\n ...state,\r\n [truckId]: { ...state[truckId], [week]: { ...oldObj } },\r\n };\r\n\r\n case \"CREATE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"parcel\"\r\n ),\r\n },\r\n ...state[truckId][week][day],\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"UPDATE_ITEM\":\r\n // example call: diapatch({type: \"UPDATE_DPC_ITEM\", truckId, week, day, itemId, itemData)\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n ...itemData,\r\n //if new, should still be new, else edited\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"parcel\"\r\n ),\r\n // state[truckId][week][day][itemId].approvalState === statuses.added ? statuses.added : statuses.changed\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"DELETE_ITEM\":\r\n // example call: dispatch({type: \"DELETE_DPC_ITEM\", truckId, week, day, itemId})\r\n // if (state[truckId][week][day][itemId].approvalState === statuses.added) {\r\n // const { [itemId]: dontWant, ...others } = state[truckId][week][day];\r\n // return {\r\n // ...state,\r\n // [truckId]: {\r\n // ...state[truckId],\r\n // [week]: {\r\n // ...state[truckId][week],\r\n // [day]: {\r\n // ...others\r\n // }\r\n // }\r\n // }\r\n // };\r\n // } else {\r\n // return {\r\n // ...state,\r\n // [truckId]: {\r\n // ...state[truckId],\r\n // [week]: {\r\n // ...state[truckId][week],\r\n // [day]: {\r\n // ...state[truckId][week][day],\r\n // [itemId]: {\r\n // ...state[truckId][week][day][itemId],\r\n // approvalState: statuses.deleted\r\n // }\r\n // }\r\n // }\r\n // }\r\n // };\r\n // }\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: statuses.deleted,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"RESTORE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"parcel\"\r\n ),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"APPROVE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"parcel\"\r\n ),\r\n // statuses.approved\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"REJECT_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(\r\n roleId,\r\n action.type,\r\n itemData.approvalState,\r\n \"parcel\"\r\n ),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, {\r\n createContext,\r\n useReducer,\r\n useContext,\r\n useCallback,\r\n} from \"react\";\r\nimport { ParcelDataReducer } from \"../Reducers/ParcelDataReducer\";\r\nimport { UserDataContext } from \"./UserDataContext\";\r\nimport { roles } from \"../Mappings\";\r\nimport { statuses } from \"../Mappings\";\r\nimport {\r\n getCurrentBranchesArray,\r\n getDateFromWeekAndDay,\r\n} from \"../GlobalFunctions\";\r\nimport { MenuItem, InputAdornment } from \"@material-ui/core\";\r\n\r\nexport const ParcelDataContext = createContext();\r\n\r\nconst ParcelDataContextProvider = (props) => {\r\n const [parcelData, dispatch] = useReducer(ParcelDataReducer, {});\r\n const { userData } = useContext(UserDataContext);\r\n\r\n console.log(\"Rerender\");\r\n\r\n const defaultParcel = {\r\n id: \"\",\r\n reason: \"\",\r\n approvalState: 0,\r\n userAdded: false,\r\n driverComments: \"\",\r\n adminComments: \"\",\r\n managerComments: \"\",\r\n\r\n cNoteDate: \"1900-01-01T00:00:00\",\r\n cNote: \"\",\r\n senderName: \"\",\r\n sendSuburb: \"\",\r\n receiverName: \"\",\r\n receiverSuburb: \"\",\r\n fPayer: \"\",\r\n puBranch: \"\",\r\n drBranch: \"\",\r\n delBranch: \"\",\r\n crBranch: \"\",\r\n truck: \"\",\r\n carrierName: \"\",\r\n domicile: \"\",\r\n items: 0,\r\n kg: 0,\r\n m3: 0,\r\n eventDate: \"1900-01-01T00:00:00\",\r\n mode: \"\",\r\n dpc: 0,\r\n receiverPOD: \"\",\r\n deliveryID: 0,\r\n shortDate: \"1900-01-01T00:00:00\",\r\n fMode: \"\",\r\n };\r\n\r\n const types = {\r\n P: \"Pickup\",\r\n D: \"Delivery\",\r\n };\r\n\r\n const comments = {\r\n [roles.tollAdmin]: \"adminComments\",\r\n [roles.ownerDriver]: \"driverComments\",\r\n [roles.tollManager]: \"managerComments\",\r\n }[userData.roleId];\r\n\r\n const getIsoString = (time, allValues) => {\r\n const { dateIsoString } = getDateFromWeekAndDay(\r\n allValues.week,\r\n allValues.day\r\n );\r\n return dateIsoString.replace(\"00:00:00\", `${time}:00`);\r\n };\r\n\r\n const createParcelModel = useCallback((params) => {\r\n const currentBranchArray = getCurrentBranchesArray(\r\n userData.branches,\r\n params.week\r\n );\r\n const branchShortCodeObject = currentBranchArray.reduce((acc, cur) => {\r\n acc[cur.shortCode] = cur;\r\n return acc;\r\n }, {});\r\n\r\n return {\r\n eventTimeString: {\r\n displayName: \"Time\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.eventTimeString !== \"\",\r\n mapToRequestValue: (allValues) => allValues.eventTimeString,\r\n textFieldProps: {\r\n name: \"eventTimeString\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n eventDate: {\r\n // displayName: \"Time\",\r\n // displayValue: (value) => value,\r\n // validate: (allValues) => true,\r\n mapToRequestValue: (allValues) =>\r\n getIsoString(allValues.eventTimeString, allValues),\r\n // textFieldProps: {\r\n // name: \"eventDate\",\r\n // type: \"time\",\r\n // InputLabelProps: {\r\n // shrink: true,\r\n // },\r\n // },\r\n },\r\n\r\n cNote: {\r\n displayName: \"Con-note Number\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.cNote !== \"\",\r\n mapToRequestValue: (allValues) => allValues.cNote,\r\n textFieldProps: {\r\n name: \"cNote\",\r\n },\r\n },\r\n\r\n senderName: {\r\n displayName: \"Sender\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.senderName,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"senderName\",\r\n },\r\n },\r\n\r\n sendSuburb: {\r\n displayName: \"Sender Suburb\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => /^[a-zA-Z]+$/.test(allValues.sendSuburb),\r\n mapToRequestValue: (allValues) => allValues.sendSuburb,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"sendSuburb\",\r\n },\r\n },\r\n\r\n receiverName: {\r\n displayName: \"Receiver\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.receiverName,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"receiverName\",\r\n },\r\n },\r\n\r\n receiverSuburb: {\r\n displayName: \"Receiver Suburb\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => /^[a-zA-Z]+$/.test(allValues.receiverSuburb),\r\n mapToRequestValue: (allValues) => allValues.receiverSuburb,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"receiverSuburb\",\r\n },\r\n },\r\n\r\n puBranch: {\r\n displayName: \"Pickup Branch\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.puBranch !== \"\",\r\n mapToRequestValue: (allValues) => allValues.puBranch,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"puBranch\",\r\n select: true,\r\n children: Object.keys(branchShortCodeObject).map((shortCode) => (\r\n \r\n {branchShortCodeObject[shortCode].branchName}\r\n \r\n )),\r\n },\r\n },\r\n\r\n delBranch: {\r\n displayName: \"Delivery Branch\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.delBranch !== \"\",\r\n mapToRequestValue: (allValues) => allValues.delBranch,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"delBranch\",\r\n select: true,\r\n children: Object.keys(branchShortCodeObject).map((shortCode) => (\r\n \r\n {branchShortCodeObject[shortCode].branchName}\r\n \r\n )),\r\n },\r\n },\r\n\r\n kg: {\r\n displayName: \"Weight\",\r\n displayValue: (value) => `${Math.round(value)}kg`,\r\n validate: (allValues) => /^\\d+(\\.\\d{1,3})?$/.test(allValues.kg),\r\n mapToRequestValue: (allValues) => Number(allValues.kg),\r\n textFieldProps: {\r\n name: \"kg\",\r\n InputProps: { endAdornment: kg },\r\n },\r\n },\r\n\r\n m3: {\r\n displayName: \"Volume\",\r\n displayValue: (value) =>\r\n `${(Math.round(value * 1000) / 1000).toFixed(3)}m³`,\r\n validate: (allValues) => /^\\d+(\\.\\d{1,3})?$/.test(allValues.m3),\r\n mapToRequestValue: (allValues) => Number(allValues.m3),\r\n textFieldProps: {\r\n name: \"m3\",\r\n InputProps: {\r\n endAdornment: (\r\n \r\n m\r\n \r\n 3\r\n \r\n \r\n ),\r\n },\r\n },\r\n },\r\n\r\n mode: {\r\n displayName: \"Type\",\r\n displayValue: (value) => types[value],\r\n validate: (allValues) => allValues.mode !== \"\",\r\n mapToRequestValue: (allValues) => allValues.mode,\r\n textFieldProps: {\r\n name: \"mode\",\r\n select: true,\r\n children: Object.keys(types).map((type) => (\r\n \r\n {types[type]}\r\n \r\n )),\r\n },\r\n },\r\n\r\n // dpc: {\r\n // displayName: \"DPC\",\r\n // displayValue: (value) => (Math.round(value * 100) / 100).toFixed(2),\r\n // validate: (allValues) => /^\\d+(\\.\\d{1,12})?$/.test(allValues.dpc),\r\n // mapToRequestValue: (allValues) => Number(allValues.dpc),\r\n // textFieldProps: {\r\n // name: \"dpc\",\r\n // InputProps: { startAdornment: $ },\r\n // select: true,\r\n // children: [\"0.00\", \"0.53\", \"0.71\", \"1.36\"].map((e) => (\r\n // \r\n // {e}\r\n // \r\n // )),\r\n // },\r\n // },\r\n\r\n dpc: {\r\n displayName: \"DPC\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => /^-?\\d+(\\.\\d{1,12})?$/.test(allValues.dpc),\r\n mapToRequestValue: (allValues) => Number(allValues.dpc),\r\n textFieldProps: {\r\n name: \"dpc\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n reason: {\r\n displayName: \"Reason\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => allValues.reason !== \"\",\r\n mapToRequestValue: (allValues) => allValues.reason,\r\n textFieldProps: {\r\n name: \"reason\",\r\n placeholder: \"Choose one\",\r\n select: true,\r\n },\r\n },\r\n\r\n driverComments: {\r\n displayName: \"Driver Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.driverComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"driverComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n adminComments: {\r\n displayName: \"Admin Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.adminComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"adminComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n managerComments: {\r\n displayName: \"Manager Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.managerComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"managerComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (value, allValues) => statuses[value],\r\n mapToRequestValue: (allValues) => allValues.approvalState,\r\n getValueFromRequest: (value) => value,\r\n },\r\n };\r\n }, []);\r\n\r\n const displayColumns = [\r\n \"eventTime\",\r\n \"cNote\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"mode\",\r\n \"dpcParcel\",\r\n \"reason\",\r\n comments,\r\n ];\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default ParcelDataContextProvider;\r\n","import { getDayOfWeekFromDate } from \"../GlobalFunctions\";\r\nimport { getApprovalState } from \"../Mappings\";\r\n\r\nexport const HourlyDataReducer = (state, action) => {\r\n console.log(action);\r\n const { truckId, week, day, itemId, startDate, items, itemData, roleId, ...others } = action;\r\n switch (action.type) {\r\n case \"INSERT_NEW_ITEMS\":\r\n let newObj = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {} };\r\n items.forEach((item) => {\r\n const day = getDayOfWeekFromDate(item.startTime);\r\n newObj[day][item.id] = item;\r\n });\r\n return { ...state, [truckId]: { ...state[truckId], [week]: { ...newObj } } };\r\n\r\n case \"CREATE_ITEM\":\r\n if (!state[truckId]) {\r\n state[truckId] = {};\r\n }\r\n if (!state[truckId][week]) {\r\n state[truckId][week] = {};\r\n }\r\n if (!state[truckId][week][day]) {\r\n state[truckId][week][day] = {};\r\n }\r\n \r\n case \"UPDATE_LIST_ITEMS\":\r\n const day = getDayOfWeekFromDate(items[0].startTime);\r\n let oldObj = { ...state[truckId][week] } \r\n for (let i = 0; i < items.length; i++) { \r\n oldObj[day][items[i].id] = items[i];\r\n } \r\n\r\n return {\r\n ...state,\r\n [truckId]: { ...state[truckId], [week]: { ...oldObj } },\r\n };\r\n\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"hourly\"),\r\n userAdded: true,\r\n },\r\n ...state[truckId][week][day],\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"UPDATE_ITEM\":\r\n // example call: diapatch({type: \"UPDATE_ITEM\", truckId, week, day, itemId, itemData)\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"hourly\"),\r\n // state[truckId][week][day][itemId].approvalState === statuses.added ? statuses.added : statuses.changed\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"DELETE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"hourly\"),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"APPROVE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"hourly\"),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n console.error(\"reducer default clause\");\r\n return state;\r\n }\r\n};\r\n","import React, {\r\n useContext,\r\n createContext,\r\n useReducer,\r\n useCallback,\r\n} from \"react\";\r\nimport { HourlyDataReducer } from \"../Reducers/HourlyDataReducer\";\r\nimport {\r\n getCurrentBranchesObject,\r\n getDateFromWeekAndDay,\r\n} from \"../GlobalFunctions\";\r\nimport { MenuItem, InputAdornment } from \"@material-ui/core\";\r\nimport { statuses } from \"../Mappings\";\r\nimport { roles } from \"../Mappings\";\r\nimport { UserDataContext } from \"./UserDataContext\";\r\n\r\nexport const HourlyDataContext = createContext();\r\n\r\nconst HourlyDataContextProvider = (props) => {\r\n const [hourlyData, dispatch] = useReducer(HourlyDataReducer, {});\r\n const { userData } = useContext(UserDataContext);\r\n\r\n console.log(\"Rerender\");\r\n\r\n const createBranchModel = useCallback(\r\n (params) => {\r\n const branchesObject = getCurrentBranchesObject(\r\n userData.branches,\r\n params.week\r\n );\r\n\r\n return {\r\n assignedBranchId: {\r\n displayName: \"Branch\",\r\n displayValue: (value) => branchesObject[value].shortCode,\r\n validate: (value) => value !== \"\",\r\n textFieldProps: {\r\n name: \"assignedBranchId\",\r\n select: true,\r\n children: Object.keys(branchesObject).map((branchId) => (\r\n \r\n {branchesObject[branchId].branchName}\r\n \r\n )),\r\n },\r\n },\r\n assignedAmount: {\r\n displayName: \"Amount\",\r\n displayValue: (value) => Math.round(value * 100) / 100,\r\n validate: (value) => value !== \"\",\r\n textFieldProps: {\r\n name: \"assignedAmount\",\r\n },\r\n },\r\n };\r\n },\r\n [userData.branches]\r\n );\r\n\r\n const hoursDiff = (startTime, endTime) => {\r\n // get hours between start and end DateTimes\r\n const startDate = new Date(`1900-01-01T${endTime}:00`);\r\n const endDate = new Date(`1900-01-01T${startTime}:00`);\r\n // console.log((startDate - endDate) / 3600000);\r\n const totalHours = (startDate - endDate) / 3600000;\r\n return isNaN(totalHours) ? 0 : totalHours;\r\n };\r\n\r\n const createHourlyModel = useCallback((params) => {\r\n const { dateIsoString } = getDateFromWeekAndDay(params.week, params.day);\r\n const getIsoString = (time) =>\r\n dateIsoString.replace(\"00:00:00\", `${time}:00`);\r\n\r\n return {\r\n startTime: {\r\n displayName: \"Start Time\",\r\n displayValue: (allValues) => allValues.startTime,\r\n validate: (allValues) =>\r\n allValues.startTime !== \"\" &&\r\n hoursDiff(allValues.startTime, allValues.endTime) > 0,\r\n mapToRequestValue: (allValues) =>\r\n getIsoString(allValues.startTimeString),\r\n // getValueFromRequest: (value) => value.match(/T(\\d\\d:\\d\\d):\\d\\d/)[1],\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"startTime\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n endTime: {\r\n displayName: \"End Time\",\r\n displayValue: (allValues) => allValues.endTime,\r\n validate: (allValues) =>\r\n allValues.endTime !== \"\" &&\r\n hoursDiff(allValues.startTime, allValues.endTime) > 0,\r\n mapToRequestValue: (allValues) => getIsoString(allValues.endTimeString),\r\n // getValueFromRequest: (value) => value.match(/T(\\d\\d:\\d\\d):\\d\\d/)[1],\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"endTime\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n startTimeString: {\r\n displayName: \"Start Time\",\r\n displayValue: (allValues) => allValues.startTimeString,\r\n validate: (allValues) =>\r\n allValues.startTimeString !== \"\" &&\r\n hoursDiff(allValues.startTimeString, allValues.endTimeString) > 0,\r\n mapToRequestValue: (allValues) =>\r\n getIsoString(allValues.startTimeString),\r\n // getValueFromRequest: (value) => value.match(/T(\\d\\d:\\d\\d):\\d\\d/)[1],\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"startTimeString\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n endTimeString: {\r\n displayName: \"End Time\",\r\n displayValue: (allValues) => allValues.endTimeString,\r\n validate: (allValues) =>\r\n allValues.endTimeString !== \"\" &&\r\n hoursDiff(allValues.startTimeString, allValues.endTimeString) > 0,\r\n mapToRequestValue: (allValues) => getIsoString(allValues.endTimeString),\r\n // getValueFromRequest: (value) => value.match(/T(\\d\\d:\\d\\d):\\d\\d/)[1],\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"endTimeString\",\r\n type: \"time\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n },\r\n\r\n hourlyRate: {\r\n displayName: \"Hourly Rate\",\r\n displayValue: (allValues) =>\r\n `$${(Math.round(allValues.hourlyRate * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) =>\r\n /^-?\\d+(\\.\\d{1,12})?$/.test(allValues.hourlyRate),\r\n mapToRequestValue: (allValues) => Number(allValues.hourlyRate),\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"hourlyRate\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n\r\n changedRateCons: {\r\n displayName: \"Con-Notes\",\r\n displayValue: (allValues) =>\r\n allValues.changedRateCons.map((con) => con.conNoteNum).join(\"\\n\"),\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.changedRateCons || [],\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"changedRateCons\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n totalHours: {\r\n displayName: \"Total Hours\",\r\n calculateValue: (allValues) => {\r\n try {\r\n return hoursDiff(\r\n allValues.startTimeString,\r\n allValues.endTimeString\r\n );\r\n } catch (error) {\r\n return 0;\r\n }\r\n },\r\n displayValue: (allValues) => {\r\n let hours;\r\n try {\r\n hours = hoursDiff(\r\n allValues.startTimeString,\r\n allValues.endTimeString\r\n );\r\n } catch (error) {\r\n hours = 0;\r\n }\r\n return Math.round(hours * 100) / 100;\r\n },\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => Number(allValues.totalHours),\r\n textFieldProps: {\r\n name: \"totalHours\",\r\n disabled: true,\r\n },\r\n },\r\n\r\n totalCharge: {\r\n displayName: \"Total Charge\",\r\n calculateValue: (allValues) =>\r\n hoursDiff(allValues.startTimeString, allValues.endTimeString) *\r\n Number(allValues.hourlyRate),\r\n displayValue: (allValues) => {\r\n let hours;\r\n try {\r\n hours = hoursDiff(\r\n allValues.startTimeString,\r\n allValues.endTimeString\r\n );\r\n } catch (error) {\r\n hours = 0;\r\n }\r\n\r\n const charge = hours * allValues.hourlyRate;\r\n\r\n return `$${(Math.round(charge * 100) / 100).toFixed(2)}`;\r\n },\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => {\r\n let hours;\r\n try {\r\n hours = hoursDiff(\r\n allValues.startTimeString,\r\n allValues.endTimeString\r\n );\r\n } catch (error) {\r\n hours = 0;\r\n }\r\n\r\n const charge = hours * allValues.hourlyRate;\r\n\r\n return Number((Math.round(charge * 100) / 100).toFixed(2));\r\n },\r\n textFieldProps: {\r\n name: \"totalCharge\",\r\n disabled: true,\r\n },\r\n },\r\n\r\n driverComments: {\r\n displayName: \"Driver Comments\",\r\n displayValue: (allValues) => allValues.driverComments,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.driverComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"driverComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n adminComments: {\r\n displayName: \"Admin Comments\",\r\n displayValue: (allValues) => allValues.adminComments,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.adminComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"adminComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n managerComments: {\r\n displayName: \"Manager Comments\",\r\n displayValue: (allValues) => allValues.managerComments,\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.managerComments,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"managerComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (allValues) => statuses[allValues.approvalState],\r\n validate: (allValues) => true,\r\n mapToRequestValue: (allValues) => allValues.approvalState,\r\n getValueFromRequest: (value) => value,\r\n textFieldProps: {\r\n name: \"approvalState\",\r\n },\r\n },\r\n\r\n changedRateAssignedBranches: {\r\n displayName: \"Assigned Branches\",\r\n displayValue: (allValues) =>\r\n allValues.changedRateAssignedBranches\r\n .map((assignedBranch) => assignedBranch.assignedBranchId)\r\n .join(\", \"),\r\n validate: (allValues) => {\r\n const totalCharge =\r\n hoursDiff(allValues.startTimeString, allValues.endTimeString) *\r\n Number(allValues.hourlyRate);\r\n\r\n const assignedBranchTotal = allValues.changedRateAssignedBranches.reduce(\r\n (acc, cur) => acc + cur.assignedAmount,\r\n 0\r\n );\r\n\r\n console.log(assignedBranchTotal, totalCharge);\r\n\r\n return (\r\n allValues.changedRateAssignedBranches.length !== 0 &&\r\n Math.round(100 * totalCharge, 2) / 100 === assignedBranchTotal\r\n );\r\n },\r\n mapToRequestValue: (allValues) => allValues.changedRateAssignedBranches,\r\n getValueFromRequest: (value) => value,\r\n },\r\n };\r\n }, []);\r\n\r\n const comments = {\r\n [roles.tollAdmin]: \"adminComments\",\r\n [roles.ownerDriver]: \"driverComments\",\r\n // [roles.tollManager]: \"managerComments\",\r\n }[userData.roleId];\r\n\r\n const requiredColumns = {\r\n [roles.tollAdmin]: [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n \"changedRateAssignedBranches\",\r\n ],\r\n [roles.ownerDriver]: [\"startTimeString\", \"endTimeString\", \"hourlyRate\"],\r\n }[userData.roleId];\r\n\r\n const blankHourly = {\r\n [roles.tollAdmin]: {\r\n startTimeString: \"\",\r\n endTimeString: \"\",\r\n hourlyRate: \"\",\r\n changedRateCons: [],\r\n changedRateAssignedBranches: [],\r\n adminComments: \"\",\r\n },\r\n\r\n [roles.ownerDriver]: {\r\n startTimeString: \"\",\r\n endTimeString: \"\",\r\n hourlyRate: \"\",\r\n changedRateCons: [],\r\n driverComments: \"\",\r\n },\r\n }[userData.roleId];\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default HourlyDataContextProvider;\r\n","import { getDayOfWeekFromDate } from \"../GlobalFunctions\";\r\nimport { getApprovalState } from \"../Mappings\";\r\n\r\nexport const LinehaulDataReducer = (state, action) => {\r\n console.log(action);\r\n const { truckId, week, day, itemId, startDate, items, itemData, roleId, ...others } = action;\r\n switch (action.type) {\r\n case \"INSERT_NEW_ITEMS\":\r\n let newObj = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {} };\r\n items.forEach((item) => {\r\n const day = getDayOfWeekFromDate(item.eventDateTime);\r\n newObj[day][item.id] = item;\r\n });\r\n return { ...state, [truckId]: { ...state[truckId], [week]: { ...newObj } } };\r\n\r\n case \"CREATE_ITEM\":\r\n if (!state[truckId]) {\r\n state[truckId] = {};\r\n }\r\n if (!state[truckId][week]) {\r\n state[truckId][week] = {};\r\n }\r\n if (!state[truckId][week][day]) {\r\n state[truckId][week][day] = {};\r\n }\r\n\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState),\r\n userAdded: true,\r\n },\r\n ...state[truckId][week][day],\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"UPDATE_ITEM\":\r\n // example call: diapatch({type: \"UPDATE_ITEM\", truckId, week, day, itemId, itemData)\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"linehaul\"),\r\n // state[truckId][week][day][itemId].approvalState === statuses.added ? statuses.added : statuses.changed\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"DELETE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"APPROVE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n console.error(\"reducer default clause\");\r\n return state;\r\n }\r\n};\r\n","import React, { createContext, useContext, useReducer } from \"react\";\r\nimport { UserDataContext } from \"./UserDataContext\";\r\nimport { MenuItem, InputAdornment } from \"@material-ui/core\";\r\nimport { roles } from \"../Mappings\";\r\nimport { LinehaulDataReducer } from \"../Reducers/LinehaulDataReducer\";\r\nimport { statuses } from \"../Mappings\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\n\r\nexport const LinehaulFixedDataContext = createContext();\r\n\r\nconst LinehaulFixedDataContextProvider = (props) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [linehaulFixedData, dispatch] = useReducer(LinehaulDataReducer, {});\r\n\r\n console.log(\"Rerender\");\r\n\r\n const getActiveRoutesIdArray = (truck, week) => {\r\n const { startDate, endDate } = getWeekDates(week);\r\n const routesIdArray = getRoutesIdArray();\r\n const activeRoutesIdArray = routesIdArray.filter((id) => {\r\n const routeObj = getRouteObjectFromId(id);\r\n if (routeObj.truckId !== truck) {\r\n return false;\r\n }\r\n\r\n const routeStartDate = new Date(routeObj.startDate);\r\n const routeEndDate = new Date(routeObj.endDate);\r\n\r\n // console.log(startDate.toISOString());\r\n // console.log(endDate.toISOString());\r\n // console.log(routeStartDate.toISOString());\r\n // console.log(routeEndDate.toISOString());\r\n // console.log(\"-------------\");\r\n\r\n // check if there is any overlap\r\n // if no endDate for route\r\n if (!routeObj.endDate && routeStartDate < endDate) {\r\n return true;\r\n } else if (startDate <= routeEndDate && endDate >= routeStartDate) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n return activeRoutesIdArray;\r\n };\r\n\r\n const getRoutesIdArray = (truckId) => {\r\n return userData.routes.map((route) => route.id);\r\n };\r\n\r\n const getRouteObjectFromId = (id) => {\r\n const [route] = userData.routes.filter((route) => route.id === id);\r\n const idArray = [...Array(11).keys()].slice(1);\r\n const accountCodeKeys = idArray.map((n) => `accountCode${n}`);\r\n const costCentreKeys = idArray.map((n) => `costCentre${n}`);\r\n const percentageKeys = idArray.map((n) => `percentage${n}`);\r\n const obj = {\r\n routeName: route.routeName,\r\n routeRate: route.routeRate,\r\n routeFaf: route.faf,\r\n accountCodes: accountCodeKeys.map((key) => route[key]).filter((e) => e), // filter to remove empty ones\r\n costCentres: costCentreKeys.map((key) => route[key]).filter((e) => e),\r\n percentages: percentageKeys.map((key) => route[key]).filter((e) => e),\r\n startDate: route.startDate,\r\n endDate: route.endDate,\r\n };\r\n return obj;\r\n };\r\n\r\n const buildRoutesObjFromRoutesIdArray = (arr) =>\r\n arr.reduce((acc, id) => {\r\n acc[id] = getRouteObjectFromId(id);\r\n return acc;\r\n }, {});\r\n\r\n const routesObj = buildRoutesObjFromRoutesIdArray(getRoutesIdArray());\r\n const getActiveRoutesObj = (truck, week) =>\r\n buildRoutesObjFromRoutesIdArray(getActiveRoutesIdArray(truck, week));\r\n\r\n const truckRoutesObj = userData.trucks.reduce((acc, cur) => {\r\n acc[cur.truckId] = cur.routes.reduce((truckRouteObj, route) => {\r\n truckRouteObj[route.id] = getRouteObjectFromId(route.id);\r\n return truckRouteObj;\r\n }, {});\r\n return acc;\r\n }, {});\r\n\r\n // console.log(truckRoutesObj);\r\n\r\n const alphabeticalComparator = (a, b) => {\r\n const s1 = routesObj[a].routeName;\r\n const s2 = routesObj[b].routeName;\r\n if (s1 < s2) return -1;\r\n if (s1 > s2) return 1;\r\n return 0;\r\n };\r\n\r\n const linehaulFixedModel = {\r\n routeId: {\r\n displayName: \"Route\",\r\n displayValue: (value) => routesObj[value].routeName,\r\n validate: (allValues) => allValues.routeId !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n getChildren: (truckId, week) => {\r\n return Object.keys(truckRoutesObj[truckId])\r\n .filter((routeId) => {\r\n const { startDate: weekStartDate } = getWeekDates(week);\r\n const routeStartDate = new Date(\r\n truckRoutesObj[truckId][routeId].startDate\r\n );\r\n console.log(truckRoutesObj[truckId][routeId].startDate);\r\n console.log(routeStartDate, weekStartDate);\r\n if (!truckRoutesObj[truckId][routeId].endDate) {\r\n if (routeStartDate <= weekStartDate) {\r\n return true;\r\n }\r\n } else {\r\n const routeEndDate = new Date(routesObj[routeId].endDate);\r\n if (\r\n routeStartDate <= weekStartDate &&\r\n weekStartDate <= routeEndDate\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n })\r\n .sort(alphabeticalComparator)\r\n .map((routeId) => (\r\n \r\n {routesObj[routeId].routeName}\r\n \r\n ));\r\n },\r\n textFieldProps: {\r\n name: \"routeId\",\r\n select: true,\r\n // children: Object.keys(routesObj)\r\n // .sort(alphabeticalComparator)\r\n // .map((routeId) => (\r\n // \r\n // {routesObj[routeId].routeName}\r\n // \r\n // )),\r\n },\r\n },\r\n adjustment: {\r\n displayName: \"Adjustment\",\r\n displayValue: (value) => `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) =>\r\n /^-?\\d+(\\.\\d{1,2})?$/.test(allValues.adjustment) ||\r\n allValues.adjustment === \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"adjustment\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n tripCost: {\r\n displayName: \"Trip Cost\",\r\n displayValue: (value) => `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => allValues.tripCost !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"tripCost\",\r\n disabled: true,\r\n InputProps: { startAdornment: $ },\r\n // variant: \"outlined\",\r\n },\r\n },\r\n totalCost: {\r\n displayName: \"Total Cost\",\r\n displayValue: (value) => `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (allValues) => allValues.totalCost !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"totalCost\",\r\n disabled: true,\r\n InputProps: { startAdornment: $ },\r\n variant: \"outlined\",\r\n },\r\n },\r\n driverComments: {\r\n displayName: \"Driver Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) =>\r\n allValues.adjustment === \"\" ? true : allValues.driverComments !== \"\",\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"driverComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n adminComments: {\r\n displayName: \"Admin Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) =>\r\n allValues.adjustment === \"\" ? true : allValues.adminComments !== \"\",\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"adminComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n managerComments: {\r\n displayName: \"Manager Comments\",\r\n displayValue: (value) => value,\r\n validate: (allValues) =>\r\n allValues.adjustment === \"\" ? true : allValues.managerComments !== \"\",\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"managerComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (value) => statuses[value],\r\n validate: (allValues) => true,\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"approvalState\",\r\n },\r\n },\r\n };\r\n\r\n const fixedColumns = [\"routeId\", \"adjustment\", \"tripCost\", \"totalCost\"];\r\n\r\n const comments = {\r\n [roles.tollAdmin]: \"adminComments\",\r\n [roles.ownerDriver]: \"driverComments\",\r\n [roles.tollManager]: \"managerComments\",\r\n }[userData.roleId];\r\n\r\n const defaultFixed = {\r\n id: \"\",\r\n driverId: \"\",\r\n eventDateTime: \"\",\r\n routeId: \"\",\r\n adjustment: \"\",\r\n driverComments: \"\",\r\n adminComments: \"\",\r\n managerComments: \"\",\r\n };\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default LinehaulFixedDataContextProvider;\r\n","import { getDayOfWeekFromDate } from \"../GlobalFunctions\";\r\nimport { getApprovalState } from \"../Mappings\";\r\n\r\nexport const LinehaulFloatingDataReducer = (state, action) => {\r\n console.log(action);\r\n const { truckId, week, day, itemId, startDate, items, itemData, roleId, ...others } = action;\r\n switch (action.type) {\r\n case \"INSERT_NEW_ITEMS\":\r\n let newObj = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {} };\r\n items.forEach((item) => {\r\n const day = getDayOfWeekFromDate(item.eventDateTime);\r\n newObj[day][item.id] = item;\r\n });\r\n return { ...state, [truckId]: { ...state[truckId], [week]: { ...newObj } } };\r\n\r\n case \"CREATE_ITEM\":\r\n if (!state[truckId]) {\r\n state[truckId] = {};\r\n }\r\n if (!state[truckId][week]) {\r\n state[truckId][week] = {};\r\n }\r\n if (!state[truckId][week][day]) {\r\n state[truckId][week][day] = {};\r\n }\r\n\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n [itemId]: {\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"linehaulFloating\"),\r\n userAdded: true,\r\n },\r\n ...state[truckId][week][day],\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"UPDATE_ITEM\":\r\n // example call: diapatch({type: \"UPDATE_ITEM\", truckId, week, day, itemId, itemData)\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n ...itemData,\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"linehaulFloating\"),\r\n // state[truckId][week][day][itemId].approvalState === statuses.added ? statuses.added : statuses.changed\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"DELETE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"linehaulFloating\"),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n case \"APPROVE_ITEM\":\r\n return {\r\n ...state,\r\n [truckId]: {\r\n ...state[truckId],\r\n [week]: {\r\n ...state[truckId][week],\r\n [day]: {\r\n ...state[truckId][week][day],\r\n [itemId]: {\r\n ...state[truckId][week][day][itemId],\r\n approvalState: getApprovalState(roleId, action.type, itemData.approvalState, \"linehaulFloating\"),\r\n },\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n console.error(\"reducer default clause\");\r\n return state;\r\n }\r\n};\r\n","import React, {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useReducer,\r\n} from \"react\";\r\nimport { UserDataContext } from \"./UserDataContext\";\r\nimport { MenuItem, InputAdornment } from \"@material-ui/core\";\r\nimport { roles } from \"../Mappings\";\r\nimport { LinehaulFloatingDataReducer } from \"../Reducers/LinehaulFloatingDataReducer\";\r\nimport { statuses } from \"../Mappings\";\r\nimport {\r\n displayMoney,\r\n getCurrentBranchesObject,\r\n getWeekDates,\r\n} from \"../GlobalFunctions\";\r\n\r\nexport const LinehaulFloatingDataContext = createContext();\r\n\r\nconst LinehaulFloatingDataContextProvider = (props) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [linehaulFloatingData, dispatch] = useReducer(\r\n LinehaulFloatingDataReducer,\r\n {}\r\n );\r\n\r\n console.log(\"Rerender\");\r\n\r\n const createFloatingModel = useCallback(\r\n (params) => {\r\n const branchesObject = getCurrentBranchesObject(\r\n userData.branches,\r\n params.week\r\n );\r\n\r\n return {\r\n adjustment: {\r\n displayName: \"Adjustment\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (value) => /^\\d+(\\.\\d{1,12})?$/.test(value) || value === \"\",\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"adjustment\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n km: {\r\n displayName: \"Overall kilometers\",\r\n displayValue: (value) => `${Math.round(value * 100) / 100}km`,\r\n validate: (value) => /^[0-9]{1,12}(\\.[0-9]{1,4})?$/.test(value),\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"km\",\r\n },\r\n },\r\n tripRate: {\r\n displayName: \"Trip Rate\",\r\n displayValue: (value) =>\r\n `$${(Math.round(value * 100) / 100).toFixed(2)}`,\r\n validate: (value) => value !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"tripRate\",\r\n InputProps: { startAdornment: $ },\r\n disabled: true,\r\n },\r\n },\r\n originBranchId: {\r\n displayName: \"Origin Branch\",\r\n displayValue: (value) => branchesObject[value].shortCode,\r\n validate: (value) => value !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"originBranchId\",\r\n select: true,\r\n children: Object.keys(branchesObject).map((branchId) => (\r\n \r\n {branchesObject[branchId].branchName}\r\n \r\n )),\r\n },\r\n },\r\n destinationBranchId: {\r\n displayName: \"Destination Branch\",\r\n displayValue: (value) => branchesObject[value].shortCode,\r\n validate: (value) => value !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"destinationBranchId\",\r\n select: true,\r\n children: Object.keys(branchesObject).map((branchId) => (\r\n \r\n {branchesObject[branchId].branchName}\r\n \r\n )),\r\n },\r\n },\r\n assignedBranchId: {\r\n displayName: \"Assigned Branch\",\r\n displayValue: (value) =>\r\n value ? branchesObject[value].shortCode : \"Unassigned\",\r\n validate: (value) => Boolean(value),\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"assignedBranchId\",\r\n select: true,\r\n children: Object.keys(branchesObject).map((branchId) => (\r\n \r\n {branchesObject[branchId].branchName}\r\n \r\n )),\r\n },\r\n },\r\n tripCost: {\r\n displayName: \"Trip Cost\",\r\n displayValue: (value) => `$${displayMoney(value)}`,\r\n validate: (value) => value !== \"\",\r\n mapToRequestValue: (value) => Number(value),\r\n textFieldProps: {\r\n name: \"tripCost\",\r\n disabled: true,\r\n variant: \"outlined\",\r\n InputProps: { startAdornment: $ },\r\n },\r\n },\r\n driverComments: {\r\n displayName: \"Driver Comments\",\r\n displayValue: (value) => value,\r\n validate: (value) => true,\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"driverComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n adminComments: {\r\n displayName: \"Admin Comments\",\r\n displayValue: (value) => value,\r\n validate: (value) => true,\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"adminComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n managerComments: {\r\n displayName: \"Manager Comments\",\r\n displayValue: (value) => value,\r\n validate: (value) => true,\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"managerComments\",\r\n placeholder: \"Provide a brief description\",\r\n multiline: true,\r\n variant: \"outlined\",\r\n rows: 3,\r\n rowsMax: 3,\r\n },\r\n },\r\n approvalState: {\r\n displayName: \"Approval State\",\r\n displayValue: (value) => statuses[value],\r\n validate: (value) => true,\r\n mapToRequestValue: (value) => value,\r\n textFieldProps: {\r\n name: \"approvalState\",\r\n },\r\n },\r\n };\r\n },\r\n [userData.branches]\r\n );\r\n\r\n const floatingColumns = {\r\n [roles.ownerDriver]: [\r\n \"km\",\r\n \"tripRate\",\r\n \"originBranchId\",\r\n \"destinationBranchId\",\r\n \"tripCost\",\r\n \"driverComments\",\r\n ],\r\n [roles.tollAdmin]: [\r\n \"km\",\r\n \"tripRate\",\r\n \"originBranchId\",\r\n \"destinationBranchId\",\r\n \"tripCost\",\r\n \"assignedBranchId\",\r\n \"adminComments\",\r\n ],\r\n }[userData.roleId];\r\n\r\n const comments = {\r\n [roles.tollAdmin]: \"adminComments\",\r\n [roles.ownerDriver]: \"driverComments\",\r\n [roles.tollManager]: \"managerComments\",\r\n }[userData.roleId];\r\n\r\n const defaultFloating = {\r\n id: \"\",\r\n driverId: \"\",\r\n eventDateTime: \"\",\r\n originBranchId: \"\",\r\n destinationBranchId: \"\",\r\n assignedBranchId: undefined,\r\n km: \"\",\r\n driverComments: \"\",\r\n adminComments: \"\",\r\n managerComments: \"\",\r\n };\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default LinehaulFloatingDataContextProvider;\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n// import { LclDataContext } from \"../Contexts/LclDataContext\";\r\n// import { ParcelDataContext } from \"../Contexts/ParcelDataContext\";\r\n// import { LinehaulFixedDataContext } from \"../Contexts/LinehaulFixedDataContext\";\r\n// import { HourlyDataContext } from \"../Contexts/HourlyDataContext\";\r\nimport PropTypes from \"prop-types\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\n// import UpdateInvoiceStatus from \"./UpdateInvoiceStatus\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\nfunction ButtonOverride(props) {\r\n const {\r\n controller,\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n onClick,\r\n callback,\r\n itemData,\r\n ...otherProps\r\n } = props; //filter out onClick\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n // const { updateData: updateLcl, lclData, dispatch: dispatchLcl } = useContext(\r\n // LclDataContext\r\n // );\r\n // const { parcelData, dispatch: dispatchParcel } = useContext(\r\n // ParcelDataContext\r\n // );\r\n // const { linehaulFixedData, dispatch: dispatchLinehaulFixed } = useContext(\r\n // LinehaulFixedDataContext\r\n // );\r\n // const { hourlyData, dispatch: dispatchHourly } = useContext(\r\n // HourlyDataContext\r\n // );\r\n const [loading, setLoading] = useState(false);\r\n // const [update, setUpdate] = useState(false);\r\n\r\n const { setScrollPosition } = useContext(AppStateContext);\r\n const handleClick = () => {\r\n setScrollPosition();\r\n sendRequest();\r\n };\r\n\r\n const sendRequest = async () => {\r\n const request = {\r\n method: \"POST\",\r\n url: `${controller}/approve/${itemId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n await axios(request);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n } catch (error) {\r\n setLoading(false);\r\n\r\n console.log(error);\r\n }\r\n };\r\n\r\n // setUserData({ ...userData }); // to make the app rerender and refetch data and invoice statuses\r\n // const action = {\r\n // type: \"APPROVE_ITEM\",\r\n // truckId,\r\n // week,\r\n // day,\r\n // itemId,\r\n // itemData,\r\n // };\r\n // controller === \"lcls\" && dispatchLcl(action);\r\n // controller === \"lcls\" && updateLcl(truckId, week);\r\n // controller === \"parcels\" && dispatchParcel(action);\r\n // controller === \"linehauls\" && dispatchLinehaulFixed(action);\r\n // controller === \"hourlys\" && dispatchHourly(action);\r\n // setLoading(false);\r\n // callback();\r\n\r\n return (\r\n <>\r\n \r\n approve\r\n \r\n {/* */}\r\n \r\n );\r\n}\r\n\r\nexport default ButtonOverride;\r\n\r\nButtonOverride.propTypes = {\r\n controller: PropTypes.string.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext } from \"react\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { downloadData } from \"../GlobalFunctions\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\nfunction ButtonOverride(props) {\r\n const { itemId, ...otherProps } = props;\r\n const { userData } = useContext(UserDataContext);\r\n\r\n // const sendPdfRequest = async () => {\r\n // // window.open(\"/invoices/GeneratePdfInvoice/318-20200524\"); // this opens properly\r\n\r\n // try {\r\n // const res = await axios({\r\n // method: \"GET\",\r\n // url: `/invoices/GeneratePdfInvoice/${invoice.id}`,\r\n // headers: {\r\n // Authorization: `bearer ${userData.token}`,\r\n // \"Content-Type\": \"application/pdf\",\r\n // },\r\n // responseType: \"arraybuffer\",\r\n // });\r\n\r\n // const blob = new Blob([res.data], { type: \"application/pdf\" });\r\n // const url = URL.createObjectURL(blob);\r\n // window.open(url); // this opens a blank pdf\r\n\r\n // setTimeout(function () {\r\n // window.URL.revokeObjectURL(url);\r\n // }, 0);\r\n // } catch (error) {\r\n // console.log(error);\r\n // }\r\n // };\r\n\r\n const downloadFile = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `files/download/${itemId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n res.data.forEach((file) => {\r\n downloadData(file);\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default ButtonOverride;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n Typography,\r\n MenuItem,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport ButtonApprove from \"../ButtonApprove\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nconst axios = require(\"axios\");\r\n\r\nconst ApproveDpc = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const [loading, setLoading] = useState(false);\r\n const [originalData, setOriginalData] = useState({});\r\n const { userData } = useContext(UserDataContext);\r\n const { createLclModel } = useContext(LclDataContext);\r\n\r\n const lclModel = createLclModel({ week });\r\n // console.log(lclModel.branchShortCodeObject);\r\n\r\n const faf = lclModel.branchShortCodeObject[itemData.branch].faf;\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"eventType\",\r\n \"branch\",\r\n \"eventAddress\",\r\n \"conNoteNum\",\r\n \"sender\",\r\n \"receiver\",\r\n \"location\",\r\n \"zone\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"reason\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n const reasons = [\r\n \"Missing StopPay\",\r\n \"Duplicate StopPay\",\r\n \"Incorrect Suburb\",\r\n \"Load rate\",\r\n \"Incorrect DPC rate\",\r\n \"Incorrect number of Items\",\r\n \"Incorrect M3\",\r\n \"Incorrect Weight\",\r\n \"Other\",\r\n ];\r\n\r\n useEffect(() => {\r\n if (Object.keys(originalData).length === 0 && !itemData.userAdded) {\r\n const fetchOriginalData = async () => {\r\n const req = {\r\n method: \"GET\",\r\n url: `lcls/getOriginalDPC/${itemId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n const res = await axios(req);\r\n setOriginalData(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchOriginalData();\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {itemData.userAdded &&\r\n displayColumns.map((col) => {\r\n return (\r\n \r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n \r\n );\r\n })}\r\n\r\n {!itemData.userAdded && (\r\n \r\n \r\n \r\n Column:\r\n \r\n \r\n Original:\r\n \r\n \r\n New:\r\n \r\n \r\n \r\n )}\r\n\r\n {!itemData.userAdded &&\r\n displayColumns.map((col) => (\r\n \r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n\r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n \r\n \r\n Fuel Adjustment Factor:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveDpc;\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n// import { LclDataContext } from \"../Contexts/LclDataContext\";\r\n// import { ParcelDataContext } from \"../Contexts/ParcelDataContext\";\r\n// import { HourlyDataContext } from \"../Contexts/HourlyDataContext\";\r\n// import { LinehaulFixedDataContext } from \"../Contexts/LinehaulFixedDataContext\";\r\n// import { LinehaulFloatingDataContext } from \"../Contexts/LinehaulFloatingDataContext\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nimport PropTypes from \"prop-types\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nconst axios = require(\"axios\");\r\n\r\nfunction ButtonOverride(props) {\r\n const {\r\n controller,\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n itemData,\r\n onClick,\r\n callback,\r\n ...otherProps\r\n } = props; //filter out onClick\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n // const { dispatch: dispatchLcl } = useContext(LclDataContext);\r\n // const { dispatch: dispatchParcel } = useContext(ParcelDataContext);\r\n // const { dispatch: dispatchHourly } = useContext(HourlyDataContext);\r\n // const { dispatch: dispatchLinehaulFixed } = useContext(\r\n // LinehaulFixedDataContext\r\n // );\r\n // const { dispatch: dispatchLinehaulFloating } = useContext(\r\n // LinehaulFloatingDataContext\r\n // );\r\n const [loading, setLoading] = useState(false);\r\n\r\n const { setScrollPosition } = useContext(AppStateContext);\r\n const handleClick = () => {\r\n setScrollPosition();\r\n sendRequest();\r\n };\r\n\r\n const sendRequest = async () => {\r\n const request = {\r\n method: \"POST\",\r\n url: `${controller}/delete`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: {\r\n id: itemId,\r\n driverId: Number(truckId),\r\n driver: Number(truckId),\r\n truck: String(truckId),\r\n reason: itemData.reason,\r\n driverComments: itemData.driverComments,\r\n adminComments: itemData.adminComments,\r\n managerComments: itemData.managerComments,\r\n },\r\n };\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n await axios(request);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n\r\n // const action = { type: \"DELETE_ITEM\", truckId, week, day, itemId, itemData, roleId: userData.roleId };\r\n // controller === \"lcls\" && dispatchLcl(action);\r\n // controller === \"parcels\" && dispatchParcel(action);\r\n // controller === \"rates\" && dispatchHourly(action);\r\n // controller === \"linehauls\" && dispatchLinehaulFixed(action);\r\n // controller === \"floating\" && dispatchLinehaulFloating(action);\r\n\r\n // setLoading(false);\r\n // callback();\r\n } catch (error) {\r\n setLoading(false);\r\n console.log(error);\r\n }\r\n };\r\n\r\n return (\r\n \r\n delete\r\n \r\n );\r\n}\r\n\r\nexport default ButtonOverride;\r\n\r\nButtonOverride.propTypes = {\r\n controller: PropTypes.string.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\n\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n MenuItem,\r\n} from \"@material-ui/core\";\r\nimport ButtonDelete from \"../ButtonDelete\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\n\r\nconst DeleteDpc = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createLclModel, comments } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n\r\n const displayColumns = [\"reason\", comments];\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n ...itemData,\r\n },\r\n valid: {},\r\n });\r\n\r\n const reasons = [\"Duplicate DPC\", \"Other\"];\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n valid: { ...formData.valid, [name]: lclModel[name].validate(value) },\r\n });\r\n };\r\n\r\n return (\r\n \r\n Delete DPC Item\r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...lclModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeleteDpc;\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { LclDataContext } from \"../Contexts/LclDataContext\";\r\nimport { ParcelDataContext } from \"../Contexts/ParcelDataContext\";\r\nimport { LinehaulFixedDataContext } from \"../Contexts/LinehaulFixedDataContext\";\r\nimport { HourlyDataContext } from \"../Contexts/HourlyDataContext\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nimport PropTypes from \"prop-types\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nconst axios = require(\"axios\");\r\n\r\nfunction ButtonOverride(props) {\r\n const {\r\n controller,\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n onClick,\r\n callback,\r\n itemData,\r\n ...otherProps\r\n } = props; //filter out onClick\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const { dispatch: dispatchLcl } = useContext(LclDataContext);\r\n const { dispatch: dispatchParcel } = useContext(ParcelDataContext);\r\n const { dispatch: dispatchLinehaulFixed } = useContext(\r\n LinehaulFixedDataContext\r\n );\r\n const { dispatch: dispatchHourly } = useContext(HourlyDataContext);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const { setScrollPosition } = useContext(AppStateContext);\r\n const handleClick = () => {\r\n setScrollPosition();\r\n sendRequest();\r\n };\r\n\r\n const sendRequest = async () => {\r\n const request = {\r\n method: \"POST\",\r\n url: `${controller}/restore/${truckId}/${itemId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n await axios(request);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n\r\n // const action = {\r\n // type: \"RESTORE_ITEM\",\r\n // truckId,\r\n // week,\r\n // day,\r\n // itemData,\r\n // roleId: userData.roleId,\r\n // itemId,\r\n // };\r\n // controller === \"lcls\" && dispatchLcl(action);\r\n // controller === \"parcels\" && dispatchParcel(action);\r\n // controller === \"linehauls\" && dispatchLinehaulFixed(action);\r\n // controller === \"hourlys\" && dispatchHourly(action);\r\n // setLoading(false);\r\n // callback();\r\n } catch (error) {\r\n setLoading(false);\r\n console.log(error);\r\n }\r\n };\r\n\r\n return (\r\n \r\n restore\r\n \r\n );\r\n}\r\n\r\nexport default ButtonOverride;\r\n\r\nButtonOverride.propTypes = {\r\n controller: PropTypes.string.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport ButtonRestore from \"../ButtonRestore\";\r\n\r\nconst RestoreDpc = (props) => {\r\n const {\r\n dataType,\r\n truckId,\r\n itemData,\r\n week,\r\n day,\r\n itemId,\r\n ...otherProps\r\n } = props;\r\n const { createLclModel } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"eventType\",\r\n \"eventAddress\",\r\n \"conNoteNum\",\r\n \"sender\",\r\n \"receiver\",\r\n \"location\",\r\n \"zone\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"adminComments\",\r\n \"driverComments\",\r\n ];\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {displayColumns.map((col) => {\r\n return (\r\n \r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RestoreDpc;\r\n","import React, { useState, useRef } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Button } from \"@material-ui/core\";\r\n\r\nconst ButtonUpload = (props) => {\r\n const { files, setFiles, maxFileSize, multiple, accept, ...otherProps } = props;\r\n // const [files, setFiles] = useState([]);\r\n\r\n const validate = (file) => {\r\n const allowedTypes = [\r\n \"image/png\",\r\n \"image/jpeg\",\r\n \"application/pdf\",\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \"application/vnd.ms-excel\",\r\n ];\r\n return allowedTypes.includes(file.type) && file.size <= maxFileSize;\r\n };\r\n\r\n const _input = useRef();\r\n const handleClick = () => _input.current.click();\r\n // const handleClick = () => {\r\n // let fileInputElement = document.createElement(\"input\");\r\n // fileInputElement.style.display = \"none\";\r\n // fileInputElement.setAttribute(\"type\", \"file\");\r\n // fileInputElement.setAttribute(\"accept\", accept.join(\",\"));\r\n // document.body.appendChild(fileInputElement);\r\n // fileInputElement.click();\r\n // document.body.removeChild(fileInputElement);\r\n // };\r\n\r\n const handleChange = (event) => {\r\n // event.preventDefault();\r\n console.log(event.target.files);\r\n if (![...event.target.files].map((f) => validate(f)).includes(false)) {\r\n setFiles([...files, ...event.target.files]);\r\n }\r\n // _input.current.replaceWith(_input.current.val(\"\").clone(true));\r\n // _input.current\r\n };\r\n\r\n return (\r\n <>\r\n \r\n );\r\n}\r\n\r\nexport default ButtonEdit;\r\n\r\nButtonEdit.propTypes = {\r\n controller: PropTypes.string.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n","import React from \"react\";\r\nimport { DialogContent, Grid, Tooltip, IconButton, Box } from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\n\r\nfunction UploadFileSection(props) {\r\n const { files, setFiles, ...otherProps } = props;\r\n\r\n const deleteFile = (fileName) => {\r\n setFiles(files.filter((file) => file.name !== fileName));\r\n };\r\n\r\n return (\r\n 0 ? \"primary.main\" : \"error.main\"}\r\n {...otherProps}\r\n >\r\n \r\n Please select one or more files to upload as evidence to support the adjustments.\r\n
\r\n Required: In the event that a LCL and Parcels transaction is added, evidence that proves the connote is valid.\r\n
\r\n Required: In the event that a Hourly and Linehaul Floating transaction is added, evidence that proves the time\r\n or km charged.\r\n
\r\n Optional: Evidence that assists in validating adjustments to LCL and Parcels transactions.\r\n
\r\n You may only upload files of the following types: pdf, jpg, png, docx, xlsx.\r\n
\r\n \r\n {files.map((file) => (\r\n \r\n \r\n {file.name}\r\n \r\n {`${file.size} bytes`}\r\n \r\n \r\n deleteFile(file.name)}>\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default UploadFileSection;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n MenuItem,\r\n} from \"@material-ui/core\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport ButtonEdit from \"../ButtonEdit\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\n\r\nconst EditDpc = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createLclModel, comments } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n const [files, setFiles] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"conNoteNum\",\r\n \"eventType\",\r\n \"branch\",\r\n \"sender\",\r\n \"location\",\r\n \"zone\",\r\n \"receiver\",\r\n \"eventAddress\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"totalDPC\",\r\n \"reason\",\r\n comments,\r\n ];\r\n\r\n const enabledColumns = [\r\n \"location\",\r\n \"zone\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"homeDelivery\",\r\n \"stopPay\",\r\n \"reason\",\r\n comments,\r\n ];\r\n // const disabledColumns = [\"eventAddress\", \"conNoteNum\", \"sender\", \"receiver\"];\r\n\r\n const reasons = [\r\n \"Missing StopPay\",\r\n \"Duplicate StopPay\",\r\n \"Incorrect Suburb\",\r\n \"Load rate\",\r\n \"Incorrect DPC rate\",\r\n \"Incorrect number of Items\",\r\n \"Incorrect M3\",\r\n \"Incorrect Weight\",\r\n \"Other\",\r\n ];\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce(\r\n (acc, cur) => ({ ...acc, [cur]: itemData[cur] }),\r\n {}\r\n ),\r\n },\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: lclModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n // setFormData({\r\n // ...formData,\r\n // valid: {\r\n // ...Object.keys(formData.values).reduce((acc, cur) => {\r\n // console.log(cur);\r\n // return { ...acc, [cur]: lclModel[cur].validate(formData.values) };\r\n // }, {}),\r\n // },\r\n // });\r\n }, [formData.values]);\r\n\r\n const deleteFile = (fileName) => {\r\n setFiles(files.filter((file) => file.name !== fileName));\r\n };\r\n\r\n return (\r\n \r\n Edit LCL Item\r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...lclModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n disabled={loading || !enabledColumns.includes(col)}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditDpc;\r\n\r\nEditDpc.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Box,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\n\r\nconst View = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createLclModel } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"conNoteNum\",\r\n \"eventType\",\r\n \"branch\",\r\n \"sender\",\r\n \"location\",\r\n \"zone\",\r\n \"receiver\",\r\n \"eventAddress\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"reason\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n return (\r\n \r\n View Item\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default View;\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Menu,\r\n MenuItem,\r\n ListItemIcon,\r\n ListItemText,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport {\r\n MoreHoriz,\r\n Check,\r\n DeleteForever,\r\n Restore,\r\n Edit,\r\n Visibility,\r\n} from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, statuses, invoiceStatuses } from \"../../Mappings\";\r\nimport ApproveLcl from \"./ApproveLcl\";\r\nimport DeleteLcl from \"./DeleteLcl\";\r\nimport RestoreLcl from \"./RestoreLcl\";\r\nimport EditLcl from \"./EditLcl\";\r\nimport ViewLcl from \"./ViewLcl\";\r\n\r\nconst ActionMenu = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [action, setAction] = useState(\"\");\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const handleOpen = (event) => {\r\n setMenuOpen(true);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setMenuOpen(false);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (action) => {\r\n handleClose();\r\n setAction(action);\r\n };\r\n\r\n const lockedStatus = !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n );\r\n\r\n const actions = {\r\n approve:\r\n userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n delete:\r\n !lockedStatus &&\r\n ((userData.roleId === roles.tollAdmin &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.deletedApproved) ||\r\n (userData.roleId === roles.ownerDriver &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.amended &&\r\n itemData.approvalState !== statuses.addedApproved &&\r\n itemData.approvalState !== statuses.changedApproved &&\r\n itemData.approvalState !== statuses.deletedApproved &&\r\n itemData.approvalState !== statuses.hourlyLinked)),\r\n\r\n restore:\r\n !lockedStatus &&\r\n !itemData.userAdded &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted))),\r\n // ||\r\n // itemData.approvalState === statuses.amended ||\r\n // itemData.approvalState === statuses.changedApproved ||\r\n // itemData.approvalState === statuses.deletedApproved\r\n\r\n edit:\r\n !lockedStatus &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.draft ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.restored)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.draft ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.restored ||\r\n itemData.approvalState === statuses.amended ||\r\n itemData.approvalState === statuses.addedApproved ||\r\n itemData.approvalState === statuses.changedApproved))),\r\n\r\n view: true,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {actions.view && (\r\n handleClick(\"view\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.approve && (\r\n handleClick(\"approve\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.delete && (\r\n handleClick(\"delete\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.restore && (\r\n handleClick(\"restore\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.edit && (\r\n handleClick(\"edit\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {action === \"approve\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"delete\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"restore\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"edit\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"view\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ActionMenu;\r\n\r\nActionMenu.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n //itemData\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport LclActionMenu from \"./LclActionMenu\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport clsx from \"clsx\";\r\nimport { statuses } from \"../../Mappings\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cell: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n },\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n strikeThrough: {\r\n textDecoration: \"line-through\",\r\n },\r\n}));\r\n\r\nconst LclDataTable = (props) => {\r\n const { data, truckId, week, day } = props;\r\n const { createLclModel } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n const { scrollToPosition } = useContext(AppStateContext);\r\n const sortedRows = Object.keys(data).sort(\r\n (id_A, id_B) =>\r\n new Date(data[id_A].eventDateTime).valueOf() -\r\n new Date(data[id_B].eventDateTime).valueOf()\r\n );\r\n const classes = useStyles();\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"conNoteNum\",\r\n \"eventType\",\r\n \"branch\",\r\n \"sender\",\r\n \"location\",\r\n \"zone\",\r\n \"receiver\",\r\n \"eventAddress\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"dpc\",\r\n \"totalDPC\",\r\n \"approvalState\",\r\n // \"signature\",\r\n ];\r\n\r\n // return to uses last position before a refresh was done\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [data, scrollToPosition]);\r\n\r\n return (\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n {lclModel[col].displayName}\r\n \r\n ))}\r\n Action\r\n \r\n \r\n\r\n \r\n {sortedRows.map((itemId) => {\r\n const itemData = data[itemId];\r\n const strikeThrough =\r\n itemData.approvalState === statuses.deletedApproved ||\r\n itemData.approvalState === statuses.hourlyLinked;\r\n\r\n return (\r\n \r\n {displayColumns.map((col) => (\r\n \r\n {lclModel[col].displayValue(itemData[col])}\r\n \r\n ))}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LclDataTable;\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\n// import { LclDataContext } from \"../Contexts/LclDataContext\";\r\n// import { ParcelDataContext } from \"../Contexts/ParcelDataContext\";\r\n// import { LinehaulFixedDataContext } from \"../Contexts/LinehaulFixedDataContext\";\r\n// import { LinehaulFloatingDataContext } from \"../Contexts/LinehaulFloatingDataContext\";\r\n// import { HourlyDataContext } from \"../Contexts/HourlyDataContext\";\r\nimport PropTypes from \"prop-types\";\r\nimport { getDateFromWeekAndDay, getWeekDates } from \"../GlobalFunctions\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nconst axios = require(\"axios\");\r\n\r\nfunction ButtonOverride(props) {\r\n const {\r\n controller,\r\n truckId,\r\n week,\r\n day,\r\n itemData,\r\n onClick,\r\n callback,\r\n files,\r\n disabled,\r\n ...otherProps\r\n } = props; //filter out onClick\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n // const { dispatch: dispatchLcl } = useContext(LclDataContext);\r\n // const { dispatch: dispatchParcel } = useContext(ParcelDataContext);\r\n // const { dispatch: dispatchLinehaulFixed } = useContext(\r\n // LinehaulFixedDataContext\r\n // );\r\n // const { dispatch: dispatchLinehaulFloating } = useContext(\r\n // LinehaulFloatingDataContext\r\n // );\r\n // const { dispatch: dispatchHourly } = useContext(HourlyDataContext);\r\n\r\n const [loading, setLoading] = useState(false);\r\n const { setScrollPosition } = useContext(AppStateContext);\r\n const handleClick = () => {\r\n setScrollPosition();\r\n sendRequest();\r\n };\r\n\r\n const sendRequest = async () => {\r\n const newItemId = uuidv4();\r\n\r\n const newItemData = {\r\n ...itemData,\r\n id: newItemId,\r\n driver: truckId,\r\n truck: String(truckId),\r\n driverId: truckId,\r\n };\r\n console.log(newItemData);\r\n\r\n const request = {\r\n method: \"POST\",\r\n url: `${controller}/add/`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: newItemData,\r\n };\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n await axios(request);\r\n await sendUploadRequest(newItemId);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n // const action = {\r\n // type: \"CREATE_ITEM\",\r\n // truckId,\r\n // week,\r\n // day,\r\n // itemData: newItemData,\r\n // roleId: userData.roleId,\r\n // itemId: newItemId,\r\n // };\r\n // controller === \"lcls\" && dispatchLcl(action);\r\n // controller === \"parcels\" && dispatchParcel(action);\r\n // controller === \"rates\" && dispatchHourly(action);\r\n // controller === \"linehauls\" && dispatchLinehaulFixed(action);\r\n // controller === \"floating\" && dispatchLinehaulFloating(action);\r\n // setLoading(false);\r\n // callback();\r\n } catch (error) {\r\n setLoading(false);\r\n console.log(error);\r\n }\r\n };\r\n\r\n const sendUploadRequest = async (id) => {\r\n setLoading(true);\r\n const promises = files.map((file) => {\r\n const fileData = new FormData();\r\n fileData.append(\"file\", file);\r\n const request = {\r\n method: \"POST\",\r\n url: `files/UploadAsync/${id}/${\r\n getDateFromWeekAndDay(week, day).dateIsoString\r\n }`,\r\n headers: {\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: fileData,\r\n };\r\n console.log(request);\r\n return axios(request);\r\n });\r\n\r\n Promise.all(promises)\r\n .then((res) => res)\r\n .catch((error) => console.log(error))\r\n .finally(() => setLoading(false));\r\n };\r\n\r\n return (\r\n \r\n create\r\n \r\n );\r\n}\r\n\r\nexport default ButtonOverride;\r\n\r\nButtonOverride.propTypes = {\r\n controller: PropTypes.string.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n Divider,\r\n Grid,\r\n TextField,\r\n MenuItem,\r\n Fab,\r\n Tooltip,\r\n} from \"@material-ui/core\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport ButtonCreate from \"../ButtonCreate\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, invoiceStatuses } from \"../../Mappings\";\r\n\r\nconst CreateDpc = (props) => {\r\n const [files, setFiles] = useState([]);\r\n const { truckId, week, day, ...otherProps } = props;\r\n const { createLclModel, comments, defaultLcl } = useContext(LclDataContext);\r\n const lclModel = createLclModel({ week });\r\n const [open, setOpen] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const disabled =\r\n !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n ) || userData.roleId === roles.tollManager;\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"conNoteNum\",\r\n \"eventType\",\r\n \"branch\",\r\n \"sender\",\r\n \"location\",\r\n \"zone\",\r\n \"receiver\",\r\n \"eventAddress\",\r\n \"eventItems\",\r\n \"kg\",\r\n \"m3\",\r\n \"stopPay\",\r\n \"homeDelivery\",\r\n \"dpc\",\r\n \"reason\",\r\n comments,\r\n ];\r\n\r\n const reasons = [\r\n \"Missing StopPay\",\r\n \"Duplicate StopPay\",\r\n \"Incorrect Suburb\",\r\n \"Load rate\",\r\n \"Incorrect DPC rate\",\r\n \"Incorrect number of Items\",\r\n \"Incorrect M3\",\r\n \"Incorrect Weight\",\r\n \"Other\",\r\n ];\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n week,\r\n day,\r\n },\r\n valid: {},\r\n });\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...displayColumns.reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: lclModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n });\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n setFormData({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n week,\r\n day,\r\n },\r\n valid: {},\r\n });\r\n setFiles([]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setOpen(true);\r\n }}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n Create New Item\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {lclModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...lclModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n {\r\n acc[col] = lclModel[col].mapToRequestValue(formData.values);\r\n return acc;\r\n }, {}),\r\n eventDateTime: lclModel.eventDateTime.mapToRequestValue(\r\n formData.values\r\n ),\r\n driver: Number(truckId),\r\n }}\r\n files={files}\r\n callback={handleClose}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateDpc;\r\n\r\nCreateDpc.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useState, useRef } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Button, ButtonBase } from \"@material-ui/core\";\r\n\r\nconst ButtonLoadMore = ( { remaining, onClickLoadMore } ) => \r\n \r\n\r\nexport default ButtonLoadMore;\r\n\r\nButtonLoadMore.propTypes = {\r\n remaining: PropTypes.number,\r\n};\r\n","import React, { useContext, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport {\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport LclDataTable from \"./LclDataTable\";\r\nimport CreateLcl from \"./CreateLcl\";\r\nimport { statuses, pageSize } from \"../../Mappings\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\nimport ButtonLoadMore from \"../ButtonLoadMore\";\r\n\r\nconst days = [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n divider: {\r\n padding: 0,\r\n },\r\n add: {\r\n textAlign: \"center\",\r\n },\r\n table: {\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst LclDisplayDay = ({ truckId, week, day, lclSummary, setlclSummaryPerEventDate, ...rest }) => {\r\n const classes = useStyles();\r\n const { lclData } = useContext(LclDataContext);\r\n const { tableOpen, setTableOpen, scrollToPosition } =\r\n useContext(AppStateContext);\r\n\r\n let data = {}; \r\n let currentDayRemaining = 0;\r\n\r\n const isShowLoadMoreButton = lclSummary?.isShowLoadMoreButton;\r\n \r\n if(lclSummary) {\r\n const { currentListTotal, totalRecords } = lclSummary;\r\n\r\n if(currentListTotal && totalRecords)\r\n currentDayRemaining = parseInt(totalRecords) - parseInt(currentListTotal)\r\n }\r\n\r\n const loadMore = () => {\r\n setlclSummaryPerEventDate((state) => {\r\n \r\n const lclSummaryPerEventDate = state.map(item => ({\r\n ...item,\r\n isSelectedToLoadMore: false\r\n }));\r\n\r\n const currentIndex = lclSummaryPerEventDate.findIndex( f => f.weekDay == day);\r\n const { currentPage, currentListTotal, totalRecords} = lclSummaryPerEventDate[currentIndex];\r\n lclSummaryPerEventDate[currentIndex].currentPage = currentPage + 1;\r\n lclSummaryPerEventDate[currentIndex].isShowLoadMoreButton = totalRecords > (currentListTotal + pageSize);\r\n lclSummaryPerEventDate[currentIndex].currentListTotal = currentListTotal + pageSize;\r\n lclSummaryPerEventDate[currentIndex].isSelectedToLoadMore = true;\r\n return lclSummaryPerEventDate;\r\n })\r\n } \r\n\r\n if (truckId in lclData) {\r\n if (week in lclData[truckId]) {\r\n if (day in lclData[truckId][week]) {\r\n data = lclData[truckId][week][day];\r\n }\r\n }\r\n }\r\n\r\n //moved computation to api\r\n // const totals = {\r\n // stopPay: Object.keys(data).reduce(\r\n // (acc, cur) =>\r\n // data[cur].approvalState === statuses.deletedApproved ||\r\n // data[cur].approvalState === statuses.hourlyLinked\r\n // ? acc\r\n // : acc + data[cur].stopPay,\r\n // 0\r\n // ),\r\n // dpc: Object.keys(data).reduce(\r\n // (acc, cur) =>\r\n // data[cur].approvalState === statuses.deletedApproved ||\r\n // data[cur].approvalState === statuses.hourlyLinked\r\n // ? acc\r\n // : acc + data[cur].dpc,\r\n // 0\r\n // ),\r\n // homeDelivery: Object.keys(data).reduce(\r\n // (acc, cur) =>\r\n // data[cur].approvalState === statuses.deletedApproved ||\r\n // data[cur].approvalState === statuses.hourlyLinked\r\n // ? acc\r\n // : acc + data[cur].homeDelivery,\r\n // 0\r\n // ),\r\n // totalDPC: Object.keys(data).reduce(\r\n // (acc, cur) =>\r\n // data[cur].approvalState === statuses.deletedApproved ||\r\n // data[cur].approvalState === statuses.hourlyLinked\r\n // ? acc\r\n // : acc + data[cur].totalDPC,\r\n // 0\r\n // ), \r\n // };\r\n\r\n const overallTotalDpc = (lclSummary?.totalStopPay ?? 0) + (lclSummary?.totalHomeDelivery ?? 0) + (lclSummary?.totalDpc ?? 0);\r\n\r\n // const accordionExpandedRef = useRef(false);\r\n // const [accordionExpanded, setAccordionExpanded] = useState(\r\n // accordionExpandedRef.current\r\n // );\r\n\r\n // return to uses last position before a refresh was done\r\n // useEffect(() => {\r\n // console.log(\"here\");\r\n // scrollToPosition();\r\n // }, [lclData, scrollToPosition]);\r\n\r\n return (\r\n {\r\n setTableOpen({ ...tableOpen, [day]: isExpanded });\r\n // accordionExpandedRef.current = isExpanded;\r\n // setAccordionExpanded(isExpanded);\r\n }}\r\n >\r\n }>\r\n \r\n \r\n {days[day]}\r\n \r\n \r\n Records: {lclSummary?.totalRecords ?? 0}\r\n \r\n \r\n \r\n StopPay: ${(lclSummary?.totalStopPay ?? 0).toFixed(2)}\r\n \r\n \r\n \r\n \r\n Home Delivery: ${(lclSummary?.totalHomeDelivery ?? 0).toFixed(2)}\r\n \r\n \r\n \r\n \r\n DPC: ${(lclSummary?.totalDpc ?? 0).toFixed(2)}\r\n \r\n \r\n \r\n \r\n Total DPC: ${(overallTotalDpc ?? 0).toFixed(2)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isShowLoadMoreButton ? \r\n \r\n : null\r\n } \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LclDisplayDay;\r\n\r\nLclDisplayDay.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n lclSummary: PropTypes.object\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n Typography,\r\n MenuItem,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport ButtonApprove from \"../ButtonApprove\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { getCurrentBranchesArray } from \"../../GlobalFunctions\";\r\nconst axios = require(\"axios\");\r\n\r\nconst ApproveDpc = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { userData } = useContext(UserDataContext);\r\n const { createParcelModel } = useContext(ParcelDataContext);\r\n const parcelDataModel = createParcelModel({ week });\r\n const currentBranchArray = getCurrentBranchesArray(userData.branches, week);\r\n const branchesObject = currentBranchArray.reduce((acc, cur) => {\r\n acc[cur.shortCode] = cur;\r\n return acc;\r\n }, {});\r\n const [loading, setLoading] = useState(false);\r\n const [originalData, setOriginalData] = useState({});\r\n\r\n const faf = (() => {\r\n if (itemData.mode === \"P\") {\r\n return branchesObject[itemData.puBranch].faf;\r\n } else if (itemData.mode === \"D\") {\r\n return branchesObject[itemData.delBranch].faf;\r\n }\r\n })();\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"cNote\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"mode\",\r\n \"dpc\",\r\n \"reason\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n const reasons = [\"Missing from DPCs\", \"Other\"];\r\n\r\n useEffect(() => {\r\n if (Object.keys(originalData).length === 0 && !itemData.userAdded) {\r\n const fetchOriginalData = async () => {\r\n const req = {\r\n method: \"GET\",\r\n url: `parcels/getOriginalDPC/${itemId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n const res = await axios(req);\r\n setOriginalData(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchOriginalData();\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {itemData.userAdded &&\r\n displayColumns.map((col) => {\r\n console.log(col);\r\n return (\r\n \r\n \r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n \r\n );\r\n })}\r\n\r\n {!itemData.userAdded && (\r\n \r\n \r\n \r\n Column:\r\n \r\n \r\n Original:\r\n \r\n \r\n New:\r\n \r\n \r\n \r\n )}\r\n\r\n {!itemData.userAdded &&\r\n displayColumns.map((col) => (\r\n \r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n\r\n \r\n (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n \r\n \r\n Fuel Adjustment Factor:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveDpc;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n MenuItem,\r\n} from \"@material-ui/core\";\r\nimport { roles } from \"../../Mappings\";\r\nimport ButtonDelete from \"../ButtonDelete\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\n\r\nconst DeleteParcel = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createParcelModel, comments } = useContext(ParcelDataContext);\r\n const parcelDataModel = createParcelModel({ week });\r\n\r\n const displayColumns = [\"reason\", comments];\r\n\r\n const [formData, setFormData] = useState({\r\n values: displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n valid: {},\r\n });\r\n\r\n const reasons = [\"Duplicate DPC\", \"Other\"];\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: parcelDataModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Delete DPC Item\r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...parcelDataModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DeleteParcel;\r\n\r\nDeleteParcel.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport ButtonRestore from \"../ButtonRestore\";\r\n\r\nconst RestoreDpc = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createParcelModel } = useContext(ParcelDataContext);\r\n\r\n const parcelDataModel = createParcelModel({ week });\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"cNote\",\r\n \"mode\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"reason\",\r\n \"adminComments\",\r\n \"driverComments\",\r\n ];\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {displayColumns.map((col) => {\r\n return (\r\n \r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RestoreDpc;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n MenuItem,\r\n} from \"@material-ui/core\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport ButtonEdit from \"../ButtonEdit\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\n\r\nconst EditParcel = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createParcelModel, comments } = useContext(ParcelDataContext);\r\n const parcelDataModel = createParcelModel({ week });\r\n const [files, setFiles] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const displayColumns = [\"dpc\", \"reason\", comments];\r\n const reasons = [\"Missing from DPCs\", \"Other\"];\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce(\r\n (acc, cur) => ({ ...acc, [cur]: itemData[cur] }),\r\n {}\r\n ),\r\n },\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n console.log(itemData);\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: parcelDataModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n const deleteFile = (fileName) => {\r\n setFiles(files.filter((file) => file.name !== fileName));\r\n };\r\n\r\n return (\r\n \r\n Edit DPC Item\r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...parcelDataModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n disabled={loading}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n {\r\n acc[col] = parcelDataModel[col].mapToRequestValue(\r\n formData.values\r\n );\r\n return acc;\r\n }, {}),\r\n truck: String(truckId),\r\n }}\r\n files={files}\r\n callback={props.onClose}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditParcel;\r\n\r\nEditParcel.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n} from \"@material-ui/core\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\n\r\nconst View = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createParcelModel } = useContext(ParcelDataContext);\r\n const parcelDataModel = createParcelModel({ week });\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"cNote\",\r\n \"mode\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"reason\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n return (\r\n \r\n View Item\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {parcelDataModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default View;\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Menu,\r\n MenuItem,\r\n ListItemIcon,\r\n ListItemText,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport {\r\n MoreHoriz,\r\n Check,\r\n DeleteForever,\r\n Restore,\r\n Edit,\r\n Visibility,\r\n} from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, statuses, invoiceStatuses } from \"../../Mappings\";\r\nimport ApproveParcel from \"./ApproveParcel\";\r\nimport DeleteParcel from \"./DeleteParcel\";\r\nimport RestoreParcel from \"./RestoreParcel\";\r\nimport EditParcel from \"./EditParcel\";\r\nimport ViewParcel from \"./ViewParcel\";\r\n\r\nconst ActionMenu = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [action, setAction] = useState(\"\");\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const handleOpen = (event) => {\r\n setMenuOpen(true);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setMenuOpen(false);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (action) => {\r\n handleClose();\r\n setAction(action);\r\n };\r\n\r\n const lockedStatus = !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n );\r\n\r\n const actions = {\r\n approve:\r\n userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n delete:\r\n (userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.deletedApproved) ||\r\n (userData.roleId === roles.ownerDriver &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.amended &&\r\n itemData.approvalState !== statuses.addedApproved &&\r\n itemData.approvalState !== statuses.changedApproved &&\r\n itemData.approvalState !== statuses.deletedApproved &&\r\n itemData.approvalState !== statuses.hourlyLinked),\r\n\r\n restore:\r\n !lockedStatus &&\r\n !itemData.userAdded &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted))),\r\n // ||\r\n // itemData.approvalState === statuses.amended ||\r\n // itemData.approvalState === statuses.changedApproved ||\r\n // itemData.approvalState === statuses.deletedApproved\r\n\r\n edit:\r\n !lockedStatus &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.draft ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.restored)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.draft ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.restored ||\r\n itemData.approvalState === statuses.amended ||\r\n itemData.approvalState === statuses.addedApproved ||\r\n itemData.approvalState === statuses.changedApproved))),\r\n\r\n view: true,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {actions.view && (\r\n handleClick(\"view\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.approve && (\r\n handleClick(\"approve\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.delete && (\r\n handleClick(\"delete\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.restore && (\r\n handleClick(\"restore\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.edit && (\r\n handleClick(\"edit\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {action === \"approve\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"delete\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"restore\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"edit\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"view\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ActionMenu;\r\n\r\nActionMenu.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport ParcelActionMenu from \"./ParcelActionMenu\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport { statuses } from \"../../Mappings\";\r\nimport clsx from \"clsx\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cell: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n },\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n strikeThrough: {\r\n textDecoration: \"line-through\",\r\n },\r\n}));\r\n\r\nconst ParcelDataTable = (props) => {\r\n const { data, truckId, week, day } = props;\r\n const { createParcelModel } = useContext(ParcelDataContext);\r\n const parcelModel = createParcelModel({ week });\r\n const sortedRows = Object.keys(data).sort(\r\n (id_A, id_B) =>\r\n new Date(data[id_A].eventDate).valueOf() -\r\n new Date(data[id_B].eventDate).valueOf()\r\n );\r\n const { scrollToPosition } = useContext(AppStateContext);\r\n const classes = useStyles();\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"cNote\",\r\n \"mode\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"approvalState\",\r\n ];\r\n\r\n // return to uses last position before a refresh was done\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [data, scrollToPosition]);\r\n\r\n return (\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n {parcelModel[col].displayName}\r\n \r\n ))}\r\n Action\r\n \r\n \r\n\r\n \r\n {sortedRows.map((itemId) => {\r\n const itemData = data[itemId];\r\n const strikeThrough =\r\n itemData.approvalState === statuses.deletedApproved ||\r\n itemData.approvalState === statuses.hourlyLinked;\r\n\r\n return (\r\n \r\n {displayColumns.map((col) => (\r\n \r\n {parcelModel[col].displayValue(itemData[col])}\r\n \r\n ))}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ParcelDataTable;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n Divider,\r\n Grid,\r\n TextField,\r\n MenuItem,\r\n Fab,\r\n Tooltip,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport ButtonCreate from \"../ButtonCreate\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport { roles, invoiceStatuses } from \"../../Mappings\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\n\r\nconst CreateParcel = (props) => {\r\n const [files, setFiles] = useState([]);\r\n const { truckId, week, day, ...otherProps } = props;\r\n const { comments, defaultParcel } = useContext(ParcelDataContext);\r\n const { createParcelModel } = useContext(ParcelDataContext);\r\n const parcelModel = createParcelModel({ week });\r\n const { userData } = useContext(UserDataContext);\r\n const [open, setOpen] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n\r\n const disabled =\r\n !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n ) || userData.roleId === roles.tollManager;\r\n\r\n const displayColumns = [\r\n \"eventTimeString\",\r\n \"cNote\",\r\n \"mode\",\r\n \"senderName\",\r\n \"sendSuburb\",\r\n \"receiverName\",\r\n \"receiverSuburb\",\r\n \"puBranch\",\r\n \"delBranch\",\r\n \"kg\",\r\n \"m3\",\r\n \"dpc\",\r\n \"reason\",\r\n comments,\r\n ];\r\n\r\n const reasons = [\"Missing from DPCs\", \"Other\"];\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n week,\r\n day,\r\n },\r\n valid: {},\r\n });\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...displayColumns.reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: parcelModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData({\r\n ...formData,\r\n values: { ...formData.values, [name]: value },\r\n });\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n setFormData({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n week,\r\n day,\r\n },\r\n valid: {},\r\n });\r\n setFiles([]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setOpen(true);\r\n }}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n Create New Item\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => {\r\n return (\r\n \r\n \r\n {parcelModel[col].displayName}:\r\n \r\n \r\n handleChange(event)}\r\n error={!formData.valid[col]}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...parcelModel[col].textFieldProps}\r\n {...(col === \"reason\" && {\r\n children: reasons.map((e) => (\r\n \r\n {e}\r\n \r\n )),\r\n })}\r\n />\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n {\r\n acc[col] = parcelModel[col].mapToRequestValue(formData.values);\r\n return acc;\r\n }, {}),\r\n eventDate: parcelModel.eventDate.mapToRequestValue(\r\n formData.values\r\n ),\r\n }}\r\n files={files}\r\n callback={handleClose}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateParcel;\r\n\r\nCreateParcel.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport {\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n} from \"@material-ui/core\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport ParcelDataTable from \"./ParcelDataTable\";\r\nimport CreateParcel from \"./CreateParcel\";\r\nimport { statuses, pageSize } from \"../../Mappings\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\nimport ButtonLoadMore from \"../ButtonLoadMore\";\r\n\r\nconst days = [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n divider: {\r\n padding: 0,\r\n },\r\n add: {\r\n textAlign: \"center\",\r\n },\r\n table: {\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst ParcelDisplayDay = (props) => {\r\n const classes = useStyles();\r\n const { parcelData } = useContext(ParcelDataContext);\r\n const { truckId, week, day, parcelSummary, setParcelSummaryPerEventDate } = props;\r\n const { tableOpen, setTableOpen, scrollToPosition } =\r\n useContext(AppStateContext);\r\n\r\n let data = {};\r\n let currentDayRemaining = 0;\r\n\r\n const isShowLoadMoreButton = parcelSummary?.isShowLoadMoreButton;\r\n \r\n if(parcelSummary) {\r\n const { currentListTotal, totalRecords } = parcelSummary;\r\n\r\n if(currentListTotal && totalRecords)\r\n currentDayRemaining = parseInt(totalRecords) - parseInt(currentListTotal)\r\n }\r\n\r\n const loadMore = () => {\r\n setParcelSummaryPerEventDate((state) => {\r\n \r\n const parcelSummaryPerEventDate = state.map(item => ({\r\n ...item,\r\n isSelectedToLoadMore: false\r\n }));\r\n\r\n const currentIndex = parcelSummaryPerEventDate.findIndex( f => f.weekDay == day);\r\n const { currentPage, currentListTotal, totalRecords} = parcelSummaryPerEventDate[currentIndex];\r\n parcelSummaryPerEventDate[currentIndex].currentPage = currentPage + 1;\r\n parcelSummaryPerEventDate[currentIndex].isShowLoadMoreButton = totalRecords > (currentListTotal + pageSize);\r\n parcelSummaryPerEventDate[currentIndex].currentListTotal = currentListTotal + pageSize;\r\n parcelSummaryPerEventDate[currentIndex].isSelectedToLoadMore = true;\r\n \r\n return parcelSummaryPerEventDate;\r\n })\r\n } \r\n\r\n if (truckId in parcelData) {\r\n if (week in parcelData[truckId]) {\r\n if (day in parcelData[truckId][week]) {\r\n data = parcelData[truckId][week][day];\r\n }\r\n }\r\n }\r\n\r\n const totals = {\r\n dpc: Object.keys(data).reduce(\r\n (acc, cur) =>\r\n data[cur].approvalState === statuses.deletedApproved ||\r\n data[cur].approvalState === statuses.hourlyLinked\r\n ? acc\r\n : acc + data[cur].dpc,\r\n 0\r\n ),\r\n };\r\n\r\n // // return to uses last position before a refresh was done\r\n // useEffect(() => {\r\n // scrollToPosition();\r\n // }, [parcelData, scrollToPosition]);\r\n\r\n return (\r\n \r\n setTableOpen({ ...tableOpen, [day]: isExpanded })\r\n }\r\n >\r\n }>\r\n \r\n \r\n {days[day]}\r\n \r\n \r\n Records: {parcelSummary?.totalRecords ?? 0}\r\n \r\n \r\n \r\n DPC: ${(parcelSummary?.totalDpc ?? 0).toFixed(2)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isShowLoadMoreButton ? \r\n \r\n : null\r\n } \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ParcelDisplayDay;\r\n\r\nParcelDisplayDay.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n TextField,\r\n Typography,\r\n Box,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\nimport ButtonApprove from \"../ButtonApprove\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n },\r\n flexRowItem: {\r\n flexGrow: 1,\r\n width: \"100%\",\r\n // whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n}));\r\n\r\nconst ApproveLinehaul = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { linehaulFixedModel, routesObj } = useContext(\r\n LinehaulFixedDataContext\r\n );\r\n\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const route = routesObj[itemData.routeId];\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n console.log(route);\r\n }, []);\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {[\"routeId\"].map((col) => (\r\n \r\n \r\n \r\n \r\n {linehaulFixedModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {[\r\n \"adjustment\",\r\n \"tripCost\",\r\n \"totalCost\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ].map((col) => (\r\n \r\n \r\n \r\n \r\n {linehaulFixedModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n\r\n {/* \r\n \r\n \r\n Fuel Adjustment Factor:\r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Account Code\r\n \r\n \r\n Cost Centre\r\n \r\n \r\n Percentage\r\n \r\n \r\n\r\n {route.percentages.map((percentage, idx) => (\r\n \r\n \r\n {route.accountCodes[idx]}\r\n \r\n \r\n {route.costCentres[idx]}\r\n \r\n {`${\r\n Number(percentage) * 100\r\n }%`}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveLinehaul;\r\n\r\nApproveLinehaul.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport ButtonEdit from \"../ButtonEdit\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\n\r\nconst CreateLinehaul = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const { linehaulFixedModel, defaultFixed, routesObj, comments } = useContext(\r\n LinehaulFixedDataContext\r\n );\r\n const [files, setFiles] = useState([]);\r\n\r\n const displayColumns = [\r\n \"routeId\",\r\n \"adjustment\",\r\n \"tripCost\",\r\n \"totalCost\",\r\n comments,\r\n ];\r\n\r\n const [formData, setFormData] = useState({\r\n values: displayColumns.reduce(\r\n (acc, cur) => ({ ...acc, [cur]: itemData[cur] }),\r\n {}\r\n ),\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"routeId\" || event.target.name === \"adjustment\") {\r\n newFormData.values.tripCost = Number(\r\n routesObj[itemData.routeId].routeRate\r\n );\r\n newFormData.values.totalCost =\r\n newFormData.values.tripCost + Number(newFormData.values.adjustment);\r\n }\r\n console.log(newFormData);\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: linehaulFixedModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Edit Fixed Linehaul\r\n \r\n \r\n \r\n \r\n {[\"routeId\"].map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {[\"adjustment\", \"tripCost\", \"totalCost\", comments].map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateLinehaul;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport ButtonDelete from \"../ButtonDelete\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\n\r\nconst Delete = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const { linehaulFixedModel, defaultFixed, routesObj, comments } = useContext(LinehaulFixedDataContext);\r\n\r\n const displayColumns = [];\r\n\r\n const [formData, setFormData] = useState({\r\n values: displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: itemData[cur] }), {}),\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"routeId\" || event.target.name === \"adjustment\") {\r\n newFormData.values.tripCost = Number(routesObj[itemData.routeId].routeRate);\r\n newFormData.values.totalCost = newFormData.values.tripCost + Number(newFormData.values.adjustment);\r\n }\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({ ...acc, [cur]: linehaulFixedModel[cur].validate(formData.values[cur]) }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Delete Fixed Linehaul\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Delete;\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Box,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\n\r\nconst View = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { linehaulFixedModel } = useContext(LinehaulFixedDataContext);\r\n\r\n const displayColumns = [\"routeId\", \"adjustment\", \"tripCost\", \"totalCost\", \"driverComments\", \"adminComments\"];\r\n\r\n return (\r\n \r\n View Item\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default View;\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Menu,\r\n MenuItem,\r\n ListItemIcon,\r\n ListItemText,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport {\r\n MoreHoriz,\r\n Check,\r\n DeleteForever,\r\n Restore,\r\n Edit,\r\n Visibility,\r\n} from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, statuses, invoiceStatuses } from \"../../Mappings\";\r\nimport ApproveLinehaulFixed from \"./ApproveLinehaulFixed\";\r\nimport EditLinehaulFixed from \"./EditLinehaulFixed\";\r\nimport DeleteLinehaulFixed from \"./DeleteLinehaulFixed\";\r\nimport ViewLinehaulFixed from \"./ViewLinehaulFixed\";\r\n\r\nconst ActionMenu = (props) => {\r\n const { dataType, truckId, week, day, itemId, itemData, ...otherProps } =\r\n props;\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [action, setAction] = useState(\"\");\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const handleOpen = (event) => {\r\n setMenuOpen(true);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setMenuOpen(false);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (action) => {\r\n handleClose();\r\n setAction(action);\r\n };\r\n\r\n const lockedStatus = !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n );\r\n\r\n const actions = {\r\n approve:\r\n userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n delete:\r\n (userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.deletedApproved) ||\r\n (userData.roleId === roles.ownerDriver &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.amended &&\r\n itemData.approvalState !== statuses.addedApproved &&\r\n itemData.approvalState !== statuses.changedApproved &&\r\n itemData.approvalState !== statuses.deletedApproved),\r\n\r\n restore:\r\n (userData.roleId === roles.ownerDriver ||\r\n userData.roleId === roles.tollAdmin) &&\r\n !lockedStatus &&\r\n !itemData.userAdded && // this line might not make sense since linehauls are always userAdded but im scared to delete it\r\n (itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n edit:\r\n (userData.roleId === roles.ownerDriver ||\r\n userData.roleId === roles.tollAdmin) &&\r\n ((!lockedStatus && itemData.approvalState === statuses.draft) ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed),\r\n\r\n view: true,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {actions.view && (\r\n handleClick(\"view\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.approve && (\r\n handleClick(\"approve\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.delete && (\r\n handleClick(\"delete\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {/* {actions.restore && (\r\n handleClick(\"restore\")}>\r\n \r\n \r\n \r\n \r\n \r\n )} */}\r\n\r\n {actions.edit && (\r\n handleClick(\"edit\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {action === \"approve\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"delete\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {/* {action === \"restore\" && (\r\n setAction(\"\")}\r\n dataType={dataType}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )} */}\r\n\r\n {action === \"edit\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"view\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ActionMenu;\r\n\r\nActionMenu.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n //itemData\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n} from \"@material-ui/core\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\nimport LinehaulFixedActionMenu from \"./LinehaulFixedActionMenu\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cell: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n },\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nconst LinehaulDataTable = (props) => {\r\n const { data, truckId, week, day } = props;\r\n const { linehaulFixedModel } = useContext(LinehaulFixedDataContext);\r\n const displayColumns = [\r\n \"routeId\",\r\n \"adjustment\",\r\n \"tripCost\",\r\n \"totalCost\",\r\n \"approvalState\",\r\n ];\r\n const { scrollToPosition } = useContext(AppStateContext);\r\n\r\n const classes = useStyles();\r\n\r\n // return to uses last position before a refresh was done\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [data, scrollToPosition]);\r\n\r\n return (\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n ))}\r\n \r\n Action\r\n \r\n \r\n \r\n\r\n \r\n {Object.keys(data).map((itemId) => {\r\n const row = data[itemId];\r\n\r\n return (\r\n \r\n {displayColumns.map((col) => {\r\n const value = row[col];\r\n return (\r\n \r\n {linehaulFixedModel[col].displayValue(value)}\r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LinehaulDataTable;\r\n\r\nLinehaulDataTable.propTypes = {\r\n data: PropTypes.object.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport ButtonCreate from \"../ButtonCreate\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\n\r\nconst CreateLinehaulFixed = (props) => {\r\n const { truckId, week, day, ...otherProps } = props;\r\n const {\r\n linehaulFixedModel,\r\n fixedColumns,\r\n defaultFixed,\r\n getActiveRoutesObj,\r\n routesObj,\r\n comments,\r\n } = useContext(LinehaulFixedDataContext);\r\n // const routesObj = getActiveRoutesObj(truckId, week);\r\n const [files, setFiles] = useState([]);\r\n const displayColumns = [...fixedColumns, comments];\r\n\r\n const [formData, setFormData] = useState({\r\n values: displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"routeId\" || event.target.name === \"adjustment\") {\r\n newFormData.values.tripCost = Number(\r\n routesObj[newFormData.values.routeId].routeRate\r\n );\r\n newFormData.values.totalCost =\r\n newFormData.values.tripCost + Number(newFormData.values.adjustment);\r\n }\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: linehaulFixedModel[cur].validate(formData.values),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Add New Fixed Linehaul\r\n \r\n \r\n \r\n \r\n {[\"routeId\"].map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {[\"adjustment\"].map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {[\"tripCost\", \"totalCost\", comments].map((col) => (\r\n \r\n \r\n {linehaulFixedModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateLinehaulFixed;\r\n","import React, { useState, useContext } from \"react\";\r\nimport { Fab, Tooltip } from \"@material-ui/core\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport CreateLinehaulFixed from \"./CreateLinehaulFixed\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, invoiceStatuses } from \"../../Mappings\";\r\n\r\nconst CreateLinehaulFab = (props) => {\r\n const [open, setOpen] = useState(false);\r\n const { userData } = useContext(UserDataContext);\r\n const disabled =\r\n !(\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.dpcPending\r\n ) || userData.roleId === roles.tollManager;\r\n\r\n const onClose = () => setOpen(false);\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setOpen(true);\r\n }}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n {open && }\r\n \r\n );\r\n};\r\n\r\nexport default CreateLinehaulFab;\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport {\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n} from \"@material-ui/core\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport LinehaulFixedDataTable from \"./LinehaulFixedDataTable\";\r\nimport { LinehaulFixedDataContext } from \"../../Contexts/LinehaulFixedDataContext\";\r\nimport CreateLinehaulFixedFab from \"./CreateLinehaulFixedFab\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n add: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nconst days = [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n];\r\n\r\nconst LinehaulFixedDisplayDay = (props) => {\r\n const { linehaulFixedData } = useContext(LinehaulFixedDataContext);\r\n const classes = useStyles();\r\n const { truckId, week, day } = props;\r\n const { tableOpen, setTableOpen, scrollToPosition } =\r\n useContext(AppStateContext);\r\n\r\n let data = {};\r\n if (truckId in linehaulFixedData) {\r\n if (week in linehaulFixedData[truckId]) {\r\n if (day in linehaulFixedData[truckId][week]) {\r\n data = linehaulFixedData[truckId][week][day];\r\n }\r\n }\r\n }\r\n\r\n // // return to uses last position before a refresh was done\r\n // useEffect(() => {\r\n // scrollToPosition();\r\n // }, [linehaulFixedData, scrollToPosition]);\r\n\r\n return (\r\n \r\n setTableOpen({ ...tableOpen, [day]: isExpanded })\r\n }\r\n >\r\n }>\r\n \r\n \r\n {days[day]}\r\n \r\n {`Records: ${Object.keys(data).length}`}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {/* setDialogOpen(true)} color=\"primary\">\r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LinehaulFixedDisplayDay;\r\n\r\n/*\r\n\r\n \r\n\r\n*/\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n TextField,\r\n Typography,\r\n // Box,\r\n Button,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\n// import ButtonApprove from \"../ButtonApprove\";\r\n// import { makeStyles } from \"@material-ui/core/styles\";\r\n// import clsx from \"clsx\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { getWeekDates } from \"../../GlobalFunctions\";\r\nconst axios = require(\"axios\");\r\n\r\n// const useStyles = makeStyles((theme) => ({\r\n// flexColContainer: {\r\n// display: \"flex\",\r\n// flexDirection: \"column\",\r\n// },\r\n// flexColItem: {\r\n// marginBottom: theme.spacing(1),\r\n// },\r\n// flexRowContainer: {\r\n// display: \"flex\",\r\n// },\r\n// flexRowItem: {\r\n// flexGrow: 1,\r\n// width: \"100%\",\r\n// // whiteSpace: \"nowrap\",\r\n// overflow: \"hidden\",\r\n// textOverflow: \"ellipsis\",\r\n// },\r\n// }));\r\n\r\nconst ApproveLinehaul = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createFloatingModel } = useContext(LinehaulFloatingDataContext);\r\n\r\n const floatingModel = createFloatingModel({ week });\r\n const [assignedBranchId, setAssignedBranchId] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n\r\n // const classes = useStyles();\r\n\r\n const handleChange = async (event) => {\r\n setAssignedBranchId(event.target.value);\r\n };\r\n\r\n const editFloating = async (newVal) => {\r\n // const newData = { ...itemData, assignedBranchId: Number(newVal) };\r\n\r\n // const requestChange = {\r\n // method: \"POST\",\r\n // url: `floating/change/`,\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // Authorization: `bearer ${userData.token}`,\r\n // },\r\n // data: newData,\r\n // };\r\n const requestApprove = {\r\n method: \"POST\",\r\n url: `floating/approve/${itemId}/${newVal}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n // await axios(requestChange);\r\n await axios(requestApprove);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n // await dispatch({\r\n // type: \"UPDATE_ITEM\",\r\n // truckId,\r\n // week,\r\n // day,\r\n // itemData: newData,\r\n // roleId: userData.roleId,\r\n // itemId,\r\n // });\r\n // await dispatch({\r\n // type: \"APPROVE_ITEM\",\r\n // truckId,\r\n // week,\r\n // day,\r\n // itemId,\r\n // itemData,\r\n // });\r\n\r\n setLoading(false);\r\n props.onClose();\r\n } catch {}\r\n };\r\n\r\n return (\r\n \r\n Approval Screen\r\n \r\n \r\n \r\n {[\r\n \"km\",\r\n \"tripRate\",\r\n \"originBranchId\",\r\n \"destinationBranchId\",\r\n \"tripCost\",\r\n \"adminComments\",\r\n \"driverComments\",\r\n ].map((col) => (\r\n \r\n \r\n \r\n {floatingModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n \r\n \r\n \r\n {floatingModel.assignedBranchId.displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* \r\n \r\n \r\n Fuel Adjustment Factor:\r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n editFloating(assignedBranchId)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Approve\r\n \r\n {/* */}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveLinehaul;\r\n\r\nApproveLinehaul.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport ButtonEdit from \"../ButtonEdit\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\n\r\nconst EditLinehaulFloating = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const { floatingColumns, defaultFloating, createFloatingModel } = useContext(\r\n LinehaulFloatingDataContext\r\n );\r\n\r\n const floatingModel = createFloatingModel({ week });\r\n\r\n const [formData, setFormData] = useState({\r\n values: floatingColumns.reduce(\r\n (acc, cur) => ({ ...acc, [cur]: itemData[cur] }),\r\n {}\r\n ),\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"km\") {\r\n newFormData.values.tripCost =\r\n Number(newFormData.values.km) * Number(newFormData.values.tripRate);\r\n }\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: floatingModel[cur].validate(formData.values[cur]),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Edit Floating Linehaul\r\n \r\n \r\n \r\n \r\n {floatingColumns.map((col) => (\r\n \r\n \r\n {floatingModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n {\r\n acc[col] = floatingModel[col].mapToRequestValue(\r\n formData.values[col]\r\n );\r\n return acc;\r\n }, {}),\r\n driverId: truckId,\r\n eventDateTime: getDateFromWeekAndDay(week, day).dateIsoString,\r\n }}\r\n files={[]}\r\n callback={props.onClose}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditLinehaulFloating;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport ButtonDelete from \"../ButtonDelete\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\n\r\nconst Delete = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const { linehaulFloatingModel, defaultFloating, routesObj, comments } = useContext(LinehaulFloatingDataContext);\r\n\r\n const displayColumns = [];\r\n\r\n const [formData, setFormData] = useState({\r\n values: displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: itemData[cur] }), {}),\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"routeId\" || event.target.name === \"adjustment\") {\r\n newFormData.values.tripCost = Number(routesObj[itemData.routeId].routeRate);\r\n newFormData.values.totalCost = newFormData.values.tripCost + Number(newFormData.values.adjustment);\r\n }\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({ ...acc, [cur]: linehaulFloatingModel[cur].validate(formData.values[cur]) }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Delete Floating Linehaul\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {linehaulFloatingModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Delete;\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Box,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\n\r\nconst View = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createFloatingModel } = useContext(LinehaulFloatingDataContext);\r\n const floatingModel = createFloatingModel({ week });\r\n\r\n const displayColumns = [\r\n \"km\",\r\n \"tripRate\",\r\n \"originBranchId\",\r\n \"destinationBranchId\",\r\n \"tripCost\",\r\n \"assignedBranchId\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n return (\r\n \r\n View Item\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {floatingModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default View;\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Menu, MenuItem, ListItemIcon, ListItemText, IconButton } from \"@material-ui/core\";\r\nimport { MoreHoriz, Check, DeleteForever, Restore, Edit, Visibility } from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, statuses, invoiceStatuses } from \"../../Mappings\";\r\nimport ApproveLinehaulFloating from \"./ApproveLinehaulFloating\";\r\nimport EditLinehaulFloating from \"./EditLinehaulFloating\";\r\nimport DeleteLinehaulFloating from \"./DeleteLinehaulFloating\";\r\nimport ViewLinehaulFloating from \"./ViewLinehaulFloating\";\r\n\r\nconst ActionMenu = (props) => {\r\n const { dataType, truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [action, setAction] = useState(\"\");\r\n const { userData } = useContext(UserDataContext);\r\n const disableAll = userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.submitted;\r\n\r\n const handleOpen = (event) => {\r\n setMenuOpen(true);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setMenuOpen(false);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (action) => {\r\n handleClose();\r\n setAction(action);\r\n };\r\n\r\n const lockedStatus = !(\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.dpcPending\r\n );\r\n\r\n const actions = {\r\n approve:\r\n userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n delete:\r\n (userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.deletedApproved) ||\r\n (userData.roleId === roles.ownerDriver &&\r\n !lockedStatus &&\r\n itemData.approvalState !== statuses.deleted &&\r\n itemData.approvalState !== statuses.amended &&\r\n itemData.approvalState !== statuses.addedApproved &&\r\n itemData.approvalState !== statuses.changedApproved &&\r\n itemData.approvalState !== statuses.deletedApproved),\r\n\r\n restore:\r\n (userData.roleId === roles.ownerDriver || userData.roleId === roles.tollAdmin) &&\r\n !lockedStatus &&\r\n !itemData.userAdded &&\r\n (itemData.approvalState === statuses.changed || itemData.approvalState === statuses.deleted),\r\n\r\n edit:\r\n (userData.roleId === roles.ownerDriver || userData.roleId === roles.tollAdmin) &&\r\n ((!lockedStatus && itemData.approvalState === statuses.draft) ||\r\n itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed),\r\n\r\n view: true,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {actions.view && (\r\n handleClick(\"view\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.approve && !disableAll && (\r\n handleClick(\"approve\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.delete && !disableAll && (\r\n handleClick(\"delete\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.edit && !disableAll && (\r\n handleClick(\"edit\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {action === \"approve\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"delete\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {/* {action === \"restore\" && (\r\n setAction(\"\")}\r\n dataType={dataType}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )} */}\r\n\r\n {action === \"edit\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"view\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ActionMenu;\r\n\r\nActionMenu.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n //itemData\r\n};\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n} from \"@material-ui/core\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\nimport LinehaulFloatingActionMenu from \"./LinehaulFloatingActionMenu\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { getWeekDates, getFloatingRate } from \"../../GlobalFunctions\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cell: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n },\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nconst LinehaulDataTable = (props) => {\r\n const { data, truckId, week, day } = props;\r\n const { createFloatingModel } = useContext(LinehaulFloatingDataContext);\r\n const floatingModel = createFloatingModel({ week });\r\n const { userData } = useContext(UserDataContext);\r\n const displayColumns = [\r\n \"km\",\r\n \"tripRate\",\r\n \"originBranchId\",\r\n \"destinationBranchId\",\r\n \"tripCost\",\r\n \"approvalState\",\r\n ];\r\n\r\n const classes = useStyles();\r\n\r\n const [truckObj] = userData.trucks.filter(\r\n (truckObj) => truckObj.truckId === Number(truckId)\r\n );\r\n\r\n const { tableOpen, setTableOpen, scrollToPosition } =\r\n useContext(AppStateContext);\r\n\r\n // return to uses last position before a refresh was done\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [data, scrollToPosition]);\r\n\r\n truckObj.floatingRate = getFloatingRate(week, truckObj.truckPayments);\r\n return (\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n {floatingModel[col].displayName}\r\n \r\n ))}\r\n \r\n Action\r\n \r\n \r\n \r\n\r\n \r\n {Object.keys(data).map((itemId) => {\r\n let row = data[itemId];\r\n row = {\r\n ...row,\r\n tripRate: truckObj.floatingRate,\r\n tripCost: truckObj.floatingRate * row.km,\r\n };\r\n\r\n return (\r\n \r\n {displayColumns.map((col) => {\r\n const value = row[col];\r\n return (\r\n \r\n {floatingModel[col].displayValue(value)}\r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LinehaulDataTable;\r\n\r\nLinehaulDataTable.propTypes = {\r\n data: PropTypes.object.isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport {\r\n getDateFromWeekAndDay,\r\n getFloatingRate,\r\n getWeekDates,\r\n} from \"../../GlobalFunctions\";\r\nimport ButtonCreate from \"../ButtonCreate\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\n\r\nconst CreateLinehaulFloating = (props) => {\r\n const { truckId, week, day, ...otherProps } = props;\r\n const { floatingColumns, defaultFloating, createFloatingModel } = useContext(\r\n LinehaulFloatingDataContext\r\n );\r\n\r\n const floatingModel = createFloatingModel({ week });\r\n\r\n const [files, setFiles] = useState([]);\r\n const displayColumns = floatingColumns;\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const [truckObj] = userData.trucks.filter(\r\n (truckObj) => truckObj.truckId === Number(truckId)\r\n );\r\n\r\n truckObj.floatingRate = getFloatingRate(week, truckObj.truckPayments);\r\n\r\n const [formData, setFormData] = useState({\r\n values: {\r\n ...displayColumns.reduce((acc, cur) => ({ ...acc, [cur]: \"\" }), {}),\r\n tripRate: truckObj.floatingRate,\r\n },\r\n valid: {},\r\n });\r\n\r\n const handleChange = (event) => {\r\n const newFormData = {\r\n ...formData,\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n };\r\n if (event.target.name === \"km\") {\r\n newFormData.values.tripCost =\r\n Number(newFormData.values.km) * Number(newFormData.values.tripRate);\r\n }\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n setFormData({\r\n ...formData,\r\n valid: {\r\n ...Object.keys(formData.values).reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [cur]: floatingModel[cur].validate(formData.values[cur]),\r\n }),\r\n {}\r\n ),\r\n },\r\n });\r\n }, [formData.values]);\r\n\r\n return (\r\n \r\n Add New Floating Linehaul\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {floatingModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n {\r\n acc[col] = floatingModel[col].mapToRequestValue(\r\n formData.values[col]\r\n );\r\n return acc;\r\n }, {}),\r\n driverId: truckId,\r\n eventDateTime: getDateFromWeekAndDay(week, day).dateIsoString,\r\n }}\r\n files={files}\r\n callback={props.onClose}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateLinehaulFloating;\r\n","import React, { useState, useContext } from \"react\";\r\nimport { Fab, Tooltip } from \"@material-ui/core\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport CreateLinehaulFloating from \"./CreateLinehaulFloating\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, invoiceStatuses } from \"../../Mappings\";\r\n\r\nconst CreateLinehaulFab = (props) => {\r\n const [open, setOpen] = useState(false);\r\n const { userData } = useContext(UserDataContext);\r\n const disabled =\r\n !(\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] === invoiceStatuses.dpcPending\r\n ) || userData.roleId === roles.tollManager;\r\n const onClose = () => setOpen(false);\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setOpen(true);\r\n }}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n {open && }\r\n \r\n );\r\n};\r\n\r\nexport default CreateLinehaulFab;\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport {\r\n Typography,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Grid,\r\n} from \"@material-ui/core\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport LinehaulFloatingDataTable from \"./LinehaulFloatingDataTable\";\r\nimport { LinehaulFloatingDataContext } from \"../../Contexts/LinehaulFloatingDataContext\";\r\nimport CreateLinehaulFloatingFab from \"./CreateLinehaulFloatingFab\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n add: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nconst days = [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n];\r\n\r\nconst LinehaulFloatingDisplayDay = (props) => {\r\n const { linehaulFloatingData } = useContext(LinehaulFloatingDataContext);\r\n const classes = useStyles();\r\n const { truckId, week, day } = props;\r\n const { tableOpen, setTableOpen, scrollToPosition } =\r\n useContext(AppStateContext);\r\n\r\n let data = {};\r\n if (truckId in linehaulFloatingData) {\r\n if (week in linehaulFloatingData[truckId]) {\r\n if (day in linehaulFloatingData[truckId][week]) {\r\n data = linehaulFloatingData[truckId][week][day];\r\n }\r\n }\r\n }\r\n\r\n // // return to uses last position before a refresh was done\r\n // useEffect(() => {\r\n // scrollToPosition();\r\n // }, [linehaulFloatingData, scrollToPosition]);\r\n\r\n return (\r\n \r\n setTableOpen({ ...tableOpen, [day]: isExpanded })\r\n }\r\n >\r\n }>\r\n \r\n \r\n {days[day]}\r\n \r\n {`Records: ${Object.keys(data).length}`}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {/* setDialogOpen(true)} color=\"primary\">\r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LinehaulFloatingDisplayDay;\r\n\r\n/*\r\n\r\n \r\n\r\n*/\r\n","import React, { useState, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n TextField,\r\n Divider,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Box,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n bold: {\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nfunction SelectConNote(props) {\r\n const { conNoteList, selectedList, setSelectedList } = props;\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filteredList, setFilteredList] = useState([]);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const reg = new RegExp(filterExpression.toLowerCase());\r\n const conNoteListExclSelected = conNoteList.filter(\r\n (e) => !selectedList.includes(e)\r\n );\r\n setFilteredList(\r\n conNoteListExclSelected.filter((conNote) =>\r\n reg.test(conNote.conNoteNum.toLowerCase())\r\n )\r\n );\r\n }, [filterExpression, conNoteList, selectedList]);\r\n\r\n const handleAdd = (conNote) => {\r\n // delete\r\n setFilteredList(filteredList.filter((e) => e !== conNote));\r\n // add\r\n if (!selectedList.includes(conNote)) {\r\n setSelectedList([conNote, ...selectedList]);\r\n }\r\n };\r\n\r\n const handleRemove = (conNote) => {\r\n // delete\r\n setSelectedList(selectedList.filter((e) => e !== conNote));\r\n // add\r\n if (!filteredList.includes(conNote)) {\r\n setFilteredList([conNote, ...filteredList]);\r\n }\r\n };\r\n\r\n //order conNotes by time\r\n const sortTime = (a, b) =>\r\n new Date(a.eventDateTime) - new Date(b.eventDateTime);\r\n const sortedFilteredList = filteredList.sort(sortTime);\r\n const sortedSelectedList = selectedList.sort(sortTime);\r\n\r\n return (\r\n \r\n \r\n \r\n setFilterExpression(event.target.value)}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n Available\r\n \r\n\r\n \r\n Connote num\r\n Type\r\n Time\r\n \r\n \r\n \r\n {filteredList.length === 0 && (\r\n \r\n No Results...\r\n \r\n )}\r\n\r\n {sortedFilteredList.map((conNote) => (\r\n handleAdd(conNote)}\r\n >\r\n {conNote.conNoteNum}\r\n {conNote.eventType}\r\n \r\n {conNote.eventDateTime.match(/T(\\d{2}:\\d{2}):/)[1]}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n\r\n \r\n 0 ? \"primary.main\" : \"error.main\"\r\n }\r\n >\r\n \r\n Selected\r\n \r\n\r\n \r\n Connote num\r\n Type\r\n Time\r\n \r\n \r\n \r\n {selectedList.length === 0 && (\r\n \r\n Select at least one Con-Note\r\n \r\n )}\r\n {sortedSelectedList.map((conNote) => (\r\n handleRemove(conNote)}\r\n >\r\n {conNote.conNoteNum}\r\n {conNote.eventType}\r\n \r\n {conNote.eventDateTime.match(/T(\\d{2}:\\d{2}):/)[1]}\r\n \r\n {/* handleRemove(conNote)}>\r\n \r\n */}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelectConNote;\r\n","import React, { useState, useContext } from \"react\";\r\nimport { Box, TextField, IconButton, Tooltip } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport DeleteForeverIcon from \"@material-ui/icons/DeleteForever\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gridContainer: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"4fr 4fr 1fr\",\r\n gridGap: theme.spacing(1),\r\n },\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n },\r\n flexRowItem: {\r\n flexGrow: 1,\r\n width: \"100%\",\r\n // whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n}));\r\n\r\nconst BranchItem = ({\r\n branchObj,\r\n className,\r\n deleteItem,\r\n branchModel,\r\n ...otherProps\r\n}) => {\r\n const { assignedBranchId, assignedAmount } = branchObj;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n deleteItem(branchObj)}>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default BranchItem;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport { Box, TextField, IconButton, Tooltip } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gridContainer: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"4fr 4fr 1fr\",\r\n gridGap: theme.spacing(1),\r\n },\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n },\r\n flexRowItem: {\r\n flexGrow: 1,\r\n width: \"100%\",\r\n // whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n}));\r\n\r\nfunction CreateBranchItem({\r\n className,\r\n createItem,\r\n branchModel,\r\n ...otherProps\r\n}) {\r\n const classes = useStyles();\r\n const defaultForm = {\r\n values: { assignedBranchId: \"\", assignedAmount: \"\" },\r\n valid: { assignedBranchId: false, assignedAmount: false },\r\n };\r\n const [formData, setFormData] = useState(defaultForm);\r\n\r\n const handleChange = (event) => {\r\n setFormData({\r\n values: {\r\n ...formData.values,\r\n [event.target.name]: event.target.value,\r\n },\r\n valid: {\r\n ...formData.valid,\r\n [event.target.name]: branchModel[event.target.name].validate(\r\n event.target.value\r\n ),\r\n },\r\n });\r\n };\r\n\r\n const handleClick = () => {\r\n setFormData(defaultForm);\r\n createItem({\r\n assignedBranchId: Number(formData.values.assignedBranchId),\r\n assignedAmount: Number(formData.values.assignedAmount),\r\n id: 0,\r\n changedRateId: \"\",\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default CreateBranchItem;\r\n","import { Box, makeStyles } from \"@material-ui/core\";\r\nimport React, { useContext } from \"react\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport BranchItem from \"./BranchItem\";\r\nimport CreateBranchItem from \"./CreateBranchItem\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n },\r\n flexRowItem: {\r\n flexGrow: 1,\r\n width: \"100%\",\r\n // whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n}));\r\n\r\nconst AssignBranchInputComponent = ({ value, setValue, week }) => {\r\n const { createBranchModel } = useContext(HourlyDataContext);\r\n const branchModel = createBranchModel({ week });\r\n const classes = useStyles();\r\n\r\n const handleCreate = (branchObj) => setValue([branchObj, ...value]);\r\n const handleDelete = (branchObj) =>\r\n setValue(value.filter((e) => e !== branchObj));\r\n\r\n return (\r\n \r\n \r\n {value.map((branchObj) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default AssignBranchInputComponent;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport {\r\n Dialog,\r\n Divider,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n TextField,\r\n Fab,\r\n DialogActions,\r\n Tooltip,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport ButtonCreate from \"../ButtonCreate\";\r\nimport SelectConNote from \"./SelectConNote\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, invoiceStatuses } from \"../../Mappings\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport AssignBranchInputComponent from \"./AssignBranchInputComponent\";\r\nconst axios = require(\"axios\");\r\n\r\nconst CreateHourly = (props) => {\r\n const { truckId, week, day, ...others } = props;\r\n const [open, setOpen] = useState(false);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filteredList, setFilteredList] = useState([]);\r\n const [files, setFiles] = useState([]);\r\n const {\r\n createHourlyModel,\r\n blankHourly,\r\n comments,\r\n requiredColumns,\r\n } = useContext(HourlyDataContext);\r\n const hourlyModel = createHourlyModel({ week, day });\r\n const displayColumns = [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n comments,\r\n ];\r\n const calculatedColumns = [\"totalHours\", \"totalCharge\"];\r\n const [formData, setFormData] = useState(blankHourly);\r\n const { userData } = useContext(UserDataContext);\r\n const disabled =\r\n !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n ) || userData.roleId === roles.tollManager;\r\n const [conNoteList, setConNoteList] = useState([]);\r\n\r\n useEffect(() => {\r\n // fetch con note list\r\n const fetchConNoteList = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `rates/getConsignments/${truckId}/${\r\n getDateFromWeekAndDay(week, day).dateIsoString\r\n }`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n setConNoteList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n fetchConNoteList();\r\n }, []);\r\n\r\n const handleChange = (name, value) => {\r\n const newFormData = {\r\n ...formData,\r\n [name]: value,\r\n };\r\n setFormData(newFormData);\r\n };\r\n\r\n useEffect(() => {\r\n const reg = new RegExp(filterExpression.toLowerCase());\r\n setFilteredList(\r\n conNoteList.filter((conNote) =>\r\n reg.test(conNote.conNoteNum.toLowerCase())\r\n )\r\n );\r\n }, [conNoteList, filterExpression]);\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n setFormData(blankHourly);\r\n setFiles([]);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {\r\n setOpen(true);\r\n }}\r\n color=\"primary\"\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n Create Hourly\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}\r\n \r\n \r\n \r\n handleChange(event.target.name, event.target.value)\r\n }\r\n error={!hourlyModel[col].validate(formData)}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...hourlyModel[col].textFieldProps}\r\n />\r\n \r\n \r\n ))}\r\n {calculatedColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n handleChange(\"changedRateCons\", newList)\r\n }\r\n />\r\n {userData.roleId === roles.tollAdmin && (\r\n \r\n \r\n handleChange(\"changedRateAssignedBranches\", value)\r\n }\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Browse\r\n \r\n hourlyModel[col].validate(formData))\r\n .includes(false) || files.length === 0\r\n }\r\n variant=\"contained\"\r\n color=\"primary\"\r\n controller=\"rates\"\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemData={{\r\n driverComments: \"\",\r\n adminComments: \"\",\r\n managerComments: \"\",\r\n ...[\r\n ...displayColumns,\r\n \"changedRateCons\",\r\n \"startTime\",\r\n \"endTime\",\r\n ...requiredColumns,\r\n \"totalCharge\",\r\n ].reduce((acc, col) => {\r\n acc[col] = hourlyModel[col].mapToRequestValue(formData);\r\n return acc;\r\n }, {}),\r\n }}\r\n files={files}\r\n callback={handleClose}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateHourly;\r\n","import React, { useContext, useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n Divider,\r\n DialogContent,\r\n Grid,\r\n DialogActions,\r\n TextField,\r\n Typography,\r\n Button,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport { getWeekDates } from \"../../GlobalFunctions\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport AssignBranchInputComponent from \"./AssignBranchInputComponent\";\r\nconst axios = require(\"axios\");\r\n\r\nconst Approve = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createHourlyModel } = useContext(HourlyDataContext);\r\n const hourlyModel = createHourlyModel({ week, day });\r\n const [branchObjArray, setBranchObjArray] = useState([]);\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const fetchedColumns = [\"startTimeString\", \"endTimeString\", \"hourlyRate\"];\r\n const calculatedColumns = [\"totalHours\", \"totalCharge\"];\r\n const commentColumns = [\"driverComments\", \"adminComments\"];\r\n const [loading, setLoading] = useState(false);\r\n\r\n const editHourly = async () => {\r\n const newData = {\r\n ...itemData,\r\n changedRateAssignedBranches: branchObjArray,\r\n };\r\n\r\n const requestChange = {\r\n method: \"POST\",\r\n url: `rates/change/`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: newData,\r\n };\r\n const { startDate, endDate } = getWeekDates(week);\r\n const requestStatus = {\r\n method: \"GET\",\r\n url: `/invoices/getState/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}/${week}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n setLoading(true);\r\n await axios(requestChange);\r\n\r\n const res = await axios(requestStatus);\r\n let invoiceStatuses = userData.invoiceStatuses;\r\n invoiceStatuses[truckId][week] = res.data.invoiceState;\r\n setUserData({ ...userData, invoiceStatuses });\r\n } catch {}\r\n };\r\n\r\n return (\r\n \r\n Approve Hourly\r\n \r\n \r\n \r\n {fetchedColumns.map((col) => (\r\n \r\n \r\n \r\n {hourlyModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {calculatedColumns.map((col) => (\r\n \r\n \r\n \r\n {hourlyModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n\r\n {commentColumns.map((col) => (\r\n \r\n \r\n \r\n {hourlyModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n editHourly()}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Approve\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Approve;\r\n\r\nApprove.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n itemData: PropTypes.object.isRequired,\r\n};\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n} from \"@material-ui/core\";\r\nimport ButtonEdit from \"../ButtonEdit\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport ButtonUpload from \"../ButtonUpload\";\r\nimport UploadFileSection from \"../UploadFileSection\";\r\nimport SelectConNote from \"./SelectConNote\";\r\nimport { getDateFromWeekAndDay } from \"../../GlobalFunctions\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles } from \"../../Mappings\";\r\nimport AssignBranchInputComponent from \"./AssignBranchInputComponent\";\r\nconst axios = require(\"axios\");\r\n\r\nconst EditHourly = (props) => {\r\n const { truckId, week, day, itemId, itemData, ...otherProps } = props;\r\n const {\r\n createHourlyModel,\r\n comments,\r\n blankHourly,\r\n requiredColumns,\r\n } = useContext(HourlyDataContext);\r\n const hourlyModel = createHourlyModel({ week, day });\r\n const [files, setFiles] = useState([]);\r\n const displayColumns = [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n comments,\r\n ];\r\n const calculatedColumns = [\"totalHours\", \"totalCharge\"];\r\n\r\n console.log(itemData);\r\n const [formData, setFormData] = useState(() =>\r\n Object.keys(itemData).reduce(\r\n (acc, cur) => ({ ...acc, [cur]: itemData[cur] ?? blankHourly[cur] }),\r\n {}\r\n )\r\n );\r\n const { userData } = useContext(UserDataContext);\r\n const [conNoteList, setConNoteList] = useState([]);\r\n\r\n // fetch con note list\r\n useEffect(() => {\r\n const fetchConNoteList = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `rates/getConsignments/${truckId}/${\r\n getDateFromWeekAndDay(week, day).dateIsoString\r\n }`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n console.log(res.data);\r\n setConNoteList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n fetchConNoteList();\r\n }, [day, truckId, userData.token, week]);\r\n\r\n const handleChange = (name, value) => {\r\n setFormData({\r\n ...formData,\r\n [name]: value,\r\n });\r\n };\r\n\r\n return (\r\n \r\n Edit Hourly\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}\r\n \r\n \r\n \r\n handleChange(event.target.name, event.target.value)\r\n }\r\n error={!hourlyModel[col].validate(formData)}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n {...hourlyModel[col].textFieldProps}\r\n />\r\n \r\n \r\n ))}\r\n {calculatedColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n handleChange(\"changedRateCons\", newList)}\r\n />\r\n {userData.roleId === roles.tollAdmin && (\r\n \r\n \r\n handleChange(\"changedRateAssignedBranches\", value)\r\n }\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n Browse\r\n \r\n hourlyModel[col].validate(formData))\r\n .includes(false)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n controller=\"rates\"\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={{\r\n ...itemData,\r\n ...[\r\n ...displayColumns,\r\n \"changedRateCons\",\r\n \"startTime\",\r\n \"endTime\",\r\n ...requiredColumns,\r\n \"totalCharge\",\r\n ].reduce((acc, col) => {\r\n acc[col] = hourlyModel[col].mapToRequestValue(formData);\r\n return acc;\r\n }, {}),\r\n }}\r\n files={files}\r\n callback={props.onClose}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditHourly;\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Grid,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Divider,\r\n Dialog,\r\n DialogTitle,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport ButtonDelete from \"../ButtonDelete\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\n\r\nconst Delete = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createHourlyModel } = useContext(HourlyDataContext);\r\n\r\n const hourlyModel = createHourlyModel({ week, day });\r\n\r\n const displayColumns = [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n \"totalHours\",\r\n \"totalCharge\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n return (\r\n \r\n Delete Hourly\r\n \r\n\r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Delete;\r\n","import React, { useContext } from \"react\";\r\nimport {\r\n Box,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n DialogActions,\r\n Divider,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport ButtonDownload from \"../ButtonDownload\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\n\r\nconst View = (props) => {\r\n const { truckId, itemData, week, day, itemId, ...otherProps } = props;\r\n const { createHourlyModel } = useContext(HourlyDataContext);\r\n\r\n const hourlyModel = createHourlyModel({ week, day });\r\n\r\n const displayColumns = [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n \"totalHours\",\r\n \"totalCharge\",\r\n \"driverComments\",\r\n \"adminComments\",\r\n ];\r\n\r\n const calcItemData = {\r\n ...itemData,\r\n totalCharge: hourlyModel.totalCharge.calculateValue(itemData),\r\n totalHours: hourlyModel.totalHours.calculateValue(itemData),\r\n };\r\n\r\n return (\r\n \r\n View Item\r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n \r\n {hourlyModel[col].displayName}:\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default View;\r\n","import React, { useState, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Menu,\r\n MenuItem,\r\n ListItemIcon,\r\n ListItemText,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport {\r\n MoreHoriz,\r\n Check,\r\n DeleteForever,\r\n Restore,\r\n Edit,\r\n Visibility,\r\n} from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { roles, statuses, invoiceStatuses } from \"../../Mappings\";\r\nimport ApproveHourly from \"./ApproveHourly\";\r\nimport EditHourly from \"./EditHourly\";\r\nimport DeleteHourly from \"./DeleteHourly\";\r\nimport ViewHourly from \"./ViewHourly\";\r\n\r\nconst ActionMenu = (props) => {\r\n const {\r\n dataType,\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n itemData,\r\n conNoteList,\r\n ...otherProps\r\n } = props;\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [action, setAction] = useState(\"\");\r\n const { userData } = useContext(UserDataContext);\r\n const disableAll =\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.submitted;\r\n\r\n const uniqueConNoteList = conNoteList.filter(\r\n (value, index, self) => self.indexOf(value) === index\r\n );\r\n\r\n const handleOpen = (event) => {\r\n setMenuOpen(true);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setMenuOpen(false);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (action) => {\r\n handleClose();\r\n setAction(action);\r\n };\r\n\r\n const lockedStatus = !(\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.unsubmitted ||\r\n userData.invoiceStatuses[props.truckId][props.week] ===\r\n invoiceStatuses.dpcPending\r\n );\r\n\r\n const approvedStatus =\r\n itemData.approvalState === statuses.amended ||\r\n itemData.approvalState === statuses.addedApproved ||\r\n itemData.approvalState === statuses.changedApproved ||\r\n itemData.approvalState === statuses.deletedApproved;\r\n\r\n const actions = {\r\n approve:\r\n userData.roleId === roles.tollAdmin &&\r\n !lockedStatus &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n itemData.approvalState === statuses.deleted),\r\n\r\n delete:\r\n !lockedStatus &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n approvedStatus))),\r\n\r\n // restore:\r\n // (userData.roleId === roles.ownerDriver ||\r\n // userData.roleId === roles.tollAdmin) &&\r\n // !lockedStatus &&\r\n // !itemData.userAdded &&\r\n // (itemData.approvalState === statuses.changed ||\r\n // itemData.approvalState === statuses.deleted),\r\n\r\n edit:\r\n !lockedStatus &&\r\n ((userData.roleId === roles.ownerDriver &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed)) ||\r\n (userData.roleId === roles.tollAdmin &&\r\n (itemData.approvalState === statuses.added ||\r\n itemData.approvalState === statuses.changed ||\r\n approvedStatus))),\r\n\r\n view: true,\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n\r\n \r\n {actions.view && (\r\n handleClick(\"view\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.approve && !disableAll && (\r\n handleClick(\"approve\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.delete && !disableAll && (\r\n handleClick(\"delete\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {actions.edit && !disableAll && (\r\n handleClick(\"edit\")}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {action === \"approve\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"delete\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n\r\n {action === \"edit\" && (\r\n setAction(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n // conNoteList={uniqueConNoteList}\r\n />\r\n )}\r\n\r\n {action === \"view\" && (\r\n handleClick(\"\")}\r\n truckId={truckId}\r\n week={week}\r\n day={day}\r\n itemId={itemId}\r\n itemData={itemData}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ActionMenu;\r\n\r\nActionMenu.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n //itemData\r\n};\r\n","import React, { useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Grid, TextField, Box, Typography } from \"@material-ui/core\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport HourlyActionMenu from \"./HourlyActionMenu\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: \"center\",\r\n },\r\n flexGrow: {\r\n flexGrow: 1,\r\n },\r\n paddingLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n gridContainer: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"4fr 4fr 1fr\",\r\n gridGap: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst HourlyItem = ({\r\n itemData,\r\n truckId,\r\n week,\r\n day,\r\n itemId,\r\n conNoteList,\r\n ...otherProps\r\n}) => {\r\n const { createHourlyModel, comments } = useContext(HourlyDataContext);\r\n const hourlyModel = createHourlyModel({ week, day });\r\n const fetchedColumns = [\r\n \"startTimeString\",\r\n \"endTimeString\",\r\n \"hourlyRate\",\r\n \"changedRateCons\",\r\n ];\r\n const calculatedColumns = [\"totalHours\", \"totalCharge\"];\r\n const classes = useStyles();\r\n\r\n const fetchedObj = fetchedColumns.reduce((acc, col) => {\r\n acc[col] = hourlyModel[col].getValueFromRequest(itemData[col]);\r\n return acc;\r\n // return { ...acc, [col]: hourlyModel[col].getValueFromRequest(data[col]) };\r\n }, {});\r\n\r\n const calculatedObj = calculatedColumns.reduce((acc, col) => {\r\n acc[col] = hourlyModel[col].calculateValue(fetchedObj);\r\n return acc;\r\n }, {});\r\n\r\n const displayObj = {\r\n ...itemData,\r\n ...fetchedObj,\r\n ...calculatedObj,\r\n };\r\n\r\n return (\r\n \r\n \r\n {[\"startTimeString\", \"endTimeString\", \"totalHours\"].map((col) => (\r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n {hourlyModel.approvalState.displayName}: \r\n \r\n {\" \"}\r\n {hourlyModel.approvalState.displayValue(displayObj)}\r\n \r\n \r\n\r\n {[\"hourlyRate\", \"totalCharge\"].map((col) => (\r\n \r\n \r\n \r\n ))}\r\n {[\"changedRateCons\"].map((col) => (\r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n {/* Actions: */}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HourlyItem;\r\n\r\nHourlyItem.propTypes = {\r\n itemData: PropTypes.shape({\r\n startTimeString: PropTypes.string.isRequired,\r\n endTimeString: PropTypes.string.isRequired,\r\n hourlyRate: PropTypes.number.isRequired,\r\n changedRateCons: PropTypes.array.isRequired,\r\n }).isRequired,\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n};\r\n\r\n/*\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n*/\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Grid,\r\n Divider,\r\n Card,\r\n CardHeader,\r\n CardContent,\r\n} from \"@material-ui/core\";\r\nimport { LclDataContext } from \"../../Contexts/LclDataContext\";\r\nimport { ParcelDataContext } from \"../../Contexts/ParcelDataContext\";\r\nimport { HourlyDataContext } from \"../../Contexts/HourlyDataContext\";\r\nimport CreateHourly from \"./CreateHourly\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport HourlyItem from \"./HourlyItem\";\r\nimport { roles, statuses, pageSize } from \"../../Mappings\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport { AppStateContext } from \"../../Contexts/AppStateContext\";\r\nimport ButtonLoadMore from \"../ButtonLoadMore\";\r\n\r\nconst days = [\r\n \"Monday\",\r\n \"Tuesday\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n \"Sunday\",\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gapRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst HourlyDisplayDay = (props) => {\r\n const { truckId, week, day, hourlySummary, setHourlySummaryPerEventDate } = props;\r\n const { lclData } = useContext(LclDataContext);\r\n const { parcelData } = useContext(ParcelDataContext);\r\n const { hourlyData } = useContext(HourlyDataContext);\r\n const { userData } = useContext(UserDataContext);\r\n const classes = useStyles();\r\n const { scrollToPosition } = useContext(AppStateContext);\r\n\r\n let hourlyToday = {};\r\n let lclToday = {};\r\n let parcelToday = {};\r\n\r\n let currentDayRemaining = 0;\r\n const isShowLoadMoreButton = hourlySummary?.isShowLoadMoreButton;\r\n \r\n if(hourlySummary) {\r\n const { currentListTotal, totalRecords } = hourlySummary;\r\n\r\n if(currentListTotal && totalRecords)\r\n currentDayRemaining = parseInt(totalRecords) - parseInt(currentListTotal)\r\n }\r\n\r\n const loadMore = () => {\r\n setHourlySummaryPerEventDate((state) => {\r\n \r\n const hourlySummaryPerEventDate = state.map(item => ({\r\n ...item,\r\n isSelectedToLoadMore: false\r\n }));\r\n\r\n const currentIndex = hourlySummaryPerEventDate.findIndex( f => f.weekDay == day);\r\n const { currentPage, currentListTotal, totalRecords} = hourlySummaryPerEventDate[currentIndex];\r\n hourlySummaryPerEventDate[currentIndex].currentPage = currentPage + 1;\r\n hourlySummaryPerEventDate[currentIndex].isShowLoadMoreButton = totalRecords > (currentListTotal + pageSize);\r\n hourlySummaryPerEventDate[currentIndex].currentListTotal = currentListTotal + pageSize;\r\n hourlySummaryPerEventDate[currentIndex].isSelectedToLoadMore = true;\r\n return hourlySummaryPerEventDate;\r\n })\r\n } \r\n\r\n try {\r\n if (hourlyData[truckId][week][day]) {\r\n hourlyToday = hourlyData[truckId][week][day];\r\n }\r\n } catch {}\r\n try {\r\n lclToday = lclData[truckId][week][day];\r\n } catch {}\r\n try {\r\n parcelToday = parcelData[truckId][week][day];\r\n } catch {}\r\n const conNoteList = [\r\n ...Object.keys(lclToday)\r\n .filter((id) => lclToday[id].approvalState !== statuses.deleted)\r\n .map((id) => lclToday[id].conNoteNum),\r\n ...Object.keys(parcelToday)\r\n .filter((id) => parcelToday[id].approvalState !== statuses.deleted)\r\n .map((id) => parcelToday[id].cNote),\r\n ];\r\n\r\n // return to uses last position before a refresh was done\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [hourlyData, scrollToPosition]);\r\n\r\n return (\r\n \r\n \r\n {!(userData.roleId === roles.tollManager) && (\r\n \r\n )}\r\n {days[day]}\r\n \r\n }\r\n />\r\n\r\n \r\n \r\n \r\n {Object.keys(hourlyToday).map((itemId) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n {isShowLoadMoreButton ? \r\n \r\n : null\r\n } \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HourlyDisplayDay;\r\n\r\nHourlyDisplayDay.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n day: PropTypes.number.isRequired,\r\n};\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport {\r\n Table,\r\n TableHead,\r\n TableBody,\r\n TableRow,\r\n TableCell,\r\n} from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n padding: theme.spacing(0.5),\r\n fontSize: \"13px\",\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nfunction InvoicePreviewTable(props) {\r\n const { truckId, week, setFetched, ...rest } = props;\r\n const { userData } = useContext(UserDataContext);\r\n const [rows, setRows] = useState([]);\r\n const classes = useStyles();\r\n const { startDate, endDate } = getWeekDates(week);\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const res = await axios({\r\n method: \"GET\",\r\n url: `invoices/previewinvoice/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}`,\r\n headers: {\r\n Authorization: `bearer ${userData.token}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n });\r\n console.log(res.data);\r\n setRows(res.data);\r\n setFetched(true);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n fetchData();\r\n }, []);\r\n\r\n const displayMoney = (value) => {\r\n const dollars = Math.floor(value);\r\n const decimal = value - dollars;\r\n // toFixed(10) because JavaScript numbers can store base10 numbers to 10 decimal places\r\n const cents = (decimal * 100).toFixed(10);\r\n const centsRounded = Math.round(cents);\r\n return `${dollars}.${centsRounded}`;\r\n };\r\n\r\n const totalExclGst = rows.reduce(\r\n (acc, cur) => acc + cur.netAmount + cur.faf,\r\n 0\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n Activity\r\n Charge\r\n F.A.F\r\n Subtotal\r\n \r\n \r\n \r\n {rows.map((dpcType) => (\r\n \r\n {dpcType.description}\r\n {displayMoney(dpcType.netAmount)}\r\n {displayMoney(dpcType.faf)}\r\n \r\n {displayMoney(dpcType.netAmount + dpcType.faf)}\r\n \r\n \r\n ))}\r\n\r\n \r\n Total excl GST\r\n \r\n \r\n {displayMoney(totalExclGst)}\r\n \r\n\r\n \r\n GST @ 15%\r\n \r\n \r\n {displayMoney(totalExclGst * 0.15)}\r\n \r\n\r\n \r\n Total\r\n \r\n \r\n {displayMoney(totalExclGst * 1.15)}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default InvoicePreviewTable;\r\n\r\nInvoicePreviewTable.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext, useState, useEffect } from \"react\";\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Divider,\r\n Typography,\r\n DialogContentText,\r\n Box,\r\n makeStyles,\r\n CircularProgress,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { getWeekDates } from \"../GlobalFunctions\";\r\nimport { invoiceStatuses } from \"../Mappings\";\r\nimport InvoicePreviewTable from \"./InvoicePreviewTable\";\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(1, 0, 0, 0),\r\n },\r\n feedback: {\r\n maxHeight: \"160px\",\r\n },\r\n loading: {\r\n display: \"flex\",\r\n position: \"absolute\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n backgroundColor: \"rgba(255, 255, 255, 0.6)\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }\r\n}));\r\n\r\nconst ConfirmSubmitDialog = (props) => {\r\n const { open, setOpen, truckId, week } = props;\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n const { startDate, endDate } = getWeekDates(week);\r\n const [previewFetched, setPreviewFetched] = useState(false);\r\n const [submitting, setSubmitting] = useState(false);\r\n const [feedback, setFeedback] = useState(\"\");\r\n const classes = useStyles();\r\n\r\n const sendSubmitRequest = async () => {\r\n console.log(\"submitting\");\r\n const req = {\r\n method: \"POST\",\r\n url: `invoices/submit/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setSubmitting(true);\r\n await axios(req);\r\n setOpen(false);\r\n setUserData({\r\n ...userData,\r\n invoiceStatuses: {\r\n ...userData.invoiceStatuses,\r\n [truckId]: {\r\n ...userData.invoiceStatuses[truckId],\r\n [week]: invoiceStatuses.submitted,\r\n },\r\n },\r\n });\r\n console.log(\"submitted\");\r\n } catch (err) {\r\n console.log(err);\r\n setFeedback(err.response.data.message);\r\n } finally {\r\n setSubmitting(false);\r\n }\r\n };\r\n\r\n useEffect(() => {}, []);\r\n\r\n return (\r\n {\r\n if (!submitting) {\r\n setOpen(false);\r\n }\r\n }}\r\n >\r\n \r\n Really submit this week's data?\r\n \r\n \r\n \r\n You are about to submit all DPC data for the week\r\n \r\n \r\n {`\r\n ${startDate.toLocaleDateString(\r\n \"en-GB\"\r\n )} → ${endDate.toLocaleDateString(\"en-GB\")}\r\n `}\r\n \r\n \r\n for manager's approval, are you sure you want to do this?\r\n \r\n \r\n \r\n \r\n \r\n {feedback !== \"\" ? (\r\n \r\n \r\n \r\n {feedback || \"An unspecified error has occurred.\"}\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {\r\n setOpen(false);\r\n setPreviewFetched(false);\r\n }}\r\n disabled={submitting || !previewFetched}\r\n >\r\n Cancel\r\n \r\n {\r\n sendSubmitRequest();\r\n }}\r\n disabled={submitting || !previewFetched}\r\n >\r\n Submit\r\n \r\n \r\n {!previewFetched &&\r\n \r\n \r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default ConfirmSubmitDialog;\r\n","import React, { useState, useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { invoiceStatuses, roles, pageSize } from \"../Mappings\";\r\nimport {\r\n Typography,\r\n Grid,\r\n IconButton,\r\n Button,\r\n Tabs,\r\n Tab,\r\n Card,\r\n CardContent,\r\n Paper,\r\n} from \"@material-ui/core\";\r\nimport { NavigateNext, NavigateBefore } from \"@material-ui/icons\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport { LclDataContext } from \"../Contexts/LclDataContext\";\r\nimport { ParcelDataContext } from \"../Contexts/ParcelDataContext\";\r\nimport { HourlyDataContext } from \"../Contexts/HourlyDataContext\";\r\nimport { LinehaulFixedDataContext } from \"../Contexts/LinehaulFixedDataContext\";\r\nimport { LinehaulFloatingDataContext } from \"../Contexts/LinehaulFloatingDataContext\";\r\nimport LclDisplayDay from \"./lcl/LclDisplayDay\";\r\nimport ParcelDisplayDay from \"./parcel/ParcelDisplayDay\";\r\nimport LinehaulFixedDisplayDay from \"./linehaulFixed/LinehaulFixedDisplayDay\";\r\nimport LinehaulFloatingDisplayDay from \"./linehaulFloating/LinehaulFloatingDisplayDay\";\r\nimport HourlyDisplayDay from \"./hourly/HourlyDisplayDay\";\r\nimport ConfirmSubmitDialog from \"./ConfirmSubmitDialog\";\r\nimport { getFloatingRate, getWeekDates, formatDate, getDayOfWeekFromDate, getSingleDayString } from \"../GlobalFunctions\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport { useRef } from \"react\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\nconst TruckViewPage = (props) => {\r\n const firstRender = useRef(true);\r\n const dataFetched = useRef([]);\r\n\r\n const { truckId, week } = props;\r\n const { userData } = useContext(UserDataContext);\r\n const { appState, setAppState } = useContext(AppStateContext);\r\n const { lclData, dispatch: dispatchLcl } = useContext(LclDataContext);\r\n\r\n const { parcelData, dispatch: dispatchParcel } = useContext(\r\n ParcelDataContext\r\n );\r\n const {\r\n linehaulFixedData,\r\n dispatch: dispatchLinehaulFixed,\r\n routesObj,\r\n } = useContext(LinehaulFixedDataContext);\r\n const { dispatch: dispatchLinehaulFloating } = useContext(\r\n LinehaulFloatingDataContext\r\n );\r\n const { hourlyData, dispatch: dispatchHourly } = useContext(\r\n HourlyDataContext\r\n );\r\n const [saveOpen, setSaveOpen] = useState(false);\r\n const { startDate, endDate } = getWeekDates(week);\r\n const history = useHistory();\r\n\r\n const [truckObj, setTruckObj] = useState(\r\n () =>\r\n userData.trucks.filter(\r\n (truckObj) => truckObj.truckId === Number(truckId)\r\n )[0]\r\n );\r\n\r\n const [floatingLinehaulRate, setFloatingLinehaulRate] = useState();\r\n const [lclSummaryPerEventDate, setlclSummaryPerEventDate] = useState([]);\r\n const [parcelSummaryPerEventDate, setParcelSummaryPerEventDate] = useState([]);\r\n const [hourlySummaryPerEventDate, setHourlySummaryPerEventDate] = useState([]);\r\n\r\n useEffect(() => {\r\n setFloatingLinehaulRate(getFloatingRate(week, truckObj.truckPayments));\r\n }, [truckObj, week]); \r\n\r\n const requestLclData = async () => {\r\n console.log(\"loading dpc: lcl\");\r\n\r\n let lclPage;\r\n let startDateParam = startDate.toISOString();\r\n let endDateParam = endDate.toISOString();\r\n let listingType = 'INSERT_NEW_ITEMS';\r\n\r\n if(!lclSummaryPerEventDate.length) {\r\n lclPage = 1\r\n } else {\r\n const { currentPage, eventDate } = lclSummaryPerEventDate.find(x => x.isSelectedToLoadMore == true) ?? {};\r\n lclPage = currentPage ?? 1;\r\n\r\n if(eventDate) {\r\n const { startDayTime, endDayTime } = getSingleDayString(eventDate);\r\n startDateParam = startDayTime ?? startDate.toISOString();\r\n endDateParam = endDayTime ?? endDate.toISOString();\r\n }\r\n }\r\n\r\n if(lclPage > 1) {\r\n listingType = 'UPDATE_LIST_ITEMS';\r\n }\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/lcls/getdpc/${truckId}/${startDateParam}/${endDateParam}/${lclPage}/${pageSize}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n }; \r\n\r\n try {\r\n const { data } = await axios(request); \r\n \r\n if(!lclSummaryPerEventDate.length) { \r\n const lclSummary = data.reduce((items, item) => {\r\n const { yyyy, MM, dd } = formatDate(new Date(item.eventDateTime))\r\n const eventDate = `${yyyy}-${MM}-${dd}`\r\n const existingIndex = items?.findIndex((i) => i.eventDate === eventDate);\r\n //console.log(existingIndex);\r\n if (existingIndex < 0) {\r\n const { numberOfRecordsEventDate, totalStopPayPerEventDate, totalDpcPerEventDate, totalHomeDeliveryPerEventDate } = item; \r\n\r\n items.push({\r\n eventDate,\r\n weekDay: getDayOfWeekFromDate(eventDate),\r\n totalRecords: numberOfRecordsEventDate,\r\n totalStopPay: totalStopPayPerEventDate,\r\n totalHomeDelivery: totalHomeDeliveryPerEventDate,\r\n totalDpc : totalDpcPerEventDate,\r\n currentPage: 1,\r\n currentListTotal: pageSize,\r\n isShowLoadMoreButton: (numberOfRecordsEventDate > pageSize) ? true : false, \r\n isSelectedToLoadMore: false \r\n });\r\n } \r\n return items;\r\n }, []);\r\n\r\n lclSummary.length && setlclSummaryPerEventDate(lclSummary); \r\n }\r\n \r\n \r\n dispatchLcl({\r\n type: listingType, \r\n truckId,\r\n week,\r\n startDate,\r\n items: data \r\n }); \r\n\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }; \r\n\r\n\r\n const requestParcelData = async () => {\r\n console.log(\"parcel\");\r\n\r\n let parcelPage;\r\n let startDateParam = startDate.toISOString();\r\n let endDateParam = endDate.toISOString();\r\n let listingType = 'INSERT_NEW_ITEMS';\r\n\r\n if(!parcelSummaryPerEventDate.length) {\r\n parcelPage = 1\r\n } else {\r\n const { currentPage, eventDate } = parcelSummaryPerEventDate.find(x => x.isSelectedToLoadMore == true) ?? {};\r\n parcelPage = currentPage ?? 1;\r\n\r\n if(eventDate) {\r\n const { startDayTime, endDayTime } = getSingleDayString(eventDate);\r\n startDateParam = startDayTime ?? startDate.toISOString();\r\n endDateParam = endDayTime ?? endDate.toISOString();\r\n }\r\n }\r\n\r\n if(parcelPage > 1) {\r\n listingType = 'UPDATE_LIST_ITEMS';\r\n }\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/parcels/getdpc/${truckId}/${startDateParam}/${endDateParam}/${parcelPage}/${pageSize}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const { data } = await axios(request);\r\n\r\n\r\n if(!parcelSummaryPerEventDate.length) { \r\n const parcelSummary = data.reduce((items, item) => {\r\n const { yyyy, MM, dd } = formatDate(new Date(item.eventDate))\r\n const eventDate = `${yyyy}-${MM}-${dd}`\r\n const existingIndex = items?.findIndex((i) => i.eventDate === eventDate);\r\n //console.log(existingIndex);\r\n if (existingIndex < 0) {\r\n const { numberOfRecordsEventDate, totalDpcPerEventDate } = item; \r\n\r\n items.push({\r\n eventDate,\r\n weekDay: getDayOfWeekFromDate(eventDate),\r\n totalRecords: numberOfRecordsEventDate, \r\n totalDpc : totalDpcPerEventDate,\r\n currentPage: 1,\r\n currentListTotal: pageSize,\r\n isShowLoadMoreButton: (numberOfRecordsEventDate > pageSize) ? true : false, \r\n isSelectedToLoadMore: false \r\n });\r\n } \r\n return items;\r\n }, []);\r\n\r\n parcelSummary.length && setParcelSummaryPerEventDate(parcelSummary);\r\n }\r\n\r\n dispatchParcel({\r\n type: listingType,\r\n truckId,\r\n week,\r\n startDate,\r\n items: data,\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n const requestHourlyData = async () => {\r\n console.log(\"hourly\");\r\n\r\n let hourlyPage;\r\n let startDateParam = startDate.toISOString();\r\n let endDateParam = endDate.toISOString();\r\n let listingType = 'INSERT_NEW_ITEMS';\r\n\r\n if(!hourlySummaryPerEventDate.length) {\r\n hourlyPage = 1\r\n } else {\r\n const { currentPage, eventDate } = hourlySummaryPerEventDate.find(x => x.isSelectedToLoadMore == true) ?? {};\r\n hourlyPage = currentPage ?? 1;\r\n\r\n if(eventDate) {\r\n const { startDayTime, endDayTime } = getSingleDayString(eventDate);\r\n startDateParam = startDayTime ?? startDate.toISOString();\r\n endDateParam = endDayTime ?? endDate.toISOString();\r\n }\r\n }\r\n\r\n if(hourlyPage > 1) {\r\n listingType = 'UPDATE_LIST_ITEMS';\r\n }\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/rates/getdpc/${truckId}/${startDateParam}/${endDateParam}/${hourlyPage}/${pageSize}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const { data } = await axios(request);\r\n\r\n if(!hourlySummaryPerEventDate.length) { \r\n const hourlySummary = data.reduce((items, item) => {\r\n const { yyyy, MM, dd } = formatDate(new Date(item.startTime))\r\n const eventDate = `${yyyy}-${MM}-${dd}`\r\n const existingIndex = items?.findIndex((i) => i.eventDate === eventDate);\r\n //console.log(existingIndex);\r\n if (existingIndex < 0) {\r\n const { numberOfRecordsEventDate } = item; \r\n\r\n items.push({\r\n eventDate,\r\n weekDay: getDayOfWeekFromDate(eventDate),\r\n totalRecords: numberOfRecordsEventDate, \r\n currentPage: 1,\r\n currentListTotal: pageSize,\r\n isShowLoadMoreButton: (numberOfRecordsEventDate > pageSize) ? true : false, \r\n isSelectedToLoadMore: false \r\n });\r\n } \r\n return items;\r\n }, []);\r\n\r\n hourlySummary.length && setHourlySummaryPerEventDate(hourlySummary);\r\n }\r\n\r\n const items = data;\r\n\r\n dispatchHourly({\r\n type: listingType,\r\n truckId,\r\n week,\r\n startDate,\r\n items,\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n const requestLinehaulFixedData = async () => {\r\n console.log(\"linehaulFixed\");\r\n const request = {\r\n method: \"GET\",\r\n url: `/linehauls/getdpc/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await axios(request);\r\n\r\n const items = res.data.map((item) => {\r\n const tripCost = Number(routesObj[item.routeId].routeRate);\r\n const totalCost = tripCost + Number(item.adjustment);\r\n return { ...item, tripCost, totalCost };\r\n });\r\n dispatchLinehaulFixed({\r\n type: \"INSERT_NEW_ITEMS\",\r\n truckId,\r\n week,\r\n startDate,\r\n items,\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n const requestLinehaulFloatingData = async () => {\r\n console.log(\"linehaulFloating\");\r\n console.log(week);\r\n const request = {\r\n method: \"GET\",\r\n url: `/floating/getdpc/${truckId}/${startDate.toISOString()}/${endDate.toISOString()}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await axios(request);\r\n\r\n dispatchLinehaulFloating({\r\n type: \"INSERT_NEW_ITEMS\",\r\n truckId,\r\n week,\r\n startDate,\r\n items: res.data,\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n if (!dataFetched.current.includes(appState.tab)) {\r\n //requestLclData();\r\n //requestParcelData();\r\n //requestHourlyData();\r\n requestLinehaulFixedData();\r\n requestLinehaulFloatingData();\r\n dataFetched.current.push(appState.tab);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(!lclSummaryPerEventDate.length || \r\n lclSummaryPerEventDate.some(item => item.currentPage > 1)\r\n ) {\r\n requestLclData(); \r\n } else {\r\n console.log('skip effect lcl')\r\n }\r\n }, [lclSummaryPerEventDate])\r\n\r\n useEffect(() => {\r\n if(!parcelSummaryPerEventDate.length || \r\n parcelSummaryPerEventDate.some(item => item.currentPage > 1)\r\n ) {\r\n requestParcelData();\r\n } else {\r\n console.log('skip effect parcel')\r\n } \r\n }, [parcelSummaryPerEventDate])\r\n\r\n useEffect(() => {\r\n if(!hourlySummaryPerEventDate.length || \r\n hourlySummaryPerEventDate.some(item => item.currentPage > 1)\r\n ) {\r\n requestHourlyData();\r\n } else {\r\n console.log('skip effect hourly')\r\n } \r\n }, [hourlySummaryPerEventDate])\r\n\r\n useEffect(() => {\r\n if (firstRender.current) {\r\n firstRender.current = false;\r\n } else {\r\n }\r\n }, [lclData, parcelData, linehaulFixedData, hourlyData]);\r\n\r\n return (\r\n \r\n \r\n Truck #{truckId}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {\r\n history.push(\r\n `/${userData.userName}/trucks/${truckId}/weeks/${week + 1}`\r\n );\r\n }}\r\n disabled={week === 4}\r\n >\r\n \r\n \r\n \r\n\r\n \r\n {`${startDate.toLocaleDateString(\r\n \"en-GB\"\r\n )} → ${endDate.toLocaleDateString(\"en-GB\")}`}\r\n \r\n\r\n \r\n \r\n {invoiceStatuses[userData.invoiceStatuses[truckId][week]]}\r\n \r\n \r\n\r\n \r\n {\r\n history.push(\r\n `/${userData.userName}/trucks/${truckId}/weeks/${week - 1}`\r\n );\r\n }}\r\n disabled={week === 0}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n setTab(newTab)}\r\n value={appState.tab}\r\n onChange={(event, newTab) =>\r\n setAppState({ ...appState, tab: newTab })\r\n }\r\n aria-label=\"disabled tabs example\"\r\n textColor=\"primary\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {\r\n // change content depending on tab value\r\n [\r\n \r\n {[0, 1, 2, 3, 4, 5, 6].map((day) => (\r\n x.weekDay == day)}\r\n setlclSummaryPerEventDate={setlclSummaryPerEventDate}\r\n />\r\n ))}\r\n ,\r\n \r\n {[0, 1, 2, 3, 4, 5, 6].map((day) => (\r\n x.weekDay == day)}\r\n setParcelSummaryPerEventDate={setParcelSummaryPerEventDate}\r\n />\r\n ))}\r\n ,\r\n <>\r\n {[0, 1, 2, 3, 4, 5, 6].map((day) => (\r\n \r\n x.weekDay == day)}\r\n setHourlySummaryPerEventDate={setHourlySummaryPerEventDate} \r\n />\r\n \r\n ))}\r\n ,\r\n \r\n {[0, 1, 2, 3, 4, 5, 6].map((day) => (\r\n \r\n ))}\r\n ,\r\n \r\n {[0, 1, 2, 3, 4, 5, 6].map((day) => (\r\n \r\n ))}\r\n ,\r\n ][appState.tab]\r\n }\r\n\r\n {userData.roleId === roles.ownerDriver && (\r\n \r\n \r\n \r\n setSaveOpen(true)}\r\n disabled={\r\n !(\r\n userData.invoiceStatuses[truckId][week] ===\r\n invoiceStatuses.unsubmitted\r\n )\r\n }\r\n >\r\n Submit Weekly Data\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TruckViewPage;\r\n\r\nTruckViewPage.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n week: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext } from \"react\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\nconst DefaultRoute = ({ redirect }) => {\r\n const { userData } = useContext(UserDataContext);\r\n return ;\r\n};\r\n\r\nexport default DefaultRoute;\r\n","import React, { useContext } from \"react\";\r\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\r\nimport TruckViewPage from \"./TruckViewPage\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport DefaultRoute from \"./DefaultRoute\";\r\nimport { PropTypes } from \"prop-types\";\r\n\r\nconst WeekRoute = (props) => {\r\n const { userData } = useContext(UserDataContext);\r\n const { truckId } = props;\r\n const weeks = [0, 1, 2, 3, 4];\r\n\r\n return (\r\n \r\n {weeks.map((week) => (\r\n }\r\n exact\r\n />\r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default WeekRoute;\r\n\r\nWeekRoute.propTypes = {\r\n truckId: PropTypes.number.isRequired,\r\n};\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n Link,\r\n Redirect,\r\n useHistory,\r\n} from \"react-router-dom\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport WeekRoute from \"./WeekRoute\";\r\nimport DefaultRoute from \"./DefaultRoute\";\r\n\r\nconst TruckRoute = () => {\r\n const { userData, setUserData } = useContext(UserDataContext);\r\n\r\n return (\r\n <>\r\n {userData.invoiceStatuses ? (\r\n \r\n {userData.trucks.map((truckObj) => (\r\n }\r\n component={() => }\r\n />\r\n ))}\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TruckRoute;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { invoiceStatusOptions, invoiceStatuses } from \"../Mappings\";\r\nimport { getWeekFromDate } from \"../GlobalFunctions\";\r\nimport ApproveRejectInvoice from \"./ApproveRejectInvoice\";\r\nimport { InvoiceDataContext } from \"../Contexts/InvoiceDataContext\";\r\nimport { AppStateContext } from \"../Contexts/AppStateContext\";\r\nimport { DatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\r\nimport DateFnsUtils from \"@date-io/date-fns\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport CancelIcon from \"@material-ui/icons/Cancel\";\r\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\r\nimport _without from \"lodash/without\";\r\n\r\nconst axios = require(\"axios\");\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n maxWidth: 300\r\n },\r\n chips: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\"\r\n },\r\n chip: {\r\n margin: 2,\r\n backgroundColor: \"#FFF\"\r\n },\r\n noLabel: {\r\n marginTop: theme.spacing(3)\r\n },\r\n tableHeader: {\r\n fontWeight: \"bold\",\r\n }, \r\n menuList: {\r\n \"& .MuiList-root\": {\r\n flexDirection: \"column\",\r\n },\r\n }, \r\n })\r\n);\r\n\r\n\r\n\r\nconst InvoicePage = () => {\r\n const { userData } = useContext(UserDataContext);\r\n const {\r\n invoiceTableFilterText,\r\n setInvoiceTableFilterText,\r\n scrollToPosition,\r\n } = useContext(AppStateContext);\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(25);\r\n const { invoiceData, setInvoiceData, invoiceDataModel } = useContext(InvoiceDataContext);\r\n const [count, setCount] = useState(0);\r\n const [tableRows, setTableRows] = useState([]);\r\n const classes = useStyles();\r\n const [dialogOpen, setDialogOpen] = useState(false); \r\n\r\n const [selectedTrucksInvoice, setSelectedTrucksInvoice] = useState(\r\n JSON.parse(localStorage.getItem(\"selectedTrucksInvoice\")) || \"\"\r\n );\r\n\r\n const [startDateInvoice, setStartDateInvoice] = useState(\r\n new Date(\r\n JSON.parse(localStorage.getItem(\"startDateInvoice\")) ||\r\n new Date().getTime() - 7 * 24 * 60 * 60 * 1000\r\n )\r\n );\r\n\r\n const [endDateInvoice, setEndDateInvoice] = useState(\r\n new Date(JSON.parse(localStorage.getItem(\"endDateInvoice\")) || new Date())\r\n );\r\n\r\n const [approvalStateInvoice, setApprovalStateInvoice] = useState(\r\n JSON.parse(localStorage.getItem(\"approvalStateInvoice\")) || 0\r\n );\r\n\r\n const [userSearchedInvoice, setUserSearchedInvoice] = useState(\r\n JSON.parse(localStorage.getItem(\"userSearchedInvoice\")) || false\r\n );\r\n\r\n const [shouldFetchInvoicesWithFilter, setShouldFetchInvoicesWithFilter] = useState(\r\n localStorage.getItem(\"selectedTrucksInvoice\") ||\r\n localStorage.getItem(\"startDateInvoice\") ||\r\n localStorage.getItem(\"endDateInvoice\") ||\r\n localStorage.getItem(\"approvalStateInvoice\")\r\n );\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"selectedTrucksInvoice\", JSON.stringify(selectedTrucksInvoice));\r\n }, [selectedTrucksInvoice]);\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"startDateInvoice\", JSON.stringify(startDateInvoice));\r\n }, [startDateInvoice]);\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"endDateInvoice\", JSON.stringify(endDateInvoice));\r\n }, [endDateInvoice]);\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"approvalStateInvoice\", JSON.stringify(approvalStateInvoice));\r\n }, [approvalStateInvoice]);\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"userSearchedInvoice\", JSON.stringify(userSearchedInvoice));\r\n }, [userSearchedInvoice]);\r\n\r\n const displayColumns = [\r\n \"id\",\r\n \"vendorTradingName\",\r\n \"netTotal\",\r\n \"startDate\",\r\n \"endDate\",\r\n \"truckId\",\r\n \"approvalState\",\r\n ];\r\n\r\n useEffect(() => {\r\n scrollToPosition();\r\n }, [tableRows, scrollToPosition]); \r\n\r\n\r\n useEffect(() => {\r\n if (shouldFetchInvoicesWithFilter && userSearchedInvoice) {\r\n fetchInvoicesWithFilter();\r\n setShouldFetchInvoicesWithFilter(false);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n const reg = new RegExp(invoiceTableFilterText.toLowerCase());\r\n setTableRows(\r\n invoiceData.filter((invoice) => {\r\n const invoiceString = Object.keys(invoice).reduce(\r\n (acc, cur) => acc + \" - \" + String(invoice[cur]),\r\n String(invoiceStatuses[invoice.approvalState])\r\n );\r\n return reg.test(invoiceString.toLowerCase());\r\n })\r\n );\r\n }, [invoiceTableFilterText, invoiceData]);\r\n\r\n const handlePageChange = (event, newPage) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleRowsPerPageChange = (event) => {\r\n setRowsPerPage(event.target.value);\r\n };\r\n\r\n\r\n const handleTruckChange = (event) => {\r\n setSelectedTrucksInvoice(event.target.value);\r\n };\r\n \r\n\r\n const handleStartDateChange = (date) => {\r\n setStartDateInvoice(date);\r\n };\r\n\r\n const handleEndDateChange = (date) => {\r\n setEndDateInvoice(date);\r\n };\r\n\r\n const handleApprovalStateChange = (event) => {\r\n setApprovalStateInvoice(event.target.value);\r\n }; \r\n\r\n\r\n const handleSearchButtonClick = async () => {\r\n if (selectedTrucksInvoice.length === 0) {\r\n setDialogOpen(true);\r\n return;\r\n }\r\n\r\n fetchInvoicesWithFilter();\r\n }\r\n\r\n const fetchInvoicesWithFilter = async () => {\r\n setUserSearchedInvoice(true); //this will tell us that the user tried to search invoice and we will auto load invoice page not unless he logs out\r\n\r\n const inputTruckId = isNaN(selectedTrucksInvoice) ? null : parseInt(selectedTrucksInvoice.toString().replace(/\\D/g, ''));\r\n\r\n const searchFilters = {\r\n startDate: startDateInvoice ? startDateInvoice.toISOString() : null,\r\n endDate: endDateInvoice ? endDateInvoice.toISOString() : null,\r\n approvalState: approvalStateInvoice ? parseInt(approvalStateInvoice) : null,\r\n truckIds: inputTruckId ? [inputTruckId] : []\r\n };\r\n \r\n try {\r\n const response = await axios.post('/invoices/get-invoices-with-filters', searchFilters, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n });\r\n setInvoiceData(response.data);\r\n setCount(response.data.length);\r\n } catch (error) {\r\n console.error(error);\r\n } \r\n \r\n };\r\n\r\n const handleClose = () => {\r\n setDialogOpen(false);\r\n };\r\n\r\n const handleProceed = () => {\r\n setDialogOpen(false);\r\n fetchInvoicesWithFilter();\r\n };\r\n\r\n const handleKeyPress = (event) => {\r\n const pattern = /[0-9]/;\r\n if (!pattern.test(event.key)) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Invoices\r\n \r\n\r\n {/* truckid, start, end , approval state filters */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n All\r\n {invoiceStatusOptions.map((option) => (\r\n \r\n {option.label}\r\n \r\n ))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {\"No truck id entered.\"}\r\n \r\n \r\n \r\n Warning: No truck id have been entered. This may result in a large number of invoices being returned, which could cause slow performance on your browser. Are you sure you want to proceed?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* END - truckid, start, end , approval state filters */}\r\n \r\n \r\n setInvoiceTableFilterText(event.target.value)}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n \r\n {displayColumns.map((col) => (\r\n \r\n {invoiceDataModel[col].displayName}\r\n \r\n ))}\r\n Action\r\n \r\n \r\n \r\n {tableRows.map((invoice) => {\r\n const invoiceStarteDate = invoice.startDate.split(\"T\")[0];\r\n const week = getWeekFromDate(invoiceStarteDate);\r\n const truckId = invoice.truckId;\r\n const invoiceId = invoice.id;\r\n return (\r\n \r\n {displayColumns.map((col) => (\r\n \r\n {invoiceDataModel[col].displayValue(invoice[col])}\r\n \r\n ))}\r\n \r\n \r\n {/* {userData.roleId === roles.tollAdmin && invoice.approvalState !== invoiceStatuses.adminApproved && (\r\n \r\n )}\r\n {userData.roleId === roles.tollManager &&\r\n invoice.approvalState === invoiceStatuses.adminApproved && (\r\n \r\n )}\r\n {userData.roleId === roles.ownerDriver && (\r\n \r\n history.push(`/${userData.userName}/trucks/${truckId}/weeks/${week}`)}\r\n >\r\n \r\n \r\n \r\n )} */}\r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n handlePageChange(event, newPage)}\r\n onChangeRowsPerPage={(event) => handleRowsPerPageChange(event)}\r\n >\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default InvoicePage;\r\n","import React, { forwardRef } from \"react\";\r\n\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { ThemeProvider, createMuiTheme } from \"@material-ui/core\";\r\n\r\nimport MaterialTable from \"material-table\";\r\n\r\nimport {\r\n AddBox,\r\n ArrowDownward,\r\n Check,\r\n ChevronLeft,\r\n ChevronRight,\r\n Clear,\r\n DeleteOutline,\r\n Edit,\r\n FilterList,\r\n FirstPage,\r\n LastPage,\r\n Remove,\r\n SaveAlt,\r\n Search,\r\n ViewColumn,\r\n} from \"@material-ui/icons\";\r\n\r\nconst tableIcons = {\r\n Add: forwardRef((props, ref) => ),\r\n Check: forwardRef((props, ref) => ),\r\n Clear: forwardRef((props, ref) => ),\r\n Delete: forwardRef((props, ref) => ),\r\n DetailPanel: forwardRef((props, ref) => ),\r\n Edit: forwardRef((props, ref) => ),\r\n Export: forwardRef((props, ref) => ),\r\n Filter: forwardRef((props, ref) => ),\r\n FirstPage: forwardRef((props, ref) => ),\r\n LastPage: forwardRef((props, ref) => ),\r\n NextPage: forwardRef((props, ref) => ),\r\n PreviousPage: forwardRef((props, ref) => ),\r\n ResetSearch: forwardRef((props, ref) => ),\r\n Search: forwardRef((props, ref) => ),\r\n SortArrow: forwardRef((props, ref) => ),\r\n ThirdStateCheck: forwardRef((props, ref) => ),\r\n ViewColumn: forwardRef((props, ref) => ),\r\n};\r\n\r\nconst theme = createMuiTheme({\r\n props: {\r\n MuiPaper: {\r\n variant: \"outlined\",\r\n square: true,\r\n },\r\n },\r\n});\r\n\r\ntheme.overrides = {\r\n ...theme.overrides,\r\n MuiPaper: {\r\n root: {\r\n border: \"0 !important\",\r\n },\r\n },\r\n};\r\n\r\nconst CustomTable = (props) => {\r\n return props.showCompleteTable ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst HelperTable = ({\r\n showCompleteTable,\r\n fromTable,\r\n data,\r\n columns,\r\n getParent,\r\n defaultAlign,\r\n defaultSort,\r\n options,\r\n ...otherProps\r\n}) => {\r\n if (defaultAlign) {\r\n columns = columns.map((x) => ({\r\n align: defaultAlign,\r\n ...x,\r\n // title: defaultAlign == \"center\" ? \"\\u2001\\u2001\" + x.title : x.title,\r\n cellStyle: {\r\n textAlign: defaultAlign,\r\n ...x.cellStyle,\r\n },\r\n }));\r\n }\r\n\r\n if (defaultSort != null) {\r\n columns = columns.map((x) => ({\r\n sorting: defaultSort,\r\n ...x,\r\n }));\r\n }\r\n\r\n return (\r\n {\r\n const hasParent = getParent != null && getParent(rowData, data) != null;\r\n const style = {};\r\n if (fromTable || hasParent) {\r\n style.backgroundColor = theme.palette.grey[200];\r\n }\r\n return style;\r\n },\r\n ...options,\r\n }}\r\n parentChildData={getParent != null && ((row, rows) => getParent(row, rows))}\r\n icons={tableIcons}\r\n columns={columns}\r\n data={data}\r\n />\r\n );\r\n};\r\n\r\nCustomTable.propTypes = {\r\n title: PropTypes.string,\r\n showCompleteTable: PropTypes.bool,\r\n fromTable: PropTypes.bool,\r\n data: PropTypes.array.isRequired,\r\n columns: PropTypes.array.isRequired,\r\n getParent: PropTypes.func,\r\n defaultAlign: PropTypes.string,\r\n options: PropTypes.object,\r\n defaultSort: PropTypes.bool,\r\n};\r\n\r\nCustomTable.defaultProps = {\r\n showCompleteTable: true,\r\n options: {},\r\n};\r\n\r\nexport default CustomTable;\r\n","import React from \"react\";\r\nimport \"date-fns\";\r\nimport DateFnsUtils from \"@date-io/date-fns\";\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker,\r\n} from \"@material-ui/pickers\";\r\n\r\nconst DatePicker = ({ label, onChange, value, ...otherProps }) => {\r\n // console.log(value.toISOString())\r\n return (\r\n \r\n {\r\n if (!isNaN(date)) {\r\n onChange(date);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DatePicker;\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { IconButton, Toolbar, Typography } from \"@material-ui/core\";\r\nimport { GetApp } from \"@material-ui/icons\";\r\nimport CustomTable from \"./CustomTable\";\r\nimport DatePicker from \"./DatePicker\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { downloadData } from \"../GlobalFunctions\";\r\n\r\nconst WeeklyAuditPage = () => {\r\n const [searchDate, setSearchDate] = useState(null);\r\n const [rawData, setRawData] = useState([]);\r\n\r\n const { userData } = useContext(UserDataContext);\r\n\r\n useEffect(() => {\r\n axios({\r\n method: \"GET\",\r\n url: \"Audit/GetWeeklyAuditData\",\r\n headers: {\r\n \"content-type\": \"application/json\",\r\n Authorization: userData.token && `bearer ${userData.token}`,\r\n },\r\n }).then((res) => {\r\n console.log(res.data);\r\n setRawData(\r\n res.data.map((x) => ({\r\n ...x,\r\n weekStartDate: new Date(x.weekStartDate),\r\n weekEndDate: new Date(x.weekEndDate),\r\n }))\r\n );\r\n });\r\n }, [userData.token]);\r\n\r\n // const rawData = [\r\n // {\r\n // weekStartDate: new Date(\"2020-09-13\"),\r\n // weekEndDate: new Date(\"2020-09-19\"),\r\n // nOustanding: 0,\r\n // outStandingCSV: false,\r\n // unibis: true,\r\n // },\r\n // {\r\n // weekStartDate: new Date(\"2020-09-06\"),\r\n // weekEndDate: new Date(\"2020-09-12\"),\r\n // nOustanding: 5,\r\n // outStandingCSV: true,\r\n // unibis: true,\r\n // },\r\n // ];\r\n\r\n const data =\r\n searchDate == null ? rawData : rawData.filter((x) => x.weekStartDate <= searchDate && searchDate <= x.weekEndDate);\r\n\r\n return (\r\n (\r\n \r\n {props.title}\r\n
\r\n \r\n \r\n ),\r\n }}\r\n columns={[\r\n {\r\n title: \"Week Start Date\",\r\n field: \"weekStartDate\",\r\n render: (row) => row.weekStartDate.toLocaleDateString(\"en-NZ\"),\r\n },\r\n {\r\n title: \"Week End Date\",\r\n field: \"weekEndDate\",\r\n render: (row) => row.weekEndDate.toLocaleDateString(\"en-NZ\"),\r\n },\r\n {\r\n title: \"Number Outstanding\",\r\n field: \"outstandingCount\",\r\n render: (row) => (row.outstandingCount ? row.outstandingCount : \"-\"),\r\n },\r\n {\r\n title: \"Outstanding CSV\",\r\n field: \"outstandingFileName\",\r\n render: (row) =>\r\n row.outstandingFileName ? (\r\n {\r\n axios({\r\n method: \"GET\",\r\n url: \"Files/DownloadOutstanding/\" + row.outstandingFileName,\r\n headers: {\r\n \"content-type\": \"application/json\",\r\n Authorization: userData.token && `bearer ${userData.token}`,\r\n },\r\n }).then((res) => {\r\n downloadData(res.data);\r\n });\r\n }}\r\n >\r\n \r\n \r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n {\r\n title: \"Unibis File\",\r\n field: \"unibisFileName\",\r\n render: (row) =>\r\n row.unibisFileName ? (\r\n {\r\n axios({\r\n method: \"GET\",\r\n url: \"Files/DownloadUnibis/\" + row.unibisFileName,\r\n headers: {\r\n \"content-type\": \"application/json\",\r\n Authorization: userData.token && `bearer ${userData.token}`,\r\n },\r\n }).then((res) => {\r\n downloadData(res.data);\r\n });\r\n }}\r\n >\r\n \r\n \r\n ) : (\r\n \"-\"\r\n ),\r\n },\r\n ]}\r\n data={data}\r\n />\r\n );\r\n};\r\n\r\nexport default WeeklyAuditPage;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { TextField } from \"@material-ui/core\";\r\n\r\nconst DateTextField = (props) => {\r\n const { value, onChange, ...rest } = props;\r\n const [dateString, timeString] = value.toISOString().split(\"T\");\r\n const [stringValue, setStringValue] = useState(dateString);\r\n const [valid, setValid] = useState(true);\r\n\r\n const handleChange = (event) => {\r\n console.log(event.target.value);\r\n setValid(event.target.value !== \"\");\r\n setStringValue(event.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (valid) {\r\n const newDateString = `${stringValue}T${timeString}`;\r\n console.log(newDateString);\r\n const newDate = new Date(newDateString);\r\n onChange(newDate);\r\n }\r\n }, [stringValue]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DateTextField;\r\n","import {\r\n Button,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n createMuiTheme,\r\n Grid,\r\n List,\r\n ListItem,\r\n TextField,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { ThemeProvider } from \"@material-ui/core/styles\";\r\nimport { GetApp, Search } from \"@material-ui/icons\";\r\nimport axios from \"axios\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { downloadData } from \"../GlobalFunctions\";\r\nimport CustomTable from \"./CustomTable\";\r\nimport DatePicker from \"./DatePicker\";\r\nimport DateTextField from \"./DateTextField\";\r\n\r\nconst InvoiceAuditPage = ({ ...otherProps }) => {\r\n const [searchTerms, setSearchTerms] = useState(() => {\r\n const today = new Date();\r\n const lastMonth = new Date();\r\n lastMonth.setMonth(lastMonth.getMonth() - 1);\r\n return {\r\n invoiceId: \"\",\r\n truckId: \"\",\r\n vendorTradingName: \"\",\r\n vendorNumber: \"\",\r\n datesFrom: lastMonth,\r\n datesTo: today,\r\n };\r\n });\r\n\r\n const [data, setData] = useState([]);\r\n\r\n // const data = [\r\n // {\r\n // invoiceNo: \"20220200903\",\r\n // invoiceDate: new Date(\"2020-08-16\"),\r\n // vendorName: \"Probotics\",\r\n // vendorId: 3,\r\n // truckId: 202,\r\n // submittedBy: \"Hana Charlton\",\r\n // dateSubmitted: new Date(\"2020-08-20\"),\r\n // preApprovedBy: \"Carolina Love\",\r\n // datePreApproved: new Date(\"2020-08-21\"),\r\n // approvedBy: \"Anum Rav\",\r\n // dateApproved: new Date(\"2020-08-22\"),\r\n // unibis: \"2020-09-18.csv\",\r\n // supportingDocs: [\"asdasd.csv\", \"Sdfsdf.png\"],\r\n // },\r\n // ];\r\n\r\n const { userData } = useContext(UserDataContext);\r\n\r\n const handleDownloadFile = (route, fileName) => {\r\n axios({\r\n method: \"GET\",\r\n url: `/files/${route}/${fileName}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: searchTerms,\r\n })\r\n .then((res) => downloadData(res.data))\r\n .catch((error) => console.log(error));\r\n };\r\n\r\n useEffect(() => {\r\n // get invoice array\r\n axios({\r\n method: \"POST\",\r\n url: `/audit/GetInvoiceAuditData/`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: searchTerms,\r\n })\r\n .then((res) => {\r\n console.log(\r\n res.data.sort(\r\n (a, b) =>\r\n new Date(a.invoiceDate).valueOf() -\r\n new Date(b.invoiceDate).valueOf()\r\n )\r\n );\r\n setData(res.data);\r\n })\r\n .catch((error) => console.log(error));\r\n }, [userData.token, searchTerms]);\r\n\r\n const searchFieldList = [\r\n {\r\n label: \"Invoice Number\",\r\n field: \"invoiceId\",\r\n },\r\n {\r\n label: \"Truck Id\",\r\n field: \"truckId\",\r\n },\r\n {\r\n label: \"Vendor Name\",\r\n field: \"vendorTradingName\",\r\n },\r\n {\r\n label: \"Vendor Id\",\r\n field: \"vendorNumber\",\r\n },\r\n {\r\n label: \"Invoice Dates From\",\r\n field: \"datesFrom\",\r\n variant: \"date\",\r\n disableFuture: true,\r\n },\r\n {\r\n label: \"Invoice Dates To\",\r\n field: \"datesTo\",\r\n variant: \"date\",\r\n disableFuture: false,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {searchFieldList.map(({ label, field, variant, ...other }) => (\r\n \r\n {variant === \"date\" ? (\r\n // \r\n // setSearchTerms({ ...searchTerms, [field]: value })\r\n // }\r\n // />\r\n \r\n setSearchTerms({ ...searchTerms, [field]: value })\r\n }\r\n label={label}\r\n />\r\n ) : (\r\n \r\n setSearchTerms({\r\n ...searchTerms,\r\n [field]: e.target.value,\r\n })\r\n }\r\n label={label}\r\n />\r\n )}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n (\r\n \r\n {row.invoicePDFFileName && (\r\n \r\n \r\n handleDownloadFile(\"GetInvoicePDF\", row.id)\r\n }\r\n />\r\n \r\n )}\r\n {row.transactionsFileName && (\r\n \r\n \r\n handleDownloadFile(\r\n \"DownloadInvoiceDPC\",\r\n row.transactionsFileName\r\n )\r\n }\r\n />\r\n \r\n )}\r\n {row.unibisFileName && (\r\n \r\n \r\n handleDownloadFile(\"DownloadUnibis\", row.unibisFileName)\r\n }\r\n />\r\n \r\n )}\r\n {row.supportingDocs && row.supportingDocs.length !== 0 && (\r\n \r\n Supporting Documents:\r\n \r\n )}\r\n {row.supportingDocs.map((x) => (\r\n \r\n \r\n handleDownloadFile(\"DownloadSupportFile\", x.fileName)\r\n }\r\n />\r\n \r\n ))}\r\n \r\n )}\r\n columns={[\r\n {\r\n title: \"Invoice Number\",\r\n field: \"id\",\r\n },\r\n {\r\n title: \"Invoice Date\",\r\n field: \"invoiceDate\",\r\n render: (row) =>\r\n new Date(row.invoiceDate).toLocaleDateString(\"en-NZ\"),\r\n },\r\n {\r\n title: \"Vendor Name\",\r\n field: \"vendorTradingName\",\r\n },\r\n {\r\n title: \"Vendor Id\",\r\n field: \"vendorNumber\",\r\n },\r\n {\r\n title: \"Truck Id\",\r\n field: \"truckId\",\r\n },\r\n {\r\n title: \"Submitted By\",\r\n field: \"submittedUserName\",\r\n },\r\n {\r\n title: \"Date Submitted\",\r\n field: \"submittedDateTime\",\r\n render: (row) =>\r\n new Date(row.submittedDateTime).toLocaleDateString(\"en-NZ\"),\r\n },\r\n {\r\n title: \"Pre-Approved By\",\r\n field: \"preApprovedUserName\",\r\n },\r\n {\r\n title: \"Date Pre-Approved\",\r\n field: \"preApprovedDateTime\",\r\n render: (row) =>\r\n new Date(row.preApprovedDateTime).toLocaleDateString(\"en-NZ\"),\r\n },\r\n {\r\n title: \"Approved By\",\r\n field: \"approvedUserName\",\r\n },\r\n {\r\n title: \"Date Approved\",\r\n field: \"approvedDateTime\",\r\n render: (row) =>\r\n new Date(row.approvedDateTime).toLocaleDateString(\"en-NZ\"),\r\n },\r\n ]}\r\n data={data}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst lowerCaseButtonTheme = createMuiTheme({\r\n typography: {\r\n button: {\r\n textTransform: \"none\",\r\n },\r\n },\r\n});\r\n\r\nconst DownloadButton = ({ label, onClick }) => (\r\n \r\n);\r\n\r\nexport default InvoiceAuditPage;\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport {\r\n Box,\r\n Button,\r\n Container,\r\n InputAdornment,\r\n ListItemText,\r\n makeStyles,\r\n MenuItem,\r\n TextField,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport InputMask from \"react-input-mask\";\r\nimport PropTypes from \"prop-types\";\r\nimport Axios from \"axios\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport clsx from \"clsx\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexRowContainer: { display: \"flex\", alignItems: \"flex-end\" },\r\n flexRowItem: { marginRight: \"8px\" },\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(1, 0, 0, 0),\r\n },\r\n active: {\r\n backgroundColor: theme.palette.success.main,\r\n },\r\n activeFocus: {\r\n backgroundColor: theme.palette.success.light,\r\n },\r\n waiting: {\r\n backgroundColor: theme.palette.warning.main,\r\n },\r\n waitingFocus: {\r\n backgroundColor: theme.palette.warning.main,\r\n },\r\n padBox: {\r\n padding: theme.spacing(1),\r\n },\r\n errorMessage: {\r\n color: theme.palette.error.main,\r\n },\r\n}));\r\n\r\n// input component custom must-catch props if not accepted as ...rest by underlying element:\r\n// label\r\n// name\r\n// value\r\n// onUpdate\r\n// error\r\n\r\nexport const GenericNumericInputComponent = ({ value, onUpdate, ...rest }) => {\r\n const [strVal, setStrVal] = useState(value ? String(value) : \"\");\r\n\r\n return (\r\n {\r\n setStrVal(event.target.value);\r\n if (event.target.value === \"\") {\r\n onUpdate(event.target.name, undefined);\r\n } else if (!isNaN(event.target.value)) {\r\n onUpdate(event.target.name, Number(event.target.value));\r\n } else {\r\n onUpdate(event.target.name, event.target.value);\r\n }\r\n }}\r\n {...rest}\r\n />\r\n );\r\n};\r\nGenericNumericInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericCurrencyInputComponent = ({ value, onUpdate, ...rest }) => {\r\n const [stringValue, setStringValue] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (value) {\r\n setStringValue(String(value));\r\n }\r\n }, []);\r\n\r\n const handleChange = (event) => {\r\n setStringValue(event.target.value);\r\n if (isNaN(event.target.value) || /\\.$/.test(event.target.value))\r\n onUpdate(event.target.name, event.target.value);\r\n else if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n $,\r\n }}\r\n value={stringValue}\r\n onChange={handleChange}\r\n {...rest}\r\n />\r\n );\r\n};\r\nGenericCurrencyInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericPercentageInputComponent = ({\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n const [stringValue, setStringValue] = useState(\r\n value ? String((value * 100).toFixed(2)) : \"\"\r\n );\r\n\r\n const handleChange = (event) => {\r\n // console.log(event.target.value);\r\n setStringValue(event.target.value);\r\n // if (isNaN(event.target.value) || /\\.$/.test(event.target.value))\r\n if (isNaN(event.target.value))\r\n onUpdate(event.target.name, event.target.value);\r\n else if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else {\r\n onUpdate(\r\n event.target.name,\r\n parseFloat((Number(event.target.value) / 100).toFixed(5))\r\n );\r\n }\r\n };\r\n\r\n return (\r\n %,\r\n }}\r\n value={stringValue}\r\n onChange={handleChange}\r\n {...rest}\r\n />\r\n );\r\n};\r\nGenericPercentageInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.oneOf([PropTypes.number, PropTypes.string]).isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericDisabledTextInputComponent = ({ onUpdate, ...rest }) => (\r\n \r\n);\r\nGenericDisabledTextInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericFreeTextInputComponent = ({ onUpdate, ...rest }) => (\r\n onUpdate(event.target.name, event.target.value)}\r\n {...rest}\r\n />\r\n);\r\nGenericFreeTextInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericDateInputComponent = ({\r\n name,\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n // not tested and not used\r\n const [dateString, setDateString] = useState(\r\n value ? value.toISOString().split(\"T\")[0] : \"\"\r\n );\r\n\r\n const handleChange = (event) => {\r\n setDateString(event.target.value);\r\n const newDateString = event.target.value;\r\n const newDate = new Date(newDateString);\r\n if (!isNaN(newDate.valueOf())) {\r\n onUpdate(name, newDate);\r\n } else {\r\n onUpdate(name, undefined);\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\nGenericDateInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.instanceOf(Date),\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GenericDateIsoStringInputComponent = ({\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n const [dateString, setDateString] = useState(\r\n value ? value.split(\"T\")[0] : \"\"\r\n );\r\n const [timeString, setTimeString] = useState(\r\n value ? value.split(\"T\")[1] : \"00:00:00\"\r\n );\r\n\r\n const handleChange = (event) => {\r\n setDateString(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, `${event.target.value}T${timeString}`);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\nGenericDateIsoStringInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectUserIdInputComponent = ({ onUpdate, value, ...rest }) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [userList, setUserList] = useState([]);\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n useEffect(() => {\r\n const getUsers = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/users/search?\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setUserList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getUsers();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {userList.map((user) => (\r\n \r\n {user.userName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectUserIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectOwnerDriverUserIdInputComponent = ({\r\n onUpdate,\r\n value,\r\n ...rest\r\n}) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [userList, setUserList] = useState([]);\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n useEffect(() => {\r\n const getUsers = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/users/search?roleId=4\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setUserList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getUsers();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {userList.map((user) => (\r\n \r\n {user.userName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectOwnerDriverUserIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectTollAdminUserIdInputComponent = ({\r\n onUpdate,\r\n value,\r\n ...rest\r\n}) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [userList, setUserList] = useState([]);\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n useEffect(() => {\r\n const getUsers = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/users/search?roleId=2\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setUserList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getUsers();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {userList.map((user) => (\r\n \r\n {user.userName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectTollAdminUserIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectTollManagerUserIdInputComponent = ({\r\n onUpdate,\r\n value,\r\n ...rest\r\n}) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [userList, setUserList] = useState([]);\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n useEffect(() => {\r\n const getUsers = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/users/search?roleId=3\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setUserList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getUsers();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {userList.map((user) => (\r\n \r\n {user.userName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectTollManagerUserIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectActiveInputComponent = ({ onUpdate, ...rest }) => (\r\n onUpdate(event.target.name, event.target.value)}\r\n {...rest}\r\n >\r\n *Clear Selection*\r\n Active\r\n Inactive\r\n \r\n);\r\nSelectActiveInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectStateInputComponent = ({ value, onUpdate, ...rest }) => {\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n Active\r\n Waiting\r\n Expired\r\n \r\n );\r\n};\r\nSelectStateInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectRoleIdInputComponent = ({ value, onUpdate, ...rest }) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [roleList, setRoleList] = useState([]);\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n\r\n useEffect(() => {\r\n const fetchRoles = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/roles\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setRoleList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n fetchRoles();\r\n }, []);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {roleList.map((role) => (\r\n \r\n {role.roleDescription}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectRoleIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectVendorIdInputComponent = ({ onUpdate, ...rest }) => {\r\n const [vendors, setVendors] = useState([]);\r\n const { userData } = useContext(UserDataContext);\r\n\r\n useEffect(() => {\r\n const getVendors = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/vendors\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n setVendors(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getVendors();\r\n }, [userData.token]);\r\n\r\n return (\r\n onUpdate(event.target.name, event.target.value)}\r\n {...rest}\r\n >\r\n *Clear Selection*\r\n {vendors.map((vendor) => (\r\n \r\n {vendor.tradingName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectVendorIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectTruckIdInputComponent = ({ value, onUpdate, ...rest }) => {\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n const [distinctList, setDistinctList] = useState([]);\r\n const { userData } = useContext(UserDataContext);\r\n\r\n useEffect(() => {\r\n const getTrucks = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/trucks/search\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n const idArray = res.data.map((truck) => truck.truckId);\r\n setDistinctList(\r\n res.data.filter(\r\n (truck, idx) => idArray.indexOf(truck.truckId) === idx\r\n )\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getTrucks();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {distinctList.map((truck) => (\r\n \r\n {truck.truckId}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectTruckIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\nexport const SelectFixedOrRoundInputComponent = ({\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n const [strVal, setStrVal] = useState(value ? String(value) : \"\");\r\n\r\n const handleChange = (event) => {\r\n setStrVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n Round Trip\r\n Fixed Trip\r\n \r\n );\r\n};\r\nSelectFixedOrRoundInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const GstNumberInputComponent = ({ onUpdate, ...rest }) => (\r\n onUpdate(event.target.name, event.target.value)}\r\n {...rest}\r\n children={(inputProps) => }\r\n />\r\n);\r\n\r\nGstNumberInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectCostCentreInputComponent = ({\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n const [val, setVal] = useState(value);\r\n const { userData } = useContext(UserDataContext);\r\n const [branchList, setBranchList] = useState([]);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const fetchCostCentres = async () => {\r\n const requestActive = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=1\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const requestWaiting = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=2\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const [resActive, resWaiting] = await Promise.all([\r\n Axios(requestActive),\r\n Axios(requestWaiting),\r\n ]);\r\n setBranchList(\r\n [\r\n ...resActive.data.map((branch) => ({ ...branch, state: 1 })),\r\n ...resWaiting.data.map((branch) => ({ ...branch, state: 2 })),\r\n ].sort((a, b) => {\r\n if (a.branchName > b.branchName) return 1;\r\n if (a.branchName < b.branchName) return -1;\r\n return 0;\r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n fetchCostCentres();\r\n }, []);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n onUpdate(event.target.name, event.target.value);\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {branchList.map((branch) => (\r\n \r\n {branch.branchName}\r\n {branch.startDate.split(\"T\")[0]}\r\n {(branch.endDate || \"\").split(\"T\")[0]}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectCostCentreInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectLclCostCentreInputComponent = ({\r\n value,\r\n onUpdate,\r\n ...rest\r\n}) => {\r\n const [val, setVal] = useState(value);\r\n const { userData } = useContext(UserDataContext);\r\n const [branchList, setBranchList] = useState([]);\r\n\r\n useEffect(() => {\r\n const fetchCostCentres = async () => {\r\n const requestActive = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=1\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const requestWaiting = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=2\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const [resActive, resWaiting] = await Promise.all([\r\n Axios(requestActive),\r\n Axios(requestWaiting),\r\n ]);\r\n // get unique list of active + waiting branches, filter by duplicate branch name.\r\n const uniqueList = [\r\n ...resActive.data.map((branch) => ({ ...branch, state: 1 })),\r\n ...resWaiting.data.map((branch) => ({ ...branch, state: 2 })),\r\n ]\r\n .reduce(\r\n (acc, cur) =>\r\n acc.some((branch) => branch.branchName === cur.branchName)\r\n ? acc\r\n : [...acc, cur],\r\n []\r\n )\r\n .sort((a, b) => {\r\n if (a.branchName > b.branchName) return 1;\r\n if (a.branchName < b.branchName) return -1;\r\n return 0;\r\n });\r\n uniqueList.forEach((branch) => console.log(branch.branchName));\r\n setBranchList(uniqueList);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n // [1, 1, 2, 2, 3, 3].reduce((acc, cur) => acc.some(n => n === cur) ? acc: acc + cur , [])\r\n\r\n fetchCostCentres();\r\n }, []);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n onUpdate(event.target.name, event.target.value);\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {branchList.map((branch) => (\r\n \r\n {branch.branchName}\r\n \r\n ))}\r\n \r\n );\r\n};\r\nSelectLclCostCentreInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nexport const SelectAndFilterTruckIdInputComponent = ({\r\n key,\r\n className,\r\n name,\r\n label,\r\n value,\r\n onUpdate,\r\n error,\r\n fullWidth,\r\n InputLabelProps,\r\n disabled,\r\n ...rest\r\n}) => {\r\n const [val, setVal] = useState(value ? String(value) : \"\");\r\n const { userData } = useContext(UserDataContext);\r\n const [truckList, setTruckList] = useState([]);\r\n const [filter, setFilter] = useState(\"\");\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const getTrucks = async () => {\r\n const request = {\r\n method: \"GET\",\r\n url: \"/trucks/search\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n const res = await Axios(request);\r\n const idArray = res.data.map((truck) => truck.truckId);\r\n setTruckList(\r\n res.data.filter(\r\n (truck, idx) => idArray.indexOf(truck.truckId) === idx\r\n )\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getTrucks();\r\n }, [userData.token]);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n if (event.target.value === \"\") onUpdate(event.target.name, undefined);\r\n else onUpdate(event.target.name, Number(event.target.value));\r\n };\r\n\r\n return (\r\n \r\n \r\n *Clear Selection*\r\n {truckList\r\n .filter((truck) => new RegExp(filter).test(truck.truckId))\r\n .map((truck) => (\r\n \r\n {truck.truckId}\r\n \r\n ))}\r\n \r\n setFilter(event.target.value)}\r\n style={{ width: \"240px\" }}\r\n inputProps={{ style: { padding: \"14px 14px 7px 14px\" } }}\r\n variant=\"outlined\"\r\n label=\"Filter truck list\"\r\n InputLabelProps={InputLabelProps}\r\n size=\"small\"\r\n disabled={disabled}\r\n />\r\n \r\n );\r\n};\r\nSelectAndFilterTruckIdInputComponent.propTypes = {\r\n label: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.number,\r\n onUpdate: PropTypes.func.isRequired,\r\n error: PropTypes.bool,\r\n};\r\n\r\nconst SelectBranchByShortCode = ({ value, onUpdate, ...rest }) => {\r\n const [val, setVal] = useState(value);\r\n const { userData } = useContext(UserDataContext);\r\n const [branchList, setBranchList] = useState([]);\r\n\r\n useEffect(() => {\r\n const fetchCostCentres = async () => {\r\n const requestActive = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=1\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const requestWaiting = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=2\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const [resActive, resWaiting] = await Promise.all([\r\n Axios(requestActive),\r\n Axios(requestWaiting),\r\n ]);\r\n // get unique list of active + waiting branches, filter by duplicate shortCode.\r\n const uniqueList = [\r\n ...resActive.data.map((branch) => ({ ...branch, state: 1 })),\r\n ...resWaiting.data.map((branch) => ({ ...branch, state: 2 })),\r\n ]\r\n .reduce(\r\n (acc, cur) =>\r\n acc.some((branch) => branch.shortCode === cur.shortCode)\r\n ? acc\r\n : [...acc, cur],\r\n []\r\n )\r\n .sort((a, b) => {\r\n if (a.shortCode > b.shortCode) return 1;\r\n if (a.shortCode < b.shortCode) return -1;\r\n return 0;\r\n });\r\n // uniqueList.forEach((branch) => console.log(branch.shortCode));\r\n setBranchList(uniqueList);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n fetchCostCentres();\r\n }, []);\r\n\r\n const handleChange = (event) => {\r\n setVal(event.target.value);\r\n onUpdate(event.target.name, event.target.value);\r\n };\r\n\r\n return (\r\n \r\n *Clear Selection*\r\n {branchList.map((branch) => (\r\n \r\n {branch.shortCode}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst SelectLclOrParcel = ({ value, onUpdate, ...rest }) => {\r\n const [val, setVal] = useState(value);\r\n\r\n return (\r\n {\r\n setVal(event.target.value);\r\n onUpdate(event.target.name, event.target.value);\r\n }}\r\n {...rest}\r\n >\r\n *Clear Selection*\r\n \r\n LCL/Linehaul Cost Centre\r\n \r\n \r\n Parcel Cost Centre\r\n \r\n \r\n );\r\n};\r\n\r\nconst SelectCostCentreWeight = ({\r\n className,\r\n name,\r\n value,\r\n onUpdate,\r\n onDelete,\r\n disabled,\r\n error,\r\n ...rest\r\n}) => {\r\n const classes = useStyles();\r\n const [val, setVal] = useState(value);\r\n const [valid, setValid] = useState({\r\n shortCode: false,\r\n isParcel: false,\r\n percentage: false,\r\n });\r\n\r\n const validate = {\r\n shortCode: (formData) => formData.shortCode !== \"\",\r\n isParcel: (formData) => formData.isParcel !== \"\",\r\n percentage: (formData) => !isNaN(formData.percentage),\r\n };\r\n\r\n const handleUpdate = (fieldName, newVal) => {\r\n // console.log(fieldName, newVal);\r\n let updated;\r\n updated = { ...val, [fieldName]: newVal };\r\n // console.log(updated);\r\n setVal(updated);\r\n setValid({ ...valid, [fieldName]: validate[fieldName](updated) });\r\n onUpdate(updated);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n onDelete(val)}\r\n >\r\n delete\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const CostCentreArrayInputComponent = ({\r\n value,\r\n onUpdate,\r\n error,\r\n className,\r\n InputLabelProps,\r\n name,\r\n ...rest\r\n}) => {\r\n const classes = useStyles();\r\n const [val, setVal] = useState(value);\r\n const [valid, setValid] = useState(false);\r\n\r\n const handleCreate = () => {\r\n setVal([\r\n ...val,\r\n {\r\n id: uuidv4(),\r\n shortCode: \"\",\r\n isParcel: \"\",\r\n percentage: 0,\r\n costCentre: \"\",\r\n },\r\n ]);\r\n };\r\n\r\n const validatePercentageSum = (formData) => {\r\n const percentSum = Number(\r\n Number(\r\n formData.reduce((acc, cur) => acc + (cur.percentage || 0), 0)\r\n ).toFixed(4)\r\n );\r\n return percentSum === 1;\r\n };\r\n\r\n const handleChange = (newValue) => {\r\n // console.log(newValue);\r\n for (let i = 0; i < val.length; i++) {\r\n if (val[i].id === newValue.id) {\r\n // console.log(\"found matching id at index\", i);\r\n const tempVal = [...val.slice(0, i), newValue, ...val.slice(i + 1)];\r\n setVal(tempVal);\r\n setValid(validatePercentageSum(tempVal));\r\n // console.log(\"setVal called\");\r\n return;\r\n }\r\n }\r\n };\r\n\r\n const handleDelete = (newValue) => {\r\n for (let i = 0; i < val.length; i++) {\r\n if (val[i].id === newValue.id) {\r\n setVal([...val.slice(0, i), ...val.slice(i + 1)]);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n console.log(val);\r\n onUpdate(name, val);\r\n }, [val]);\r\n\r\n return (\r\n \r\n \r\n Select Cost Centres\r\n \r\n\r\n {val.map((e) => (\r\n \r\n ))}\r\n {error && !valid && (\r\n \r\n \r\n Percentages must sum to 100\r\n \r\n \r\n )}\r\n \r\n add\r\n \r\n \r\n );\r\n};\r\n","import { roles } from \"../../Mappings\";\r\nimport {\r\n GenericDateIsoStringInputComponent,\r\n GenericDisabledTextInputComponent,\r\n GenericFreeTextInputComponent,\r\n SelectRoleIdInputComponent,\r\n SelectVendorIdInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const userDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.id),\r\n inputComponent: GenericDisabledTextInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n userName: {\r\n displayName: \"Username\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.userName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => /^(\\w|\\d){3,15}$/.test(entity.userName),\r\n },\r\n\r\n roleId: {\r\n displayName: \"Role\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(roles[entity.roleId]),\r\n inputComponent: SelectRoleIdInputComponent,\r\n isValid: (entity) => String(entity.roleId) !== \"\",\r\n },\r\n\r\n vendorId: {\r\n displayName: \"Vendor ID\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.vendorId),\r\n inputComponent: SelectVendorIdInputComponent,\r\n // isValid: (entity) => {\r\n // if (\r\n // entity.roleId === roles.tollAdmin ||\r\n // entity.roleId === roles.tollManager\r\n // ) {\r\n // return entity.vendor === \"Toll\";\r\n // } else {\r\n // return entity.vendor !== \"\";\r\n // }\r\n // },\r\n isValid: (entity) => entity.vendor !== \"\",\r\n },\r\n\r\n firstName: {\r\n displayName: \"First Name\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.firstName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => entity.firstName !== \"\",\r\n },\r\n\r\n lastName: {\r\n displayName: \"Last Name\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.lastName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => entity.lastName !== \"\",\r\n },\r\n\r\n email: {\r\n displayName: \"Email Address\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.email),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/.test(entity.email),\r\n },\r\n\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport const columns = [\r\n \"id\",\r\n \"userName\",\r\n \"roleId\",\r\n \"vendorId\",\r\n \"firstName\",\r\n \"lastName\",\r\n \"email\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nexport const defaultUser = {\r\n id: 0,\r\n userName: \"\",\r\n roleId: undefined,\r\n vendorId: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n startDate: undefined,\r\n endDate: undefined,\r\n};\r\n","import React, { useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Box,\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContentText,\r\n Divider,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { DialogTitle } from \"@material-ui/core\";\r\nimport { DialogContent } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(1, 0, 0, 0),\r\n },\r\n feedback: {\r\n maxHeight: \"160px\",\r\n },\r\n}));\r\n\r\nconst EntityForm = ({\r\n title,\r\n columns,\r\n initialData,\r\n entityDefinition,\r\n onSubmit,\r\n disabledColumns,\r\n ...rest\r\n}) => {\r\n const classes = useStyles();\r\n const [formData, setFormData] = useState(initialData);\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n const handleChange = (fieldName, fieldValue) => {\r\n const newFormData = { ...formData, [fieldName]: fieldValue };\r\n setFormData(newFormData);\r\n };\r\n\r\n return (\r\n \r\n {title}\r\n\r\n \r\n\r\n \r\n {columns.map((col) =>\r\n entityDefinition[col].inputComponent({\r\n key: col,\r\n className: classes.flexColItem,\r\n name: col,\r\n label: entityDefinition[col].displayName,\r\n value: formData[col],\r\n onUpdate: handleChange,\r\n error: !entityDefinition[col].isValid(formData),\r\n // fullWidth: true,\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n disabled: disabledColumns.includes(col),\r\n })\r\n )}\r\n \r\n\r\n {errorMessage !== \"\" ? (\r\n \r\n \r\n {errorMessage}\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n entityDefinition[col].isValid(formData))\r\n .includes(false)}\r\n onClick={() => onSubmit(formData, rest.onClose, setErrorMessage)}\r\n >\r\n Submit\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EntityForm;\r\n\r\nEntityForm.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n disabledColumns: PropTypes.arrayOf(PropTypes.string),\r\n initialData: PropTypes.object,\r\n entityDefinition: PropTypes.object.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n};\r\n\r\nEntityForm.defaultProps = {\r\n disabledColumns: [],\r\n};\r\n","import React, { useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport EntityForm from \"./EntityForm\";\r\n\r\nconst EntityFormControl = ({\r\n buttonComponent,\r\n title,\r\n columns,\r\n initialData,\r\n entityDefinition,\r\n onSubmit,\r\n disabledColumns,\r\n ...rest\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [mounted, setMounted] = useState(false);\r\n\r\n return (\r\n <>\r\n {buttonComponent({\r\n onClick: () => {\r\n console.log(columns);\r\n setMounted(true);\r\n setOpen(true);\r\n },\r\n })}\r\n {mounted && (\r\n setOpen(false)}\r\n onExited={() => setMounted(false)}\r\n title={title}\r\n columns={columns}\r\n entityDefinition={entityDefinition}\r\n initialData={initialData}\r\n onSubmit={onSubmit}\r\n disabledColumns={disabledColumns}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default EntityFormControl;\r\n\r\nEntityFormControl.propTypes = {\r\n buttonComponent: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n initialData: PropTypes.object.isRequired,\r\n entityDefinition: PropTypes.object.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n disabledColumns: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Table,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableBody,\r\n TablePagination,\r\n makeStyles,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport { Edit } from \"@material-ui/icons\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n headerCell: { fontWeight: \"bold\" },\r\n cell: { padding: \"2px 16px 2px 8px\" },\r\n}));\r\n\r\nconst EntityTable = (props) => {\r\n const {\r\n tableColumns,\r\n disabledColumns,\r\n editColumns,\r\n entityDefinition,\r\n rows,\r\n formTitle,\r\n onEdit,\r\n filterExpression,\r\n ...rest\r\n } = props;\r\n const classes = useStyles();\r\n const [filteredRows, setFilteredRows] = useState(rows);\r\n const [page, setPage] = useState(0);\r\n const [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n useEffect(() => {\r\n const filterTokens = filterExpression\r\n .toLowerCase()\r\n .replace(/&/gi, \"&,\")\r\n .split(\",\");\r\n setFilteredRows(\r\n rows.filter((row) => {\r\n const arrayDisplayRow = tableColumns.map((col) =>\r\n entityDefinition[col].displayValue(row)\r\n );\r\n const arrayDisplayString =\r\n arrayDisplayRow.join(\"&\").toLowerCase() + \"&\";\r\n const matchesAllTokens = !filterTokens.some(\r\n (tok) => !arrayDisplayString.includes(tok)\r\n );\r\n return matchesAllTokens;\r\n })\r\n );\r\n setPage(0);\r\n }, [filterExpression, rows, tableColumns, entityDefinition]);\r\n\r\n const handleChangePage = (event, newPage) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (event) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {tableColumns.map((col) => {\r\n // console.log(col);\r\n // console.log(entityDefinition[col]);\r\n return (\r\n \r\n {entityDefinition[col].displayName.replace(/ /g, \"\\u00a0\")}\r\n \r\n );\r\n })}\r\n \r\n Edit\r\n \r\n \r\n \r\n\r\n \r\n {filteredRows\r\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((rowData) => (\r\n \r\n {tableColumns.map((col) => (\r\n \r\n {(\r\n entityDefinition[col].displayValue(rowData) || \"\"\r\n ).replace(/-/g, \"\\u2011\")}\r\n \r\n ))}\r\n \r\n (\r\n \r\n \r\n \r\n )}\r\n title={formTitle}\r\n columns={editColumns || tableColumns}\r\n entityDefinition={entityDefinition}\r\n initialData={rowData}\r\n onSubmit={onEdit}\r\n disabledColumns={disabledColumns}\r\n />\r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EntityTable;\r\n\r\nEntityTable.defaultProps = {\r\n filterExpression: \"\",\r\n};\r\n\r\nEntityTable.propTypes = {\r\n tableColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n editColumns: PropTypes.arrayOf(PropTypes.string),\r\n disabledColumns: PropTypes.arrayOf(PropTypes.string),\r\n entityDefinition: PropTypes.object.isRequired,\r\n rows: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n formTitle: PropTypes.string.isRequired,\r\n onEdit: PropTypes.func.isRequired,\r\n filterExpression: PropTypes.string,\r\n};\r\n","import React from \"react\";\r\nimport { TextField } from \"@material-ui/core\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst EntityTableFilter = ({ expression, setExpression, ...rest }) => (\r\n setExpression(event.target.value)}\r\n {...rest}\r\n />\r\n);\r\n\r\nexport default EntityTableFilter;\r\n\r\nEntityTableFilter.propTypes = {\r\n expression: PropTypes.string.isRequired,\r\n setExpression: PropTypes.func.isRequired,\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport {\r\n Box,\r\n Button,\r\n Card,\r\n CardActions,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n makeStyles,\r\n Snackbar,\r\n} from \"@material-ui/core\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport clsx from \"clsx\";\r\nimport Axios from \"axios\";\r\nimport { SelectUserIdInputComponent } from \"./InputComponents\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n filter: {\r\n width: \"240px\",\r\n },\r\n root: {\r\n width: \"360px\",\r\n },\r\n spacer: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n\r\nconst ResetPasswordCard = ({ className, ...rest }) => {\r\n const { userData } = useContext(UserDataContext);\r\n const [userId, setUserId] = useState(undefined);\r\n const [snackOpen, setSnackOpen] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const classes = useStyles();\r\n const [key, setKey] = useState(0);\r\n\r\n const resetPassword = async () => {\r\n const request = {\r\n method: \"POST\",\r\n url: `/users/resetPassword/${userId}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n try {\r\n setLoading(true);\r\n await Axios(request);\r\n setSnackOpen(true);\r\n setUserId(undefined);\r\n setKey(key + 1);\r\n } catch (error) {\r\n console.log(error);\r\n console.log(JSON.stringify(error.response.data.errors));\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n setSnackOpen(false)}\r\n message=\"Password successfully reset.\"\r\n />\r\n\r\n \r\n \r\n \r\n setUserId(value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Reset\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ResetPasswordCard;\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport { userDefinition, columns, defaultUser } from \"./UserEntityClass\";\r\nimport clsx from \"clsx\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport Axios from \"axios\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityTable from \"./EntityTable\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport ResetPasswordCard from \"./ResetPasswordCard\";\r\nimport {\r\n SelectActiveInputComponent,\r\n SelectRoleIdInputComponent,\r\n SelectVendorIdInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n center: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nconst UserPage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [userList, setUserList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n active: \"\",\r\n roleId: undefined,\r\n vendorId: \"\",\r\n });\r\n\r\n const fetchUsers = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => Boolean(filterParameters[key]))\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/users/search?${queryString}`,\r\n // url: `/users`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n console.log(res.data);\r\n setUserList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const createUser = async (newUser, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/users/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: { ...newUser, id: Number(newUser.id) },\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchUsers();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const editUser = async (editedUser, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/users/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: { ...editedUser, id: Number(editedUser.id) },\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchUsers();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create User\"\r\n columns={columns}\r\n initialData={defaultUser}\r\n entityDefinition={userDefinition}\r\n onSubmit={createUser}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UserPage;\r\n","import {\r\n GenericDateIsoStringInputComponent,\r\n GenericDisabledTextInputComponent,\r\n GenericFreeTextInputComponent,\r\n GstNumberInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const vendorDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n displayValue: (vendor) => String(vendor.id),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => String(vendor.id) !== \"\",\r\n },\r\n\r\n tradingName: {\r\n displayName: \"Name\",\r\n displayValue: (vendor) => String(vendor.tradingName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => vendor.tradingName !== \"\",\r\n },\r\n\r\n gstNo: {\r\n displayName: \"GST No.\",\r\n displayValue: (vendor) => String(vendor.gstNo),\r\n inputComponent: GstNumberInputComponent,\r\n isValid: (vendor) => /\\d{3}-\\d{3}-\\d{3}/.test(vendor.gstNo),\r\n },\r\n\r\n contactName: {\r\n displayName: \"Contact Name\",\r\n displayValue: (vendor) => String(vendor.contactName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => vendor.contactName !== \"\",\r\n },\r\n\r\n phone: {\r\n displayName: \"Phone No.\",\r\n displayValue: (vendor) => String(vendor.phone),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => /\\d*/.test(vendor.phone),\r\n },\r\n\r\n mobile: {\r\n displayName: \"Mobile No.\",\r\n displayValue: (vendor) => String(vendor.mobile),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => /\\d*/.test(vendor.mobile),\r\n },\r\n\r\n street: {\r\n displayName: \"Street\",\r\n displayValue: (vendor) => String(vendor.street),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => vendor.street !== \"\",\r\n },\r\n\r\n suburb: {\r\n displayName: \"Suburb\",\r\n displayValue: (vendor) => String(vendor.suburb),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => vendor.suburb !== \"\",\r\n },\r\n\r\n city: {\r\n displayName: \"City\",\r\n displayValue: (vendor) => String(vendor.city),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => vendor.city !== \"\",\r\n },\r\n\r\n postCode: {\r\n displayName: \"Post Code\",\r\n displayValue: (vendor) => String(vendor.postCode),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (vendor) => /\\d{4}/.test(vendor.postCode),\r\n },\r\n\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport const columns = [\r\n \"id\",\r\n \"tradingName\",\r\n \"gstNo\",\r\n \"contactName\",\r\n \"phone\",\r\n \"mobile\",\r\n \"street\",\r\n \"suburb\",\r\n \"city\",\r\n \"postCode\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nexport const defaultVendor = {\r\n id: \"\",\r\n tradingName: \"\",\r\n gstNo: \"\",\r\n contactName: \"\",\r\n phone: \"\",\r\n mobile: \"\",\r\n street: \"\",\r\n suburb: \"\",\r\n city: \"\",\r\n postCode: \"\",\r\n startDate: undefined,\r\n endDate: undefined,\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport { vendorDefinition, columns, defaultVendor } from \"./VendorEntityClass\";\r\nimport clsx from \"clsx\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport Axios from \"axios\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityTable from \"./EntityTable\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport { SelectActiveInputComponent } from \"./InputComponents\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n center: {\r\n textAlign: \"center\",\r\n },\r\n}));\r\n\r\nconst VendorPage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [vendorList, setVendorList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n active: \"true\",\r\n });\r\n\r\n const fetchVendors = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => filterParameters[key] !== \"\")\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/vendors/search?${queryString}`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n console.log(res.data);\r\n setVendorList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const create = async (newEntity, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/vendors/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: newEntity,\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchVendors();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const edit = async (editedEntity, onSuccessCallback, onFailCallback) => {\r\n console.log(editedEntity);\r\n const request = {\r\n method: \"POST\",\r\n url: \"/vendors/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: editedEntity,\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchVendors();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create Vendor\"\r\n columns={columns}\r\n initialData={defaultVendor}\r\n entityDefinition={vendorDefinition}\r\n onSubmit={create}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default VendorPage;\r\n","import {\r\n GenericNumericInputComponent,\r\n GenericDateIsoStringInputComponent,\r\n SelectOwnerDriverUserIdInputComponent,\r\n SelectTollAdminUserIdInputComponent,\r\n SelectTollManagerUserIdInputComponent,\r\n GenericDisabledTextInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const truckDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n value: \"\",\r\n type: \"string\",\r\n displayValue: (entity) => String(entity.id),\r\n inputComponent: GenericDisabledTextInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n truckId: {\r\n displayName: \"Truck No.\",\r\n displayValue: (entity) => String(entity.truckId),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) => Boolean(entity.truckId),\r\n },\r\n\r\n userId: {\r\n displayName: \"Driver 1\",\r\n displayValue: (entity) => String(entity.userId),\r\n inputComponent: SelectOwnerDriverUserIdInputComponent,\r\n isValid: (entity) => Boolean(entity.userId),\r\n },\r\n\r\n adminUserId: {\r\n displayName: \"Admin 1\",\r\n displayValue: (entity) => String(entity.adminUserId),\r\n inputComponent: SelectTollAdminUserIdInputComponent,\r\n isValid: (entity) => Boolean(entity.adminUserId),\r\n },\r\n\r\n managerUserId: {\r\n displayName: \"Manager 1\",\r\n displayValue: (entity) => String(entity.managerUserId),\r\n inputComponent: SelectTollManagerUserIdInputComponent,\r\n isValid: (entity) => Boolean(entity.managerUserId),\r\n },\r\n\r\n backupUserId: {\r\n displayName: \"Driver 2\",\r\n displayValue: (entity) => String(entity.backupUserId || \"\"),\r\n inputComponent: SelectOwnerDriverUserIdInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n backupAdminUserId: {\r\n displayName: \"Admin 2\",\r\n displayValue: (entity) => String(entity.backupAdminUserId || \"\"),\r\n inputComponent: SelectTollAdminUserIdInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n backupManagerUserId: {\r\n displayName: \"Manager 2\",\r\n displayValue: (entity) => String(entity.backupManagerUserId || \"\"),\r\n inputComponent: SelectTollManagerUserIdInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return Boolean(entity.startDate);\r\n }\r\n },\r\n },\r\n\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport const columns = [\r\n // \"id\",\r\n \"truckId\",\r\n \"userId\",\r\n \"adminUserId\",\r\n \"managerUserId\",\r\n \"backupUserId\",\r\n \"backupAdminUserId\",\r\n \"backupManagerUserId\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nexport const defaultTruck = {\r\n id: 0,\r\n truckId: undefined,\r\n userId: undefined,\r\n adminUserId: undefined,\r\n managerUserId: undefined,\r\n backupUserId: undefined,\r\n backupAdminUserId: undefined,\r\n backupManagerUserId: undefined,\r\n startDate: undefined,\r\n endDate: undefined,\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport clsx from \"clsx\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport { columns, defaultTruck, truckDefinition } from \"./TruckEntityClass\";\r\nimport Axios from \"axios\";\r\nimport {\r\n SelectActiveInputComponent,\r\n SelectStateInputComponent,\r\n SelectVendorIdInputComponent,\r\n} from \"./InputComponents\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityTable from \"./EntityTable\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst TruckPage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [truckList, setTruckList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n state: undefined,\r\n vendorId: \"\",\r\n });\r\n\r\n const fetchTrucks = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => Boolean(filterParameters[key]))\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/trucks/search?${queryString}`,\r\n // url: `/users`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n setTruckList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const createTruck = async (newTruck, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/trucks/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: { ...newTruck, truckId: Number(newTruck.truckId) },\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchTrucks();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const editTruck = async (editedTruck, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/trucks/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: { ...editedTruck, truckId: Number(editedTruck.truckId) },\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchTrucks();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create Truck\"\r\n columns={columns}\r\n initialData={defaultTruck}\r\n entityDefinition={truckDefinition}\r\n onSubmit={createTruck}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TruckPage;\r\n","import {\r\n GenericDateIsoStringInputComponent,\r\n GenericDisabledTextInputComponent,\r\n GenericFreeTextInputComponent,\r\n GenericNumericInputComponent,\r\n GenericPercentageInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const branchDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n displayValue: (entity) => String(entity.id),\r\n inputComponent: GenericDisabledTextInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n branchName: {\r\n displayName: \"Branch Name\",\r\n displayValue: (entity) => entity.branchName,\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => entity.branchName !== \"\",\r\n },\r\n shortCode: {\r\n displayName: \"Short Code\",\r\n displayValue: (entity) => entity.shortCode,\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => entity.shortCode !== \"\",\r\n },\r\n lclLinehaulCostCentre: {\r\n displayName: \"LCL CC\",\r\n displayValue: (entity) => String(entity.lclLinehaulCostCentre),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) => /\\d+/.test(String(entity.lclLinehaulCostCentre)),\r\n },\r\n parcelCostCentre: {\r\n displayName: \"Parcel CC\",\r\n displayValue: (entity) => String(entity.parcelCostCentre),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) => /\\d+/.test(String(entity.parcelCostCentre)),\r\n },\r\n faf: {\r\n displayName: \"FAF\",\r\n displayValue: (entity) => `${parseFloat((entity.faf * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) => {\r\n console.log(entity.faf);\r\n if (entity.faf === 1) {\r\n return true;\r\n }\r\n return /^0(\\.\\d{1,4})?$/.test(String(entity.faf));\r\n },\r\n },\r\n linehaulFAF: {\r\n displayName: \"Linehaul FAF\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.linehaulFAF * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) => {\r\n if (entity.linehaulFAF === 1) {\r\n return true;\r\n }\r\n return /^0(\\.\\d{1,4})?$/.test(String(entity.linehaulFAF));\r\n },\r\n },\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n endDate: {\r\n displayName: \"End\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport const columns = [\r\n \"id\",\r\n \"branchName\",\r\n \"shortCode\",\r\n \"lclLinehaulCostCentre\",\r\n \"parcelCostCentre\",\r\n \"faf\",\r\n \"linehaulFAF\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nexport const defaultBranch = {\r\n id: 0,\r\n branchName: \"\",\r\n shortCode: \"\",\r\n lclLinehaulCostCentre: undefined,\r\n parcelCostCentre: undefined,\r\n faf: undefined,\r\n linehaulFAF: undefined,\r\n startDate: undefined,\r\n endDate: undefined,\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport clsx from \"clsx\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport { columns, defaultBranch, branchDefinition } from \"./BranchEntityClass\";\r\nimport Axios from \"axios\";\r\nimport {\r\n SelectActiveInputComponent,\r\n SelectStateInputComponent,\r\n SelectVendorIdInputComponent,\r\n} from \"./InputComponents\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityTable from \"./EntityTable\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst BranchPage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [branchList, setbranchList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n state: undefined,\r\n });\r\n\r\n const fetchBranches = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => filterParameters[key])\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/branches/search?${queryString}`,\r\n // url: `/users`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n console.log(res.data);\r\n setbranchList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const createBranch = async (entity, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/branches/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: entity,\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchBranches();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const editBranch = async (entity, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/branches/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: entity,\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchBranches();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create Branch\"\r\n columns={columns}\r\n initialData={defaultBranch}\r\n entityDefinition={branchDefinition}\r\n onSubmit={createBranch}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BranchPage;\r\n","import {\r\n CostCentreArrayInputComponent,\r\n GenericCurrencyInputComponent,\r\n GenericDateIsoStringInputComponent,\r\n GenericDisabledTextInputComponent,\r\n SelectTruckIdInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const rateDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n displayValue: (entity) => String(entity.id),\r\n inputComponent: GenericDisabledTextInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n\r\n truckId: {\r\n displayName: \"Truck\",\r\n displayValue: (entity) => String(entity.truckId),\r\n inputComponent: SelectTruckIdInputComponent,\r\n isValid: (entity) => entity.truckId !== undefined,\r\n },\r\n floatingRate: {\r\n displayName: \"Floating Rate\",\r\n displayValue: (entity) =>\r\n entity.floatingRate\r\n ? `$${(Math.round(entity.floatingRate * 100) / 100).toFixed(2)}`\r\n : \"\",\r\n inputComponent: GenericCurrencyInputComponent,\r\n isValid: (entity) =>\r\n Boolean(!entity.floatingRate) ||\r\n /^\\d+(\\.\\d{1,6})?$/.test(String(entity.floatingRate)),\r\n },\r\n\r\n baseFee: {\r\n displayName: \"Base Fee\",\r\n displayValue: (entity) =>\r\n entity.baseFee\r\n ? `$${(Math.round(entity.baseFee * 100) / 100).toFixed(2)}`\r\n : \"\",\r\n inputComponent: GenericCurrencyInputComponent,\r\n // isValid: (entity) => /^\\d+(\\.\\d{1,6})?$/.test(String(entity.baseFee)),\r\n isValid: (entity) => {\r\n if (entity.baseFee && entity.topup) return false;\r\n else if (!entity.baseFee) return true;\r\n else return /^\\d{0,6}(\\.\\d{1,6})?$/.test(String(entity.baseFee));\r\n },\r\n },\r\n\r\n topup: {\r\n displayName: \"Topup\",\r\n displayValue: (entity) =>\r\n entity.topup\r\n ? `$${(Math.round(entity.topup * 100) / 100).toFixed(2)}`\r\n : \"\",\r\n inputComponent: GenericCurrencyInputComponent,\r\n isValid: (entity) => {\r\n if (entity.baseFee && entity.topup) return false;\r\n else if (!entity.topup) return true;\r\n else return /^\\d{0,6}(\\.\\d{1,6})?$/.test(String(entity.topup));\r\n },\r\n },\r\n\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n\r\n ccArr: {\r\n displayName: \"Cost Centres\",\r\n displayValue: (entity) => \"display function not implemented\",\r\n inputComponent: CostCentreArrayInputComponent,\r\n isValid: (entity) => {\r\n console.log(entity.ccArr);\r\n // const notEmpty = entity.ccArr.length > 0;\r\n const percentSum = Number(\r\n Number(\r\n entity.ccArr.reduce((acc, cur) => acc + (cur.percentage || 0), 0)\r\n ).toFixed(4)\r\n );\r\n const percentSumTo100 = percentSum === 1;\r\n const allBranchSelected = !entity.ccArr.some((cc) => cc.shortCode === \"\");\r\n const allCcSelected = !entity.ccArr.some((cc) => cc.isParcel === \"\");\r\n // console.log(\"notEmpty\", notEmpty);\r\n console.log(\"percentSumTo100\", percentSumTo100);\r\n console.log(\r\n \"neither basefee nor topup\",\r\n !(entity.baseFee || entity.topup)\r\n );\r\n console.log(\"allCcSelected\", allCcSelected);\r\n console.log(\"allBranchSelected\", allBranchSelected);\r\n return (\r\n // notEmpty &&\r\n (percentSumTo100 || !(entity.baseFee || entity.topup)) &&\r\n allCcSelected &&\r\n allBranchSelected\r\n );\r\n },\r\n },\r\n};\r\n\r\nexport const columns = [\r\n \"id\",\r\n \"truckId\",\r\n \"floatingRate\",\r\n \"baseFee\",\r\n \"topup\",\r\n \"ccArr\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nexport const defaultRate = {\r\n id: 0,\r\n truckId: undefined,\r\n floatingRate: undefined,\r\n baseFee: undefined,\r\n topup: undefined,\r\n startDate: undefined,\r\n endDate: undefined,\r\n ccArr: [\r\n {\r\n id: \"0\",\r\n shortCode: \"\",\r\n isParcel: \"\",\r\n percentage: 0,\r\n costCentre: \"\",\r\n },\r\n ],\r\n};\r\n\r\n/*\r\n\r\n|a |b |a or b |not (a or b)\r\n|------|------|-----------|------------\r\n|0 |0 |0 |1\r\n|0 |1 |1 |0\r\n|1 |0 |1 |0\r\n|1 |1 |1 |0\r\n\r\n|a |b |not a |not b |(not a) and (not b)\r\n|------|------|----------|----------|-------------------\r\n|0 |0 |1 |1 |1\r\n|0 |1 |1 |0 |0\r\n|1 |0 |0 |1 |0\r\n|1 |1 |0 |0 |0\r\n\r\n*/\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport clsx from \"clsx\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport { columns, defaultRate, rateDefinition } from \"./RateEntityClass\";\r\nimport Axios from \"axios\";\r\nimport {\r\n SelectActiveInputComponent,\r\n SelectStateInputComponent,\r\n SelectTruckIdInputComponent,\r\n SelectVendorIdInputComponent,\r\n} from \"./InputComponents\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityTable from \"./EntityTable\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst RatePage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [rateList, setRateList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n state: undefined,\r\n truckId: undefined,\r\n });\r\n\r\n const fetchDistinctBranches = async () => {\r\n const requestActive = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=1\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n const requestWaiting = {\r\n method: \"GET\",\r\n url: \"/branches/search?state=2\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const [resActive, resWaiting] = await Promise.all([\r\n Axios(requestActive),\r\n Axios(requestWaiting),\r\n ]);\r\n // get unique list of active + waiting branches, filter by duplicate shortCode.\r\n const uniqueList = [\r\n ...resActive.data.map((branch) => ({ ...branch, state: 1 })),\r\n ...resWaiting.data.map((branch) => ({ ...branch, state: 2 })),\r\n ]\r\n .reduce(\r\n (acc, cur) =>\r\n acc.some((branch) => branch.shortCode === cur.shortCode)\r\n ? acc\r\n : [...acc, cur],\r\n []\r\n )\r\n .sort((a, b) => {\r\n if (a.shortCode > b.shortCode) return 1;\r\n if (a.shortCode < b.shortCode) return -1;\r\n return 0;\r\n });\r\n // uniqueList.forEach((branch) => console.log(branch.shortCode));\r\n return uniqueList;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const fetchRates = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => Boolean(filterParameters[key]))\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/truckpayments/search?${queryString}`,\r\n // url: `/users`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n const rateListWthCcArr = res.data.map((rate) => {\r\n const ccArr =\r\n rate.truckPaymentBasefees.length > rate.truckPaymentTopups.length\r\n ? rate.truckPaymentBasefees\r\n : rate.truckPaymentTopups;\r\n return {\r\n ...rate,\r\n ccArr,\r\n };\r\n });\r\n console.log(rateListWthCcArr);\r\n setRateList(rateListWthCcArr);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const createRate = async (entity, onSuccessCallback, onFailCallback) => {\r\n try {\r\n const branchList = await fetchDistinctBranches();\r\n // filter the branch by short code to find the cost centre\r\n const ccArr = entity.ccArr.map((cc) => {\r\n const [branch] = branchList.filter(\r\n (branch) => branch.shortCode === cc.shortCode\r\n );\r\n const costCentre = cc.isParcel\r\n ? branch.parcelCostCentre\r\n : branch.lclLinehaulCostCentre;\r\n\r\n return { ...cc, id: 0, costCentre };\r\n });\r\n\r\n // only one of these should be sent to the back end\r\n const truckPaymentBasefees = entity.baseFee ? ccArr : undefined;\r\n const truckPaymentTopups = entity.topup ? ccArr : undefined;\r\n\r\n const request = {\r\n method: \"POST\",\r\n url: \"/truckpayments/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: {\r\n ...entity,\r\n ccArr,\r\n truckPaymentBasefees,\r\n truckPaymentTopups,\r\n },\r\n };\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchRates();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const editRate = async (entity, onSuccessCallback, onFailCallback) => {\r\n try {\r\n const branchList = await fetchDistinctBranches();\r\n // filter the branch by short code to find the cost centre\r\n const ccArr = entity.ccArr.map((cc) => {\r\n const [branch] = branchList.filter(\r\n (branch) => branch.shortCode === cc.shortCode\r\n );\r\n const costCentre = cc.isParcel\r\n ? branch.parcelCostCentre\r\n : branch.lclLinehaulCostCentre;\r\n\r\n return { ...cc, id: 0, costCentre };\r\n });\r\n\r\n // only one of these should be sent to the back end\r\n const truckPaymentBasefees = entity.baseFee ? ccArr : undefined;\r\n const truckPaymentTopups = entity.topup ? ccArr : undefined;\r\n\r\n const request = {\r\n method: \"POST\",\r\n url: \"/truckpayments/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: {\r\n ...entity,\r\n ccArr,\r\n truckPaymentBasefees,\r\n truckPaymentTopups,\r\n },\r\n };\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchRates();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n // const editRate = async (entity, onSuccessCallback, onFailCallback) => {\r\n // const request = {\r\n // method: \"POST\",\r\n // url: \"/truckpayments/change\",\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // Authorization: `bearer ${userData.token}`,\r\n // },\r\n // data: entity,\r\n // };\r\n // try {\r\n // await Axios(request);\r\n // onSuccessCallback();\r\n // fetchRates();\r\n // } catch (error) {\r\n // console.log(error);\r\n // onFailCallback(error.response.data.message);\r\n // }\r\n // };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create Rate\"\r\n columns={columns}\r\n initialData={defaultRate}\r\n entityDefinition={rateDefinition}\r\n onSubmit={createRate}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RatePage;\r\n","import {\r\n GenericCurrencyInputComponent,\r\n GenericDateIsoStringInputComponent,\r\n GenericDisabledTextInputComponent,\r\n GenericFreeTextInputComponent,\r\n SelectFixedOrRoundInputComponent,\r\n SelectLclCostCentreInputComponent,\r\n GenericPercentageInputComponent,\r\n GenericNumericInputComponent,\r\n SelectAndFilterTruckIdInputComponent,\r\n} from \"./InputComponents\";\r\n\r\nexport const routeDefinition = {\r\n id: {\r\n displayName: \"ID\",\r\n displayValue: (entity) => String(entity.id),\r\n inputComponent: GenericDisabledTextInputComponent,\r\n isValid: (entity) => true,\r\n },\r\n truckId: {\r\n displayName: \"Truck\",\r\n displayValue: (entity) => String(entity.truckId),\r\n inputComponent: SelectAndFilterTruckIdInputComponent,\r\n isValid: (entity) => entity.truckId !== undefined,\r\n },\r\n routeName: {\r\n displayName: \"Name\",\r\n displayValue: (entity) => String(entity.routeName),\r\n inputComponent: GenericFreeTextInputComponent,\r\n isValid: (entity) => entity.routeName !== \"\",\r\n },\r\n dpcTypeId: {\r\n displayName: \"Type\",\r\n displayValue: (entity) => String(entity.dpcTypeId),\r\n inputComponent: SelectFixedOrRoundInputComponent,\r\n isValid: (entity) => entity.dpcTypeId !== undefined,\r\n },\r\n routeRate: {\r\n displayName: \"Rate\",\r\n displayValue: (entity) =>\r\n `$${(Math.round(entity.routeRate * 100) / 100).toFixed(2)}`,\r\n inputComponent: GenericCurrencyInputComponent,\r\n isValid: (entity) => /^\\d+(\\.\\d{1,6})?$/.test(String(entity.routeRate)),\r\n },\r\n adjustmentCostCentre: {\r\n displayName: \"Adjustment Cost Centre\",\r\n displayValue: (entity) => String(entity.adjustmentCostCentre),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n isValid: (entity) => /^\\d+$/.test(String(entity.adjustmentCostCentre)),\r\n },\r\n costCentre1: {\r\n displayName: \"Cost Centre 1\",\r\n displayValue: (entity) => String(entity.costCentre1),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n // inputComponent: SelectCostCentreInputComponent,\r\n isValid: (entity) => /^\\d+$/.test(String(entity.costCentre1)),\r\n },\r\n accountCode1: {\r\n displayName: \"Account Code 1\",\r\n displayValue: (entity) => String(entity.accountCode1),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) => /^\\d+$/.test(String(entity.accountCode1)),\r\n },\r\n percentage1: {\r\n displayName: \"Percentage 1\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.percentage1 * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) => percentageSum(entity),\r\n },\r\n costCentre2: {\r\n displayName: \"Cost Centre 2\",\r\n displayValue: (entity) => String(entity.costCentre2),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n // inputComponent: SelectCostCentreInputComponent,\r\n isValid: (entity) =>\r\n entity.costCentre2\r\n ? /^\\d+$/.test(String(entity.costCentre2)) &&\r\n entity.costCentre1 &&\r\n entity.accountCode1 &&\r\n entity.percentage1\r\n : true,\r\n },\r\n accountCode2: {\r\n displayName: \"Account Code 2\",\r\n displayValue: (entity) => String(entity.accountCode2),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) =>\r\n entity.accountCode2\r\n ? /^\\d+$/.test(String(entity.accountCode2)) &&\r\n entity.costCentre1 &&\r\n entity.accountCode1 &&\r\n entity.percentage1\r\n : true,\r\n },\r\n percentage2: {\r\n displayName: \"Percentage 2\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.percentage2 * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) =>\r\n entity.percentage2\r\n ? percentageSum(entity) &&\r\n entity.costCentre1 &&\r\n entity.accountCode1 &&\r\n entity.percentage1\r\n : true,\r\n },\r\n costCentre3: {\r\n displayName: \"Cost Centre 3\",\r\n displayValue: (entity) => String(entity.costCentre3),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n // inputComponent: SelectCostCentreInputComponent,\r\n isValid: (entity) =>\r\n entity.costCentre3\r\n ? /^\\d+$/.test(String(entity.costCentre3)) &&\r\n entity.costCentre2 &&\r\n entity.accountCode2 &&\r\n entity.percentage2\r\n : true,\r\n },\r\n accountCode3: {\r\n displayName: \"Account Code 3\",\r\n displayValue: (entity) => String(entity.accountCode3),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) =>\r\n entity.accountCode3\r\n ? /^\\d+$/.test(String(entity.accountCode3)) &&\r\n entity.costCentre2 &&\r\n entity.accountCode2 &&\r\n entity.percentage2\r\n : true,\r\n },\r\n percentage3: {\r\n displayName: \"Percentage 3\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.percentage3 * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) =>\r\n entity.percentage3\r\n ? percentageSum(entity) &&\r\n entity.costCentre2 &&\r\n entity.accountCode2 &&\r\n entity.percentage2\r\n : true,\r\n },\r\n costCentre4: {\r\n displayName: \"Cost Centre 4\",\r\n displayValue: (entity) => String(entity.costCentre4),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n // inputComponent: SelectCostCentreInputComponent,\r\n isValid: (entity) =>\r\n entity.costCentre4\r\n ? /^\\d+$/.test(String(entity.costCentre4)) &&\r\n entity.costCentre3 &&\r\n entity.accountCode3 &&\r\n entity.percentage3\r\n : true,\r\n },\r\n accountCode4: {\r\n displayName: \"Account Code 4\",\r\n displayValue: (entity) => String(entity.accountCode4),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) =>\r\n entity.accountCode4\r\n ? /^\\d+$/.test(String(entity.accountCode4)) &&\r\n entity.costCentre3 &&\r\n entity.accountCode3 &&\r\n entity.percentage3\r\n : true,\r\n },\r\n percentage4: {\r\n displayName: \"Percentage 4\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.percentage4 * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) =>\r\n entity.percentage3\r\n ? percentageSum(entity) &&\r\n entity.costCentre3 &&\r\n entity.accountCode3 &&\r\n entity.percentage3\r\n : true,\r\n },\r\n costCentre5: {\r\n displayName: \"Cost Centre 5\",\r\n displayValue: (entity) => String(entity.costCentre5),\r\n inputComponent: SelectLclCostCentreInputComponent,\r\n // inputComponent: SelectCostCentreInputComponent,\r\n isValid: (entity) =>\r\n entity.costCentre5\r\n ? /^\\d+$/.test(String(entity.costCentre5)) &&\r\n entity.costCentre4 &&\r\n entity.accountCode4 &&\r\n entity.percentage4\r\n : true,\r\n },\r\n accountCode5: {\r\n displayName: \"Account Code 5\",\r\n displayValue: (entity) => String(entity.accountCode5),\r\n inputComponent: GenericNumericInputComponent,\r\n isValid: (entity) =>\r\n entity.accountCode5\r\n ? /^\\d+$/.test(String(entity.accountCode5)) &&\r\n entity.costCentre4 &&\r\n entity.accountCode4 &&\r\n entity.percentage4\r\n : true,\r\n },\r\n percentage5: {\r\n displayName: \"Percentage 5\",\r\n displayValue: (entity) =>\r\n `${parseFloat((entity.percentage5 * 100).toFixed(2))}%`,\r\n inputComponent: GenericPercentageInputComponent,\r\n isValid: (entity) =>\r\n entity.percentage3\r\n ? percentageSum(entity) &&\r\n entity.costCentre4 &&\r\n entity.accountCode4 &&\r\n entity.percentage4\r\n : true,\r\n },\r\n startDate: {\r\n displayName: \"Start Date\",\r\n displayValue: (entity) =>\r\n entity.startDate ? entity.startDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n endDate: {\r\n displayName: \"End Date\",\r\n displayValue: (entity) =>\r\n entity.endDate ? entity.endDate.split(\"T\")[0] : \"\",\r\n inputComponent: GenericDateIsoStringInputComponent,\r\n isValid: (entity) => {\r\n if (entity.startDate && entity.endDate) {\r\n return entity.startDate <= entity.endDate;\r\n } else {\r\n return true;\r\n }\r\n },\r\n },\r\n};\r\n\r\nexport const defaultRoute = {\r\n id: 0,\r\n truckId: undefined,\r\n routeName: \"\",\r\n dpcTypeId: 4,\r\n routeRate: undefined,\r\n adjustmentCostCentre: undefined,\r\n costCentre1: undefined,\r\n accountCode1: 22006,\r\n percentage1: undefined,\r\n costCentre2: undefined,\r\n accountCode2: 22006,\r\n percentage2: undefined,\r\n costCentre3: undefined,\r\n accountCode3: 22006,\r\n percentage3: undefined,\r\n costCentre4: undefined,\r\n accountCode4: 22006,\r\n percentage4: undefined,\r\n costCentre5: undefined,\r\n accountCode5: 22006,\r\n percentage5: undefined,\r\n startDate: undefined,\r\n endDate: undefined,\r\n};\r\n\r\nexport const columns = [\r\n \"id\",\r\n \"truckId\",\r\n \"routeName\",\r\n // \"dpcTypeId\",\r\n \"routeRate\",\r\n \"adjustmentCostCentre\",\r\n \"costCentre1\",\r\n // \"accountCode1\",\r\n \"percentage1\",\r\n \"costCentre2\",\r\n // \"accountCode2\",\r\n \"percentage2\",\r\n \"costCentre3\",\r\n // \"accountCode3\",\r\n \"percentage3\",\r\n \"costCentre4\",\r\n // \"accountCode4\",\r\n \"percentage4\",\r\n \"costCentre5\",\r\n // \"accountCode5\",\r\n \"percentage5\",\r\n \"startDate\",\r\n \"endDate\",\r\n];\r\n\r\nconst percentageSum = (entity) => {\r\n const sum =\r\n (entity.percentage1 || 0) +\r\n (entity.percentage2 || 0) +\r\n (entity.percentage3 || 0) +\r\n (entity.percentage4 || 0) +\r\n (entity.percentage5 || 0);\r\n\r\n return Math.abs(1 - sum) < 0.0001;\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport { Box, Fab, makeStyles } from \"@material-ui/core\";\r\nimport clsx from \"clsx\";\r\nimport { UserDataContext } from \"../../Contexts/UserDataContext\";\r\nimport EntityFormControl from \"./EntityFormControl\";\r\nimport { Add, Search } from \"@material-ui/icons\";\r\nimport { columns, defaultRoute, routeDefinition } from \"./RouteEntityClass\";\r\nimport Axios from \"axios\";\r\nimport {\r\n SelectActiveInputComponent,\r\n SelectStateInputComponent,\r\n SelectTruckIdInputComponent,\r\n} from \"./InputComponents\";\r\nimport EntityTableFilter from \"./EntityTableFilter\";\r\nimport EntityTable from \"./EntityTable\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n flexRowContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n filter: {\r\n width: \"160px\",\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n tableFilter: {\r\n flexGrow: 1,\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n marginRight: {\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst RoutePage = (props) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n const { userData } = useContext(UserDataContext);\r\n const [routeList, setRouteList] = useState([]);\r\n const [filterExpression, setFilterExpression] = useState(\"\");\r\n const [filterParameters, setFilterParameters] = useState({\r\n state: undefined,\r\n truckId: undefined,\r\n });\r\n\r\n const fetchRoutes = async () => {\r\n const queryString = Object.keys(filterParameters)\r\n .filter((key) => Boolean(filterParameters[key]))\r\n .map((key) => `${key}=${filterParameters[key]}`)\r\n .join(\"&\");\r\n\r\n const request = {\r\n method: \"GET\",\r\n url: `/routes/search?${queryString}`,\r\n // url: `/users`,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n };\r\n\r\n try {\r\n const res = await Axios(request);\r\n console.log(res.data);\r\n setRouteList(res.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const createRoute = async (entity, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/routes/add\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: entity,\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchRoutes();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n const editRoute = async (entity, onSuccessCallback, onFailCallback) => {\r\n const request = {\r\n method: \"POST\",\r\n url: \"/routes/change\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${userData.token}`,\r\n },\r\n data: {\r\n ...entity,\r\n costCentre1: entity.costCentre1 || undefined,\r\n costCentre2: entity.costCentre2 || undefined,\r\n costCentre3: entity.costCentre3 || undefined,\r\n costCentre4: entity.costCentre4 || undefined,\r\n costCentre5: entity.costCentre5 || undefined,\r\n },\r\n };\r\n try {\r\n await Axios(request);\r\n onSuccessCallback();\r\n fetchRoutes();\r\n } catch (error) {\r\n console.log(error);\r\n onFailCallback(error.response.data.message);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n \r\n \r\n Create\r\n \r\n )}\r\n title=\"Create Route\"\r\n columns={columns}\r\n initialData={defaultRoute}\r\n entityDefinition={routeDefinition}\r\n onSubmit={createRoute}\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n setFilterParameters({ ...filterParameters, [name]: value })\r\n }\r\n />\r\n \r\n \r\n Search\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RoutePage;\r\n","import React, { useState } from \"react\";\r\nimport { Box, Paper, Tab, Tabs } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\nimport UserPage from \"./UserPage\";\r\nimport VendorPage from \"./VendorPage\";\r\nimport TruckPage from \"./TruckPage\";\r\nimport BranchPage from \"./BranchPage\";\r\nimport RatePage from \"./RatePage\";\r\nimport RoutePage from \"./RoutePage\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n tabs: {\r\n flexGrow: 1,\r\n },\r\n flexColContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n flexColItem: {\r\n margin: theme.spacing(0, 0, 4, 0),\r\n },\r\n}));\r\n\r\nconst MasterDataPage = () => {\r\n const [tab, setTab] = useState(0);\r\n const classes = useStyles();\r\n\r\n const entityPageList = [\r\n ,\r\n ,\r\n ,\r\n ,\r\n ,\r\n ,\r\n ];\r\n\r\n const handleChange = (event, newValue) => setTab(newValue);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {entityPageList[tab]}\r\n \r\n );\r\n};\r\n\r\nexport default MasterDataPage;\r\n","import React, { useContext } from \"react\";\r\nimport { Switch, Route, Redirect } from \"react-router-dom\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport NavBar from \"./NavBar\";\r\nimport SideMenu from \"./SideMenu\";\r\nimport Dashboard from \"./Dashboard\";\r\nimport SettingsPage from \"./SettingsPage\";\r\nimport TruckRoute from \"./TruckRoute\";\r\nimport { UserDataContext } from \"../Contexts/UserDataContext\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport InvoicePage from \"./InvoicePage\";\r\nimport WeeklyAuditPage from \"./WeeklyAuditPage\";\r\nimport InvoiceAuditPage from \"./InvoiceAuditPage\";\r\nimport LclDataContextProvider from \"../Contexts/LclDataContext\";\r\nimport ParcelDataContextProvider from \"../Contexts/ParcelDataContext\";\r\nimport HourlyDataContextProvider from \"../Contexts/HourlyDataContext\";\r\nimport LinehaulFixedDataContextProvider from \"../Contexts/LinehaulFixedDataContext\";\r\nimport LinehaulFloatingDataContextProvider from \"../Contexts/LinehaulFloatingDataContext\";\r\nimport MasterDataPage from \"./MasterData/MasterDataPage\";\r\nimport ChangePasswordForm from \"./ChangePasswordForm\";\r\nimport { useIdleTimer } from \"react-idle-timer\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n pageContainer: {\r\n marginTop: theme.spacing(4),\r\n },\r\n}));\r\n\r\nconst PageRoute = () => {\r\n const classes = useStyles();\r\n const { userData, logout } = useContext(UserDataContext);\r\n\r\n console.log(\"page route render\");\r\n\r\n useIdleTimer({\r\n timeout: 1000 * 60 * 30, // in miliseconds - 30 minutes\r\n // timeout: 1000 * 60, // in miliseconds - 1 minute (test only)\r\n // timeout: 1000 * 20, // in miliseconds - 20 seconds (test only)\r\n onIdle: logout,\r\n });\r\n\r\n return (\r\n <>\r\n {userData.resetPassword && (\r\n \r\n \r\n \r\n )}\r\n\r\n {userData.resetPassword !== undefined && !userData.resetPassword && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n exact\r\n />\r\n }\r\n exact\r\n />\r\n }\r\n />\r\n }\r\n exact\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default PageRoute;\r\n","import React, { useEffect } from \"react\";\r\nimport { Switch, Route } from \"react-router-dom\";\r\nimport AuthenticatedRoute from \"./AuthenticatedRoute\";\r\nimport LoginPageMfa from \"./LoginPageMfa\";\r\nimport PageRoute from \"./PageRoute\";\r\n\r\nexport const App = () => {\r\n useEffect(() => {\r\n // set base URL for requests\r\n const origin = window.location.origin;\r\n document.head.innerHTML =\r\n document.head.innerHTML + \"\";\r\n }, []);\r\n\r\n console.log(\"app render\");\r\n\r\n return (\r\n \r\n } />\r\n }\r\n redirectPath=\"/login\"\r\n />\r\n \r\n );\r\n};\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { createMuiTheme, ThemeProvider } from \"@material-ui/core/styles\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport { CssBaseline, NoSsr } from \"@material-ui/core\";\r\nimport { App } from \"./Components/App\";\r\nimport AppStateContextProvider from \"./Contexts/AppStateContext\";\r\nimport UserDataContextProvider from \"./Contexts/UserDataContext\";\r\nimport InvoiceDataContextProvider from \"./Contexts/InvoiceDataContext\";\r\n\r\nconst themeType = \"light\";\r\n// const themeType = \"dark\";\r\n\r\nconst fern = \"#143200\";\r\nconst sand = \"#EEEAD9\";\r\nconst white = \"#FFF\";\r\nconst staging = \"#F3901D\";\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: process.env.REACT_APP_ENV === 'Staging' ? staging : fern,\r\n contrastText: sand,\r\n },\r\n secondary: {\r\n main: staging,\r\n contrastText: '#fff',\r\n },\r\n background: {\r\n default: themeType === \"light\" ? \"#F0F0F0\" : \"#303030\",\r\n },\r\n type: themeType,\r\n },\r\n});\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n","import React, { useState, createContext, useCallback, useEffect } from \"react\";\r\nimport Axios from \"axios\";\r\nimport {\r\n getDeviceId,\r\n setDeviceId,\r\n setToken,\r\n getToken,\r\n} from \"../GlobalFunctions\";\r\n\r\nexport const UserDataContext = createContext();\r\n\r\nconst UserDataContextProvider = (props) => {\r\n const [userData, setUserData] = useState({});\r\n\r\n console.log(\"Rerender\");\r\n\r\n const verifyToken = useCallback(async () => {\r\n console.log(\"authenticating\");\r\n try {\r\n const res = await Axios({\r\n method: \"POST\",\r\n url: \"/users/verifyJWT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `bearer ${getToken()}`,\r\n },\r\n });\r\n\r\n const { token, ...rest } = res.data; // destructure the token out of the result\r\n setUserData({\r\n ...userData,\r\n loggedIn: true,\r\n token: getToken(),\r\n ...rest,\r\n });\r\n\r\n return res;\r\n } catch (error) {\r\n setUserData({\r\n ...userData,\r\n loggedIn: false,\r\n });\r\n console.log(error);\r\n }\r\n }, [userData]);\r\n\r\n const login = useCallback(async (username, password, onFailCallback) => {\r\n try {\r\n const res = await Axios({\r\n method: \"POST\",\r\n url: \"/users/authenticate\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: {\r\n username,\r\n password,\r\n mfaGuid: getDeviceId(),\r\n },\r\n });\r\n\r\n const { token, trucks, ...rest } = res.data;\r\n\r\n if (!getDeviceId()) {\r\n setDeviceId(res.data.mfaGuid);\r\n }\r\n\r\n if (res.status === 200) {\r\n setToken(token);\r\n setUserData({\r\n ...rest,\r\n trucks: trucks || [],\r\n token,\r\n loggedIn: true,\r\n });\r\n console.log(\"loggedIn\");\r\n } else if (res.status === 202) {\r\n setUserData({\r\n ...rest,\r\n mfaRequired: true,\r\n });\r\n }\r\n\r\n return res;\r\n } catch (err) {\r\n console.log(err);\r\n onFailCallback(err.response.data.message);\r\n }\r\n }, []);\r\n\r\n const logout = useCallback(() => {\r\n setToken(\"\");\r\n setUserData({});\r\n removeInvoiceSearchFilters();\r\n window.stop();\r\n }, []);\r\n\r\n const removeInvoiceSearchFilters = () => \r\n {\r\n localStorage.removeItem(\"selectedTrucksInvoice\");\r\n localStorage.removeItem(\"startDateInvoice\");\r\n localStorage.removeItem(\"endDateInvoice\");\r\n localStorage.removeItem(\"approvalStateInvoice\");\r\n localStorage.removeItem(\"userSearchedInvoice\");\r\n }\r\n\r\n const verifyMfa = useCallback(\r\n async (mfaCode, onFailCallback) => {\r\n try {\r\n const res = await Axios({\r\n method: \"POST\",\r\n url: \"/users/verifymfacode\",\r\n headers: {\r\n \"content-type\": \"application/json\",\r\n },\r\n\r\n data: { ...userData, token: mfaCode },\r\n });\r\n setToken(res.data.token);\r\n setUserData({\r\n ...res.data,\r\n trucks: res.data.trucks || [],\r\n loggedIn: true,\r\n });\r\n console.log(\"loggedIn\");\r\n } catch (err) {\r\n onFailCallback(err.response.data.message);\r\n console.log(err);\r\n }\r\n },\r\n [userData]\r\n );\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default UserDataContextProvider;\r\n"],"sourceRoot":""}