{"version":3,"sources":["components/auth/Login.tsx","utils/keyboard.ts","utils/index.ts","components/CashInDrawer.tsx","components/menu/UserMenuItem.tsx","components/util/Text.tsx","components/util/ServeAllCounter.tsx","components/util/Watermark.tsx","components/menu/AppMenu.tsx","components/meal/CheckList.tsx","components/util/FlexContent.tsx","components/meal/ClosedMonth.tsx","database/databaseSchema.ts","components/customer/Customer.tsx","components/customer/CustomerSelect.tsx","components/meal/SessionButton.tsx","components/terminal/SiteDataLoader.tsx","components/util/StorageMeter.tsx","components/Home.tsx","models/StudentModel.ts","models/AuthModel.ts","stores/AuthStore.ts","models/TransactionModel.ts","models/SalesItemModel.ts","stores/TransactionStore.ts","components/meal/CashCheck.tsx","components/student/Allergies.tsx","components/student/StudentCard.tsx","components/meal/CreditCardAuth.tsx","models/TerminalModel.ts","components/meal/MealCounter.tsx","components/student/StudentAlert.tsx","components/student/StudentBalance.tsx","components/util/InputPopup.tsx","components/util/MinusButton.tsx","components/util/PlusButton.tsx","components/meal/TransactionItem.tsx","components/student/StudentTransactions.tsx","components/util/MealsMeter.tsx","components/util/BottomMenu.tsx","components/util/FlexSpacer.tsx","components/util/AlertMessage.tsx","components/meal/SalesItemButton.tsx","components/meal/TotalSale.tsx","components/meal/CategoryTab.tsx","components/meal/MealService.tsx","models/ServeAllModel.ts","models/StudentSearchModel.ts","stores/StudentStore.ts","components/student/PreviousStudent.tsx","components/student/RosterServe.tsx","components/student/ServeAll.tsx","components/student/StudentGrid.tsx","components/meal/TransactionHeader.tsx","components/meal/BufferList.tsx","components/student/StudentSearch.tsx","components/meal/SessionOverride.tsx","components/meal/BufferInput.tsx","components/TransactionHistory.tsx","components/Session.tsx","components/Statistics.tsx","components/terminal/Building.tsx","components/terminal/Terminals.tsx","components/terminal/TerminalSelect.tsx","components/util/ErrorPage.tsx","components/util/Shield.tsx","components/util/PrivateRoute.tsx","components/hoc/Timeout.tsx","components/auth/ChangePassword.tsx","history.ts","components/Settings.tsx","components/App.tsx","registerServiceWorker.ts","database/indexedDBService.ts","models/TerminalStateModel.ts","stores/TerminalStore.ts","models/BoltAuthModel.ts","stores/CardConnectStore.ts","utils/logger.ts","models/ConfigModel.ts","stores/RootStore.ts","index.tsx"],"names":["FocusedElement","KeyboardUtils","_this","this","Object","classCallCheck","characterMapShift","characterMap","numbers","symbols","keyCodesToIgnore","shiftPressed","noContextMenu","e","preventDefault","handleOnKeyDown","keyCode","getModifierState","key","indexOf","Login","inject","allStores","authStore","rootStore","observer","props","possibleConstructorReturn","getPrototypeOf","call","form","keyboardRef","keyboardUtils","checkVersionTimer","usernameInput","passwordInput","handleKeyboardPress","button","handleShift","handleEnter","state","inputName","Username","toString","handleKeyboardFocus","Password","layoutName","setState","handleChangeAll","inputObject","username","password","handleUsername","currentTarget","value","handlePassword","handleRememberMe","rememberMe","handleContinue","asyncToGenerator","regenerator_default","a","mark","_callee","userStatus","wrap","_context","prev","next","loginStep","getUserStatus","sent","error","auth","errorMessage","isRemote","window","location","href","getIdentityServerLoginURL","clearErrorMessage","stop","handleCancel","clearUsername","clearPassword","_callee2","_context2","getAuthToken","checkForAuthToken","handleSubmit","_ref3","_callee3","_context3","_x","apply","arguments","toggleMessage","logoutActivityTimeout","logoutLostConnection","doVersionUpdate","reload","doVersionCancel","hasDismissedVersion","clearTimeout","undefined","current","keyboard","input","handleOnKeyUp","setTimeout","includes","isBackSpace","stateValue","newValue","slice","mapKeyPressToActualCharacter","closeStorageAlert","storageAlertOpen","checkVersion","getLatestVersion","then","latestVersion","_ref4","_callee4","isOIDC","_this$props","history","id_token","access_token","oldState","oldNonce","_context4","getUriFragment","localStorage","getItem","loginDisabled","removeItem","validateIdentityToken","isAuthenticated","db","quotaError","terminalStore","setServiceDate","push","_x2","getCurrentVersion","layout","default","shift","React","clearSessionData","clearSessionSettings","setInterval","clearInterval","element","forceFocus","_this2","focus","_this$props2","currentVersion","showLogoutMessage","showVersionMessage","checkingAuth","react","Dimmer","active","page","Loader","className","Grid","centered","verticalAlign","style","margin","Column","computer","tablet","mobile","Form","onSubmit","isError","Segment","padded","loading","isAuthenticating","Header","as","config","useIdentityServer","marginBottom","display","Field","Input","onFocus","bind","ref","readOnly","placeholder","autoComplete","onChange","onKeyUp","onKeyDown","type","Checkbox","label","checked","Button","primary","disabled","onClick","Message","content","Modal","dimmer","open","size","Content","Description","Actions","icon","labelPosition","color","onContextMenu","build_default","disableCaretPositioning","onChangeAll","onKeyPress","withRouter","checkAuthorization","response","ok","status","logout","logger","logBadResponse","hasError","getToday","today","Date","setHours","getFormattedToday","formatServiceDate","serviceDate","date","concat","getMonth","getDate","getFullYear","ignoreExponent","Denomination","DenominationString","CoinRollsMultiplier","MoneyValue","TabAction","_ref","studentStore","isOnline","canSwitchCustomer","handleSwitch","_ref2","clearSearch","switchCustomers","Menu","fixed","container","Divider","hidden","sessionData","Row","columns","textAlign","isHarrisUser","logMessages","data","userFullName","userName","basic","isManagementUser","terminalModel","Text","children","ServeAllCounter","serveAllModel","remainingCount","totalToServeCount","serveAllStudentIDs","length","getRemaining","float","toFixed","getPercentage","Watermark","top","left","rotation","opacity","visible","styleConfig","transform","AppMenu","timerId","tempDate","dateOptions","day","month","weekday","year","dateOptionShortMonth","handleDateChangeClick","changeServiceDate","showChangeDatePrompt","handleDateSelect","handleDateChange","handleHideSideBar","switchTerminal","handleSettings","handleTrainingModeSwitch","_callee7","_context7","start","changingTrainingMode","_callee5","_context5","toggleTrainingMode","_callee6","_context6","tick","getMinutes","toggleMenu","prevState","showPopup","_callee8","unverifiedTransactions","_context8","getUnverifiedTransactionCount","isHoliday","holidays","some","h","startDate","endDate","backText","onBackClicked","hideHamburger","hasChangeBuildingPermission","canChangeBuilding","hasChangeSettingsPermission","canChangeSettings","hasTrainingModePermission","canUseTrainingMode","canNotChangeFutureDate","canNotChangeServingDayForFutureDates","isOnlineExcludingTrainingMode","isServeAllMode","eTritionOnline","online","trainingMode","trainingModeStyle","backgroundColor","util_Watermark","borderless","Item","Icon","name","isCustomerSwitch","isTerminalSwitch","mode","Popup","trigger","position","onOpen","wide","on","terminal","terminalConfig","isGrabNGo","toLocaleDateString","schoolName","toLocaleString","hour","minute","terminalName","Sidebar","Pushable","animation","vertical","width","toLocaleTimeString","fluid","UserMenuItem","Pusher","dimmed","entry_default","calendarType","tileDisabled","maxDate","negative","positive","CheckList","stackable","Table","HeaderCell","Body","checkDetails","map","checkDetail","index","Cell","offset","getTimezoneOffset","setTime","getTime","formatServiceDateTime","transactionDate","checkNumber","patronID","patronPin","amount","checkName","hide","FlexContent","handleClosedMonth","ObjectStores","totalCash","totalCheck","grandTotal","other","rollsPrefix","loosePrefix","totalPrefix","billPrefix","attendance","CashInDrawer","transactionStore","hasLoaded","checkTotal","oldAttendance","cashInDrawerItems","denomination","Penny","itemValue","DollarBill","Nickel","TwoDollarBill","Dime","FiveDollarBill","Quarter","TenDollarBill","FiftyCent","TwentyDollarBill","DollarCoin","FiftyDollarBill","HundredDollarBill","inputBoxes","inputNames","enterIndex","cashCounterCheck","handleTab","tabAction","TabForwards","findIndex","obj","TabBackwards","backClicked","clearCashCount","closeCounterCheck","showCounterCheck","clear","startsWith","Number","replace","objectSpread","setInput","removePrefix","prefix","substr","isClear","handleLooseAndRolls","handleTotal","focusInputBox","isNaN","parseFloat","parseInt","padStart","blurAmount","checkListClicked","showCheckList","saveCashInDrawerClicked","cashCounts","amountError","attendanceError","_i","_Object$keys","sendAttendance","abrupt","keys","Math","round","cashSetupDenominationID","endAmount","endQuantity","Other","Checks","saveCashInDrawer","cashCountSessionId","allowDecimal","valueAsNumber","isValid","newState","floor","field","newTotal","newLoose","ceil","setTotals","handleAmount","hideCheckList","column","shiftKey","cashTotal","totalPenny","totalNickel","totalDime","totalQuarter","totalFiftyCent","totalDollarCoin","totalDollarBill","totalTwoDollarBill","totalFiveDollarBill","totalTenDollarBill","totalTwentyDollarBill","totalFiftyDollarBill","totalHundredDollarBill","handlePhysicalKeyboard","assertThisInitialized","_i2","_Object$keys2","changeDayWhenOffline","terminalConfigurations","tc","document","addEventListener","_this$props2$transact","getCashInDrawer","getCheckList","fetch1","fetch2","Promise","all","checkAmountTotal","forEach","dailyAttendance","total","_loop","_Object$keys3","_i3","find","c","otherAmount","checks","removeEventListener","noPrefixInput","removePrefixFromInputName","_this3","inputNamesToClear","filter","x","shouldClearInputName","i","_this4","expectedCash","salesItemSetup","showAttendance","enterDailyAttendance","header","sessions","s","isSeparateCashCount","sessionID","description","menu_AppMenu","compact","row","indexRow","indexColumn","min","theme","cursor","max","meal_CheckList","onClose","align","abs","ClosedMonth","isClosed","Customer","customer","setCustomer","onSetCustomer","customerID","isLicensed","isCustomer","customerOrDistrict","List","marginTop","CustomerSelect","handleBackClick","cancelCustomerSwitch","renderCustomers","customers","getCustomers","isLoading","Redirect","to","selection","items","SessionButton","getConfigAndSession","text","handleSelect","playSilence","SiteDataLoader","StorageMeter","limitValue","storageLimitValue","localStorageUsage","Label","isServing","Home","pingTimer","cashInDrawerClicked","showCashCountSessionPicker","cashInDrawerSessionSelect","sessionId","grabNGoCalendarClicked","selectedDays","gngPauseAllSessions","getTerminalAndSettingsWithDates","grabNGoTerminalConfigId","grabNGoDateSelect","grabNGoCalendarCancelled","grabNGoSessionClicked","terminalConfigID","creditPatronsClicked","isCreditPatrons","getTerminalAndSettings","changeServiceDateClicked","showEndOfDayReports","url","endOfDayReportName","webPath","resetEndOfDayVars","runEndOfDayReports","stopReportTimer","endOfDayJobQueueID","showReportAlert","startReportTimer","checkEndOfDayReportStatus","cancelTimer","statisticsClicked","transactionsClicked","isTransactionHistory","showChangeDayMessage","clearReportAlert","message","endOfDayErrorText","closeSessionPicker","handleDayClick","validateStorageLimits","clearSessionMealCount","sessionTimeOverridden","modifiers","selectedIndex","selectedDay","DateUtils","isSameDay","splice","toConsumableArray","es_Redirect","siteActive","clearTerminal","hasCreditPermission","canAllowCredits","hasChangeSeviceDayPermission","canChangeServingDay","hasRunEndOfDayReportsPermission","canRunEndOfDayReports","hasCreditTerminal","allowCredits","canEnterAttendance","canCreditPatron","isToday","toISOString","isLoadingSiteData","cellPadding","cellSpacing","valign","Image","src","t","terminalConfigurationID","section","util_StorageMeter","Group","react_day_picker_build_default","showOutsideDays","onDayClick","EligibilityStatus","EligSubStatus","BufferedSide","AuthModel","authToken","oidcToken","observable","jsonContentType","AuthStore","initializerDefineProperty","AuthStore_descriptor","AuthStore_descriptor2","AuthStore_descriptor3","AuthStore_descriptor4","previousAuth","AuthStore_descriptor5","AuthStore_descriptor6","AuthStore_descriptor7","_descriptor8","getUsers","users","usersCopy","logMethodStart","fetch","apiPath","headers","Authorization","bearerToken","json","JSON","parse","stringify","user","validation","logFetchData","logMethodEnd","_descriptor9","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","sessionStorage","assign","reaction","setItem","sendEmail","encodeURIComponent","email","responseType","baseURL","identityServerBaseURL","scopeString","nonce","returnURL","origin","token","harrisUser","rolesCount","managementUser","_this$auth","userEncode","passEncode","custEncode","array","action","method","content-type","body","handleTokenResponse","t0","allowOffline","localLogin","finish","CustomerID","browserData","updateTerminal","startTimer","t1","logError","idToken","accessToken","_this5","_this6","computed","identityLogoutURL","_this7","log","getIdentityServerLogoutURL","stopTimer","clearBufferedStudents","clearStudent","_this8","clearSiteStudents","getSessionData","_this9","lastPosTransactionId","_this10","cancelTerminalSwitch","hashPW","md5","salted","userID","bcrypt","_callee9","userList","_context9","_this11","toLocaleLowerCase","toLowerCase","emailAddress","validate","disableTrainingMode","_callee10","_context10","_this12","_callee11","_context11","_this13","console","_callee12","newPassword","_context12","_this14","NewPassword","successful","TransactionModel","isGrabNGoVoid","DayOfTheWeek","StudentModel","StudentModel_class","StudentModel_descriptor","StudentModel_descriptor2","StudentModel_descriptor3","StudentModel_descriptor4","StudentModel_descriptor5","StudentModel_descriptor6","StudentModel_descriptor7","StudentModel_descriptor8","StudentModel_descriptor9","StudentModel_descriptor10","StudentModel_descriptor11","StudentModel_descriptor12","gngStudentIdToProcess","applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","isLimitForServiceDay","posLimit","Monday","isMondayLimit","Tuesday","isTuesdayLimit","Wednesday","isWednesdayLimit","Thursday","isThursdayLimit","Friday","isFridayLimit","Saturday","isSaturdayLimit","ShowBalance","FoodType","TransactionType","SalesItemHeader","SalesItemModel_descriptor","SalesItemModel_descriptor2","SalesItemModel_descriptor3","SalesItemModel_descriptor4","SalesItemModel_descriptor5","SalesItemModel_descriptor6","SalesItemModel_descriptor7","SalesItemModel_descriptor8","SalesItemModel_descriptor9","SalesItemModel_descriptor10","SalesItemModel_descriptor11","SalesItemModel_descriptor12","SalesItemModel_descriptor13","SalesItemModel_descriptor14","SalesItemModel_descriptor15","SalesItemModel_descriptor16","SalesItemModel_descriptor17","_descriptor18","_descriptor19","_descriptor20","_descriptor21","salesItemHeaderID","itemDescription","itemShortDescription","itemType","itemGroupTypeID","itemGroupType","itemGroupEligibilityPricing","itemGroupCountAsMeal","eligibilityPricing","alternateSalesItemHeaderID","balanceTypeID","discountLevelID","taxableTypeID","taxableType","cashCount","itemMasterId","protected","foodGroupList","priceList","student","studentModel","getTerminalPosLimit","disableCharge","excludeCombinableItems","_this$rootStore$termi","servingDay","terminalStateModel","activePOSSession","studentLimitRemaining","getStudentLimitRemaining","posLimitRemaining","getPosLimitRemaining","posTransactions","transactionModel","_this$rootStore$stude","getAllTransactions","getTransactionsForSession","Array","isArray","posLimits","l","posItemGroupID","purchaseLimitQuantity","getDay","pastTransactions","served","saleItemGroupID","partOfTransNo","isCombinable","quantity","reduce","curr","limit","isFreeStudent","freePurchaseLimit","isReducedStudent","reducedPurchaseLimit","paidPurchaseLimit","salesItemPrice","salesItemPrices","itemPrice","_this$rootStore","hideReimbursableItemPrices","isReimbursable","canCombine","mealCombining","getSalesItemLimitRemaining","KeyboardType","SpeedKeyType","CreditCardAuthType","TransactionStore","TransactionStore_descriptor","TransactionStore_descriptor2","TransactionStore_descriptor3","TransactionStore_descriptor4","TransactionStore_descriptor5","TransactionStore_descriptor6","TransactionStore_descriptor7","TransactionStore_descriptor8","TransactionStore_descriptor9","TransactionStore_descriptor10","TransactionStore_descriptor11","TransactionStore_descriptor12","TransactionStore_descriptor13","TransactionStore_descriptor14","TransactionStore_descriptor15","lastPosPos","firstGrabNGoTransaction","allowCashLimitOffset","TransactionStore_descriptor16","TransactionStore_descriptor17","TransactionStore_descriptor18","TransactionStore_descriptor19","TransactionStore_descriptor20","TransactionStore_descriptor21","_descriptor22","_descriptor23","_descriptor24","_descriptor25","_descriptor26","_descriptor27","clearTrainingModeTransactions","posPoss","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","posPos","transactions","getAll","PosPos","Symbol","iterator","done","PosTransactions","posPosGuid","deleteAll","id","return","cashCountCache","getSiteTransactions","syncTransactions","posSessions","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","clearStoredTransactions","session","dbSession","sessionClone","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","sessionToUpdate","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_iterator4","_step4","_posPos","dbPosPos","posPosClone","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_iterator5","_step5","transaction","dbTransaction","get","PosSession","terminalID","schoolID","add","posSessionGUID","posSessionGuid","put","amountTendered","transNo","posTransactionID","isMeal","t2","delegateYield","sendTransactions","posPosGuids","posSessionGuids","Set","p","Error","t3","sessionsToDelete","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_iterator6","_step6","posPosList","posPosToDelete","removeSession","_iteratorNormalCompletion7","_didIteratorError7","_iteratorError7","_iterator7","_step7","_descriptor28","_descriptor29","_descriptor30","_descriptor31","_descriptor32","_descriptor33","_descriptor34","_descriptor35","_descriptor36","generatePosPos","_ref5","isVoid","_this$rootStore2","previousStudentModel","posPosStudent","Guid","raw","posTime","patronNumber","pospin","accountID","account","patronGroupID","pricingGroupID","patronTypeID","eligibilityID","eligibilityStatusID","eligSubStatusID","posStatus","accountSchoolID","processTime","isVoided","copyPosPos","_ref6","_x3","isEligibleForCombining","combiningForAll","isStudent","hasBeenServed","processMealCombining","isCombinedMeal","combined","attempt","tryCombination","bestCombination","loopFlag","salesItemHeaders","useSingleQuantityLoop","sortByFoodCount","sortByFoodTypeDescending","sortByFoodTypeAscending","testCombination","getMealCombinedTransaction","sortTransactionsForMealCombining","bestPrice","b","testPrice","usedList","tempTransactions","cloneTransactions","anyQuantity","listTransactions","isMealComponent","item","maxQuantity","canCombineItem","markAsMealComponent","f","ct","count","foodGroupID","combinesIntoMeal","addCombinedMeal","isOk","minimumFoods","itemsOffered","itemsCanBeDeclined","distinctFoods","self","components","isRequired","VegOrFruit","Fruit","Vegetable","entree","price","prices","keepRate","reverse","hasItemPrice","addTransaction","mealTransaction","layoutItemID","priorTransaction","linkedLayoutItemID","st","rate","splitQuantity","splitTransaction","fruitVegComponent","m","maxFruitVeg","maxNumberAllowed","mealCombinationComponent","maxAllowed","currentUsed","qtyOfFruit","qtyOfVeg","u","unCombineMeal","origTrans","lt","_descriptor37","_descriptor38","_descriptor39","j","doc","y","setFontSize","paymentOnly","setFontType","lineSpacing","getReceiptDate","getReceiptTime","homeRoom","firstName","lastName","line","hiddenItems","accountAmount","creditCardSalesItem","refNumber","cardAuth","cardType","cardExpiry","substring","checkSalesItem","transComment","previousAccountAdjustAmount","jsPDF","addReceiptBodyToDocument","printJS","output","reminderText","paymentReminders","paymentReminder","paymentReminderID","lowBalance","negativeBalance","getPreviousStudentLowBalanceLimit","balance","paymentReminderText","reminderTextSplit","determineReminderText","split","sb","temp","trimLeft","addReminderBodyToDocument","addPage","now","hour12","chargeLimit","getChargeLimit","getAccountAmount","salesItem","isAllTypeLimit","acc","isAllSessionLimit","_this$rootStore3","_this$rootStore3$term","relevantTransactions","cashPaymentAmount","previousTransactionAmount","relevantPosPosGuids","cashItems","prepaidSalesItem","deletedPosPosGuid","originalAmount","origT","cashAmount","cappedAmount","cashPayment","_this$rootStore4","_this$rootStore4$term","posLayout","_iteratorNormalCompletion8","_didIteratorError8","_iteratorError8","_step8","_loop2","transactionAmount","previousChargeAmount","prepaidLimit","freePrepaidLimit","reducedPrepaidLimit","paidPrepaidLimit","sortedPosLimits","sort","studentLimit","getCurrentTransactionAmount","getPreviousTransactionAmount","v","_iterator8","_ret","err","_iteratorNormalCompletion9","_didIteratorError9","_iteratorError9","_step9","_iterator9","posSession","_iteratorNormalCompletion10","_didIteratorError10","_iteratorError10","_step10","_iterator10","isQuickCash","isMealCombiner","_this$rootStore5","_this$rootStore5$term","layoutItem","posLayoutItemID","isAlternateItem","keyLabel","posAccountDiscountID","deletedTransNo","startBalance","earned","reimbursable","chargeAmount","creditAmount","reasonForDelete","inverse","newEligibilityStatusId","defaultEligibilityStatusID","Paid","layoutItems","firstEligibilityStatusID","every","chargeLimits","cl","schoolTypeID","salesItemHeader","fg","join","header1","header2","foodCount1","foodCount2","components1","getComponentString","components2","rate1","rate2","sessionMealCount","totalSale","getTotalSale","_this$rootStore6","lowBalanceLimit","getChargeLimitObject","freeWarningLimit","reducedWarningLimit","paidWarningLimit","_this$rootStore7","maxChargeAmount","freeChargeLimit","reducedChargeLimit","paidChargeLimit","_this$rootStore8","_this7$rootStore$term","getServingDay","_this7$rootStore$term2","cache","_iteratorNormalCompletion11","_didIteratorError11","_iteratorError11","_loop3","_iterator11","_step11","cd","sessionGuid","defineProperty","toJS","_this8$rootStore$term","_context13","osName","_this9$rootStore$term","_context14","setServiceDayToToday","transactionStatistics","_callee13","_this11$rootStore","_this11$rootStore$ter","_context15","_callee14","sessionCounts","_context16","studentTransactionCount","nonStudentTransactionCount","getPosPosList","_callee15","posTransaction","_context17","transactionProcessing","clearPreviousStudent","createNoStudent","createTransaction","completeTransaction","transactionType","MealCounter","isFromMealCombiner","_callee16","isHistory","_this15$rootStore$ter","_args18","_context18","_this15","transactionHistorySessions","siteID","X-Last-Sync-ID","getLastPosTransactionId","_callee17","_this16$rootStore","_this16$rootStore$ter","sessionOnline","sessionOffline","_context19","_this16","posPosUnique","transactionHistory","_callee18","_ref15","credit","_ref15$setProcessing","setProcessing","_this17$rootStore","_this17$rootStore$ter","_this17$rootStore$ter2","_this17$rootStore$ter3","patronTransactionsServed","showAlert","_this17$transactionMo","isCompletedSale","totalAmount","updateDate","lastDates","existingDate","transactionInfo","shouldAutoPrintReminder","_context20","_this17","Earned","Cancelled","Account","CreditCash","CreditCheck","CreditCard","ChangeCash","ChangeCheck","QuickCash","Refund","cashSalesItem","isRefund","refundSalesItem","isCash","boltResponse","orderid","cardToken","expiry","cardRetRef","retref","cardAVS","avsresp","cardCVD","cvvresp","cardProc","respproc","cardRespCode","respcode","authcode","cardMID","merchid","comment","addAll","Void","playRegister","Patron","lastPurchaseDates","d","serveDate","displayText","paymentReciepts","purchaseRecipts","printReminderAndReceipt","printReminder","printReceipt","_callee19","_context21","_this18","previousTransactions","voidTransaction","previousTransactionType","previousAmount","previousTotal","voidedTransactionType","isRedo","showMealService","_callee20","_context22","_this19","inverseTransactions","_callee22","_this20$rootStore","servedTransactions","_context24","_this20","from","resolve","patronTransaction","_callee21","_context23","_callee23","inversedTransactions","updatedPosPos","_context25","_this21","_this22","_this23","_this24","_this25","_this26","_callee24","_context26","_this27","setSessionMealCountFromCache","setSessionMealCountFromService","_callee25","meals","_context27","_this28","clearTransactionStatistics","getTransactionStatistics","stats","sum","mealCount","_callee26","_this29$rootStore","_this29$rootStore$ter","getSessions","_iteratorNormalCompletion12","_didIteratorError12","_iteratorError12","_iterator12","_step12","getSession","tempPosPoss","_context28","_this29","has","Allergies","allergies","circular","allergyID","showAllergies","isSmallDisplay","isCashCheckModal","hidePOSPins","hideBirthdates","renderStudentName","hasPicture","onError","event","Meta","collapsing","celled","repeat","gradeLevel","birthDate","student_Allergies","withPadding","CreditCardAuth","isDeclined","statusMessage","authInFlight","cancelInFlight","mountReady","handleCardRetry","cardConnectStore","restart","handleCardCancel","cancelCard","onHide","lowerMessage","approved","onComplete","isManualEntry","_","CashCheck","amountTenderedDisplay","amountTenderedError","amountTenderedPosition","decimalPlaces","amountTenderedDecimalMode","amountTenderedReset","amountTouched","checkNumberError","creditChange","isCashTransaction","anyTransactions","isCardPopupOpen","isCardAuthPopupOpen","AmountTendered","creditCardAuth","None","speedKeyLabels","greeting","checkNumberRef","amountTenderedRef","commentRef","lastNameRef","maxAmountTendered","timeoutLength","cardPopupTimer","finishClicked","checkValid","requireCheckNumber","amountValid","isValidAmount","amountDue","focusCheckNumber","focusAmountTendered","handleKeyUpAmountTendered","newAmountTendered","test","prevAmountTenderedDisplay","handleKeyUpCheckNumber","handleKeyUpLastName","setAmountTendered","tempState","displayAmount","handleCheckNumberChange","handleCheckNumber","CheckNumber","handleLastNameChange","handleLastName","LastName","handleKeyUpComment","handleCommentChange","handleComment","Comment","handleCash","changeKeyboard","Numeric","handleCheck","AlphaNumeric","keyboardType","handleAmountTenderedFocus","handleCheckNumberFocus","handleLastNameFocus","handleCommentFocus","focusLastName","focusComment","clearAmountTendered","handleAmountTendered","pow","digit","charAt","intPart","decimalPart","handleChange","handleCredit","handleRefund","handleCardPopupClose","handleCardPopupOpen","handleCardPresent","CardPresent","handleCardManualEntry","ManualEntry","handleCardClose","handleCardResponse","respstat","getSpeedKeyValue","lunchPrice","breakfastPrice","Fixed","LunchMultiple","BreakfastMultiple","BreakfastLunchMultiple","enterDetected","speedKeys","lunch","lunchSalesHeaderID","breakfast","breakfastSalesHeaderID","key1POS_SpeedKeyTypeID","key1Value","key2POS_SpeedKeyTypeID","key2Value","key3POS_SpeedKeyTypeID","key3Value","key4POS_SpeedKeyTypeID","key4Value","priorAuthInFlight","initialize","isBufferedServing","canRefund","allowRefunds","_this$props2$rootStor","prepayLimitMet","getPrepaidLimitMet","hasChargeLimit","chargeLimitMet","noChargeMet","noChargeTotal","notEnoughCash","floated","StudentCard","noChecksAccepted","hasBoltIntegration","flowing","divided","autoFocus","meal_CreditCardAuth","SessionType","ItemGroupType","changeSession","getSessionCounts","submitCountTransaction","_this$props$transacti","studentSalesItem","mealCounterStudentItemID","nonStudentSalesItem","mealCounterNonStudentItemID","submitStudentTranaction","submitNonStudentTranaction","StudentAlert","isLowCredit","isParentAlert","isVisitingAlert","popupAlertMessage","handleShowPopup","handleCancelPopup","alertMessage","parentAlertMessage","StudentBalance","showBalance","Always","WhenLow","startingBalance","handleBalanceClick","hasChargeOverride","endingBalance","paddingRight","colSpan","hideEndingBalance","InputPopup","keyboardLayout","startingText","show","close","updateValue","MinusButton","PlusButton","TransactionItem","editingQuantity","editingRate","number","decimals","addQuantity","removeQuantity","setQuantity","setAmount","bulkEntry","rateUpdate","_this$props$posTransa","justifyContent","alignItems","flex","salesItemLimitMet","select","marginLeft","hideItemPrices","util_InputPopup","validateQuantity","validateRate","StudentTransactions","divRef","editing","scrollTop","scrollHeight","overflowY","marginRight","scrollBehavior","meal_TransactionItem","allowBulkEntry","allowRateUpdate","MealsMeter","BottomMenu","util_MealsMeter","child","FlexSpacer","AlertMessage","SalesItemButton","popupOpen","altItemAlertOpen","conflictingEligibilityAlertOpen","timeout","handleOpen","handleClose","selectSalesItem","canAddItemForBulkEntry","handleTransaction","handleAlternateTransaction","clearIfAdding","_this$props3","isAdded","semanticColor","toUpperCase","salesItemHeaderDescription","floating","fitted","util_AlertMessage","changeDue","completedTotalSale","refundAmount","newBalance","CategoryTab","selectCategory","categoryActive","salesItemCategoryId","Tab","Pane","attached","categoryColor","categoryDescription","MealService","chargeOverrideBox","isEndTransaction","handleUnload","bufferList","returnValue","handleOverridePassword","chargeOverridePassword","invalidChargePassword","handleOverrideEnter","handleSubmitOverride","handleCancelOverride","showChargeOverride","focusOverrideBox","handleAlertClick","handleLowCreditWarningClick","showLowCreditWarning","handleQuickSale","handleCashCheckClick","exceeded","salesItemLimitExceededBy","showAlaCarteLimitCount","showCashCheck","handlePopupClick","isLowCreditPopup","showParentPopup","showCancel","cancelTransation","earnedClicked","quickCashClicked","accountClicked","accountClickedOverride","accountClickedChargeConfirm","showChargeConfirm","confirmAlaCarteLimitMessage","confirmChargeCancel","confirmChargeContinue","hideCancel","renderTabs","tabItems","useCategories","useCategoryColors","salesItemCategories","salesItemCategory","categoryIsUsed","meal_CategoryTab","handleCategoryClick","salesItemCategoryID","filteredCategoryID","renderLayout","lastKey","keyNumber","initialLayoutItemLength","useAlternateSalesItem","altSalesItem","popupOnAlternateItem","meal_SalesItemButton","blanksToAdd","isValidItem","isShowParentAlertPopup","isShowAlertPopup","bufferValue","bufferedServing","_this$props4","selected","categoryId","poslayoutItems","_this$props5","_this$props5$studentS","_terminalStore$termin","getChargeLimitMet","prepaidLimitMet","getNoChargeTotal","isCharge","canOverrideCharge","isWinner","isBirthday","showConfettiOnBirthday","hideTotal","hideEndBalanceAndTransTotals","react_confetti_min_default","innerWidth","height","innerHeight","gravity","numberOfPieces","recycle","initialVelocityY","confettiSource","w","sessionName","overflowX","inverted","student_StudentTransactions","sortTransactionsForDisplay","TotalSale","student_StudentBalance","getLowBalanceLimit","meal_CashCheck","util_BottomMenu","disableEarned","allowAdultEarnedOnly","confirmCharge","disableQuickCashOnFunds","disablePatronQuickCash","popuptAlertMesssage","pointing","ServeAllModel","StudentSearchModel","StudentType","TerminalModel","posLayouts","StudentStore","StudentStore_descriptor","tempStudentSearchModel","StudentStore_descriptor2","StudentStore_descriptor3","StudentStore_descriptor4","StudentStore_descriptor5","StudentStore_descriptor6","StudentStore_descriptor7","StudentStore_descriptor8","StudentStore_descriptor9","StudentStore_descriptor10","StudentStore_descriptor11","StudentStore_descriptor12","StudentStore_descriptor13","StudentStore_descriptor14","StudentStore_descriptor15","StudentStore_descriptor16","StudentStore_descriptor17","StudentStore_descriptor18","StudentStore_descriptor19","StudentStore_descriptor20","StudentStore_descriptor21","StudentStore_descriptor22","StudentStore_descriptor23","StudentStore_descriptor24","StudentStore_descriptor25","StudentStore_descriptor26","searchTerms","Subject","tempRosterSitePageNumber","isLoadingStudent","getPatronsForTransactions","students","studentsOnline","studentsOffline","studentUnique","getSiteStudents","hasStudents","getCount","lastSyncDate","syncStudents","setPrevBalance","resetToPrevBalance","studentsToUpdate","_student2","origAmount","StudentStore_descriptor27","StudentStore_descriptor28","StudentStore_descriptor29","StudentStore_descriptor30","StudentStore_descriptor31","StudentStore_descriptor32","StudentStore_descriptor33","StudentStore_descriptor34","StudentStore_descriptor35","StudentStore_descriptor36","StudentStore_descriptor37","handlePauseAllSessions","showGrabNGoSessionSelect","gngDaySessionsToServe","ps","StudentStore_descriptor38","StudentStore_descriptor39","_descriptor40","_descriptor41","_descriptor42","_descriptor43","_descriptor44","_descriptor45","_this$rootStore$trans","quickSale","isQuickSalePaused","getAutoItem","autoCharge","serveAutoItem","autoServeAndQuickSale","setHasBeenServed","_ref8","setTransactions","checkEtrition","eTritionTransactions","_ref11","_ref10","deletedPosPosGuids","_args7","getStudentTransactions","posTransactionIDs","Map","entries","slicedToArray","addTransactionsForSession","t4","t5","Snack","ReimbSnack","_x4","_x5","createEmptyStudent","_ref12","Student","gradeID","getPricingGroupID","isSelected","bufferedSide","_descriptor46","getPriceForSalesItem","effectivePriceDateID","effectiveDateID","reducedPrice","paidPrice","pricingGroups","patronTypePricingGroups","pg","grade","school","grades","g","schools","calcHasBeenServed","_descriptor47","_ref13","updateLastSync","dbStudent","updatedStudent","lastUpdatedDate","_x6","_x7","previousStudent","isRosterMode","isRosterSearch","studentSearchModel","isBufferedSideFlipped","pipe","debounceTime","distinctUntilChanged","switchMap","term","searchStudents","subscribe","allStudents","siteStudents","districtStudents","rosterSitePageNumber","rosterDistrictPageNumber","filterID","filterRange","isHomeroom","doGradeFilter","homeRoomID","setDate","cancelServeAllMode","initServeAllMode","serveAllIsFinished","totalServedCount","clearCounts","showAlertsInServeAll","isPatronID","searchTerm","autoSelectStudent","skipAutoSale","skipBufferList","alreadyBuffered","searchPatronLocally","posSessionID","allowVisitingPatrons","allowAdultVisitingPatrons","pinIsPrimary","disablePatronIdSearch","setStudentData","studentNotFound","birthdaySoundID","playBirthdaySound","noStudent","addStudentToBuffer","playBuzz","firstSearch","secondSearch","sortByFirstName","nameA","nameB","Free","OregonPaid","Reduced","allStudentTransactions","values","studentTransactions","set","popupLowCreditWarning","parentAlertLowBalanceOnly","trim","isSearching","of","_ref16","_ref16$terminalModel","searchBody","Observable","create","isTransactionSearch","_ref17","_x20","catch","terms","secondName","complete","force","isBufferSearch","filterPageNumber","filterByHomeroom","gradeLevelID","homeroomID","hideServedStudents","keepPageNumber","_this5$rootStore$term","_students","_args13","preFilterRosterStudents","filterRosterStudents","rosterServeID","loadTransactions","_student3","_args14","pendingStudent","fromTransaction","_this8$rootStore","_this8$rootStore$tran","clearPreviousTransactions","_this8$rootStore$tran2","getRosterStudents","selectNextStudent","selectStudent","studentID","_this13$rootStore","transactionHistoryPatronID","fromHandleEnter","_this14$rootStore$ter","loadingStudent","sessionServed","filteredPosSessions","_args21","xDateSplit","yDateSplit","valueOf","servingGrabNGoInProgress","LoadStudent","noIDButtonDisabled","_this16$rootStore$ter2","_args23","clearPendingStudent","disableVisitingStudentPrompt","approvePendingStudent","_args24","getSalesItemPrices","_this18$rootStore$ter","isSearch","_callee27","_this22$rootStore","_this22$rootStore$ter","_this22$rootStore$ter2","getEffectivePriceDateID","salesItemHeaderIDs","setMealCombining","altSalesItemPrice","_callee28","_this23$rootStore","autoItem","addItems","maxPerPage","RosterServe","onCancel","getFilterPageNumber","onServeAll","clearSelections","setRangeFilter7","setRangeFilter","setRangeFilter30","newFilterRange","switchFilter","toggleSort","toggleHideServedStudents","handleFilter","onPageChange","activePage","homerooms","gradeLevels","gl","startIndex","endIndex","toggle","setFilterID","Pagination","totalPages","autoServeKey","ServeAll","isConfirmation","toggleHideAlerts","selectionChanged","handleServeAllClick","handleConfirmNoClick","handleConfirmYesClick","sortStudents","_this$props2$studentS","_this$props2$studentS2","studentList","selectedCount","StudentGrid","site","imageFallback","_this$props2$terminal","hideServedSetting","filteredStudents","totalPageCount","currentPage","homeroom","handleSelectStudent","isCancelled","PreviousStudent","overrideBox","reasonForDeleteBox","modalKeyboardRef","printPopupTimer","cancelOverride","override","overridePassword","invalidPassword","reasonForDeleteRequired","overrideVoidTransactionModal","handleReasonForDelete","redoTransaction","voidGrabNGoTransactions","OverridePassword","ReasonForDelete","isOpen","handleRedoTransaction","handleReServeStudent","handleVoidTransaction","isNewLowCreditPopup","lastPatronID","canVoid","change","_this$props3$terminal","_this$props3$terminal2","smallDisplay","Never","canPrintReminder","canVoidRedo","canServeAgain","canPrintReceipt","showButtonsColumn","hideDetail","hideTransactionDetailWhenQuickSale","priorTransactionType","totalVoidAmount","clearing","TransactionHeader","baseClass","setShowVisitingPrompt","setStudent","_ref2$terminalStore$t","setBufferedStudent","handleVisitingPatronClick","handleVisitingPatronCancelClick","isRightSide","Right","_React$useState","_React$useState2","showVisitingPrompt","_React$useState3","_React$useState4","showPhotosInBuffer","stopPropagation","removeStudent","StudentSearch","isEnter","isSearchMode","hideKeyboard","showRosterServe","isBufferSelect","confirmExitBuffer","searchBox","rosterServe","wrapperRef","lastFilterId","lastFilterRange","lastFilterByHomeroom","lastHideServedStudents","hideServeAllCompleted","handleCancelBufferBack","handleConfirmBufferBack","focusSearchBox","handleStudentCashClick","handleNonStudentCashClick","NonStudent","handleGnGNoIDClick","handlePauseAllSessionsToggle","handleServeAllToggle","toggleServeAll","handleRosterServeToggle","handleRosterSearchToggle","handleBufferSearch","handleSearchModeToggle","beginServeAll","handleRosterServe","handleSearch","doSearch","handleKeyDown","ctrlKey","handleKeyPress","handleKeyUp","updateSearchBox","_this$props$terminalS","match","downShift","doSearchModeToggle","handlePINModeToggle","quickSaleChanged","bufferedSideChanged","sortByChanged","renderGrids","_this$props$studentSt","_this$props$studentSt2","student_StudentGrid","handleCancelGnGSessionSelect","handleGnGSessionContinue","handleGnGDaySessionSelect","handleClickOutside","getRosterFilters","_ref14","setSessionMealCount","objectArray","property","r","aDate","bDate","_this$props5$studentS2","_this$props5$terminal","_this$props5$terminal2","uniqueColumns","sortedPosSessions","aDateSplit","bDateSplit","sortFn","groupedPosSession","groupBy","groupedArray","keyOpensSearch","PreviousStudent_PreviousStudent","minHeight","Container","BufferList","useAutoItem","gps","dateIndex","student_RosterServe","student_ServeAll","overridePeriodEndedModal","setInvalidPassword","sessionTimeOverridePassword","overridden","setOverridePassword","_React$useState5","_React$useState6","setLayoutName","_React$useState7","showModal","options","startTime","endTime","passwordSet","sessionStartTime","overrideSessionTime","sessionEndTime","getHours","enforceServingTime","input1","input2","setInput1","setInput2","Left","BufferInput","inputEl","onBlur","ServingSession","allStore","cancelPeriodEndedModal","cancelCashCheckModal","NeedToChangeSession","_ref3$terminalModel","_ref5$studentModel","_ref6$terminalModel","mealCounter","meal_MealCounter","student_StudentSearch","canVoidTransactions","deleteOverridePassword","SessionOverride","meal_MealService","Statistics","sessionStatistics","ts","itemInformation","transactionCount","setSessionID","fontSize","itemName","itemCount","Building","building","onBuildingSelect","Terminals","onTerminalSelect","TerminalSelect","isBuildingSelect","getSchools","renderList","buildings","getTerminalsForSite","isTerminalSelect","terminals","setTerminal","ErrorPage","knownUrls","is404","pathname","isOffline","handleClick","Shield","errorInfo","componentStack","stack","ProtectedRoute","WrappedComponent","mustChangePassword","component","rest","objectWithoutProperties","util_Shield","Route","_React$Component","WithTimeout","events","logoutCountdown","logoutTimeout","warnTimeout","didMount","logoutMinutes","warningMinutes","sessionExpire","clearWarnTimeout","toggleWarn","resetTimeouts","warn","timeoutSeconds","terminalTimeout","inherits","createClass","hasOwnProperty","minutes","seconds","String","TransactionHistory","voidSelected","transactionsChecked","voidTransactions","setSession","setTransactionHistory","activeSession","handleClearSearch","uncheckCheckboxes","closeModal","hours","ampm","voidedPosPos","formatAMPM","isAccountSale","isCashSale","isCredit","_this$props5$transact","snackTotal","alaCarteTotal","mealTotal","isDeletedPosPos","isNotSynced","mealTransactions","snackTransactions","alaCarteTransactions","salesItems","getDescription","dateString","checkboxChanged","_this$props6","sessionButtonClicked","renderTableBody","createBrowserHistory","ChangePassword","newPasswordInput","confirmNewPasswordInput","ConfirmNewPassword","confirmNewPassword","handleNewPassword","handleConfirmNewPassword","changePassword","handleLogout","clearNewPassword","clearConfirmNewPassword","Settings","sessionOverrideSettings","saveClicked","toggleQuickSale","QuickSale","toggleAutoItems","UseAutoItem","autoItems","getItemList","Administration","selectedItemKey","Dropdown","handleItemSelection","getTerminalSettings","hasAutoItem","AutoItemKeys","oldModel","newPosLayout","currentItemKey","App","Router","Switch","PrivateRoute_ProtectedRoute","exact","path","isLocalhost","Boolean","hostname","register","navigator","URL","process","swUrl","serviceWorker","ready","registration","unregister","registerValidSW","checkValidServiceWorker","onupdatefound","installingWorker","installing","onstatechange","controller","IndexedDBService","dbName","defaultLimit","getDB","localStorageLimit","calculateLocalStorageUsage","source","validateStoreCount","tx","store","objectStore","query","indexName","getFromIndex","results","getAllFromIndex","delete","ids","deletedGuids","deleteDB","openDB","upgrade","oldVersion","newVersion","posSessionStore","createObjectStore","keyPath","autoIncrement","createIndex","unique","posStore","patronStore","deleteIndex","TerminalStateModel","TerminalStore","TerminalStore_descriptor","TerminalStore_descriptor2","TerminalStore_descriptor3","TerminalStore_descriptor4","TerminalStore_descriptor5","TerminalStore_descriptor6","TerminalStore_descriptor7","TerminalStore_descriptor8","TerminalStore_descriptor9","TerminalStore_descriptor10","TerminalStore_descriptor11","TerminalStore_descriptor12","TerminalStore_descriptor13","previousTerminal","TerminalStore_descriptor14","TerminalStore_descriptor15","TerminalStore_descriptor16","TerminalStore_descriptor17","TerminalStore_descriptor18","canServeOnDay","grabNGoConfig","servingDaySplit","dayOfWeek","isSunday","isMonday","isTuesday","isWednesday","isThursday","isFriday","isSaturday","TerminalStore_descriptor19","TerminalStore_descriptor20","TerminalStore_descriptor21","TerminalStore_descriptor22","TerminalStore_descriptor23","TerminalStore_descriptor24","TerminalStore_descriptor25","TerminalStore_descriptor26","TerminalStore_descriptor27","boltTerminalHSN","boltMID","priceDates","pd","effectiveDate","combination","allowMealCombiningForAllPatronTypes","configurationTypeText","enableTrainingMode","sessionOverrideJson","emptySessionOverrideSettings","terminalModelJson","terminalString","loadInitialCache","unshift","_this$terminalModel","grabNGoCOnfig","grabNGoAutoItems","dsSessionID","layoutItemKeyNumber","systemPosLimit","schoolTypePosLimit","mergePosLimit","existing","merge","copy","loginTime","operatingSystem","formattedServiceDate","posLayoutKeyForAutoServeID","showServedStudents","posLayoutID","generatePosSession","servingDays","_ref18","_ref19","_ref20","generatePosSessionWithDay","grabNGoPOSLayoutID","jobQueueID","closedMonths","closed","_this18$rootStore","BoltAuthModel","CardConnectStore","CardConnectStore_descriptor","CardConnectStore_descriptor2","CardConnectStore_descriptor3","CardConnectStore_descriptor4","CardConnectStore_descriptor5","CardConnectStore_descriptor6","CardConnectStore_descriptor7","CardConnectStore_descriptor8","CardConnectStore_descriptor9","CardConnectStore_descriptor10","getNewOrderID","datePart","pad2","getSeconds","n","CardConnectStore_descriptor11","CardConnectStore_descriptor12","CardConnectStore_descriptor13","CardConnectStore_descriptor14","fetchFromBoltProxy","endpoint","requestBody","merchantId","hsn","X-CardConnect-Endpoint","X-CardConnect-SessionKey","boltAuth","boltSessionKey","emvTagData","emvTagObject","resptext","authCard","getSessionKey","authAmount","clearMessage","sendIdleMessage","setError","_this6$rootStore","_response","orderId","includeSignature","includeAmountDisplay","clearDisplay","confirmAmount","beep","aid","includeAVS","includeCVV","capture","userFields","patron","handleResponse","retry","idleMessage","messageToShow","boltIdleMessage","Logger","_console","_len","messages","_key","_console2","_len2","_key2","ConfigModel","thisVersion","syncSiteDataSeconds","syncStudentSeconds","syncTransactionSeconds","syncUserSeconds","cacheList","birthdaySounds","RootStore","RootStore_descriptor","RootStore_descriptor2","RootStore_descriptor3","RootStore_descriptor4","RootStore_descriptor5","RootStore_descriptor6","RootStore_descriptor7","RootStore_descriptor8","RootStore_descriptor9","siteSyncTimer","studentSyncTimer","transactionSyncTimer","userSyncTimer","soundPlayer","soundPlayer2","stackTrace","RootStore_descriptor10","pingOnly","ping","syncSiteData","syncUsers","RootStore_descriptor11","RootStore_descriptor12","RootStore_descriptor13","RootStore_descriptor14","RootStore_descriptor15","RootStore_descriptor16","RootStore_descriptor17","RootStore_descriptor18","RootStore_descriptor19","RootStore_descriptor20","RootStore_descriptor21","RootStore_descriptor22","getConfig","useConfig","cachedConfig","isNullOrUndefined","REACT_APP_USE_IDENTITY_SERVER","REACT_APP_IDENTITY_BASE_URL","endsWith","getVersionFromFile","versionFile","version","onLine","Audio","someDate","hash","params","decodeURIComponent","atob","statusObj","caches","deleteDb","_this5$authStore$auth","_args9","offlineCustomerID","clearCache","btoa","res","getSiteData","goOnline","sound","soundFile","enableSoundsInWebPOS","play","playSound","soundID","soundToPlay","_unused8","subscribeServerToStore","ReactDOM","index_module","getElementById","registerServiceWorker"],"mappings":"yQAyCKA,+OCzCgBC,aAgCnB,SAAAA,IAAc,IAAAC,EAAAC,KAAAC,OAAAC,EAAA,EAAAD,CAAAD,KAAAF,GAAAE,KA/BNG,kBAA+C,GA+BzCH,KA9BNI,aAA0C,GA8BpCJ,KA5BNK,QAAoB,CAC1B,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAkBYL,KAhBNM,QAAoB,CAC1B,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAMYN,KAHPO,sBAGO,EAAAP,KAFPQ,cAAe,EAERR,KAmNPS,cAAgB,SAACC,GAEtB,OADAA,EAAEC,kBACK,GArNKX,KAwNPY,gBAAkB,SAACF,GACN,KAAdA,EAAEG,UACJd,EAAKS,cAAe,IAzNtBR,KAAKG,kBAAkB,GAAK,GAC5BH,KAAKG,kBAAkB,GAAK,GAC5BH,KAAKG,kBAAkB,IAAM,KAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,GAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,IAAM,IAC7BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,GAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAC9BH,KAAKG,kBAAkB,KAAO,IAE9BH,KAAKI,aAAa,GAAK,GACvBJ,KAAKI,aAAa,GAAK,GACvBJ,KAAKI,aAAa,IAAM,KACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,GACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,IAAM,IACxBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,IACzBJ,KAAKI,aAAa,KAAO,GACzBJ,KAAKI,aAAa,KAAO,GACzBJ,KAAKI,aAAa,KAAO,GACzBJ,KAAKI,aAAa,KAAO,GACzBJ,KAAKI,aAAa,KAAO,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","file":"static/js/main.6abf0a3b.chunk.js","sourcesContent":["import { inject, observer } from \"mobx-react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Form,\r\n Grid,\r\n Header,\r\n Loader,\r\n Message,\r\n Segment,\r\n Modal,\r\n Input\r\n} from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../../stores/RootStore\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport { UserStatus } from \"../../models/AuthModel\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n username: string;\r\n password: string;\r\n rememberMe: boolean;\r\n layoutName: string;\r\n layout: any;\r\n inputName: string;\r\n latestVersion: string;\r\n hasDismissedVersion: boolean;\r\n storageAlertOpen: boolean;\r\n loginDisabled: boolean;\r\n loginStep: number;\r\n}\r\n\r\nenum FocusedElement {\r\n Username = \"username\",\r\n Password = \"password\"\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n authStore: allStores.rootStore.authStore,\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nclass Login extends React.Component {\r\n public form: any;\r\n private keyboardRef: React.RefObject;\r\n private keyboardUtils: KeyboardUtils;\r\n private checkVersionTimer?: NodeJS.Timeout;\r\n private usernameInput: React.RefObject;\r\n private passwordInput: React.RefObject;\r\n\r\n constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n this.state = {\r\n latestVersion: this.props.rootStore.getCurrentVersion(),\r\n username: localStorage.getItem(\"username\") || \"\",\r\n password: \"\",\r\n rememberMe: localStorage.getItem(\"username\") !== null,\r\n hasDismissedVersion: false,\r\n storageAlertOpen: false,\r\n loginDisabled: false,\r\n loginStep: 1,\r\n layoutName: \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ]\r\n },\r\n inputName: FocusedElement.Username\r\n };\r\n\r\n this.usernameInput = React.createRef();\r\n this.passwordInput = React.createRef();\r\n this.keyboardRef = React.createRef();\r\n this.keyboardUtils = new KeyboardUtils();\r\n }\r\n\r\n public componentDidMount() {\r\n this.props.authStore!.clearSessionData();\r\n this.props.rootStore.terminalStore.clearSessionSettings();\r\n this.keyboardRef.current!.keyboard.input.username =\r\n localStorage.getItem(\"username\") || \"\";\r\n this.checkVersion();\r\n this.checkVersionTimer = setInterval(this.checkVersion, 1000 * 60);\r\n if (this.props.rootStore.db.quotaError) {\r\n this.setState({\r\n storageAlertOpen: true\r\n });\r\n }\r\n this.handleKeyboardFocus(FocusedElement.Username, true);\r\n this.clearErrorMessage();\r\n this.checkForAuthToken(true);\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.checkVersionTimer) {\r\n clearInterval(this.checkVersionTimer);\r\n }\r\n }\r\n\r\n public handleKeyboardPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\") {\r\n this.handleEnter();\r\n } else if (button === \"{tab}\") {\r\n if (this.state.inputName === FocusedElement.Username.toString()) {\r\n this.handleKeyboardFocus(FocusedElement.Password, true);\r\n } else {\r\n this.handleKeyboardFocus(FocusedElement.Username, true);\r\n }\r\n }\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n if (this.state.inputName === FocusedElement.Username.toString()) {\r\n this.setState({ username: inputObject[this.state.inputName] });\r\n } else if (this.state.inputName === FocusedElement.Password.toString()) {\r\n this.setState({ password: inputObject[this.state.inputName] });\r\n }\r\n };\r\n\r\n public handleKeyboardFocus(element: FocusedElement, forceFocus: boolean) {\r\n this.setState({\r\n inputName: element.toString()\r\n });\r\n\r\n if (forceFocus) {\r\n if (element == FocusedElement.Username) {\r\n setTimeout(() => {\r\n if (this.usernameInput.current) this.usernameInput.current.focus();\r\n }, 10);\r\n } else {\r\n setTimeout(() => {\r\n if (this.passwordInput.current) this.passwordInput.current.focus();\r\n }, 10);\r\n }\r\n }\r\n }\r\n\r\n public handleUsername = (e: React.ChangeEvent) => {\r\n const username = e.currentTarget.value;\r\n\r\n this.setState({\r\n username\r\n });\r\n };\r\n\r\n public handlePassword = (e: React.ChangeEvent) => {\r\n const password = e.currentTarget.value;\r\n\r\n this.setState({\r\n password\r\n });\r\n };\r\n\r\n public handleRememberMe = () => {\r\n this.setState({\r\n rememberMe: !this.state.rememberMe\r\n });\r\n };\r\n\r\n public handleContinue = async () => {\r\n if (this.state.loginStep === 1) {\r\n const userStatus: UserStatus | null =\r\n await this.props.rootStore.getUserStatus(this.state.username);\r\n\r\n if (userStatus && userStatus.error) {\r\n this.props.authStore!.auth.errorMessage = userStatus.error;\r\n } else if (userStatus && userStatus.isRemote) {\r\n window.location.href =\r\n this.props.authStore!.getIdentityServerLoginURL(userStatus);\r\n } else {\r\n this.setState({ loginStep: 2 });\r\n this.handleKeyboardFocus(FocusedElement.Password, true);\r\n this.clearErrorMessage();\r\n }\r\n }\r\n };\r\n\r\n public handleCancel = () => {\r\n this.setState({\r\n loginStep: 1\r\n });\r\n this.clearUsername();\r\n this.clearPassword();\r\n this.handleKeyboardFocus(FocusedElement.Username, true);\r\n this.clearErrorMessage();\r\n };\r\n\r\n public handleEnter = async () => {\r\n const { authStore } = this.props;\r\n if (this.state.username && this.state.password) {\r\n await authStore!.getAuthToken({\r\n username: this.state.username,\r\n password: this.state.password,\r\n rememberMe: this.state.rememberMe\r\n });\r\n await this.checkForAuthToken(false);\r\n }\r\n };\r\n\r\n public handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n this.handleEnter();\r\n };\r\n\r\n public toggleMessage = () => {\r\n this.props.rootStore.logoutActivityTimeout = false;\r\n this.props.rootStore.logoutLostConnection = false;\r\n };\r\n\r\n public doVersionUpdate = () => {\r\n window.location.reload(true);\r\n };\r\n\r\n public doVersionCancel = () => {\r\n this.setState({ hasDismissedVersion: true });\r\n clearTimeout(this.checkVersionTimer!);\r\n this.checkVersionTimer = undefined;\r\n };\r\n\r\n public clearErrorMessage = () => {\r\n if (this.props.authStore!.auth.errorMessage) {\r\n this.props.authStore!.auth.errorMessage = \"\";\r\n }\r\n };\r\n\r\n public clearUsername = () => {\r\n this.setState({ username: \"\" });\r\n if (this.keyboardRef.current)\r\n this.keyboardRef.current!.keyboard.input.username = \"\";\r\n };\r\n\r\n public clearPassword = () => {\r\n this.setState({ password: \"\" });\r\n if (this.keyboardRef.current)\r\n this.keyboardRef.current!.keyboard.input.password = \"\";\r\n };\r\n\r\n public handleOnKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n this.keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (this.keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue =\r\n this.state.inputName === FocusedElement.Username\r\n ? this.state.username\r\n : this.state.password;\r\n const newValue = !isBackSpace\r\n ? stateValue + this.keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : stateValue.toString().slice(0, -1);\r\n\r\n if (this.state.inputName === FocusedElement.Username) {\r\n this.setState({\r\n username: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.username = newValue;\r\n } else if (this.state.inputName === FocusedElement.Password) {\r\n this.setState({\r\n password: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.password = newValue;\r\n }\r\n }\r\n }\r\n };\r\n\r\n public closeStorageAlert = () => {\r\n this.setState({ storageAlertOpen: false });\r\n };\r\n\r\n public render() {\r\n const { authStore, rootStore } = this.props;\r\n const currentVersion = rootStore.getCurrentVersion();\r\n const showLogoutMessage =\r\n rootStore.logoutLostConnection || rootStore.logoutActivityTimeout;\r\n const showVersionMessage =\r\n !showLogoutMessage &&\r\n !this.state.hasDismissedVersion &&\r\n this.state.latestVersion !== currentVersion;\r\n\r\n if (authStore!.auth.checkingAuth) {\r\n return (\r\n \r\n Loading…\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
Login to your account
\r\n \r\n
{this.state.username}
\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 Continue\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Login\r\n \r\n \r\n \r\n \r\n\r\n {authStore!.isError && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.rootStore.logoutLostConnection\r\n ? \"Connection Lost\"\r\n : \"No Activity\"}\r\n \r\n \r\n \r\n

\r\n {this.props.rootStore.logoutLostConnection\r\n ? \"Your connection to the network was lost, or the eTrition service is not available. \"\r\n : \"Your session was idle with no activity. \"}\r\n
\r\n
\r\n You have been logged out.\r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Update Is Available\r\n \r\n \r\n

\r\n \r\n \r\n An update of the browser-based POS is available.\r\n
\r\n Click the button below to update your browser.\r\n
\r\n
\r\n \r\n
\r\n
\r\n Current version ({currentVersion}) - New version (\r\n {this.state.latestVersion})\r\n
\r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
Storage Limit
\r\n

\r\n You have reached your local storage space limit. In order to\r\n avoid data loss you have been logged out.\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 private checkVersion = () => {\r\n this.props.rootStore\r\n .getLatestVersion()\r\n .then((latestVersion) => this.setState({ latestVersion }));\r\n };\r\n\r\n private checkForAuthToken = async (isOIDC: boolean) => {\r\n const { authStore, history, rootStore } = this.props;\r\n\r\n if (isOIDC) {\r\n const id_token = this.props.rootStore.getUriFragment(\"id_token\");\r\n const access_token = this.props.rootStore.getUriFragment(\"access_token\");\r\n const state = this.props.rootStore.getUriFragment(\"state\");\r\n const oldState = localStorage.getItem(\"oidc_state\") || \"\";\r\n const oldNonce = localStorage.getItem(\"oidc_nonce\") || \"\";\r\n\r\n if (id_token && access_token && state && oldState && oldNonce) {\r\n this.setState({ loginDisabled: true });\r\n localStorage.removeItem(\"oidc_state\");\r\n localStorage.removeItem(\"oidc_nonce\");\r\n\r\n await authStore!.validateIdentityToken(\r\n this.state.username,\r\n id_token,\r\n access_token,\r\n state,\r\n oldState,\r\n oldNonce,\r\n this.state.rememberMe\r\n );\r\n this.setState({ loginDisabled: false });\r\n }\r\n }\r\n\r\n if (authStore!.auth.isAuthenticated) {\r\n rootStore.db.quotaError = false;\r\n await rootStore.terminalStore.setServiceDate();\r\n history.push(\"/\");\r\n } else {\r\n this.clearPassword();\r\n if (!isOIDC) {\r\n this.handleKeyboardFocus(FocusedElement.Password, true);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default withRouter(Login);\r\n","export default class KeyboardUtils {\r\n private characterMapShift: { [key: number]: string } = {};\r\n private characterMap: { [key: number]: string } = {};\r\n\r\n private numbers: string[] = [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"0\"\r\n ];\r\n private symbols: string[] = [\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 public keyCodesToIgnore: number[];\r\n public shiftPressed = false;\r\n\r\n constructor() {\r\n this.characterMapShift[8] = \"\";\r\n this.characterMapShift[9] = \"\";\r\n this.characterMapShift[13] = \"\\n\";\r\n this.characterMapShift[16] = \"\";\r\n this.characterMapShift[17] = \"\";\r\n this.characterMapShift[18] = \"\";\r\n this.characterMapShift[19] = \"\";\r\n this.characterMapShift[20] = \"\";\r\n this.characterMapShift[27] = \"\";\r\n this.characterMapShift[32] = \" \";\r\n this.characterMapShift[33] = \"\";\r\n this.characterMapShift[34] = \"\";\r\n this.characterMapShift[35] = \"\";\r\n this.characterMapShift[36] = \"\";\r\n this.characterMapShift[37] = \"\";\r\n this.characterMapShift[38] = \"\";\r\n this.characterMapShift[39] = \"\";\r\n this.characterMapShift[40] = \"\";\r\n this.characterMapShift[45] = \"\";\r\n this.characterMapShift[46] = \"\";\r\n this.characterMapShift[48] = \")\";\r\n this.characterMapShift[49] = \"!\";\r\n this.characterMapShift[50] = \"@\";\r\n this.characterMapShift[51] = \"#\";\r\n this.characterMapShift[52] = \"$\";\r\n this.characterMapShift[53] = \"%\";\r\n this.characterMapShift[54] = \"^\";\r\n this.characterMapShift[55] = \"&\";\r\n this.characterMapShift[56] = \"*\";\r\n this.characterMapShift[57] = \"(\";\r\n this.characterMapShift[59] = \":\";\r\n this.characterMapShift[61] = \"+\";\r\n this.characterMapShift[65] = \"A\";\r\n this.characterMapShift[66] = \"B\";\r\n this.characterMapShift[67] = \"C\";\r\n this.characterMapShift[68] = \"D\";\r\n this.characterMapShift[69] = \"E\";\r\n this.characterMapShift[70] = \"F\";\r\n this.characterMapShift[71] = \"G\";\r\n this.characterMapShift[72] = \"H\";\r\n this.characterMapShift[73] = \"I\";\r\n this.characterMapShift[74] = \"J\";\r\n this.characterMapShift[75] = \"K\";\r\n this.characterMapShift[76] = \"L\";\r\n this.characterMapShift[77] = \"M\";\r\n this.characterMapShift[78] = \"N\";\r\n this.characterMapShift[79] = \"O\";\r\n this.characterMapShift[80] = \"P\";\r\n this.characterMapShift[81] = \"Q\";\r\n this.characterMapShift[82] = \"R\";\r\n this.characterMapShift[83] = \"S\";\r\n this.characterMapShift[84] = \"T\";\r\n this.characterMapShift[85] = \"U\";\r\n this.characterMapShift[86] = \"V\";\r\n this.characterMapShift[87] = \"W\";\r\n this.characterMapShift[88] = \"X\";\r\n this.characterMapShift[89] = \"Y\";\r\n this.characterMapShift[90] = \"Z\";\r\n this.characterMapShift[91] = \"\";\r\n this.characterMapShift[92] = \"\";\r\n this.characterMapShift[93] = \"\";\r\n this.characterMapShift[96] = \"0\";\r\n this.characterMapShift[97] = \"1\";\r\n this.characterMapShift[98] = \"2\";\r\n this.characterMapShift[99] = \"3\";\r\n this.characterMapShift[100] = \"4\";\r\n this.characterMapShift[101] = \"5\";\r\n this.characterMapShift[102] = \"6\";\r\n this.characterMapShift[103] = \"7\";\r\n this.characterMapShift[104] = \"8\";\r\n this.characterMapShift[105] = \"9\";\r\n this.characterMapShift[106] = \"*\";\r\n this.characterMapShift[107] = \"+\";\r\n this.characterMapShift[109] = \"_\";\r\n this.characterMapShift[107] = \"+\";\r\n this.characterMapShift[111] = \"/\";\r\n this.characterMapShift[112] = \"\";\r\n this.characterMapShift[113] = \"\";\r\n this.characterMapShift[114] = \"\";\r\n this.characterMapShift[115] = \"\";\r\n this.characterMapShift[116] = \"\";\r\n this.characterMapShift[117] = \"\";\r\n this.characterMapShift[118] = \"\";\r\n this.characterMapShift[119] = \"\";\r\n this.characterMapShift[120] = \"\";\r\n this.characterMapShift[121] = \"\";\r\n this.characterMapShift[122] = \"\";\r\n this.characterMapShift[123] = \"\";\r\n this.characterMapShift[144] = \"\";\r\n this.characterMapShift[145] = \"\";\r\n this.characterMapShift[186] = \":\";\r\n this.characterMapShift[187] = \"+\";\r\n this.characterMapShift[188] = \"<\";\r\n this.characterMapShift[189] = \"_\";\r\n this.characterMapShift[190] = \">\";\r\n this.characterMapShift[191] = \"?\";\r\n this.characterMapShift[192] = \"~\";\r\n this.characterMapShift[219] = \"{\";\r\n this.characterMapShift[220] = \"|\";\r\n this.characterMapShift[221] = \"}\";\r\n this.characterMapShift[222] = '\"';\r\n\r\n this.characterMap[8] = \"\";\r\n this.characterMap[9] = \"\";\r\n this.characterMap[13] = \"\\n\";\r\n this.characterMap[16] = \"\";\r\n this.characterMap[17] = \"\";\r\n this.characterMap[18] = \"\";\r\n this.characterMap[19] = \"\";\r\n this.characterMap[20] = \"\";\r\n this.characterMap[27] = \"\";\r\n this.characterMap[32] = \" \";\r\n this.characterMap[33] = \"\";\r\n this.characterMap[34] = \"\";\r\n this.characterMap[35] = \"\";\r\n this.characterMap[36] = \"\";\r\n this.characterMap[37] = \"\";\r\n this.characterMap[38] = \"\";\r\n this.characterMap[39] = \"\";\r\n this.characterMap[40] = \"\";\r\n this.characterMap[45] = \"\";\r\n this.characterMap[46] = \"\";\r\n this.characterMap[48] = \"0\";\r\n this.characterMap[49] = \"1\";\r\n this.characterMap[50] = \"2\";\r\n this.characterMap[51] = \"3\";\r\n this.characterMap[52] = \"4\";\r\n this.characterMap[53] = \"5\";\r\n this.characterMap[54] = \"6\";\r\n this.characterMap[55] = \"7\";\r\n this.characterMap[56] = \"8\";\r\n this.characterMap[57] = \"9\";\r\n this.characterMap[59] = \";\";\r\n this.characterMap[61] = \"=\";\r\n this.characterMap[65] = \"a\";\r\n this.characterMap[66] = \"b\";\r\n this.characterMap[67] = \"c\";\r\n this.characterMap[68] = \"d\";\r\n this.characterMap[69] = \"e\";\r\n this.characterMap[70] = \"f\";\r\n this.characterMap[71] = \"g\";\r\n this.characterMap[72] = \"h\";\r\n this.characterMap[73] = \"i\";\r\n this.characterMap[74] = \"j\";\r\n this.characterMap[75] = \"k\";\r\n this.characterMap[76] = \"l\";\r\n this.characterMap[77] = \"m\";\r\n this.characterMap[78] = \"n\";\r\n this.characterMap[79] = \"o\";\r\n this.characterMap[80] = \"p\";\r\n this.characterMap[81] = \"q\";\r\n this.characterMap[82] = \"r\";\r\n this.characterMap[83] = \"s\";\r\n this.characterMap[84] = \"t\";\r\n this.characterMap[85] = \"u\";\r\n this.characterMap[86] = \"v\";\r\n this.characterMap[87] = \"w\";\r\n this.characterMap[88] = \"x\";\r\n this.characterMap[89] = \"y\";\r\n this.characterMap[90] = \"z\";\r\n this.characterMap[91] = \"\";\r\n this.characterMap[92] = \"\";\r\n this.characterMap[93] = \"\";\r\n this.characterMap[96] = \"0\";\r\n this.characterMap[97] = \"1\";\r\n this.characterMap[98] = \"2\";\r\n this.characterMap[99] = \"3\";\r\n this.characterMap[100] = \"4\";\r\n this.characterMap[101] = \"5\";\r\n this.characterMap[102] = \"6\";\r\n this.characterMap[103] = \"7\";\r\n this.characterMap[104] = \"8\";\r\n this.characterMap[105] = \"9\";\r\n this.characterMap[106] = \"*\";\r\n this.characterMap[107] = \"+\";\r\n this.characterMap[109] = \"_\";\r\n this.characterMap[107] = \"+\";\r\n this.characterMap[111] = \"/\";\r\n this.characterMap[112] = \"\";\r\n this.characterMap[113] = \"\";\r\n this.characterMap[114] = \"\";\r\n this.characterMap[115] = \"\";\r\n this.characterMap[116] = \"\";\r\n this.characterMap[117] = \"\";\r\n this.characterMap[118] = \"\";\r\n this.characterMap[119] = \"\";\r\n this.characterMap[120] = \"\";\r\n this.characterMap[121] = \"\";\r\n this.characterMap[122] = \"\";\r\n this.characterMap[123] = \"\";\r\n this.characterMap[144] = \"\";\r\n this.characterMap[145] = \"\";\r\n this.characterMap[186] = \";\";\r\n this.characterMap[187] = \"=\";\r\n this.characterMap[188] = \",\";\r\n this.characterMap[189] = \"-\";\r\n this.characterMap[190] = \".\";\r\n this.characterMap[191] = \"/\";\r\n this.characterMap[192] = \"`\";\r\n this.characterMap[219] = \"[\";\r\n this.characterMap[220] = \"\\\\\";\r\n this.characterMap[221] = \"]\";\r\n this.characterMap[222] = \"'\";\r\n\r\n this.keyCodesToIgnore = [\r\n 9, 13, 16, 17, 18, 19, 20, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46,\r\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 144\r\n ];\r\n }\r\n\r\n public noContextMenu = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n return false;\r\n };\r\n\r\n public handleOnKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n this.shiftPressed = true;\r\n }\r\n };\r\n\r\n public mapKeyPressToActualCharacter(\r\n e: React.KeyboardEvent\r\n ) {\r\n if (this.shiftPressed || e.getModifierState(\"CapsLock\")) {\r\n return this.characterMapShift[e.keyCode];\r\n } else {\r\n return this.characterMap[e.keyCode];\r\n }\r\n }\r\n\r\n public downShift(key: string) {\r\n return this.numbers[this.symbols.indexOf(key)];\r\n }\r\n}\r\n","import { KeyboardEvent } from \"react\";\r\nimport RootStore from \"../stores/RootStore\";\r\n\r\nexport function checkAuthorization(\r\n response: Response,\r\n rootStore: RootStore\r\n): boolean {\r\n if (!response.ok) {\r\n rootStore.logger.logBadResponse(response);\r\n rootStore.hasError = true;\r\n return false;\r\n }\r\n\r\n if (response.status === 401) {\r\n rootStore.authStore.logout();\r\n }\r\n\r\n if (response.status >= 400) {\r\n rootStore.logger.logBadResponse(response);\r\n }\r\n\r\n return response.status < 400;\r\n}\r\n\r\nexport function getToday(): Date {\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n return today;\r\n}\r\n\r\nexport function getFormattedToday(): string {\r\n return formatServiceDate(getToday());\r\n}\r\n\r\nexport function formatServiceDate(serviceDate: Date): string {\r\n const date = new Date(serviceDate);\r\n return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`;\r\n}\r\n\r\nexport function formatServiceDateTime(serviceDate: Date): string {\r\n const date = new Date(serviceDate);\r\n const offset = date.getTimezoneOffset() * 60000;\r\n date.setTime(date.getTime() - offset);\r\n return `${\r\n date.getMonth() + 1\r\n }/${date.getDate()}/${date.getFullYear()} ${date.toLocaleTimeString([], {\r\n hour: \"2-digit\",\r\n minute: \"2-digit\"\r\n })}`;\r\n}\r\n\r\nexport function ignoreExponent(e: KeyboardEvent) {\r\n if (e.keyCode === 69) {\r\n e.preventDefault();\r\n }\r\n}\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Grid,\r\n Header,\r\n Input,\r\n Loader,\r\n Modal,\r\n Popup,\r\n Segment,\r\n Table\r\n} from \"semantic-ui-react\";\r\nimport { ignoreExponent } from \"../utils\";\r\nimport AppMenu from \"./menu/AppMenu\";\r\n\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport RootStore, { AllStores } from \"../stores/RootStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore, {\r\n CashCount,\r\n CheckDetail\r\n} from \"../stores/TransactionStore\";\r\nimport CheckList from \"./meal/CheckList\";\r\nimport FlexContent from \"./util/FlexContent\";\r\nimport Text from \"./util/Text\";\r\nimport ClosedMonth from \"./meal/ClosedMonth\";\r\nimport KeyboardUtils from \"../utils/keyboard\";\r\n\r\ninterface Props {\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n totalPenny: string;\r\n totalNickel: string;\r\n totalDime: string;\r\n totalQuarter: string;\r\n totalFiftyCent: string;\r\n totalDollarCoin: string;\r\n totalDollarBill: string;\r\n totalTwoDollarBill: string;\r\n totalFiveDollarBill: string;\r\n totalTenDollarBill: string;\r\n totalTwentyDollarBill: string;\r\n totalFiftyDollarBill: string;\r\n totalHundredDollarBill: string;\r\n other: string;\r\n totalCash: number;\r\n totalCheck: number;\r\n grandTotal: number;\r\n layoutName: string;\r\n inputName: string;\r\n layout: any;\r\n showCheckList: boolean;\r\n showCounterCheck: boolean;\r\n amountError: boolean;\r\n attendance: string | null;\r\n attendanceError: boolean;\r\n}\r\n\r\ninterface Item {\r\n name: string;\r\n content: string;\r\n denomination?: number;\r\n itemValue?: number;\r\n}\r\n\r\nenum Denomination {\r\n HundredDollarBill = 1,\r\n FiftyDollarBill = 2,\r\n TwentyDollarBill = 3,\r\n TenDollarBill = 4,\r\n FiveDollarBill = 5,\r\n TwoDollarBill = 15,\r\n DollarBill = 6,\r\n FiftyCent = 7,\r\n Quarter = 8,\r\n Dime = 9,\r\n Nickel = 10,\r\n Penny = 11,\r\n Checks = 12,\r\n Other = 13,\r\n DollarCoin = 14\r\n}\r\n\r\nenum DenominationString {\r\n HundredDollarBill = \"HundredDollarBill\",\r\n FiftyDollarBill = \"FiftyDollarBill\",\r\n TwentyDollarBill = \"TwentyDollarBill\",\r\n TenDollarBill = \"TenDollarBill\",\r\n FiveDollarBill = \"FiveDollarBill\",\r\n TwoDollarBill = \"TwoDollarBill\",\r\n DollarBill = \"DollarBill\",\r\n FiftyCent = \"FiftyCent\",\r\n Quarter = \"Quarter\",\r\n Dime = \"Dime\",\r\n Nickel = \"Nickel\",\r\n Penny = \"Penny\",\r\n DollarCoin = \"DollarCoin\"\r\n}\r\n\r\nenum CoinRollsMultiplier {\r\n Penny = 50,\r\n Nickel = 40,\r\n Dime = 50,\r\n Quarter = 40,\r\n FiftyCent = 20,\r\n DollarCoin = 25\r\n}\r\n\r\nenum MoneyValue {\r\n Penny = 0.01,\r\n Nickel = 0.05,\r\n Dime = 0.1,\r\n Quarter = 0.25,\r\n FiftyCent = 0.5,\r\n DollarCoin = 1,\r\n DollarBill = 1,\r\n TwoDollarBill = 2,\r\n FiveDollarBill = 5,\r\n TenDollarBill = 10,\r\n TwentyDollarBill = 20,\r\n FiftyDollarBill = 50,\r\n HundredDollarBill = 100\r\n}\r\n\r\nenum TabAction {\r\n TabForwards = 1,\r\n TabBackwards = 2\r\n}\r\n\r\nconst totalCash = \"totalCash\";\r\nconst totalCheck = \"totalCheck\";\r\nconst grandTotal = \"grandTotal\";\r\nconst other = \"other\";\r\nconst rollsPrefix = \"rollsOf\";\r\nconst loosePrefix = \"loose\";\r\nconst totalPrefix = \"total\";\r\nconst billPrefix = \"Bill\";\r\nconst layoutName = \"layoutName\";\r\nconst inputName = \"inputName\";\r\nconst layout = \"layout\";\r\nconst attendance = \"attendance\";\r\n\r\n@inject((allStores: AllStores) => ({\r\n transactionStore: allStores.rootStore.transactionStore,\r\n terminalStore: allStores.rootStore.terminalStore,\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nclass CashInDrawer extends React.Component {\r\n private hasLoaded = false;\r\n private keyboardRef: React.RefObject;\r\n private checkTotal: number = 0;\r\n private attendance: string = \"\";\r\n private oldAttendance: number | null = null;\r\n private keyboardUtils: KeyboardUtils = new KeyboardUtils();\r\n\r\n private cashInDrawerItems: Array> = [\r\n [\r\n { name: \"rollsOfPenny\", content: \"$0.01\" },\r\n { name: \"loosePenny\", content: \"$0.01\" },\r\n {\r\n name: \"totalPenny\",\r\n content: \"$\",\r\n denomination: Denomination.Penny,\r\n itemValue: MoneyValue.Penny\r\n },\r\n undefined,\r\n { name: \"looseDollarBill\", content: \"$1\" },\r\n {\r\n name: \"totalDollarBill\",\r\n content: \"$\",\r\n denomination: Denomination.DollarBill,\r\n itemValue: MoneyValue.DollarBill\r\n }\r\n ],\r\n [\r\n { name: \"rollsOfNickel\", content: \"$0.05\" },\r\n { name: \"looseNickel\", content: \"$0.05\" },\r\n {\r\n name: \"totalNickel\",\r\n content: \"$\",\r\n denomination: Denomination.Nickel,\r\n itemValue: MoneyValue.Nickel\r\n },\r\n undefined,\r\n { name: \"looseTwoDollarBill\", content: \"$2\" },\r\n {\r\n name: \"totalTwoDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.TwoDollarBill\r\n }\r\n ],\r\n [\r\n { name: \"rollsOfDime\", content: \"$0.10\" },\r\n { name: \"looseDime\", content: \"$0.10\" },\r\n { name: \"totalDime\", content: \"$\", itemValue: MoneyValue.Dime },\r\n undefined,\r\n { name: \"looseFiveDollarBill\", content: \"$5\" },\r\n {\r\n name: \"totalFiveDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.FiveDollarBill\r\n }\r\n ],\r\n [\r\n { name: \"rollsOfQuarter\", content: \"$0.25\" },\r\n { name: \"looseQuarter\", content: \"$0.25\" },\r\n { name: \"totalQuarter\", content: \"$\", itemValue: MoneyValue.Quarter },\r\n undefined,\r\n { name: \"looseTenDollarBill\", content: \"$10\" },\r\n {\r\n name: \"totalTenDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.TenDollarBill\r\n }\r\n ],\r\n [\r\n { name: \"rollsOfFiftyCent\", content: \"$0.50\" },\r\n { name: \"looseFiftyCent\", content: \"$0.50\" },\r\n { name: \"totalFiftyCent\", content: \"$\", itemValue: MoneyValue.FiftyCent },\r\n undefined,\r\n { name: \"looseTwentyDollarBill\", content: \"$20\" },\r\n {\r\n name: \"totalTwentyDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.TwentyDollarBill\r\n }\r\n ],\r\n [\r\n { name: \"rollsOfDollarCoin\", content: \"$1.00\" },\r\n { name: \"looseDollarCoin\", content: \"$1.00\" },\r\n {\r\n name: \"totalDollarCoin\",\r\n content: \"$\",\r\n itemValue: MoneyValue.DollarCoin\r\n },\r\n undefined,\r\n { name: \"looseFiftyDollarBill\", content: \"$50\" },\r\n {\r\n name: \"totalFiftyDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.FiftyDollarBill\r\n }\r\n ],\r\n [\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { name: \"looseHundredDollarBill\", content: \"$100\" },\r\n {\r\n name: \"totalHundredDollarBill\",\r\n content: \"$\",\r\n itemValue: MoneyValue.HundredDollarBill\r\n }\r\n ],\r\n [\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { name: \"other\", content: \"Other\" }\r\n ]\r\n ];\r\n\r\n private inputBoxes = {};\r\n private inputNames: string[] = [];\r\n private enterIndex: number;\r\n private cashCounterCheck: boolean = false;\r\n\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n this.handlePhysicalKeyboard = this.handlePhysicalKeyboard.bind(this);\r\n const state = { amountError: false };\r\n\r\n for (const key of Object.keys(DenominationString)) {\r\n const denomination = DenominationString[key];\r\n\r\n if (CoinRollsMultiplier[denomination] !== undefined) {\r\n state[rollsPrefix + denomination] = \"\";\r\n }\r\n\r\n state[loosePrefix + denomination] = \"\";\r\n state[totalPrefix + denomination] = \"\";\r\n }\r\n\r\n state[other] = \"\";\r\n state[totalCash] = 0;\r\n state[totalCheck] = 0;\r\n state[grandTotal] = 0;\r\n state[layoutName] = \"default\";\r\n state[layout] = {\r\n default: [\"7 8 9\", \"4 5 6\", \"1 2 3\", \"0 00 .\", \"{bksp} clear {enter}\"]\r\n };\r\n state[inputName] = \"input\";\r\n state[attendance] = \"\";\r\n this.state = state as State;\r\n this.keyboardRef = React.createRef();\r\n this.inputNames.push(\r\n \"rollsOfPenny\",\r\n \"loosePenny\",\r\n \"totalPenny\",\r\n \"rollsOfNickel\",\r\n \"looseNickel\",\r\n \"totalNickel\",\r\n \"rollsOfDime\",\r\n \"looseDime\",\r\n \"totalDime\",\r\n \"rollsOfQuarter\",\r\n \"looseQuarter\",\r\n \"totalQuarter\",\r\n \"rollsOfFiftyCent\",\r\n \"looseFiftyCent\",\r\n \"totalFiftyCent\",\r\n \"rollsOfDollarCoin\",\r\n \"looseDollarCoin\",\r\n \"totalDollarCoin\",\r\n \"looseDollarBill\",\r\n \"totalDollarBill\",\r\n \"looseTwoDollarBill\",\r\n \"totalTwoDollarBill\",\r\n \"looseFiveDollarBill\",\r\n \"totalFiveDollarBill\",\r\n \"looseTenDollarBill\",\r\n \"totalTenDollarBill\",\r\n \"looseTwentyDollarBill\",\r\n \"totalTwentyDollarBill\",\r\n \"looseFiftyDollarBill\",\r\n \"totalFiftyDollarBill\",\r\n \"looseHundredDollarBill\",\r\n \"totalHundredDollarBill\",\r\n \"other\",\r\n \"attendance\"\r\n );\r\n this.enterIndex = 0;\r\n }\r\n\r\n public componentDidMount() {\r\n this.props.rootStore.changeDayWhenOffline = false;\r\n\r\n this.cashCounterCheck =\r\n this.props.terminalStore.terminalModel.terminalConfigurations.some(\r\n (tc) => tc.cashCounterCheck\r\n );\r\n\r\n document.addEventListener(\"keydown\", this.handlePhysicalKeyboard, false);\r\n\r\n const {\r\n transactionStore,\r\n transactionStore: { getCashInDrawer, getCheckList, cashCountSessionId }\r\n } = this.props;\r\n\r\n const fetch1 = getCashInDrawer(this.cashCounterCheck, cashCountSessionId);\r\n const fetch2 = getCheckList(cashCountSessionId);\r\n\r\n Promise.all([fetch1, fetch2]).then(() => {\r\n let checkAmountTotal: number = 0;\r\n\r\n if (transactionStore.checkDetails) {\r\n transactionStore.checkDetails.forEach((element: CheckDetail) => {\r\n checkAmountTotal += element.amount;\r\n });\r\n }\r\n\r\n this.oldAttendance = transactionStore.dailyAttendance;\r\n this.attendance =\r\n this.oldAttendance === null || this.oldAttendance < 0\r\n ? \"\"\r\n : this.oldAttendance.toString();\r\n\r\n this.checkTotal = checkAmountTotal;\r\n const total =\r\n +this.state.totalPenny +\r\n +this.state.totalNickel +\r\n +this.state.totalDime +\r\n +this.state.totalQuarter +\r\n +this.state.totalFiftyCent +\r\n +this.state.totalDollarCoin +\r\n +this.state.totalDollarBill +\r\n +this.state.totalTwoDollarBill +\r\n +this.state.totalFiveDollarBill +\r\n +this.state.totalTenDollarBill +\r\n +this.state.totalTwentyDollarBill +\r\n +this.state.totalFiftyDollarBill +\r\n +this.state.totalHundredDollarBill +\r\n +this.state.other +\r\n this.checkTotal;\r\n\r\n this.setState({\r\n totalCheck: this.checkTotal,\r\n grandTotal: total,\r\n attendance: this.attendance\r\n });\r\n });\r\n }\r\n\r\n public componentDidUpdate() {\r\n if (\r\n !this.hasLoaded &&\r\n this.props.transactionStore.cashCounts &&\r\n this.props.transactionStore.cashCounts.length\r\n ) {\r\n this.hasLoaded = true;\r\n\r\n const { cashCounts } = this.props.transactionStore;\r\n\r\n const newState = { ...this.state };\r\n\r\n for (const key of Object.keys(DenominationString)) {\r\n const denomination = DenominationString[key];\r\n const value = cashCounts.find(\r\n (c) => c.cashSetupDenominationID === +Denomination[denomination]\r\n );\r\n newState[totalPrefix + denomination] =\r\n value && value.endAmount !== 0 ? value.endAmount.toFixed(2) : \"\";\r\n newState[loosePrefix + denomination] =\r\n value && value.endAmount !== 0\r\n ? Math.ceil(value.endAmount / +MoneyValue[denomination]).toString()\r\n : \"\";\r\n }\r\n\r\n const otherAmount = cashCounts.find(\r\n (c) => c.cashSetupDenominationID === Denomination.Other\r\n );\r\n const checks = cashCounts.find(\r\n (c) => c.cashSetupDenominationID === Denomination.Checks\r\n );\r\n const dailyAttendance =\r\n this.props.transactionStore.dailyAttendance === null\r\n ? \"\"\r\n : this.props.transactionStore.dailyAttendance.toString();\r\n newState.other = otherAmount ? otherAmount.endAmount.toFixed(2) : \"\";\r\n newState.totalCheck = checks ? checks.endAmount : 0;\r\n newState.attendance = dailyAttendance;\r\n this.setTotals(newState);\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n this.props.rootStore.changeDayWhenOffline = true;\r\n document.removeEventListener(\"keydown\", this.handlePhysicalKeyboard, false);\r\n }\r\n\r\n public handleTab = (tabAction: TabAction) => {\r\n if (tabAction === TabAction.TabForwards) {\r\n this.enterIndex = this.inputNames.findIndex(\r\n (obj) => obj === this.state.inputName\r\n );\r\n if (this.enterIndex === this.inputNames.length - 1) {\r\n this.enterIndex = 0;\r\n } else {\r\n this.enterIndex += 1;\r\n }\r\n const input = this.inputNames[this.enterIndex];\r\n const ref = this.inputBoxes[input];\r\n setTimeout(() => {\r\n if (ref) {\r\n ref.focus();\r\n }\r\n }, 100);\r\n } else if (tabAction === TabAction.TabBackwards) {\r\n this.enterIndex = this.inputNames.findIndex(\r\n (obj) => obj === this.state.inputName\r\n );\r\n if (this.enterIndex === 0) {\r\n this.enterIndex = this.inputNames.length - 1;\r\n } else {\r\n this.enterIndex -= 1;\r\n }\r\n const input = this.inputNames[this.enterIndex];\r\n const ref = this.inputBoxes[input];\r\n if (ref) {\r\n ref.focus();\r\n }\r\n }\r\n };\r\n\r\n public backClicked = () => {\r\n this.props.transactionStore.clearCashCount();\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n public closeCounterCheck = () => this.setState({ showCounterCheck: false });\r\n public showCounterCheck = () => this.setState({ showCounterCheck: true });\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{enter}\") {\r\n this.handleTab(TabAction.TabForwards);\r\n } else if (button === \"clear\") {\r\n this.clear();\r\n } else if (button === \".\" && this.state.inputName.startsWith(totalPrefix)) {\r\n const input = this.state.inputName;\r\n\r\n const value = Number(this.state[input].replace(\".\", \"\"))\r\n .toFixed(2)\r\n .toString();\r\n const state = { ...this.state };\r\n state[input] = value;\r\n this.setState(state);\r\n\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n this.state.inputName.toString()\r\n );\r\n }\r\n };\r\n\r\n public removePrefix = (input: string, prefix: string) => {\r\n const hasPrefix = input.indexOf(prefix) === 0;\r\n return hasPrefix ? input.substr(prefix.length) : input.toString();\r\n };\r\n\r\n public removePrefixFromInputName(inputName: string) {\r\n inputName = this.removePrefix(inputName, rollsPrefix);\r\n inputName = this.removePrefix(inputName, loosePrefix);\r\n inputName = this.removePrefix(inputName, totalPrefix);\r\n return inputName;\r\n }\r\n\r\n public shouldClearInputName(inputName: string, noPrefixInput: string) {\r\n const input = this.removePrefixFromInputName(inputName);\r\n return input === noPrefixInput;\r\n }\r\n\r\n public clear() {\r\n if (this.state.inputName === \"attendance\") {\r\n this.setState({ attendance: \"\" });\r\n this.keyboardRef.current!.keyboard.setInput!(\"\", this.state.inputName);\r\n } else if (this.state.inputName === \"other\") {\r\n this.setState(\r\n {\r\n other: \"\"\r\n },\r\n () => {\r\n this.setTotals(this.state);\r\n }\r\n );\r\n this.keyboardRef.current!.keyboard.setInput!(\"\", this.state.inputName);\r\n } else {\r\n if (\r\n this.state.inputName.includes(billPrefix) ||\r\n this.state.inputName.includes(totalPrefix)\r\n ) {\r\n const noPrefixInput = this.removePrefixFromInputName(\r\n this.state.inputName\r\n );\r\n const inputNamesToClear = this.inputNames.filter((x) =>\r\n this.shouldClearInputName(x, noPrefixInput)\r\n );\r\n const state = { ...this.state };\r\n\r\n inputNamesToClear.forEach((i) => {\r\n state[i] = \"\";\r\n this.keyboardRef.current!.keyboard.setInput!(\"\", i);\r\n });\r\n\r\n this.setState(state, () => {\r\n this.setTotals(this.state);\r\n });\r\n } else {\r\n // clear rolls or loose\r\n const state = { ...this.state };\r\n state[this.state.inputName] = \"\";\r\n this.setState(state, () => {\r\n this.blurAmount(\"0\", this.state.inputName);\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n \"\",\r\n this.state.inputName\r\n );\r\n });\r\n }\r\n }\r\n }\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n let input = inputObject[this.state.inputName];\r\n let isClear = false;\r\n if (input.includes(\"clear\")) {\r\n isClear = true;\r\n input = \"\";\r\n }\r\n if (\r\n this.state.inputName.startsWith(loosePrefix) ||\r\n this.state.inputName.startsWith(rollsPrefix) ||\r\n this.state.inputName == \"attendance\"\r\n ) {\r\n this.handleLooseAndRolls(inputObject[this.state.inputName], isClear);\r\n } else {\r\n this.handleTotal(inputObject[this.state.inputName], isClear);\r\n }\r\n\r\n this.focusInputBox();\r\n };\r\n\r\n public handleTotal = (value: string, isClear: boolean) => {\r\n if (isClear) {\r\n this.clear();\r\n } else {\r\n value = value.replace(\".\", \"\");\r\n\r\n const isValid = !isNaN(parseFloat(value));\r\n\r\n if (isValid) {\r\n value = parseInt(value, 10).toString().padStart(3, \"0\");\r\n value = value.slice(0, -2) + \".\" + value.slice(-2);\r\n }\r\n\r\n const input = this.state.inputName;\r\n this.state[input] = value;\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n this.state.inputName.toString()\r\n );\r\n this.blurAmount(value, input);\r\n }\r\n };\r\n\r\n public handleLooseAndRolls = (value: string, isClear: boolean) => {\r\n if (isClear) {\r\n this.clear();\r\n } else {\r\n const input = this.state.inputName;\r\n this.state[input] = value;\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n this.state.inputName.toString()\r\n );\r\n this.blurAmount(value, input);\r\n }\r\n };\r\n\r\n public handleKeyboardFocus(element: string) {\r\n this.setState({\r\n inputName: element\r\n });\r\n }\r\n\r\n public checkListClicked = () => {\r\n this.setState({\r\n showCheckList: true\r\n });\r\n };\r\n\r\n public saveCashInDrawerClicked = async () => {\r\n const { transactionStore, terminalStore } = this.props;\r\n\r\n const cashCounts: CashCount[] = [];\r\n const attendance = this.state.attendance ? +this.state.attendance : null;\r\n\r\n let error = false;\r\n let amountError = false;\r\n let attendanceError = false;\r\n\r\n if (terminalStore.trainingMode) {\r\n this.props.history.push(\"/\");\r\n return;\r\n }\r\n\r\n if (attendance !== null && (attendance > 99999 || attendance < 0)) {\r\n attendanceError = true;\r\n }\r\n\r\n for (const key of Object.keys(DenominationString)) {\r\n const denomination = DenominationString[key];\r\n\r\n if (this.state[totalPrefix + denomination] !== \"\") {\r\n error =\r\n +this.state[totalPrefix + denomination] < 0 ||\r\n Math.round(100 * +this.state[totalPrefix + denomination]) %\r\n (100 * +MoneyValue[denomination]) !==\r\n 0;\r\n\r\n amountError =\r\n Math.round(\r\n +this.state[totalPrefix + denomination] / +MoneyValue[denomination]\r\n ) > 2147483647;\r\n\r\n if (error || amountError || attendanceError) {\r\n break;\r\n }\r\n\r\n cashCounts.push({\r\n cashSetupDenominationID: +Denomination[denomination],\r\n endAmount: +this.state[totalPrefix + denomination],\r\n endQuantity: Math.round(\r\n +this.state[totalPrefix + denomination] / +MoneyValue[denomination]\r\n )\r\n });\r\n } else {\r\n cashCounts.push({\r\n cashSetupDenominationID: +Denomination[denomination],\r\n endAmount: +0,\r\n endQuantity: +0\r\n });\r\n }\r\n }\r\n\r\n if (this.state.other !== \"\") {\r\n error = error || +this.state.other < 0;\r\n cashCounts.push({\r\n cashSetupDenominationID: Denomination.Other,\r\n endAmount: +this.state.other,\r\n endQuantity: 0\r\n });\r\n }\r\n\r\n cashCounts.push({\r\n cashSetupDenominationID: Denomination.Checks,\r\n endAmount: +this.state.totalCheck,\r\n endQuantity:\r\n (transactionStore.checkDetails &&\r\n transactionStore.checkDetails.length) ||\r\n 0\r\n });\r\n\r\n // To handle the user not actually changing attendance, we want to\r\n // send -999999 as a flag to let eTrition know to skip updating it.\r\n const sendAttendance =\r\n (this.oldAttendance === null ? 0 : this.oldAttendance) ===\r\n (attendance === null ? 0 : attendance)\r\n ? -999999\r\n : attendance;\r\n\r\n if (!error && !amountError && !attendanceError) {\r\n await transactionStore.saveCashInDrawer(\r\n cashCounts,\r\n this.props.transactionStore.cashCountSessionId,\r\n sendAttendance\r\n );\r\n this.props.history.push(\"/\");\r\n } else if (amountError || attendanceError) {\r\n this.setState({ amountError, attendanceError });\r\n }\r\n };\r\n\r\n public blurAmount = (value: string, name: string) => {\r\n const allowDecimal = name.startsWith(totalPrefix) || name === \"other\";\r\n\r\n if (!allowDecimal && value.toString().indexOf(\".\") >= 0) {\r\n value = value.toString().replace(\".\", \"\");\r\n this.keyboardRef.current!.keyboard.setInput!(value, this.state.inputName);\r\n }\r\n\r\n const valueAsNumber = parseFloat(value);\r\n const isValid = !isNaN(valueAsNumber);\r\n const newState = { ...this.state };\r\n\r\n const newValue = isValid\r\n ? allowDecimal\r\n ? valueAsNumber\r\n : Math.floor(valueAsNumber)\r\n : 0;\r\n\r\n if (value === \"\" || value === \"0\") {\r\n newState[name] = \"\";\r\n } else {\r\n newState[name] = allowDecimal ? newValue.toFixed(2) : newValue;\r\n }\r\n\r\n if (name !== \"attendance\") {\r\n if (name.startsWith(rollsPrefix) || name.startsWith(loosePrefix)) {\r\n const prefix = name.startsWith(rollsPrefix) ? rollsPrefix : loosePrefix;\r\n const field = name.replace(prefix, \"\");\r\n\r\n const newTotal = (\r\n field.includes(billPrefix)\r\n ? +newState[loosePrefix + field] * MoneyValue[field]\r\n : (+newState[rollsPrefix + field] * CoinRollsMultiplier[field] +\r\n +newState[loosePrefix + field]) *\r\n MoneyValue[field]\r\n ).toFixed(2);\r\n\r\n newState[totalPrefix + field] = newTotal;\r\n } else if (name.startsWith(totalPrefix)) {\r\n const field = name.replace(totalPrefix, \"\");\r\n\r\n newState[rollsPrefix + field] = \"\";\r\n const newLoose = isValid ? Math.ceil(newValue / MoneyValue[field]) : 0;\r\n newState[loosePrefix + field] = newLoose;\r\n }\r\n this.setTotals(newState);\r\n }\r\n this.setState(newState);\r\n };\r\n\r\n public handleAmount = (e: React.SyntheticEvent) => {\r\n if (\r\n e.currentTarget.name.startsWith(loosePrefix) ||\r\n e.currentTarget.name.startsWith(rollsPrefix)\r\n ) {\r\n this.handleLooseAndRolls(e.currentTarget.value, false);\r\n } else {\r\n this.handleTotal(e.currentTarget.value, false);\r\n }\r\n };\r\n\r\n public hideCheckList = () => {\r\n this.setState((prevState) => ({ showCheckList: !prevState.showCheckList }));\r\n };\r\n\r\n public handleOnKeyUp = (\r\n column: string,\r\n e: React.KeyboardEvent\r\n ) => {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue = this.state[column];\r\n let newValue = stateValue;\r\n if (e.key === \".\" && column.startsWith(totalPrefix)) {\r\n newValue = Number(stateValue.replace(\".\", \"\")).toFixed(2).toString();\r\n } else {\r\n if (isBackSpace) {\r\n newValue = stateValue.toString().slice(0, -1);\r\n } else if (e.key !== \".\" && e.keyCode >= 48 && e.keyCode <= 57) {\r\n newValue = stateValue + e.key;\r\n }\r\n }\r\n if (\r\n (e.shiftKey && e.keyCode === 9) ||\r\n e.keyCode === 9 ||\r\n e.keyCode === 13 ||\r\n e.keyCode === 16\r\n ) {\r\n e.preventDefault();\r\n } else if (\r\n column.startsWith(loosePrefix) ||\r\n column.startsWith(rollsPrefix) ||\r\n column === \"attendance\"\r\n ) {\r\n this.handleLooseAndRolls(newValue, false);\r\n } else {\r\n this.handleTotal(newValue, false);\r\n }\r\n };\r\n\r\n public setTotals = (state: State) => {\r\n const cashTotal =\r\n +state.totalPenny +\r\n +state.totalNickel +\r\n +state.totalDime +\r\n +state.totalQuarter +\r\n +state.totalFiftyCent +\r\n +state.totalDollarCoin +\r\n +state.totalDollarBill +\r\n +state.totalTwoDollarBill +\r\n +state.totalFiveDollarBill +\r\n +state.totalTenDollarBill +\r\n +state.totalTwentyDollarBill +\r\n +state.totalFiftyDollarBill +\r\n +state.totalHundredDollarBill +\r\n +state.other;\r\n\r\n state[totalCash] = cashTotal;\r\n state[grandTotal] = cashTotal + this.checkTotal;\r\n\r\n this.setState(state);\r\n };\r\n\r\n public handlePhysicalKeyboard(e: KeyboardEvent) {\r\n if (e.shiftKey && e.keyCode === 9) {\r\n e.preventDefault();\r\n this.handleTab(TabAction.TabBackwards);\r\n } else if (e.keyCode === 9 || e.keyCode === 13) {\r\n e.preventDefault();\r\n this.handleTab(TabAction.TabForwards);\r\n }\r\n }\r\n\r\n public render() {\r\n const lunchSession: number = 2;\r\n const expectedCash: number = this.props.transactionStore.expectedCash || 0;\r\n const grandTotal: number = this.state.grandTotal;\r\n const salesItemSetup =\r\n this.props.terminalStore.terminalModel.salesItemSetup;\r\n const showAttendance: boolean =\r\n this.props.transactionStore!.cashCountSessionId === lunchSession &&\r\n (salesItemSetup ? salesItemSetup.enterDailyAttendance : false);\r\n let header: string = \"Cash in Drawer\";\r\n\r\n if (\r\n this.props.terminalStore!.terminalModel.sessions.some(\r\n (s) => s.isSeparateCashCount && s.sessionID !== lunchSession\r\n )\r\n ) {\r\n const config = this.props.terminalStore.terminalModel.sessions.find(\r\n (s) => s.sessionID === this.props.transactionStore!.cashCountSessionId\r\n );\r\n if (!!config) header += \" - \" + config.description;\r\n }\r\n\r\n return this.props.transactionStore.cashCounts ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{header}
\r\n
\r\n
\r\n {this.state.amountError ? (\r\n \r\n \r\n \r\n You have entered an invalid value, please correct it\r\n and try again.\r\n \r\n \r\n \r\n ) : null}\r\n {this.state.attendanceError ? (\r\n \r\n \r\n \r\n Attendance value must be between 0 and 99999.\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Number of Rolls\r\n \r\n \r\n Number of Loose\r\n \r\n \r\n Coin Total\r\n \r\n \r\n  \r\n \r\n \r\n Number of Bills\r\n \r\n \r\n Currency Total\r\n \r\n \r\n \r\n \r\n {this.cashInDrawerItems.map((row, indexRow) => (\r\n \r\n {row.map((column, indexColumn) =>\r\n column ? (\r\n \r\n \r\n (this.inputBoxes[column.name] = input)\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 {`Total Cash: $${this.state.totalCash.toFixed(\r\n 2\r\n )}`}\r\n
\r\n {this.state.totalCheck === 0 ? (\r\n {`Total Check: $${this.state.totalCheck.toFixed(\r\n 2\r\n )}`}\r\n ) : (\r\n \r\n {`Total Check: $${this.state.totalCheck.toFixed(\r\n 2\r\n )}`}\r\n \r\n )}\r\n
\r\n {`Grand Total: $${grandTotal.toFixed(\r\n 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 {this.cashCounterCheck &&\r\n this.props.transactionStore.expectedCash !==\r\n undefined && (\r\n \r\n \r\n Counter Check\r\n \r\n \r\n )}\r\n {showAttendance ? (\r\n \r\n
\r\n \r\n \r\n \r\n 99999\r\n : false\r\n }\r\n ref={(input) =>\r\n (this.inputBoxes[\"attendance\"] =\r\n input)\r\n }>\r\n \r\n \r\n \r\n
{\" \"}\r\n \r\n ) : null}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n Save\r\n \r\n \r\n }\r\n position=\"top left\">\r\n You are offline and we are unable to save your cash in\r\n drawer at this time. Please come back when you are back\r\n online.\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.state.showCheckList ? (\r\n \r\n ) : null}\r\n \r\n Counter Check\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
Expected Cash: ${expectedCash.toFixed(2)}
Cash Count: ${grandTotal.toFixed(2)}
\r\n {grandTotal - expectedCash === 0 ? (\r\n \r\n Cash is EVEN\r\n \r\n ) : null}\r\n {grandTotal - expectedCash < 0 ? (\r\n \r\n Cash is SHORT by:\r\n \r\n ) : null}\r\n {grandTotal - expectedCash > 0 ? (\r\n \r\n Cash is OVER by:\r\n \r\n ) : null}\r\n  {grandTotal - expectedCash === 0 ? null : `$`}\r\n {grandTotal - expectedCash === 0\r\n ? null\r\n : Math.abs(grandTotal - expectedCash).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 Loading…\r\n \r\n );\r\n }\r\n\r\n private focusInputBox() {\r\n const ref = this.inputBoxes[this.state.inputName];\r\n if (ref) {\r\n ref.focus();\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(CashInDrawer);\r\n","import * as React from \"react\";\r\nimport { Button, Divider, Grid, Menu, Checkbox } from \"semantic-ui-react\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport { observer } from \"mobx-react\";\r\n\r\ninterface Props {\r\n authStore: AuthStore;\r\n rootStore: RootStore;\r\n studentStore: StudentStore;\r\n isOnline: boolean;\r\n history: any;\r\n canSwitchCustomer: boolean;\r\n}\r\n\r\nexport default observer(\r\n ({\r\n authStore,\r\n rootStore,\r\n studentStore,\r\n isOnline,\r\n history,\r\n canSwitchCustomer\r\n }: Props) => {\r\n const handleSwitch = async () => {\r\n studentStore!.clearSearch(true);\r\n await authStore.switchCustomers(true);\r\n history.push(\"/customerselect\");\r\n };\r\n\r\n const handleLogin = () => {\r\n history.push(\"/login\");\r\n };\r\n\r\n const handleLogging = (e: React.SyntheticEvent, data: any) => {\r\n rootStore.logMessages = data.checked;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport { SemanticCOLORS, SemanticSIZES } from \"semantic-ui-react\";\r\n\r\ninterface Props {\r\n children: React.ReactNode;\r\n color?: SemanticCOLORS | \"theme\";\r\n size?: SemanticSIZES | \"itemFontSize\" | \"itemPriceSize\";\r\n className?: string;\r\n}\r\n\r\nexport default ({ children, color, size, className }: Props) => (\r\n \r\n {children}\r\n \r\n);\r\n","import * as React from \"react\";\r\nimport Text from \"../util/Text\";\r\nimport ServeAllModel from \"../../models/ServeAllModel\";\r\n\r\ninterface Props {\r\n serveAllModel: ServeAllModel;\r\n}\r\n\r\nconst getPercentage = (serveAllModel: ServeAllModel) => {\r\n return (\r\n ((serveAllModel.totalToServeCount -\r\n serveAllModel.serveAllStudentIDs.length) *\r\n 100) /\r\n serveAllModel.totalToServeCount\r\n ).toFixed(0);\r\n};\r\n\r\nconst getRemaining = (serveAllModel: ServeAllModel) => {\r\n return (\r\n serveAllModel.totalToServeCount - serveAllModel.serveAllStudentIDs.length\r\n );\r\n};\r\n\r\nexport default ({ serveAllModel }: Props) => {\r\n const remainingCount = getRemaining(serveAllModel);\r\n return serveAllModel.totalToServeCount && remainingCount ? (\r\n
\r\n \r\n {remainingCount} of {serveAllModel.totalToServeCount} (\r\n {getPercentage(serveAllModel)}%)\r\n \r\n
\r\n ) : null;\r\n};\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\n\r\ninterface Props {\r\n top: string;\r\n left: string;\r\n rotation: string;\r\n opacity: number;\r\n visible: boolean;\r\n}\r\n\r\ninterface State {}\r\n\r\n@observer\r\nclass Watermark extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n const { top, left, rotation, opacity, children, visible } = this.props;\r\n\r\n const styleConfig = {\r\n top: top,\r\n left: left,\r\n transform: `translate(-${left}, -${top}) rotate(${rotation})`,\r\n opacity: opacity\r\n };\r\n\r\n return (\r\n \r\n {visible ? (\r\n
\r\n {children}\r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Watermark;\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport Calendar, { CalendarTileProperties } from \"react-calendar\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Divider,\r\n Grid,\r\n Header,\r\n Icon,\r\n Loader,\r\n Menu,\r\n Modal,\r\n Popup,\r\n SemanticCOLORS,\r\n Sidebar\r\n} from \"semantic-ui-react\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../../stores/RootStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport UserMenuItem from \"./UserMenuItem\";\r\nimport ServeAllCounter from \"../util/ServeAllCounter\";\r\nimport Watermark from \"../util/Watermark\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n terminalStore?: TerminalStore;\r\n studentStore?: StudentStore;\r\n rootStore?: RootStore;\r\n backText?: string;\r\n onBackClicked?: () => void;\r\n color?: SemanticCOLORS;\r\n hideHamburger?: boolean;\r\n mode?: string;\r\n}\r\n\r\ninterface State {\r\n visible: boolean;\r\n date: Date;\r\n showChangeDatePrompt: boolean;\r\n unverifiedTransactions: number;\r\n changingTrainingMode: boolean;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n authStore: allStores.rootStore.authStore,\r\n terminalStore: allStores.rootStore.terminalStore,\r\n studentStore: allStores.rootStore.studentStore,\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nclass AppMenu extends React.Component {\r\n public timerId?: NodeJS.Timer;\r\n\r\n private date = new Date();\r\n private tempDate: Date | null = null;\r\n\r\n private dateOptions: Intl.DateTimeFormatOptions = {\r\n day: \"numeric\",\r\n month: \"long\",\r\n weekday: \"long\",\r\n year: \"numeric\"\r\n };\r\n\r\n private dateOptionShortMonth: Intl.DateTimeFormatOptions = {\r\n day: \"numeric\",\r\n month: \"short\",\r\n weekday: \"short\",\r\n year: \"numeric\"\r\n };\r\n\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n visible: false,\r\n date: new Date(),\r\n showChangeDatePrompt: false,\r\n unverifiedTransactions: 0,\r\n changingTrainingMode: false\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this.timerId = setInterval(this.tick, 1000);\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.timerId) {\r\n clearInterval(this.timerId);\r\n this.timerId = undefined;\r\n }\r\n }\r\n\r\n public render() {\r\n const {\r\n authStore,\r\n history,\r\n backText,\r\n onBackClicked,\r\n color,\r\n hideHamburger,\r\n terminalStore,\r\n studentStore,\r\n rootStore\r\n } = this.props;\r\n\r\n const hasChangeBuildingPermission =\r\n authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.canChangeBuilding;\r\n\r\n const hasChangeSettingsPermission =\r\n authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.canChangeSettings;\r\n\r\n const hasTrainingModePermission =\r\n authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.canUseTrainingMode;\r\n\r\n const canNotChangeFutureDate =\r\n authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.canNotChangeServingDayForFutureDates;\r\n\r\n const isOnline = rootStore!.isOnlineExcludingTrainingMode;\r\n const isServeAllMode =\r\n studentStore && studentStore.serveAllModel.isServeAllMode;\r\n\r\n const status = isOnline\r\n ? \"online\"\r\n : !rootStore!.eTritionOnline && rootStore!.online\r\n ? \"down\"\r\n : \"offline\";\r\n\r\n const trainingMode = terminalStore!.trainingMode;\r\n const trainingModeStyle = trainingMode\r\n ? { backgroundColor: \"#ffd19f\" }\r\n : {};\r\n\r\n return (\r\n \r\n \r\n Loading…\r\n \r\n \r\n
\r\n

TRAINING MODE

\r\n
\r\n \r\n
\r\n \r\n {!hideHamburger ? (\r\n \r\n \r\n \r\n ) : null}\r\n {authStore &&\r\n terminalStore &&\r\n !authStore.isCustomerSwitch &&\r\n (!terminalStore.terminalModel ||\r\n !terminalStore.terminalModel.isTerminalSwitch) ? (\r\n \r\n {this.props.mode ? (\r\n \r\n
\r\n {this.props.mode}\r\n
\r\n
\r\n ) : null}\r\n {!hideHamburger ? (\r\n \r\n }\r\n position=\"bottom center\"\r\n onOpen={this.showPopup}\r\n wide={true}\r\n on={[\"click\", \"hover\"]}\r\n className=\"unverified-transactions\">\r\n There are {this.state.unverifiedTransactions}{\" \"}\r\n unverified transactions\r\n \r\n \r\n ) : null}\r\n {terminalStore.terminalModel &&\r\n terminalStore.terminalModel.terminal &&\r\n terminalStore!.terminalModel.serviceDate ? (\r\n \r\n
\r\n {!terminalStore.terminalModel.terminalConfig ||\r\n !terminalStore.terminalModel.terminalConfig.isGrabNGo\r\n ? \"Service Date: \" +\r\n new Date(\r\n terminalStore!.terminalModel.serviceDate\r\n ).toLocaleDateString(\r\n \"us-EN\",\r\n this.dateOptionShortMonth\r\n )\r\n : null}\r\n
\r\n {\"Current Date: \" +\r\n new Date().toLocaleDateString(\r\n \"us-EN\",\r\n this.dateOptionShortMonth\r\n )}\r\n
\r\n
\r\n ) : null}\r\n {terminalStore.terminalModel &&\r\n terminalStore.terminalModel.terminal &&\r\n terminalStore!.terminalModel.terminal!.schoolName ? (\r\n \r\n
\r\n {terminalStore!.terminalModel.terminal!.schoolName}\r\n
\r\n {new Date().toLocaleString([], {\r\n hour: \"2-digit\",\r\n minute: \"2-digit\"\r\n })}\r\n
\r\n
\r\n ) : null}\r\n {!isServeAllMode &&\r\n terminalStore.terminalModel &&\r\n terminalStore.terminalModel.terminal &&\r\n terminalStore!.terminalModel.terminal!.terminalName &&\r\n authStore!.auth &&\r\n authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.userFullName ? (\r\n \r\n
\r\n {\"Line: \" +\r\n terminalStore!.terminalModel.terminal!.terminalName}\r\n
\r\n {\"Cashier: \" + authStore!.auth.sessionData!.userFullName}\r\n
\r\n
\r\n ) : null}\r\n {isServeAllMode ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n ) : null}\r\n {onBackClicked !== undefined ? (\r\n \r\n {backText || \"Back\"}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n
{`${this.state.date.toLocaleDateString(\r\n \"en-US\",\r\n this.dateOptions\r\n )} ${this.state.date.toLocaleTimeString(\"en-US\", {\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n })}`}
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n {this.props.children}\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 Change Serving Day\r\n \r\n Press Ok to change serving day to{\" \"}\r\n {this.tempDate &&\r\n this.tempDate.toLocaleDateString(\"en-US\", this.dateOptions)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private handleDateChangeClick = () => {\r\n this.props.terminalStore!.changeServiceDate =\r\n !this.props.terminalStore!.changeServiceDate;\r\n\r\n if (this.state.showChangeDatePrompt) {\r\n this.setState({ showChangeDatePrompt: false });\r\n }\r\n\r\n this.tempDate = null;\r\n };\r\n\r\n private handleDateSelect = (date: Date | Date[]) => {\r\n if (date instanceof Date) {\r\n this.tempDate = date;\r\n this.setState({ showChangeDatePrompt: true });\r\n }\r\n };\r\n\r\n private handleDateChange = async () => {\r\n if (this.tempDate) {\r\n await this.props.terminalStore!.setServiceDate(this.tempDate);\r\n }\r\n\r\n this.setState({ showChangeDatePrompt: false });\r\n this.tempDate = null;\r\n };\r\n\r\n private handleHideSideBar = () => {\r\n if (this.state.visible) {\r\n this.setState({ visible: false });\r\n }\r\n };\r\n\r\n private handleSwitch = async () => {\r\n const { terminalStore, studentStore, history } = this.props;\r\n studentStore!.clearSearch(true);\r\n await terminalStore!.switchTerminal();\r\n history.push(\"/terminalselect\");\r\n };\r\n\r\n public handleSettings = () => {\r\n this.props.history.push(\"/settings\");\r\n };\r\n\r\n private handleTrainingModeSwitch = async () => {\r\n let start = async () => {};\r\n\r\n start()\r\n .then(async () => {\r\n this.setState({ changingTrainingMode: true });\r\n })\r\n .then(async () => {\r\n await this.props.terminalStore!.toggleTrainingMode();\r\n })\r\n .then(async () => {\r\n this.setState({ changingTrainingMode: false });\r\n });\r\n };\r\n\r\n private tick = () => {\r\n if (this.date.getMinutes() !== this.state.date.getMinutes()) {\r\n this.setState({ date: new Date() });\r\n }\r\n\r\n this.date = new Date();\r\n };\r\n\r\n private toggleMenu = () =>\r\n this.setState((prevState) => ({ visible: !prevState.visible }));\r\n\r\n private showPopup = async () => {\r\n const unverifiedTransactions =\r\n await this.props.rootStore!.db.getUnverifiedTransactionCount();\r\n\r\n if (unverifiedTransactions !== this.state.unverifiedTransactions) {\r\n this.setState({ unverifiedTransactions });\r\n }\r\n };\r\n\r\n private isHoliday = (\r\n props: CalendarTileProperties & { activeStartDate: Date }\r\n ) => {\r\n const {\r\n terminalModel: { holidays }\r\n } = this.props.terminalStore!;\r\n\r\n return holidays.some(\r\n (h) =>\r\n new Date(h.startDate) <= props.date && new Date(h.endDate) >= props.date\r\n );\r\n };\r\n}\r\n\r\nexport default withRouter(AppMenu);\r\n","import * as React from \"react\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport { Button, Grid, Header, Modal, Table } from \"semantic-ui-react\";\r\nimport { formatServiceDateTime } from \"../../utils\";\r\nimport { CheckDetail } from \"../../stores/TransactionStore\";\r\n\r\ninterface Props {\r\n hide: () => void;\r\n checkDetails: CheckDetail[];\r\n}\r\n\r\ninterface State {\r\n layout: any;\r\n}\r\n\r\nclass CheckList extends React.Component {\r\n public constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n \r\n
Checks Received
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Transaction Date\r\n \r\n \r\n Check Number\r\n \r\n ID\r\n Pin\r\n Amount\r\n \r\n Check Name\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {this.props.checkDetails.map(\r\n (checkDetail: CheckDetail, index) => (\r\n \r\n \r\n {formatServiceDateTime(\r\n checkDetail.transactionDate\r\n )}\r\n \r\n \r\n {checkDetail.checkNumber}\r\n \r\n \r\n {checkDetail.patronID}\r\n \r\n \r\n {checkDetail.patronPin}\r\n \r\n \r\n {\"$\" + checkDetail.amount.toFixed(2)}\r\n \r\n \r\n {checkDetail.checkName}\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\nexport default CheckList;\r\n","import * as React from \"react\";\r\n\r\ninterface Props {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport default ({ children }: Props) => (\r\n
{children}
\r\n);\r\n","import * as React from \"react\";\r\nimport { Modal, Header, Button } from \"semantic-ui-react\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\ninterface Props {\r\n open: boolean;\r\n handleClosedMonth: () => void;\r\n}\r\n\r\nexport default observer(({ open, handleClosedMonth }: Props) => {\r\n return (\r\n \r\n \r\n \r\n
Month is closed
\r\n

Month is closed.

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n});\r\n","import { DBSchema } from \"idb\";\r\nimport { PosSession } from \"../models/TerminalModel\";\r\nimport { PosPos, PosTransaction } from \"../models/TransactionModel\";\r\nimport { Student } from \"../models/StudentModel\";\r\n\r\nexport enum ObjectStores {\r\n Patron = \"patron\",\r\n PosPos = \"posPos\",\r\n PosSession = \"posSession\",\r\n PosTransactions = \"posTransactions\"\r\n}\r\n\r\nexport interface PosSchema extends DBSchema {\r\n patron: {\r\n key: number;\r\n value: Student;\r\n indexes: {\r\n id_idx: number;\r\n patronID: number;\r\n };\r\n };\r\n posPos: {\r\n key: number;\r\n value: PosPos;\r\n indexes: {\r\n id_idx: number;\r\n posPosGuid: string;\r\n posSessionGuid: string;\r\n patronSession: [string, number];\r\n };\r\n };\r\n posSession: {\r\n key: number;\r\n value: PosSession;\r\n indexes: {\r\n id_idx: number;\r\n posSessionGUID: string;\r\n getSession: [number, string, number, number, number];\r\n getSessions: [number, string];\r\n getSessionsByServingDay: string;\r\n };\r\n };\r\n posTransactions: {\r\n key: number;\r\n value: PosTransaction;\r\n indexes: {\r\n id_idx: number;\r\n posTransactionID: number;\r\n posPosGuid: string;\r\n getTransaction: [string, number];\r\n };\r\n };\r\n}\r\n","import * as React from \"react\";\r\nimport { List, Message } from \"semantic-ui-react\";\r\nimport AuthStore, { Customer } from \"../../stores/AuthStore\";\r\n\r\ninterface Props {\r\n customer: Customer;\r\n setCustomer: (customerID: string, isCustomerSwitch: boolean) => Promise;\r\n authStore: AuthStore;\r\n}\r\n\r\nexport default ({ customer, setCustomer, authStore }: Props) => {\r\n const onSetCustomer = async () => {\r\n await setCustomer(customer.customerID, authStore.isCustomerSwitch);\r\n };\r\n\r\n const isLicensed: boolean =\r\n (authStore!.auth.sessionData && authStore!.auth.sessionData.isLicensed) ||\r\n false;\r\n\r\n const isCustomer: boolean =\r\n (authStore!.auth.sessionData &&\r\n customer.customerID === authStore!.auth.customerID) ||\r\n false;\r\n\r\n const customerOrDistrict =\r\n authStore!.auth.sessionData && authStore.isManagementUser\r\n ? \"District\"\r\n : \"Customer\";\r\n\r\n return (\r\n \r\n {customer.name}\r\n
\r\n {!isLicensed && isCustomer ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n );\r\n};\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { Dimmer, Grid, Header, List, Loader, Segment } from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport { AllStores } from \"../../stores/RootStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport Customer from \"./Customer\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n authStore: allStores.rootStore.authStore\r\n}))\r\n@observer\r\nclass CustomerSelect extends React.Component {\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n }\r\n\r\n public componentDidMount() {\r\n const { authStore } = this.props;\r\n //\r\n // Remove this later. Just leaving it here for history purposes. We used to\r\n // just rely on the cached customer list when switching customers, but this\r\n // won't work now that we have \"management\" users that may have a different\r\n // set of customers allowed to them. So we need to load it every time now.\r\n //\r\n // if (authStore!.customers.length === 0) {\r\n // authStore!.getCustomers();\r\n // }\r\n //\r\n authStore!.getCustomers();\r\n }\r\n\r\n public handleBackClick = async () => {\r\n if (this.props.authStore!.isCustomerSwitch) {\r\n this.props.authStore!.cancelCustomerSwitch();\r\n } else {\r\n await this.props.authStore!.logout();\r\n }\r\n\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n public renderCustomers = () => {\r\n const { authStore } = this.props;\r\n\r\n return authStore!.customers.map((c) => {\r\n return (\r\n \r\n );\r\n });\r\n };\r\n\r\n public render() {\r\n const { authStore } = this.props;\r\n\r\n const isLicensed: boolean =\r\n (authStore!.auth.sessionData && authStore!.auth.sessionData.isLicensed) ||\r\n false;\r\n\r\n if (authStore!.isLoading) {\r\n return (\r\n \r\n Loading…\r\n \r\n );\r\n }\r\n\r\n if (isLicensed) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n {authStore!.isManagementUser\r\n ? \"Select a district\"\r\n : \"Select a customer\"}\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(CustomerSelect);\r\n","import * as React from \"react\";\r\nimport { Button } from \"semantic-ui-react\";\r\nimport RootStore from \"../../stores/RootStore\";\r\n\r\ninterface Props {\r\n sessionID: number;\r\n getConfigAndSession: (sessionID: number) => void;\r\n text: string;\r\n rootStore: RootStore;\r\n}\r\n\r\nexport default ({ sessionID, getConfigAndSession, text, rootStore }: Props) => {\r\n const handleSelect = async () => {\r\n await rootStore.playSilence(false);\r\n await rootStore.playSilence(true);\r\n getConfigAndSession(sessionID);\r\n };\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { Loader } from \"semantic-ui-react\";\r\n\r\nexport default () => {\r\n return (\r\n \r\n
\r\n Loading Site Data\r\n
\r\n
\r\n \r\n eTrition POS is preparing for use.\r\n
\r\n This may take a minute.\r\n
\r\n Please wait…\r\n
\r\n
\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { Label } from \"semantic-ui-react\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport { observer } from \"mobx-react\";\r\n\r\ninterface Props {\r\n rootStore: RootStore;\r\n isServing: boolean;\r\n}\r\n@observer\r\nclass StorageMeter extends React.Component {\r\n public render() {\r\n const limitValue = this.props.rootStore.storageLimitValue;\r\n const localStorageUsage = limitValue.toFixed(2).concat(\"%\");\r\n\r\n return (\r\n 70 ? \"red\" : \"blue\"}>\r\n {this.props.isServing ? \"Storage used\" : \"Local storage used\"}:{\" \"}\r\n {localStorageUsage}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default StorageMeter;\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Divider,\r\n Grid,\r\n Image,\r\n Header,\r\n Loader,\r\n Modal,\r\n Message,\r\n Popup\r\n} from \"semantic-ui-react\";\r\nimport AuthStore from \"../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../stores/RootStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore from \"../stores/TransactionStore\";\r\nimport SessionButton from \"./meal/SessionButton\";\r\nimport AppMenu from \"./menu/AppMenu\";\r\nimport FlexContent from \"./util/FlexContent\";\r\nimport { getToday } from \"../utils\";\r\nimport SiteDataLoader from \"./terminal/SiteDataLoader\";\r\nimport StorageMeter from \"./util/StorageMeter\";\r\nimport DayPicker, { DateUtils, DayModifiers } from \"react-day-picker\";\r\nimport \"react-day-picker/lib/style.css\";\r\nimport StudentStore from \"../stores/StudentStore\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n terminalStore?: TerminalStore;\r\n transactionStore?: TransactionStore;\r\n studentStore?: StudentStore;\r\n rootStore?: RootStore;\r\n}\r\n\r\ninterface State {\r\n selectedDays: Date[];\r\n grabNGoDateSelect: boolean;\r\n grabNGoTerminalConfigId?: number;\r\n showCashCountSessionPicker: boolean;\r\n endOfDayErrorText: string;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n authStore: allStores.rootStore.authStore,\r\n terminalStore: allStores.rootStore.terminalStore,\r\n transactionStore: allStores.rootStore.transactionStore,\r\n studentStore: allStores.rootStore.studentStore,\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nclass Home extends React.Component {\r\n private pingTimer: NodeJS.Timeout | undefined;\r\n\r\n constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n this.handleDayClick = this.handleDayClick.bind(this);\r\n this.state = {\r\n selectedDays: [getToday()],\r\n grabNGoDateSelect: false,\r\n showCashCountSessionPicker: false,\r\n endOfDayErrorText: \"\"\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this.props.rootStore!.validateStorageLimits();\r\n this.props.rootStore!.transactionStore.clearSessionMealCount();\r\n if (this.props.terminalStore!.sessionTimeOverridden) {\r\n this.props.terminalStore!.sessionTimeOverridden = false;\r\n }\r\n if (this.props.terminalStore!.endOfDayJobQueueID > 0) {\r\n this.checkEndOfDayReportStatus();\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n this.stopReportTimer();\r\n }\r\n\r\n public cashInDrawerClicked = () => {\r\n if (\r\n this.props.terminalStore!.terminalModel.sessions.some(\r\n (s) => s.isSeparateCashCount && s.sessionID !== 2\r\n )\r\n ) {\r\n this.setState({ showCashCountSessionPicker: true });\r\n } else {\r\n this.props.transactionStore!.clearCashCount();\r\n this.props.history.push(\"/cashindrawer\");\r\n }\r\n };\r\n\r\n public cashInDrawerSessionSelect = (sessionId: number) => {\r\n this.props.transactionStore!.clearCashCount();\r\n this.props.transactionStore!.cashCountSessionId = sessionId;\r\n this.props.history.push(\"/cashindrawer\");\r\n };\r\n\r\n public grabNGoCalendarClicked = async () => {\r\n if (this.state.selectedDays.length === 0) {\r\n this.props.terminalStore!.isError = true;\r\n this.props.terminalStore!.errorMessage =\r\n \"Please select at least one day.\";\r\n return;\r\n }\r\n this.props.terminalStore!.isError = false;\r\n this.props.terminalStore!.errorMessage = \"\";\r\n\r\n const { terminalStore } = this.props;\r\n this.props.studentStore!.gngPauseAllSessions = false;\r\n const result = await terminalStore!.getTerminalAndSettingsWithDates(\r\n this.state.selectedDays,\r\n this.state.grabNGoTerminalConfigId!\r\n );\r\n\r\n if (result) {\r\n this.setState({ grabNGoDateSelect: false });\r\n } else {\r\n this.props.terminalStore!.isLoading = false;\r\n this.props.terminalStore!.isError = true;\r\n this.props.terminalStore!.errorMessage =\r\n \"Please select at least one servable day.\";\r\n return;\r\n }\r\n };\r\n\r\n public grabNGoCalendarCancelled = async () => {\r\n this.setState({\r\n grabNGoDateSelect: false,\r\n selectedDays: []\r\n });\r\n };\r\n\r\n public grabNGoSessionClicked = (terminalConfigID: number) => {\r\n this.setState({\r\n grabNGoDateSelect: true,\r\n grabNGoTerminalConfigId: terminalConfigID\r\n });\r\n };\r\n\r\n public creditPatronsClicked = async () => {\r\n this.props.terminalStore!.terminalModel.isCreditPatrons = true;\r\n await this.props.rootStore!.playSilence(false);\r\n await this.props.terminalStore!.getTerminalAndSettings(3);\r\n this.props.history.push(\"/session\");\r\n };\r\n\r\n public changeServiceDateClicked = () => {\r\n this.props.terminalStore!.changeServiceDate = true;\r\n };\r\n\r\n private startReportTimer() {\r\n this.pingTimer = setInterval(this.checkEndOfDayReportStatus, 5000);\r\n }\r\n\r\n private stopReportTimer() {\r\n if (this.pingTimer) {\r\n clearInterval(this.pingTimer);\r\n this.pingTimer = undefined;\r\n }\r\n }\r\n\r\n public showEndOfDayReports = async () => {\r\n if (!!this.props.terminalStore!.endOfDayReportName) {\r\n const url = `${this.props.rootStore!.config.webPath}/ReportBucket/${\r\n this.props.terminalStore!.endOfDayReportName\r\n }`;\r\n window.open(url, \"_blank\");\r\n await this.props.terminalStore!.resetEndOfDayVars();\r\n }\r\n };\r\n\r\n public runEndOfDayReports = async () => {\r\n this.stopReportTimer();\r\n this.props.terminalStore!.endOfDayJobQueueID = -1;\r\n const response = await this.props.terminalStore!.runEndOfDayReports();\r\n if (!!response) {\r\n if (response.length > 10) {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(response);\r\n } else if (response.length > 1) {\r\n this.props.terminalStore!.endOfDayJobQueueID = parseInt(response, 10);\r\n this.startReportTimer();\r\n } else {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(\"An unknown response was received.\");\r\n }\r\n }\r\n };\r\n\r\n private checkEndOfDayReportStatus = async () => {\r\n let cancelTimer = true;\r\n if (this.props.terminalStore!.endOfDayJobQueueID > 0) {\r\n const response =\r\n await this.props.terminalStore!.checkEndOfDayReportStatus(\r\n this.props.terminalStore!.endOfDayJobQueueID\r\n );\r\n if (!!response && response.indexOf(\"connection error\") >= 0) {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(response);\r\n } else if (!!response && response.length > 10) {\r\n this.props.terminalStore!.endOfDayReportName = response;\r\n } else if (response === \"Canceled\") {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(\"Your End of Day Reports job was cancelled.\");\r\n } else if (response === \"NoAccess\") {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(\r\n \"You don't have permission to view the requested report.\"\r\n );\r\n } else if (response === \"Error\") {\r\n this.props.terminalStore!.endOfDayJobQueueID = 0;\r\n this.showReportAlert(\r\n \"Your End of Day Reports job ended with an error. More information may be available in the eTrition application log.\"\r\n );\r\n } else {\r\n // Do nothing - it's queued, running, etc. We'll check again at the next interval.\r\n if (!this.pingTimer) {\r\n this.startReportTimer();\r\n }\r\n cancelTimer = false;\r\n }\r\n }\r\n if (cancelTimer) {\r\n this.stopReportTimer();\r\n }\r\n };\r\n\r\n public statisticsClicked = () => {\r\n this.props.history.push(\"/statistics\");\r\n };\r\n\r\n public handleDayClick(\r\n day: Date,\r\n modifiers: DayModifiers,\r\n e: React.MouseEvent\r\n ) {\r\n const { selectedDays } = this.state;\r\n const selectedIndex = selectedDays.findIndex((selectedDay) =>\r\n DateUtils.isSameDay(selectedDay, day)\r\n );\r\n if (selectedIndex !== -1) {\r\n selectedDays.splice(selectedIndex, 1);\r\n this.setState(() => ({\r\n selectedDays\r\n }));\r\n } else {\r\n this.setState((prevState) => ({\r\n selectedDays: [...prevState.selectedDays, day]\r\n }));\r\n }\r\n }\r\n\r\n public transactionsClicked = async () => {\r\n this.props.terminalStore!.terminalModel.isTransactionHistory = true;\r\n await this.props.terminalStore!.getTerminalAndSettings(3);\r\n this.props.history.push(\"/transactions\");\r\n };\r\n\r\n public toggleMessage = () => {\r\n this.props.rootStore!.showChangeDayMessage = false;\r\n };\r\n\r\n public clearReportAlert = () => {\r\n this.showReportAlert(\"\");\r\n };\r\n\r\n public showReportAlert = (message: string) => {\r\n this.setState({ endOfDayErrorText: message });\r\n };\r\n\r\n public closeSessionPicker = () => {\r\n this.setState({ showCashCountSessionPicker: false });\r\n };\r\n\r\n public render() {\r\n const { authStore, terminalStore, rootStore } = this.props;\r\n if (terminalStore!.terminalModel.terminalConfig) {\r\n return ;\r\n }\r\n\r\n if (\r\n !authStore!.auth.sessionData &&\r\n (authStore!.isHarrisUser || authStore!.isManagementUser)\r\n ) {\r\n return ;\r\n }\r\n\r\n if (!terminalStore!.terminalModel.terminal && !terminalStore!.isLoading) {\r\n return ;\r\n }\r\n\r\n if (\r\n terminalStore!.terminalModel.terminal &&\r\n ((terminalStore!.terminalModel.terminal!.siteActive !== undefined &&\r\n !terminalStore!.terminalModel.terminal!.siteActive) ||\r\n !terminalStore!.terminalModel.terminal!.active)\r\n ) {\r\n rootStore!.terminalStore.clearTerminal();\r\n return ;\r\n }\r\n\r\n const hasCreditPermission =\r\n (authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData.canAllowCredits) ||\r\n false;\r\n const hasChangeSeviceDayPermission =\r\n (authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData.canChangeServingDay) ||\r\n false;\r\n const hasRunEndOfDayReportsPermission =\r\n (authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData.canRunEndOfDayReports) ||\r\n false;\r\n\r\n const hasCreditTerminal =\r\n !terminalStore!.terminalModel.terminalConfigurations.some(\r\n (tc) => !tc.allowCredits\r\n );\r\n\r\n const canEnterAttendance =\r\n terminalStore!.terminalModel.salesItemSetup &&\r\n terminalStore!.terminalModel.salesItemSetup.enterDailyAttendance;\r\n\r\n const canCreditPatron = terminalStore!.terminalModel.sessions.some(\r\n (s) => s.isSeparateCashCount && s.sessionID !== 2\r\n );\r\n\r\n const serviceDate = new Date(terminalStore!.terminalModel.serviceDate);\r\n const isToday = serviceDate.toISOString() === getToday().toISOString();\r\n\r\n return (\r\n
\r\n \r\n \r\n {terminalStore!.isLoadingSiteData ? (\r\n \r\n ) : (\r\n Loading…\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n Welcome back {authStore!.auth.sessionData!.userFullName}\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 {isToday ? \"Today\" : \"Service Date\"} is{\" \"}\r\n {serviceDate.toLocaleDateString(\"en-US\", {\r\n day: \"numeric\",\r\n month: \"long\",\r\n weekday: \"long\",\r\n year: \"numeric\"\r\n })}\r\n \r\n \r\n Change service day\r\n \r\n \r\n {hasRunEndOfDayReportsPermission &&\r\n rootStore!.isOnline &&\r\n this.props.terminalStore!.endOfDayJobQueueID === 0 ? (\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 Print End of Day Reports\r\n \r\n
\r\n ) : null}\r\n {this.props.terminalStore!.endOfDayJobQueueID !==\r\n 0 ? (\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 {!!this.props.terminalStore!\r\n .endOfDayReportName\r\n ? \"View End of Day Reports\"\r\n : \"Working... Please Wait...\"}\r\n \r\n
\r\n ) : null}\r\n
\r\n
\r\n
\r\n {terminalStore!.terminalModel.terminalConfigurations.some(\r\n (t) => t.isGrabNGo\r\n ) ? (\r\n \r\n {terminalStore!.terminalModel.terminalConfigurations\r\n .filter((x) => x.isGrabNGo)\r\n .map((tc) => (\r\n \r\n \r\n this.grabNGoSessionClicked(\r\n tc.terminalConfigurationID\r\n )\r\n }>\r\n Grab n Go\r\n \r\n \r\n ))}\r\n \r\n ) : null}\r\n\r\n \r\n Sessions\r\n \r\n \r\n {terminalStore!.terminalModel.sessions\r\n .filter((s) =>\r\n terminalStore!.terminalModel.terminalConfigurations.find(\r\n (x) => x.sessionID === s.sessionID\r\n )\r\n )\r\n .map((s) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n }\r\n position=\"top left\">\r\n Cash in Drawer is not available while offline.\r\n \r\n \r\n \r\n \r\n \r\n \r\n Transaction History\r\n \r\n \r\n \r\n \r\n \r\n Statistics\r\n \r\n \r\n }\r\n position=\"top left\">\r\n Statistics are not available while offline.\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 Cash In Drawer\r\n \r\n Please select a session:\r\n
\r\n
\r\n \r\n {terminalStore!.terminalModel.sessions\r\n .filter((s) => s.isSeparateCashCount)\r\n .map((s) => (\r\n \r\n {s.description}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Lost Connection\r\n \r\n \r\n Connectivity to the internet or eTrition has been lost. The\r\n serving day has been changed to today.\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 Home;\r\n","import { IObservableArray, observable } from \"mobx\";\r\nimport { TransactionType } from \"../stores/TransactionStore\";\r\nimport { PosTransaction } from \"./TransactionModel\";\r\n\r\nexport interface Student {\r\n patronID: number | null;\r\n firstName: string;\r\n lastName: string;\r\n patronNumber: string;\r\n schoolID: number;\r\n schoolTypeID: number;\r\n schoolName: string;\r\n pospin?: number;\r\n homeRoomID?: number;\r\n homeRoom?: string;\r\n gradeID: number;\r\n gradeLevel: string;\r\n birthDate?: Date;\r\n eligibilityStatusID: number;\r\n eligSubStatusID: number;\r\n patronTypeID: number;\r\n allergies: Allergy[];\r\n alertMessage?: string;\r\n parentAlertMessage?: string;\r\n pricingGroupID?: number;\r\n hasPicture: boolean;\r\n noChecksAccepted: boolean;\r\n hasBeenServed: boolean;\r\n account: Account;\r\n accountSchoolID: number | null;\r\n isReimbursable: boolean;\r\n isStudent: boolean;\r\n posLimits: PosLimit[];\r\n transactions: Map;\r\n chargeLimit: number | null;\r\n lastUpdatedDate?: Date;\r\n siteID: number;\r\n lastPurchaseDates: LastPurchaseDate[] | null;\r\n\r\n // For internal use.\r\n isSelected: boolean;\r\n bufferedSide: BufferedSide;\r\n}\r\n\r\nexport interface LastPurchaseDate {\r\n sessionID: number;\r\n serveDate: string;\r\n}\r\n\r\nexport interface Account {\r\n accountID: number | null;\r\n amount: number;\r\n origAmount: number | undefined;\r\n dateSaved?: Date;\r\n members?: AccountMember[];\r\n}\r\n\r\nexport interface AccountMember {\r\n accountID: number;\r\n patronID: number;\r\n patronNumber: string;\r\n firstName: string;\r\n lastName: string;\r\n enrollSchool: string;\r\n owner: boolean;\r\n}\r\n\r\nexport interface Allergy {\r\n allergyID: number;\r\n name: string;\r\n}\r\n\r\nexport interface SalesItemPrice {\r\n salesItemHeaderID?: number;\r\n itemPrice: number;\r\n}\r\n\r\nexport interface PosLimit {\r\n limitsID: number;\r\n patronID: number;\r\n posItemGroupID: number | null;\r\n posItemGroupName: string | null;\r\n sessionID: number | null;\r\n sessionDescription: string | null;\r\n purchaseLimitQuantity: number | null;\r\n prepaidLimit: number | null;\r\n isMondayLimit: boolean;\r\n isTuesdayLimit: boolean;\r\n isWednesdayLimit: boolean;\r\n isThursdayLimit: boolean;\r\n isFridayLimit: boolean;\r\n isSaturdayLimit: boolean;\r\n}\r\n\r\nexport enum EligibilityStatus {\r\n Free = 1,\r\n Reduced = 2,\r\n Paid = 3\r\n}\r\n\r\nexport enum EligSubStatus {\r\n None = 0,\r\n OregonPaid = 1\r\n}\r\n\r\nexport enum BufferedSide {\r\n None = 0,\r\n Left = 1,\r\n Right = 2\r\n}\r\n\r\nexport class StudentModel {\r\n @observable\r\n public student?: Student;\r\n @observable\r\n public pendingStudent?: Student;\r\n @observable\r\n public salesItemPrices?: IObservableArray = observable.array(\r\n []\r\n );\r\n @observable\r\n public isRedo: boolean = false;\r\n @observable\r\n public previousAmount?: number;\r\n @observable\r\n public previousTotal?: number;\r\n @observable\r\n public previousTransactions?: PosTransaction[];\r\n @observable\r\n public previousTransactionType?: TransactionType;\r\n @observable\r\n public voidedTransactionType?: TransactionType;\r\n @observable\r\n public previousAccountAdjustAmount?: number;\r\n @observable\r\n public showAlert?: boolean;\r\n @observable\r\n public showGrabNGoSessionSelect: boolean = false;\r\n\r\n public gngStudentIdToProcess: number = 0;\r\n}\r\n","import { observable } from \"mobx\";\r\n\r\nexport interface ActionRole {\r\n actionRoleID: number;\r\n actionID: number;\r\n moduleID: number;\r\n moduleName: string;\r\n name: string;\r\n roleID: number;\r\n add: boolean;\r\n change: boolean;\r\n delete: boolean;\r\n canAdd: boolean;\r\n canChange: boolean;\r\n canDelete: boolean;\r\n view: boolean;\r\n}\r\n\r\nexport interface School {\r\n abbreviation: string;\r\n action: boolean;\r\n schoolID: number;\r\n schoolName: string;\r\n schoolTypeID: number;\r\n schoolTypeName: string;\r\n isSchool: boolean;\r\n isWarehouse: boolean;\r\n schoolGroupID: number;\r\n parentSchoolGroupID: number;\r\n isInventory: boolean;\r\n isPeriodic: boolean;\r\n cnipsSchoolID?: number;\r\n cnipsSchoolName: string;\r\n sodexoNumber?: number;\r\n}\r\n\r\nexport interface SessionData {\r\n userID: number;\r\n emailAddress: string;\r\n userName: string;\r\n userFullName: string;\r\n validation: string;\r\n rolesCount: number;\r\n canAllowCredits: boolean;\r\n canChangeServingDay: boolean;\r\n canVoidTransactions: boolean;\r\n canNotChangeServingDayForFutureDates: boolean;\r\n canRunEndOfDayReports: boolean;\r\n canChangeBuilding: boolean;\r\n canChangeSettings: boolean;\r\n canUseTrainingMode: boolean;\r\n mustChangePassword: boolean;\r\n isHarrisUser: boolean;\r\n isManagementUser: boolean;\r\n isLicensed: boolean;\r\n}\r\n\r\nexport interface UserList {\r\n customerID: string;\r\n users: SessionData[];\r\n}\r\n\r\nexport interface UserStatus {\r\n isRemote: boolean;\r\n state: string;\r\n nonce: string;\r\n email: string;\r\n error: string;\r\n}\r\n\r\nexport interface ChangePasswordModel {\r\n successful: boolean;\r\n error: string;\r\n}\r\n\r\nexport default class AuthModel {\r\n @observable\r\n public errorMessage: string = \"\";\r\n @observable\r\n public isAuthenticated: boolean = false;\r\n @observable\r\n public sessionData?: SessionData = undefined;\r\n @observable\r\n public customerID?: string;\r\n @observable\r\n public checkingAuth: boolean = false;\r\n @observable\r\n public harrisUser = false;\r\n @observable\r\n public managementUser = false;\r\n // Non-Observables\r\n public authToken: string = \"\";\r\n public oidcToken: string = \"\";\r\n}\r\n","import * as bcrypt from \"bcryptjs\";\r\nimport md5 from \"js-md5\";\r\nimport { action, computed, IObservableArray, observable, reaction } from \"mobx\";\r\nimport { checkAuthorization } from \"../utils\";\r\nimport AuthModel, {\r\n ChangePasswordModel,\r\n SessionData,\r\n UserList,\r\n UserStatus\r\n} from \"../models/AuthModel\";\r\nimport RootStore from \"./RootStore\";\r\nimport { Logger } from \"../utils/logger\";\r\n\r\nexport interface Customer {\r\n customerID: string;\r\n name: string;\r\n}\r\n\r\nexport interface Credentials {\r\n username: string;\r\n password: string;\r\n customerID?: string;\r\n rememberMe: boolean;\r\n}\r\n\r\nexport const jsonContentType = \"application/json; charset=utf-8\";\r\n\r\nexport default class AuthStore {\r\n public rootStore: RootStore;\r\n @observable\r\n public auth: AuthModel;\r\n @observable\r\n public customers: IObservableArray = observable.array([]);\r\n @observable\r\n public isAuthenticating: boolean = false;\r\n @observable\r\n public isLoading: boolean = false;\r\n public isCustomerSwitch: boolean = false;\r\n private previousAuth: AuthModel | undefined;\r\n private logger: Logger;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.logger = rootStore.logger;\r\n this.auth = new AuthModel();\r\n\r\n const auth = sessionStorage.getItem(\"auth\");\r\n if (auth) {\r\n this.auth = Object.assign({ ...this.auth }, JSON.parse(auth));\r\n }\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.auth,\r\n () => {\r\n if (this.auth) {\r\n sessionStorage.setItem(\"auth\", JSON.stringify(this.auth));\r\n } else {\r\n sessionStorage.removeItem(\"auth\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n @action\r\n public getAuthToken = async ({\r\n username,\r\n password,\r\n rememberMe,\r\n customerID\r\n }: Credentials) => {\r\n this.isAuthenticating = true;\r\n try {\r\n this.logger.logMethodStart(\"getAuthToken\");\r\n\r\n const userEncode = encodeURIComponent(username);\r\n const passEncode = encodeURIComponent(password);\r\n const custEncode = customerID ? encodeURIComponent(customerID) : \"\";\r\n\r\n const response = await fetch(`${this.rootStore.config.apiPath}/token`, {\r\n method: \"POST\",\r\n headers: {\r\n \"content-type\": \"application/x-www-form-urlencoded\"\r\n },\r\n body: `grant_type=password&username=${userEncode}&password=${passEncode}&client_id=${custEncode}`\r\n });\r\n\r\n await this.handleTokenResponse(\r\n response,\r\n username,\r\n customerID,\r\n \"\",\r\n rememberMe\r\n );\r\n } catch (err) {\r\n this.logger.error(err);\r\n if (customerID || !this.rootStore.config.allowOffline) {\r\n this.auth.errorMessage =\r\n \"Could not connect to eTrition. \" +\r\n \"The service may be unavailable right now. \" +\r\n \"Please try again later.\";\r\n } else {\r\n await this.localLogin(username, password, rememberMe);\r\n }\r\n } finally {\r\n this.isAuthenticating = false;\r\n }\r\n\r\n this.logger.logMethodEnd(\"getAuthToken\");\r\n };\r\n\r\n @action\r\n public getSessionData = async (isCustomerSwitch: boolean) => {\r\n this.logger.logMethodStart(\"getSessionData\");\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/SessionData`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n CustomerID: `${\r\n this.isHarrisUser || this.isManagementUser\r\n ? this.auth.customerID\r\n : \"\"\r\n }`\r\n })\r\n }\r\n );\r\n\r\n const auth = { ...this.auth };\r\n let isValid = true;\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n try {\r\n const data = await response.json();\r\n\r\n auth.sessionData = data.browserData;\r\n if (data.access_token) {\r\n auth.authToken = data.access_token;\r\n }\r\n\r\n this.rootStore.terminalStore.isLoading = true;\r\n this.auth = auth;\r\n this.rootStore.logMessages = this.isHarrisUser;\r\n\r\n if (!this.isHarrisUser && !this.isManagementUser) {\r\n // For non-Harris and non-Management users, this happens immediately after logging in.\r\n this.rootStore.terminalStore.updateTerminal();\r\n } else if (!isCustomerSwitch) {\r\n // For Harris or Management users, this happens after selecting a customer.\r\n this.rootStore.terminalStore.isLoading = false;\r\n this.rootStore.terminalStore.clearTerminal();\r\n }\r\n\r\n this.rootStore.startTimer(false);\r\n } catch {\r\n isValid = false;\r\n }\r\n } else {\r\n this.logger.error(\"bad response\");\r\n isValid = false;\r\n }\r\n\r\n if (!isValid) {\r\n auth.isAuthenticated = false;\r\n auth.sessionData = undefined;\r\n this.auth = auth;\r\n }\r\n } catch (error) {\r\n this.rootStore.logError(\r\n error,\r\n \"CustomerSelect\",\r\n \"authStore.getSessionData\"\r\n );\r\n this.rootStore.hasError = true;\r\n }\r\n\r\n this.logger.logMethodEnd(\"getSessionData\");\r\n };\r\n\r\n @action\r\n public validateIdentityToken = async (\r\n username: string,\r\n idToken: string,\r\n accessToken: string,\r\n state: string,\r\n oldState: string,\r\n oldNonce: string,\r\n rememberMe: boolean\r\n ) => {\r\n this.isAuthenticating = true;\r\n\r\n try {\r\n this.logger.logMethodStart(\"validateIdentityToken\");\r\n\r\n const body = JSON.stringify({\r\n idToken,\r\n accessToken,\r\n state,\r\n oldState,\r\n oldNonce\r\n });\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/ValidateIdentityToken`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"content-type\": jsonContentType\r\n },\r\n body\r\n }\r\n );\r\n\r\n await this.handleTokenResponse(\r\n response,\r\n username,\r\n undefined,\r\n idToken,\r\n rememberMe\r\n );\r\n } catch (err) {\r\n this.logger.error(err);\r\n } finally {\r\n this.isAuthenticating = false;\r\n }\r\n\r\n this.logger.logMethodEnd(\"validateIdentityToken\");\r\n };\r\n\r\n @action\r\n public getCustomers = async () => {\r\n this.logger.logMethodStart(\"getCustomers\");\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetCustomers`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.bearerToken,\r\n \"content-type\": jsonContentType\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.customers = data;\r\n this.logger.logFetchData(\"getCustomers\", data);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getCustomers\");\r\n };\r\n\r\n public getUsers = async (): Promise => {\r\n this.logger.logMethodStart(\"getUsers\");\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetUsers`,\r\n {\r\n headers: {\r\n Authorization: this.bearerToken\r\n }\r\n }\r\n );\r\n\r\n let users: UserList | null = null;\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n users = await response.json();\r\n\r\n if (users) {\r\n const usersCopy: UserList = JSON.parse(JSON.stringify(users));\r\n\r\n usersCopy.users.forEach((user) => {\r\n delete user.validation;\r\n });\r\n\r\n this.logger.logFetchData(\"getUsers\", usersCopy);\r\n }\r\n }\r\n\r\n this.logger.logMethodEnd(\"getUsers\");\r\n\r\n return users;\r\n };\r\n\r\n @computed\r\n public get isError(): boolean {\r\n return !!this.auth.errorMessage;\r\n }\r\n\r\n @computed\r\n public get isHarrisUser(): boolean {\r\n return (\r\n this.auth.harrisUser ||\r\n (!!this.auth.sessionData && this.auth.sessionData!.rolesCount > 0)\r\n );\r\n }\r\n\r\n @computed\r\n public get isManagementUser(): boolean {\r\n return this.auth.managementUser;\r\n }\r\n\r\n @computed\r\n public get bearerToken(): string {\r\n const { authToken, isAuthenticated, customerID, sessionData } = this.auth;\r\n\r\n if (authToken) {\r\n return `Bearer ${authToken}`;\r\n } else if (\r\n isAuthenticated &&\r\n customerID &&\r\n sessionData &&\r\n sessionData.userName &&\r\n sessionData.validation\r\n ) {\r\n const userEncode = encodeURIComponent(sessionData.userName);\r\n const passEncode = encodeURIComponent(\"BCRYPT:\" + sessionData.validation);\r\n const custEncode = encodeURIComponent(customerID);\r\n return `username=${userEncode}&password=${passEncode}&client_id=${custEncode}`;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n public getIdentityServerLoginURL(userStatus: UserStatus) {\r\n const identityClient = \"etrition\";\r\n const sendEmail = encodeURIComponent(userStatus.email);\r\n const responseType = encodeURIComponent(\"id_token token\");\r\n const baseURL =\r\n this.rootStore.config.identityServerBaseURL + \"/connect/authorize\";\r\n const scopeString = encodeURIComponent(\"openid profile email\");\r\n const state = encodeURIComponent(userStatus.state);\r\n const nonce = encodeURIComponent(userStatus.nonce);\r\n const returnURL = window.location.origin + \"/login\";\r\n\r\n return (\r\n `${baseURL}` +\r\n `?response_type=${responseType}` +\r\n `&login_hint=${sendEmail}` +\r\n `&prompt=login` +\r\n `&state=${state}` +\r\n `&client_id=${identityClient}` +\r\n `&scope=${scopeString}` +\r\n `&nonce=${nonce}` +\r\n `&redirect_uri=${returnURL}`\r\n );\r\n }\r\n\r\n public getIdentityServerLogoutURL() {\r\n if (this.auth && this.auth.oidcToken) {\r\n const baseURL =\r\n this.rootStore.config.identityServerBaseURL + \"/connect/endsession\";\r\n const returnURL = window.location.origin + \"/login\";\r\n const token = encodeURIComponent(this.auth.oidcToken);\r\n\r\n return (\r\n `${baseURL}` +\r\n `?id_token_hint=${token}` +\r\n `&post_logout_redirect_uri=${returnURL}`\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n @action\r\n public logout = async () => {\r\n this.logger.log(\"Logging user out\");\r\n const identityLogoutURL = this.getIdentityServerLogoutURL();\r\n sessionStorage.clear();\r\n this.auth = new AuthModel();\r\n this.rootStore.logMessages = false;\r\n this.rootStore.stopTimer();\r\n this.rootStore.terminalStore.clearTerminal();\r\n await this.rootStore.studentStore.clearBufferedStudents();\r\n await this.rootStore.studentStore.clearStudent();\r\n this.rootStore.studentStore.clearSearch(true);\r\n\r\n if (!!identityLogoutURL && this.rootStore.isOnline) {\r\n window.location.href = identityLogoutURL;\r\n }\r\n };\r\n\r\n @action\r\n public setCustomer = async (\r\n customerID: string,\r\n isCustomerSwitch: boolean\r\n ) => {\r\n this.isLoading = true;\r\n\r\n this.auth.customerID = customerID;\r\n await this.rootStore.studentStore.clearSiteStudents();\r\n await this.getSessionData(isCustomerSwitch);\r\n\r\n this.isLoading = false;\r\n };\r\n\r\n @action\r\n public clearSessionData() {\r\n this.auth.sessionData = undefined;\r\n }\r\n\r\n @action\r\n public switchCustomers = async (isCustomerSwitch: boolean) => {\r\n await this.rootStore.studentStore.clearStudent();\r\n\r\n if (isCustomerSwitch) {\r\n this.rootStore.transactionStore.lastPosTransactionId = 0;\r\n await this.rootStore.terminalStore.switchTerminal();\r\n this.previousAuth = { ...this.auth };\r\n this.isCustomerSwitch = true;\r\n }\r\n\r\n const auth = { ...this.auth };\r\n auth.sessionData = undefined;\r\n auth.customerID = undefined;\r\n this.auth = auth;\r\n };\r\n\r\n @action\r\n public cancelCustomerSwitch = () => {\r\n this.rootStore.terminalStore.cancelTerminalSwitch();\r\n if (this.previousAuth) {\r\n this.isCustomerSwitch = false;\r\n this.auth = { ...this.previousAuth };\r\n this.previousAuth = undefined;\r\n }\r\n };\r\n\r\n @action\r\n public validate = (sessionData: SessionData, password: string): boolean => {\r\n const hashPW = md5(password);\r\n const salted =\r\n sessionData.userName + \":\" + sessionData.userID + \":\" + hashPW;\r\n return bcrypt.compareSync(salted, sessionData.validation);\r\n };\r\n\r\n @action\r\n public localLogin = async (\r\n username: string,\r\n password: string,\r\n rememberMe: boolean\r\n ) => {\r\n const userList: UserList | null = await this.getUsers();\r\n\r\n if (userList) {\r\n let sessionData = userList.users.find(\r\n (s) => s.userName.toLocaleLowerCase() === username.toLowerCase()\r\n );\r\n if (!sessionData && username.indexOf(\"@\") > -1) {\r\n sessionData = userList.users.find(\r\n (s) => s.emailAddress.toLocaleLowerCase() === username.toLowerCase()\r\n );\r\n }\r\n if (sessionData) {\r\n if (this.validate(sessionData, password)) {\r\n this.rootStore.terminalStore.isLoading = true;\r\n\r\n const auth = { ...this.auth };\r\n auth.harrisUser = sessionData.isHarrisUser;\r\n auth.customerID = userList.customerID;\r\n auth.managementUser = sessionData.isManagementUser;\r\n auth.sessionData = sessionData;\r\n auth.isAuthenticated = true;\r\n this.auth = auth;\r\n this.rootStore.logMessages = sessionData.isHarrisUser;\r\n\r\n if (this.rootStore.terminalStore.trainingMode) {\r\n await this.rootStore.terminalStore.disableTrainingMode();\r\n }\r\n\r\n this.rootStore.startTimer(true);\r\n this.logger.log(\"Offline authentication successful.\");\r\n\r\n if (rememberMe) {\r\n localStorage.setItem(\"username\", username);\r\n } else {\r\n localStorage.removeItem(\"username\");\r\n }\r\n\r\n await this.rootStore.terminalStore.updateTerminal(false);\r\n }\r\n }\r\n\r\n if (!this.auth.isAuthenticated) {\r\n // TODO - Handle some kind of \"retry\" attempt count?\r\n this.auth.errorMessage = \"The username or password entered is invalid.\";\r\n }\r\n } else {\r\n this.auth.errorMessage =\r\n \"Could not connect to eTrition, and offline authentication is not available. \" +\r\n \"Please try again later.\";\r\n }\r\n };\r\n\r\n @action\r\n public goOnline = async () => {\r\n await this.getAuthToken({\r\n username: this.auth.sessionData!.userName,\r\n password: \"BCRYPT:\" + this.auth.sessionData!.validation,\r\n rememberMe: false,\r\n customerID: this.auth.customerID\r\n });\r\n\r\n if (this.auth.authToken) {\r\n this.logger.log(\"Obtained token. Online authentication successful.\");\r\n }\r\n };\r\n\r\n @action\r\n private handleTokenResponse = async (\r\n response: Response,\r\n username: string,\r\n customerID: string | undefined,\r\n oidcToken: string,\r\n rememberMe: boolean\r\n ) => {\r\n const auth = { ...this.auth };\r\n\r\n if (response.body) {\r\n const data = await response.json();\r\n console.log(data);\r\n\r\n if (data.error) {\r\n auth.errorMessage = data.error;\r\n } else if (data.message) {\r\n auth.errorMessage = data.message;\r\n } else {\r\n auth.oidcToken = oidcToken;\r\n auth.authToken = data.access_token;\r\n auth.harrisUser = data.isHarrisUser === \"true\";\r\n auth.managementUser =\r\n !auth.harrisUser &&\r\n !!data.isManagementUser &&\r\n data.isManagementUser === \"true\";\r\n auth.isAuthenticated = true;\r\n\r\n if (this.rootStore.terminalStore.trainingMode) {\r\n await this.rootStore.terminalStore.disableTrainingMode();\r\n }\r\n\r\n if ((auth.harrisUser || auth.managementUser) && !customerID) {\r\n this.rootStore.terminalStore.clearTerminal();\r\n } else {\r\n auth.customerID = data.customerID;\r\n }\r\n\r\n if (!customerID) {\r\n if (rememberMe) {\r\n localStorage.setItem(\"username\", username);\r\n } else {\r\n localStorage.removeItem(\"username\");\r\n }\r\n }\r\n }\r\n } else {\r\n this.rootStore.hasError = true;\r\n }\r\n\r\n this.auth = auth;\r\n };\r\n\r\n @action\r\n public changePassword = async (\r\n password: string,\r\n newPassword: string\r\n ): Promise => {\r\n this.logger.logMethodStart(\"changePassword\");\r\n let data;\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/ChangePassword`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({ NewPassword: newPassword, Password: password })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n data = await response.json();\r\n this.logger.logFetchData(\"changePassword\", data);\r\n } else {\r\n data = {\r\n successful: false,\r\n error: \"Encountered an error with the request to the server.\"\r\n };\r\n }\r\n } catch {\r\n data = {\r\n successful: false,\r\n error:\r\n \"A connection error was encountered while attempting to change password.\"\r\n };\r\n }\r\n\r\n this.logger.logMethodEnd(\"changePassword\");\r\n return data;\r\n };\r\n}\r\n","import { IObservableArray, observable } from \"mobx\";\r\n\r\nexport interface PosPos {\r\n posPosGuid: string;\r\n posSessionGuid: string;\r\n posTime: Date;\r\n schoolID: number;\r\n patronID?: number;\r\n patronNumber?: string;\r\n pospin?: number;\r\n accountID?: number;\r\n patronGroupID?: number;\r\n isVoided?: boolean;\r\n patronTypeID: number;\r\n eligibilityID: number;\r\n eligSubStatusID: number;\r\n posStatus: boolean;\r\n amountTendered?: number;\r\n accountSchoolID: number | null;\r\n processTime: Date;\r\n posTransactions?: PosTransaction[];\r\n trainingMode: boolean;\r\n}\r\n\r\nexport interface PosTransaction {\r\n posTransactionID: number;\r\n posPosGuid: string;\r\n transNo: number;\r\n salesItemHeaderID: number;\r\n saleItemGroupID?: number;\r\n itemDescription: string;\r\n quantity: number;\r\n rate: number;\r\n keepRate: number;\r\n amount: number;\r\n balanceTypeID?: number;\r\n partOfTransNo?: number;\r\n refNumber?: string;\r\n accountAmount: number;\r\n posAccountDiscountID?: number;\r\n deletedPosPosGuid?: string;\r\n deletedTransNo?: number;\r\n startBalance?: number;\r\n transComment?: string;\r\n earned: boolean;\r\n reimbursable: boolean;\r\n totalSale?: number;\r\n layoutItemID: number;\r\n chargeAmount: number;\r\n creditAmount: number;\r\n disableCharge?: boolean;\r\n hide: boolean;\r\n isMeal?: boolean;\r\n isMealComponent: boolean;\r\n isCombinedMeal: boolean;\r\n linkedLayoutItemID: number;\r\n isCombinable: boolean;\r\n cardToken?: string;\r\n cardExpiry?: string;\r\n cardRetRef?: string;\r\n cardAVS?: string;\r\n cardCVD?: string;\r\n cardProc?: string;\r\n cardRespCode?: string;\r\n cardAuth?: string;\r\n cardMID?: string;\r\n cardType?: string;\r\n}\r\n\r\nexport default class TransactionModel {\r\n @observable\r\n public posPos?: PosPos;\r\n @observable\r\n public posTransactions: IObservableArray = observable.array(\r\n []\r\n );\r\n public isGrabNGoVoid: boolean = false;\r\n}\r\n","import { computed, observable } from \"mobx\";\r\nimport RootStore from \"../stores/RootStore\";\r\nimport { PosLimit, Student } from \"./StudentModel\";\r\nimport { SalesItemFoodGroup, SalesItemPrice } from \"./TerminalModel\";\r\n\r\nexport enum DayOfTheWeek {\r\n Sunday = 0,\r\n Monday = 1,\r\n Tuesday = 2,\r\n Wednesday = 3,\r\n Thursday = 4,\r\n Friday = 5,\r\n Saturday = 6\r\n}\r\n\r\nexport function isLimitForServiceDay(day: number, posLimit: PosLimit) {\r\n switch (day) {\r\n case DayOfTheWeek.Monday:\r\n return posLimit.isMondayLimit;\r\n case DayOfTheWeek.Tuesday:\r\n return posLimit.isTuesdayLimit;\r\n case DayOfTheWeek.Wednesday:\r\n return posLimit.isWednesdayLimit;\r\n case DayOfTheWeek.Thursday:\r\n return posLimit.isThursdayLimit;\r\n case DayOfTheWeek.Friday:\r\n return posLimit.isFridayLimit;\r\n case DayOfTheWeek.Saturday:\r\n return posLimit.isSaturdayLimit;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nexport default class SalesItemHeader {\r\n public rootStore: RootStore;\r\n @observable\r\n public salesItemHeaderID: number;\r\n @observable\r\n public itemDescription: string;\r\n @observable\r\n public itemShortDescription: string;\r\n @observable\r\n public itemType: string;\r\n @observable\r\n public itemGroupTypeID?: number; // ItemGroup\r\n @observable\r\n public itemGroupType: string;\r\n @observable\r\n public itemGroupEligibilityPricing: boolean;\r\n @observable\r\n public itemGroupCountAsMeal: boolean;\r\n @observable\r\n public eligibilityPricing: boolean;\r\n @observable\r\n public alternateSalesItemHeaderID?: number;\r\n @observable\r\n public balanceTypeID?: number;\r\n @observable\r\n public discountLevelID?: number;\r\n @observable\r\n public sessionID?: number;\r\n @observable\r\n public taxableTypeID: number;\r\n @observable\r\n public taxableType: string;\r\n @observable\r\n public cashCount: boolean;\r\n @observable\r\n public itemMasterId: number;\r\n @observable\r\n public active: boolean;\r\n @observable\r\n public protected: boolean;\r\n @observable\r\n public foodGroupList: SalesItemFoodGroup[];\r\n @observable\r\n public priceList: SalesItemPrice[];\r\n\r\n public constructor(rootStore: RootStore, data: any) {\r\n this.rootStore = rootStore;\r\n this.salesItemHeaderID = data.salesItemHeaderID;\r\n this.itemDescription = data.itemDescription;\r\n this.itemShortDescription = data.itemShortDescription;\r\n this.itemType = data.itemType;\r\n this.itemGroupTypeID = data.itemGroupTypeID;\r\n this.itemGroupType = data.itemGroupType;\r\n this.itemGroupEligibilityPricing = data.itemGroupEligibilityPricing;\r\n this.itemGroupCountAsMeal = data.itemGroupCountAsMeal;\r\n this.eligibilityPricing = data.eligibilityPricing;\r\n this.alternateSalesItemHeaderID = data.alternateSalesItemHeaderID;\r\n this.balanceTypeID = data.balanceTypeID;\r\n this.discountLevelID = data.discountLevelID;\r\n this.sessionID = data.sessionID;\r\n this.taxableTypeID = data.taxableTypeID;\r\n this.taxableType = data.taxableType;\r\n this.cashCount = data.cashCount;\r\n this.itemMasterId = data.itemMasterId;\r\n this.active = data.active;\r\n this.protected = data.protected;\r\n this.foodGroupList = data.foodGroupList;\r\n this.priceList = data.priceList;\r\n }\r\n\r\n public disableCharge(): boolean {\r\n const {\r\n studentModel: { student }\r\n } = this.rootStore.studentStore;\r\n\r\n const posLimit = this.rootStore.terminalStore.getTerminalPosLimit(\r\n this.itemGroupTypeID,\r\n student!\r\n );\r\n\r\n return posLimit !== undefined && posLimit.disableCharge;\r\n }\r\n\r\n @computed\r\n public get salesItemPrice(): number | null {\r\n const {\r\n studentStore: {\r\n studentModel: { salesItemPrices }\r\n }\r\n } = this.rootStore;\r\n\r\n const salesItemPrice = salesItemPrices!.find(\r\n (s) => s.salesItemHeaderID === this.salesItemHeaderID\r\n );\r\n\r\n if (salesItemPrice) {\r\n return salesItemPrice.itemPrice;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n @computed\r\n public get hasItemPrice(): boolean {\r\n return this.salesItemPrice !== null;\r\n }\r\n\r\n @computed\r\n public get hideItemPrices(): boolean {\r\n const {\r\n studentStore: {\r\n studentModel: { student }\r\n },\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.rootStore;\r\n\r\n return (\r\n !!terminalConfig &&\r\n terminalConfig.hideReimbursableItemPrices &&\r\n student!.isReimbursable &&\r\n this.itemGroupEligibilityPricing\r\n );\r\n }\r\n\r\n @computed\r\n public get salesItemLimitMet(): boolean {\r\n const canCombine = !!this.rootStore.transactionStore.mealCombining;\r\n\r\n if (\r\n this.foodGroupList.length > 0 &&\r\n !this.itemGroupCountAsMeal &&\r\n this.itemGroupTypeID === 2 &&\r\n canCombine\r\n ) {\r\n // To defer ala carte limit check until the end,\r\n // when using Meal Combining with this item being\r\n // a potential candidate to combine.\r\n return false;\r\n } else {\r\n return (\r\n this.getSalesItemLimitRemaining(canCombine, this.itemDescription) <= 0\r\n );\r\n }\r\n }\r\n\r\n public getSalesItemLimitRemaining(\r\n excludeCombinableItems: boolean,\r\n description: string\r\n ): number {\r\n const { serviceDate, sessionID } =\r\n this.rootStore.terminalStore.terminalModel;\r\n const {\r\n studentModel: { student }\r\n } = this.rootStore.studentStore;\r\n\r\n const servingDay = this.rootStore.terminalStore.terminalStateModel\r\n .activePOSSession\r\n ? this.rootStore.terminalStore.terminalStateModel.activePOSSession\r\n .servingDay\r\n : serviceDate;\r\n\r\n const studentLimitRemaining = this.getStudentLimitRemaining(\r\n this.itemGroupTypeID,\r\n excludeCombinableItems,\r\n new Date(servingDay),\r\n sessionID!,\r\n student!\r\n );\r\n\r\n const posLimitRemaining = this.getPosLimitRemaining(\r\n this.itemGroupTypeID,\r\n excludeCombinableItems,\r\n sessionID!,\r\n student!\r\n );\r\n\r\n if (studentLimitRemaining < posLimitRemaining) {\r\n return studentLimitRemaining;\r\n } else {\r\n return posLimitRemaining;\r\n }\r\n }\r\n\r\n private getStudentLimitRemaining(\r\n itemGroupTypeID: number | undefined,\r\n excludeCombinableItems: boolean,\r\n serviceDate: Date,\r\n sessionID: number,\r\n student: Student\r\n ): number {\r\n const { posTransactions } =\r\n this.rootStore.transactionStore.transactionModel;\r\n const {\r\n studentStore: { getAllTransactions, getTransactionsForSession }\r\n } = this.rootStore;\r\n\r\n if (!Array.isArray(student.posLimits) || !student.posLimits.length) {\r\n return 999;\r\n }\r\n\r\n const posLimit = student.posLimits.find(\r\n (l) =>\r\n l.posItemGroupID === itemGroupTypeID &&\r\n (l.sessionID === sessionID || l.sessionID === null) &&\r\n l.purchaseLimitQuantity !== null &&\r\n isLimitForServiceDay(serviceDate.getDay(), l)\r\n );\r\n\r\n if (posLimit) {\r\n const pastTransactions =\r\n posLimit!.sessionID === null\r\n ? getAllTransactions(student)\r\n : getTransactionsForSession(student, sessionID);\r\n\r\n const served = posTransactions\r\n .concat(pastTransactions)\r\n .filter(\r\n (t) =>\r\n t.saleItemGroupID === this.itemGroupTypeID &&\r\n !t.partOfTransNo &&\r\n (!excludeCombinableItems || !t.isCombinable)\r\n )\r\n .map((t) => t.quantity)\r\n .reduce((prev, curr) => prev + curr, 0);\r\n\r\n return posLimit!.purchaseLimitQuantity! - served;\r\n } else {\r\n return 999;\r\n }\r\n }\r\n\r\n private getPosLimitRemaining(\r\n itemGroupTypeID: number | undefined,\r\n excludeCombinableItems: boolean,\r\n sessionID: number,\r\n student: Student\r\n ): number {\r\n const posLimit = this.rootStore.terminalStore.getTerminalPosLimit(\r\n itemGroupTypeID,\r\n student\r\n );\r\n const { posTransactions } =\r\n this.rootStore.transactionStore.transactionModel;\r\n const {\r\n studentStore: { getTransactionsForSession }\r\n } = this.rootStore;\r\n\r\n if (posLimit) {\r\n const { studentStore } = this.rootStore;\r\n const limit = studentStore.isFreeStudent(student!)\r\n ? posLimit.freePurchaseLimit!\r\n : studentStore.isReducedStudent(student!)\r\n ? posLimit.reducedPurchaseLimit!\r\n : posLimit.paidPurchaseLimit!;\r\n\r\n if (limit !== null) {\r\n const served = posTransactions\r\n .concat(getTransactionsForSession(student, sessionID))\r\n .filter(\r\n (t) =>\r\n t.saleItemGroupID === this.itemGroupTypeID &&\r\n !t.partOfTransNo &&\r\n (!excludeCombinableItems || !t.isCombinable)\r\n )\r\n .map((t) => t.quantity)\r\n .reduce((prev, curr) => prev + curr, 0);\r\n\r\n return limit - served;\r\n }\r\n }\r\n\r\n return 999;\r\n }\r\n}\r\n","import { Guid } from \"guid-typescript/dist/guid\";\r\nimport {\r\n action,\r\n computed,\r\n IObservableArray,\r\n observable,\r\n reaction,\r\n toJS\r\n} from \"mobx\";\r\nimport { ObjectStores } from \"../database/databaseSchema\";\r\nimport { jsonContentType } from \"./AuthStore\";\r\nimport RootStore from \"./RootStore\";\r\nimport TransactionModel, {\r\n PosPos,\r\n PosTransaction\r\n} from \"../models/TransactionModel\";\r\nimport {\r\n checkAuthorization,\r\n getFormattedToday,\r\n formatServiceDate\r\n} from \"../utils\";\r\nimport { EligibilityStatus, Student } from \"../models/StudentModel\";\r\nimport SalesItemHeader, {\r\n isLimitForServiceDay\r\n} from \"../models/SalesItemModel\";\r\nimport {\r\n TerminalChargeLimit,\r\n PosSession,\r\n MealCombination,\r\n TransactionInfo,\r\n PosLayoutItem\r\n} from \"../models/TerminalModel\";\r\nimport { Logger } from \"../utils/logger\";\r\nimport { BaseClass } from \"../database/indexedDBService\";\r\nimport * as jsPDF from \"jspdf\";\r\nimport printJS from \"print-js\";\r\nimport { osName } from \"react-device-detect\";\r\nimport { BoltCardResponseModel } from \"../models/BoltAuthModel\";\r\nimport { getToday } from \"../utils\";\r\n\r\nexport enum ShowBalance {\r\n Never = 0,\r\n Always = 1,\r\n WhenLow = 2\r\n}\r\n\r\nexport enum FoodType {\r\n Bread = 1,\r\n Dairy = 2,\r\n Meat = 4,\r\n Milk = 5,\r\n Vegetable = 7,\r\n Fruit = 8,\r\n VegOrFruit = 9\r\n}\r\n\r\nexport enum TransactionType {\r\n Account = 0,\r\n Cancelled = 1,\r\n ChangeCash = 2,\r\n ChangeCheck = 3,\r\n CreditCash = 4,\r\n CreditCheck = 5,\r\n Earned = 6,\r\n QuickCash = 7,\r\n Void = 8,\r\n Refund = 9,\r\n MealCounter = 10,\r\n CreditCard = 11\r\n}\r\n\r\nexport interface Credit {\r\n amount: number;\r\n checkNumber: string;\r\n isCash: boolean;\r\n isRefund: boolean;\r\n lastName: string | undefined;\r\n comment: string;\r\n boltResponse: BoltCardResponseModel | undefined;\r\n}\r\n\r\nexport interface CashCount {\r\n cashSetupDenominationID: number;\r\n endAmount: number;\r\n endQuantity: number;\r\n}\r\n\r\nexport interface CheckDetail {\r\n transactionDate: Date;\r\n checkName: string;\r\n checkNumber: string;\r\n amount: number;\r\n patronID: string;\r\n patronPin: number;\r\n sessionID: number;\r\n sessionGuid: string;\r\n}\r\n\r\nexport interface ItemSummary {\r\n itemName: string;\r\n itemCount: number;\r\n}\r\n\r\nexport interface SessionCounts {\r\n studentTransactionCount: number;\r\n nonStudentTransactionCount: number;\r\n}\r\n\r\nexport interface Transaction {\r\n transactionType: TransactionType;\r\n credit?: Credit;\r\n setProcessing?: boolean;\r\n}\r\n\r\nexport interface TransactionStatistics {\r\n sessionID: number;\r\n itemInformation: ItemSummary[];\r\n mealCount: number;\r\n transactionCount: number;\r\n}\r\n\r\nexport default class TransactionStore {\r\n public rootStore: RootStore;\r\n @observable\r\n public transactionProcessing: boolean = false;\r\n @observable\r\n public clearIfAdding: boolean = false;\r\n @observable\r\n public transactionModel: TransactionModel;\r\n @observable\r\n public cashCounts?: IObservableArray;\r\n @observable\r\n public checkDetails?: IObservableArray;\r\n @observable\r\n public mealCombining?: MealCombination = undefined;\r\n @observable\r\n public sessionCounts?: SessionCounts;\r\n @observable\r\n public transactionStatistics?: IObservableArray;\r\n @observable\r\n public transactionHistory: IObservableArray = observable.array([]);\r\n @observable\r\n public transactionHistoryPatronID?: number;\r\n @observable\r\n public transactionHistorySessions: IObservableArray = observable.array(\r\n []\r\n );\r\n @observable\r\n public cashCountCache = {};\r\n @observable\r\n public lastPosTransactionId: number;\r\n @observable\r\n public cashCountSessionId: number;\r\n @observable\r\n public sessionMealCount: number | undefined = undefined;\r\n\r\n public lastPosPos: PosPos | undefined = undefined;\r\n public expectedCash: number | undefined = undefined;\r\n public dailyAttendance: number | null = null;\r\n private logger: Logger;\r\n public firstGrabNGoTransaction: boolean = true;\r\n\r\n // Per SNS-3954, we will no longer allow partial cash payments to offset our spending limit.\r\n // However, I'm leaving the code that allows it in place, to be controlled by this flag. If\r\n // later we want to make it an option, we'd remove this and replace it with a config setting.\r\n public allowCashLimitOffset: boolean = false;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.logger = rootStore.logger;\r\n this.transactionModel = new TransactionModel();\r\n\r\n const transactionModel = sessionStorage.getItem(\"transaction\");\r\n\r\n if (transactionModel) {\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n JSON.parse(transactionModel)\r\n );\r\n }\r\n\r\n const cashCountCache = sessionStorage.getItem(\"cashCountCache\");\r\n\r\n if (cashCountCache) {\r\n this.cashCountCache = JSON.parse(cashCountCache);\r\n }\r\n\r\n this.lastPosTransactionId = Number(\r\n localStorage.getItem(\"lastPosTransactionId\") || 0\r\n );\r\n\r\n this.cashCountSessionId = 2; //Default to Lunch\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.transactionModel,\r\n () => {\r\n if (this.transactionModel) {\r\n sessionStorage.setItem(\r\n \"transaction\",\r\n JSON.stringify(this.transactionModel)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"transaction\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.cashCountCache,\r\n () => {\r\n sessionStorage.setItem(\r\n \"cashCountCache\",\r\n JSON.stringify(this.cashCountCache)\r\n );\r\n }\r\n );\r\n reaction(\r\n () => this.lastPosTransactionId,\r\n () => {\r\n localStorage.setItem(\r\n \"lastPosTransactionId\",\r\n this.lastPosTransactionId.toString()\r\n );\r\n }\r\n );\r\n }\r\n\r\n @action\r\n public clearCashCount = () => {\r\n this.cashCounts = undefined;\r\n this.checkDetails = undefined;\r\n this.expectedCash = undefined;\r\n this.dailyAttendance = null;\r\n this.cashCountSessionId = 2;\r\n };\r\n\r\n @action\r\n public getCheckList = async (sessionId: number): Promise => {\r\n this.logger.logMethodStart(\"getCheckList\");\r\n\r\n const {\r\n getServingDay,\r\n terminalModel: { terminal, salesItemSetup }\r\n } = this.rootStore.terminalStore;\r\n\r\n const servingDay = getServingDay();\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetCheckList?id=${\r\n terminal!.terminalID\r\n }&date=${servingDay}&sessionId=${sessionId}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data: CheckDetail[] = await response.json();\r\n const cache = this.cashCountCache[servingDay] || {};\r\n\r\n if (!this.rootStore.isOnline && cache.checkDetails) {\r\n this.checkDetails = observable.array(cache.checkDetails);\r\n } else {\r\n this.checkDetails = observable.array(data);\r\n }\r\n\r\n const transactions = await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions,\r\n \"posTransactionID\",\r\n 0\r\n );\r\n\r\n if (transactions.length && salesItemSetup) {\r\n for (const transaction of transactions.filter(\r\n (t) => t.salesItemHeaderID === salesItemSetup.checkSalesItem\r\n )) {\r\n const posPos = await this.rootStore.db.get(\r\n ObjectStores.PosPos,\r\n transaction.posPosGuid,\r\n \"posPosGuid\"\r\n );\r\n\r\n const posSession = (\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosSession\r\n )\r\n ).filter((p) => p.posSessionGUID === posPos.posSessionGuid)[0];\r\n\r\n if (\r\n posSession &&\r\n posPos &&\r\n this.checkDetails &&\r\n !this.checkDetails.find(\r\n (cd) =>\r\n cd.amount === transaction.amount &&\r\n cd.checkName === transaction.transComment &&\r\n cd.checkNumber === transaction.refNumber\r\n )\r\n ) {\r\n this.checkDetails.push({\r\n transactionDate: posPos.posTime,\r\n checkName: transaction.transComment || \"\",\r\n checkNumber: transaction.refNumber || \"\",\r\n amount: transaction.amount,\r\n patronID: posPos.patronNumber || \"\",\r\n patronPin: posPos.pospin || 0,\r\n sessionID: posSession.sessionID,\r\n sessionGuid: posPos.posSessionGuid || \"\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.cashCountCache = {\r\n ...this.cashCountCache,\r\n [servingDay]: { ...cache, checkDetails: toJS(this.checkDetails) }\r\n };\r\n\r\n this.logger.logFetchData(\"getCheckList\", data);\r\n }\r\n } catch {\r\n this.checkDetails = observable.array([]);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getCheckList\");\r\n };\r\n\r\n @action\r\n public getCashInDrawer = async (\r\n cashCounterCheck: boolean,\r\n sessionId: number\r\n ) => {\r\n this.logger.logMethodStart(\"getCashInDrawer\");\r\n\r\n const {\r\n getServingDay,\r\n terminalModel: { terminal }\r\n } = this.rootStore.terminalStore;\r\n\r\n const servingDay = getServingDay();\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetCashInDrawer?id=${\r\n terminal!.terminalID\r\n }&date=${servingDay}&osName=${osName}&getExpectedCash=${cashCounterCheck}&sessionId=${sessionId}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n const cache = this.cashCountCache[servingDay] || {};\r\n\r\n if (!this.rootStore.isOnline && cache.cashCounts) {\r\n this.cashCounts = observable.array(cache.cashCounts);\r\n this.dailyAttendance = cache.dailyAttendance;\r\n } else if (!!data.cashCounts) {\r\n this.cashCounts = observable.array(data.cashCounts);\r\n this.dailyAttendance = data.dailyAttendance;\r\n if (cashCounterCheck) this.expectedCash = data.expectedCash;\r\n else this.expectedCash = undefined;\r\n } else {\r\n // This should no longer happen as of 7/29/2024, but leaving here for\r\n // temporary backwards compatibility. Remove this after version 7.9.57.\r\n this.cashCounts = observable.array(data);\r\n this.expectedCash = undefined;\r\n this.dailyAttendance = null;\r\n }\r\n\r\n this.cashCountCache = {\r\n ...this.cashCountCache,\r\n [servingDay]: { ...cache, cashCounts: toJS(this.cashCounts) }\r\n };\r\n\r\n this.logger.logFetchData(\"getCashInDrawer\", data);\r\n }\r\n } catch (error) {\r\n this.cashCounts = observable.array([]);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getCashInDrawer\");\r\n };\r\n\r\n @action\r\n public saveCashInDrawer = async (\r\n cashCounts: CashCount[],\r\n sessionId: number,\r\n dailyAttendance: number | null\r\n ): Promise => {\r\n this.logger.logMethodStart(\"saveCashInDrawer\");\r\n\r\n const {\r\n getServingDay,\r\n terminalModel: { terminal }\r\n } = this.rootStore.terminalStore;\r\n\r\n const servingDay = getServingDay();\r\n\r\n const posSession = {\r\n terminalID: terminal!.terminalID,\r\n schoolID: terminal!.schoolID,\r\n schoolTypeID: terminal!.schoolTypeID,\r\n userID: this.rootStore.authStore.auth.sessionData!.userID,\r\n sessionID: sessionId,\r\n servingDay\r\n };\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/SaveCashInDrawer`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({ cashCounts, posSession, dailyAttendance })\r\n }\r\n );\r\n\r\n checkAuthorization(response, this.rootStore);\r\n } catch {\r\n await this.rootStore.setServiceDayToToday();\r\n }\r\n\r\n const cache = this.cashCountCache[servingDay] || {};\r\n\r\n this.cashCountCache = {\r\n ...this.cashCountCache,\r\n [servingDay]: { ...cache, cashCounts }\r\n };\r\n\r\n this.clearCashCount();\r\n\r\n this.logger.logMethodEnd(\"saveCashInDrawer\");\r\n };\r\n\r\n @action\r\n public clearTransactionStatistics = () => {\r\n this.transactionStatistics = undefined;\r\n };\r\n\r\n @action\r\n public getTransactionStatistics = async () => {\r\n this.logger.logMethodStart(\"getTransactionStatistics\");\r\n\r\n const {\r\n authStore: {\r\n auth: { sessionData }\r\n },\r\n terminalStore: {\r\n getServingDay,\r\n terminalModel: { terminal }\r\n }\r\n } = this.rootStore;\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetTransactionStatistics`,\r\n {\r\n method: \"post\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n userID: sessionData!.userID,\r\n terminalID: terminal!.terminalID,\r\n servingDay: getServingDay()\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n\r\n this.transactionStatistics = data;\r\n this.logger.logFetchData(\"getTransactionStatistics\", data);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getTransactionStatistics\");\r\n };\r\n\r\n @action\r\n public getSessionCounts = async () => {\r\n const { activePOSSession } =\r\n this.rootStore.terminalStore.terminalStateModel;\r\n\r\n const sessionCounts: SessionCounts = {\r\n studentTransactionCount: 0,\r\n nonStudentTransactionCount: 0\r\n };\r\n\r\n if (activePOSSession) {\r\n const posPosList = await this.rootStore.db.getPosPosList(\r\n activePOSSession.posSessionGUID\r\n );\r\n\r\n sessionCounts.studentTransactionCount = posPosList.filter(\r\n (posPos) =>\r\n !posPos.isVoided &&\r\n posPos.patronTypeID === 1 &&\r\n posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => t.transComment === \"Meal Counter\")\r\n ).length;\r\n\r\n sessionCounts.nonStudentTransactionCount = posPosList.filter(\r\n (posPos) =>\r\n !posPos.isVoided &&\r\n posPos.patronTypeID === 2 &&\r\n posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => t.transComment === \"Meal Counter\")\r\n ).length;\r\n }\r\n\r\n this.sessionCounts = sessionCounts;\r\n };\r\n\r\n @action\r\n public submitCountTransaction = async (\r\n isStudent: boolean,\r\n salesItem: SalesItemHeader\r\n ): Promise => {\r\n this.logger.logMethodStart(\"submitCountTransaction\");\r\n\r\n const { studentStore } = this.rootStore;\r\n\r\n this.transactionProcessing = true;\r\n\r\n studentStore.clearPreviousStudent();\r\n\r\n await studentStore.createNoStudent(\r\n isStudent ? 1 : 2,\r\n salesItem.salesItemHeaderID\r\n );\r\n\r\n const posTransaction = this.createTransaction(\r\n salesItem.salesItemHeaderID,\r\n 0,\r\n false,\r\n false,\r\n false,\r\n undefined\r\n );\r\n\r\n posTransaction.amount = posTransaction.rate;\r\n posTransaction.transComment = \"Meal Counter\";\r\n\r\n this.transactionModel.posTransactions.push(posTransaction);\r\n\r\n await this.completeTransaction({\r\n transactionType: TransactionType.MealCounter\r\n });\r\n\r\n if (isStudent && this.sessionCounts) {\r\n this.sessionCounts.studentTransactionCount++;\r\n } else if (this.sessionCounts) {\r\n this.sessionCounts.nonStudentTransactionCount++;\r\n }\r\n\r\n this.transactionProcessing = false;\r\n\r\n this.logger.logMethodEnd(\"submitCountTransaction\");\r\n };\r\n\r\n @action\r\n public addTransaction = (\r\n salesItemHeaderID: number,\r\n layoutItemID: number,\r\n disableCharge: boolean,\r\n transactions: PosTransaction[] | undefined\r\n ) => {\r\n const isFromMealCombiner = !!transactions;\r\n let posTransactions = transactions || [\r\n ...this.transactionModel.posTransactions\r\n ];\r\n\r\n let transaction = posTransactions.find(\r\n (t) =>\r\n t.layoutItemID === layoutItemID &&\r\n t.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (!isFromMealCombiner) {\r\n this.unCombineMeal(posTransactions);\r\n }\r\n\r\n if (!transaction) {\r\n transaction = this.createTransaction(\r\n salesItemHeaderID,\r\n layoutItemID,\r\n false,\r\n disableCharge,\r\n isFromMealCombiner,\r\n undefined\r\n );\r\n\r\n if (isFromMealCombiner) {\r\n // TransNo comes from our temp list size, not master list size.\r\n transaction.transNo = transactions!.length + 1;\r\n }\r\n\r\n transaction.amount = transaction.rate;\r\n posTransactions.push(transaction);\r\n } else {\r\n transaction.quantity++;\r\n transaction.amount = transaction.quantity * transaction.rate;\r\n if (transaction.isMeal && isFromMealCombiner) {\r\n transaction.isCombinedMeal = true;\r\n }\r\n }\r\n\r\n if (!isFromMealCombiner) {\r\n const tempTransactions = this.processMealCombining(posTransactions);\r\n if (tempTransactions) {\r\n posTransactions = tempTransactions;\r\n }\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posTransactions: observable.array(posTransactions) }\r\n );\r\n }\r\n };\r\n\r\n @action\r\n public getSiteTransactions = async (isHistory: boolean = false) => {\r\n this.logger.logMethodStart(\"getSiteTransactions\");\r\n\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminal },\r\n getServingDay\r\n }\r\n } = this.rootStore;\r\n\r\n this.transactionProcessing = isHistory;\r\n\r\n try {\r\n if (isHistory) {\r\n this.transactionHistorySessions.clear();\r\n }\r\n\r\n if (terminal) {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetSiteTransactions/${\r\n terminal.siteID\r\n }${isHistory ? `/${getServingDay()}` : \"\"}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"X-Last-Sync-ID\": this.lastPosTransactionId.toString()\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const sessions: PosSession[] = await response.json();\r\n\r\n if (sessions) {\r\n if (isHistory) {\r\n this.transactionHistorySessions = observable.array(sessions);\r\n } else {\r\n await this.syncTransactions(sessions);\r\n this.getLastPosTransactionId(sessions);\r\n }\r\n }\r\n\r\n this.logger.logFetchData(\"getSiteTransactions\", sessions);\r\n }\r\n }\r\n } catch {\r\n // Do nothing\r\n }\r\n\r\n this.transactionProcessing = false;\r\n\r\n this.logger.logMethodEnd(\"getSiteTransactions\");\r\n };\r\n\r\n private posPosUnique(array: PosPos[]) {\r\n var a = array.concat();\r\n for (var i = 0; i < a.length; ++i) {\r\n for (var j = i + 1; j < a.length; ++j) {\r\n if (a[i].posPosGuid === a[j].posPosGuid) a.splice(j--, 1);\r\n }\r\n }\r\n\r\n return a;\r\n }\r\n\r\n @action\r\n public setTransactionHistory = async (sessionID: number) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminal },\r\n getServingDay\r\n },\r\n authStore: {\r\n auth: { sessionData }\r\n }\r\n } = this.rootStore;\r\n\r\n let session: PosSession | undefined;\r\n let sessionOnline: PosSession | undefined;\r\n let sessionOffline: PosSession | undefined;\r\n const servingDay = getServingDay();\r\n\r\n if (this.transactionHistorySessions.length && sessionID !== 3) {\r\n sessionOnline = this.transactionHistorySessions.find(\r\n (s) =>\r\n s.sessionID === sessionID &&\r\n s.terminalID === terminal!.terminalID &&\r\n s.schoolID === terminal!.schoolID &&\r\n s.userID === sessionData!.userID\r\n );\r\n }\r\n\r\n if (servingDay === getFormattedToday()) {\r\n sessionOffline = await this.rootStore.db.get(\r\n ObjectStores.PosSession,\r\n [\r\n sessionID,\r\n servingDay,\r\n terminal!.terminalID,\r\n terminal!.schoolID,\r\n sessionData!.userID\r\n ],\r\n \"getSession\"\r\n );\r\n\r\n if (sessionOffline) {\r\n const posPosList = await this.rootStore.db.getPosPosList(\r\n sessionOffline.posSessionGUID\r\n );\r\n\r\n sessionOffline.posPos = posPosList;\r\n }\r\n }\r\n\r\n session = sessionOffline || sessionOnline;\r\n\r\n if (sessionOnline && sessionOffline) {\r\n session!.posPos = this.posPosUnique(\r\n sessionOffline.posPos!.concat(sessionOnline.posPos!)\r\n );\r\n }\r\n\r\n if (session && session.posPos) {\r\n this.rootStore.terminalStore.terminalStateModel.posSessions = [];\r\n this.rootStore.terminalStore.terminalStateModel.posSessions.push(session);\r\n this.transactionHistory = observable.array(session.posPos);\r\n } else {\r\n this.transactionHistory.clear();\r\n }\r\n };\r\n\r\n @action\r\n public completeTransaction = async ({\r\n transactionType,\r\n credit,\r\n setProcessing = true\r\n }: Transaction): Promise => {\r\n this.logger.logMethodStart(\"completeTransaction\");\r\n\r\n await this.rootStore.playSilence(false);\r\n\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemSetup, terminalConfig, sessions },\r\n terminalStateModel: { activePOSSession, patronTransactionsServed },\r\n terminalStateModel,\r\n terminalModel\r\n },\r\n studentStore: {\r\n studentModel: { showAlert }\r\n }\r\n } = this.rootStore;\r\n\r\n const { posPos, posTransactions } = this.transactionModel;\r\n var isCompletedSale = posTransactions.some((t) => t.quantity > 0);\r\n\r\n if (setProcessing) {\r\n this.firstGrabNGoTransaction = false;\r\n this.transactionProcessing = true;\r\n }\r\n\r\n if (transactionType === TransactionType.Earned) {\r\n posTransactions.forEach((t) => {\r\n t.rate = 0;\r\n t.amount = 0;\r\n t.earned = true;\r\n });\r\n }\r\n\r\n if (transactionType === TransactionType.Cancelled) {\r\n posTransactions.forEach((t) => {\r\n t.quantity = 0;\r\n t.amount = 0;\r\n });\r\n isCompletedSale = false;\r\n }\r\n\r\n if (\r\n transactionType === TransactionType.Account ||\r\n transactionType === TransactionType.CreditCash ||\r\n transactionType === TransactionType.CreditCheck ||\r\n transactionType === TransactionType.CreditCard\r\n ) {\r\n posTransactions.forEach((t) => {\r\n t.accountAmount = t.amount * -1;\r\n });\r\n }\r\n\r\n if (\r\n (transactionType === TransactionType.ChangeCash ||\r\n transactionType === TransactionType.ChangeCheck) &&\r\n posPos &&\r\n credit\r\n ) {\r\n posPos.amountTendered = credit.amount;\r\n }\r\n\r\n if (\r\n transactionType === TransactionType.QuickCash ||\r\n (credit &&\r\n (transactionType === TransactionType.ChangeCash ||\r\n transactionType === TransactionType.ChangeCheck ||\r\n transactionType === TransactionType.CreditCash ||\r\n transactionType === TransactionType.CreditCheck ||\r\n transactionType === TransactionType.CreditCard ||\r\n transactionType === TransactionType.Refund))\r\n ) {\r\n const totalAmount =\r\n transactionType === TransactionType.QuickCash ||\r\n transactionType === TransactionType.ChangeCash ||\r\n transactionType === TransactionType.ChangeCheck\r\n ? this.getTotalSale\r\n : credit!.amount;\r\n\r\n const salesItemHeaderID =\r\n transactionType === TransactionType.QuickCash ||\r\n transactionType === TransactionType.ChangeCash ||\r\n transactionType === TransactionType.ChangeCheck\r\n ? salesItemSetup!.cashSalesItem\r\n : transactionType === TransactionType.CreditCard\r\n ? salesItemSetup!.creditCardSalesItem\r\n : credit!.isRefund\r\n ? salesItemSetup!.refundSalesItem\r\n : credit!.isCash\r\n ? salesItemSetup!.prepaidSalesItem\r\n : salesItemSetup!.checkSalesItem;\r\n\r\n const transaction = this.createTransaction(\r\n salesItemHeaderID,\r\n 0,\r\n transactionType === TransactionType.QuickCash ||\r\n transactionType === TransactionType.ChangeCash ||\r\n transactionType === TransactionType.ChangeCheck,\r\n false,\r\n false,\r\n totalAmount\r\n );\r\n\r\n if (\r\n credit &&\r\n (transactionType === TransactionType.CreditCash ||\r\n transactionType === TransactionType.CreditCheck ||\r\n transactionType === TransactionType.CreditCard ||\r\n transactionType === TransactionType.Refund)\r\n ) {\r\n transaction.accountAmount = credit.amount;\r\n }\r\n\r\n if (\r\n credit &&\r\n (transactionType === TransactionType.CreditCheck ||\r\n transactionType === TransactionType.ChangeCheck)\r\n ) {\r\n transaction.refNumber = credit.checkNumber;\r\n transaction.transComment =\r\n credit.lastName === \"\" ? undefined : credit.lastName;\r\n }\r\n\r\n if (credit && transactionType === TransactionType.CreditCard) {\r\n transaction.refNumber = credit.boltResponse!.orderid;\r\n transaction.transComment = credit.boltResponse!.name || \"Manual Entry\";\r\n transaction.cardToken = credit.boltResponse!.token;\r\n transaction.cardExpiry = credit.boltResponse!.expiry;\r\n transaction.cardRetRef = credit.boltResponse!.retref;\r\n transaction.cardAVS = credit.boltResponse!.avsresp;\r\n transaction.cardCVD = credit.boltResponse!.cvvresp;\r\n transaction.cardProc = credit.boltResponse!.respproc;\r\n transaction.cardRespCode = credit.boltResponse!.respcode;\r\n transaction.cardAuth = credit.boltResponse!.authcode;\r\n transaction.cardMID = credit.boltResponse!.merchid;\r\n transaction.cardType = credit.boltResponse!.cardType;\r\n }\r\n\r\n if (credit && transactionType === TransactionType.Refund) {\r\n transaction.transComment = credit.comment;\r\n }\r\n\r\n if (\r\n totalAmount !== 0 ||\r\n salesItemHeaderID !== salesItemSetup!.cashSalesItem\r\n ) {\r\n posTransactions.push(transaction);\r\n }\r\n }\r\n\r\n const transactions = toJS(posTransactions);\r\n\r\n try {\r\n const posSession = !terminalModel!.isTransactionHistory\r\n ? activePOSSession\r\n : terminalStateModel!.posSessions![0];\r\n\r\n // fakes a failed call to the api\r\n if (this.rootStore.terminalStore.trainingMode || posPos!.trainingMode) {\r\n throw new Error(\"Training mode transaction\");\r\n }\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/SaveTransaction`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n posSession,\r\n posPos,\r\n posTransactions\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n await this.syncTransactions([data]);\r\n this.logger.logFetchData(\"completeTransaction\", data);\r\n } else {\r\n await this.rootStore.db.addAll(\r\n ObjectStores.PosTransactions,\r\n transactions\r\n );\r\n }\r\n } catch {\r\n if (!posPos!.trainingMode) {\r\n posPos!.trainingMode = this.rootStore.terminalStore.trainingMode;\r\n await this.rootStore.db.put(ObjectStores.PosPos, posPos);\r\n }\r\n await this.rootStore.db.addAll(\r\n ObjectStores.PosTransactions,\r\n transactions\r\n );\r\n if (terminalConfig && !terminalConfig.isGrabNGo) {\r\n await this.rootStore.setServiceDayToToday();\r\n }\r\n } finally {\r\n if (\r\n posPos &&\r\n terminalConfig &&\r\n transactionType !== TransactionType.Cancelled &&\r\n transactionType !== TransactionType.Void\r\n ) {\r\n if (\r\n !terminalConfig.isGrabNGo ||\r\n this.rootStore.studentStore.studentModel.showAlert\r\n ) {\r\n await this.rootStore.playRegister();\r\n }\r\n\r\n this.lastPosPos = JSON.parse(JSON.stringify(posPos!));\r\n this.lastPosPos!.posTransactions = posTransactions;\r\n }\r\n\r\n if (posPos && posPos.patronID) {\r\n const student = await this.rootStore.db.get(\r\n ObjectStores.Patron,\r\n posPos!.patronID,\r\n \"patronID\"\r\n );\r\n\r\n if (student) {\r\n student.account.amount += transactions\r\n .filter((t) => t.quantity !== 0)\r\n .map((t) => t.accountAmount || 0)\r\n .reduce((a, b) => a + b, 0);\r\n\r\n // This condition handles updating the last purchase date for the\r\n // selected serving session, for this one cached student record.\r\n if (\r\n !this.rootStore.terminalStore.trainingMode &&\r\n activePOSSession &&\r\n isCompletedSale\r\n ) {\r\n var updateDate = false;\r\n var lastDates = student.lastPurchaseDates || [];\r\n var existingDate = lastDates.filter(\r\n (d) => d.sessionID === activePOSSession.sessionID\r\n );\r\n\r\n if (existingDate.length > 0) {\r\n if (\r\n new Date(existingDate[0].serveDate) <\r\n new Date(activePOSSession.servingDay)\r\n ) {\r\n updateDate = true;\r\n var lastDates = lastDates.filter(\r\n (d) => d.sessionID != activePOSSession!.sessionID\r\n );\r\n }\r\n } else {\r\n updateDate = true;\r\n }\r\n\r\n if (updateDate) {\r\n lastDates.push({\r\n serveDate: activePOSSession.servingDay,\r\n sessionID: activePOSSession.sessionID\r\n });\r\n student.lastPurchaseDates = lastDates;\r\n }\r\n }\r\n\r\n await this.rootStore.db.put(ObjectStores.Patron, student);\r\n }\r\n }\r\n\r\n if (this.rootStore.db.quotaError) {\r\n this.rootStore.authStore.logout();\r\n }\r\n\r\n if (\r\n transactions &&\r\n terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n activePOSSession &&\r\n sessions &&\r\n !this.rootStore.terminalStore!.terminalModel.isCreditPatrons &&\r\n !this.rootStore.transactionStore.transactionModel.isGrabNGoVoid\r\n ) {\r\n const transactionInfo: TransactionInfo = {\r\n posTransactions,\r\n posSession: activePOSSession\r\n };\r\n\r\n patronTransactionsServed.push({\r\n displayText:\r\n \"Date: \" +\r\n activePOSSession!.servingDay +\r\n \" - Session: \" +\r\n sessions.find((s) => s.sessionID === activePOSSession!.sessionID)!\r\n .description +\r\n \" -- Total: $\" +\r\n this.getTotalSale.toFixed(2),\r\n transactionInfo\r\n });\r\n }\r\n }\r\n\r\n await this.rootStore.studentStore.clearStudent(\r\n true,\r\n this.getTotalSale,\r\n transactionType\r\n );\r\n\r\n if (transactionType !== TransactionType.Cancelled) {\r\n if (\r\n terminalConfig &&\r\n this.lastPosPos &&\r\n this.lastPosPos.posTransactions\r\n ) {\r\n let paymentOnly = true;\r\n this.lastPosPos.posTransactions.forEach((t) => {\r\n if (!t.hide && t.quantity > 0) {\r\n paymentOnly = false;\r\n }\r\n });\r\n\r\n const shouldAutoPrintReminder = this.shouldAutoPrintReminder();\r\n\r\n if (\r\n (paymentOnly &&\r\n terminalConfig.paymentReciepts &&\r\n terminalConfig.paymentReminders &&\r\n shouldAutoPrintReminder) ||\r\n (!paymentOnly &&\r\n terminalConfig.purchaseRecipts &&\r\n terminalConfig.paymentReminders &&\r\n shouldAutoPrintReminder)\r\n ) {\r\n await this.printReminderAndReceipt(this.lastPosPos);\r\n } else if (\r\n terminalConfig.paymentReminders &&\r\n shouldAutoPrintReminder &&\r\n posPos!.patronID\r\n ) {\r\n await this.printReminder(this.lastPosPos);\r\n } else if (\r\n (!paymentOnly && terminalConfig.purchaseRecipts) ||\r\n (paymentOnly && terminalConfig.paymentReciepts)\r\n ) {\r\n await this.printReceipt(this.lastPosPos);\r\n }\r\n }\r\n }\r\n\r\n if (!(terminalConfig && terminalConfig.isGrabNGo) || showAlert) {\r\n this.transactionProcessing = false;\r\n\r\n if (!this.firstGrabNGoTransaction) {\r\n this.firstGrabNGoTransaction = true;\r\n }\r\n }\r\n\r\n this.logger.logMethodEnd(\"completeTransaction\");\r\n };\r\n\r\n public addReceiptBodyToDocument(posPos: PosPos, doc: jsPDF, y: number) {\r\n doc.setFontSize(14);\r\n\r\n const transactions = posPos.posTransactions;\r\n const { terminalStore } = this.rootStore;\r\n const { studentStore } = this.rootStore;\r\n const previousStudentModel = studentStore.previousStudentModel;\r\n const terminal = terminalStore.terminalModel.terminal;\r\n const paymentOnly = !transactions!.some((t) => !t.hide && t.quantity > 0);\r\n const leftMargin = 20;\r\n const lineSpacing = 7;\r\n\r\n doc.setFontType(\"bold\");\r\n doc.setFontSize(20);\r\n if (transactions) {\r\n if (!paymentOnly) {\r\n doc.text(\"Purchase Receipt\", leftMargin, y);\r\n } else {\r\n doc.text(\"Payment Receipt\", leftMargin, y);\r\n }\r\n }\r\n\r\n y += lineSpacing + 4;\r\n doc.setFontType(\"normal\");\r\n doc.setFontSize(14);\r\n\r\n if (terminal) {\r\n doc.text(terminal.schoolName, leftMargin, y);\r\n y += lineSpacing;\r\n doc.text(\"Line: \" + terminal.terminalName, leftMargin, y);\r\n y += lineSpacing;\r\n }\r\n\r\n doc.text(\"Date: \" + this.getReceiptDate(), leftMargin, y);\r\n y += lineSpacing;\r\n doc.text(\"Time: \" + this.getReceiptTime(), leftMargin, y);\r\n y += lineSpacing;\r\n\r\n if (\r\n posPos.patronID &&\r\n previousStudentModel &&\r\n previousStudentModel.student\r\n ) {\r\n if (!!previousStudentModel.student.homeRoom) {\r\n doc.text(\r\n \"Homeroom: \" + previousStudentModel.student.homeRoom,\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n }\r\n\r\n if (!!previousStudentModel.student.pospin) {\r\n doc.text(\r\n \"PIN: \" + previousStudentModel.student.pospin.toString(),\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n }\r\n\r\n doc.text(\r\n previousStudentModel.student.firstName +\r\n \" \" +\r\n previousStudentModel.student.lastName +\r\n \" - #\" +\r\n previousStudentModel.student.patronNumber,\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n } else {\r\n doc.text(\"NO-ID Patron Cash Sale\", leftMargin, y);\r\n y += lineSpacing;\r\n }\r\n\r\n if (!paymentOnly && transactions) {\r\n doc.line(leftMargin, y - 2, 100, y - 2);\r\n const items = transactions.filter((x) => !x.hide && x.quantity > 0);\r\n items.forEach((item) => {\r\n y += lineSpacing;\r\n doc.text(\r\n item.itemDescription +\r\n \" \" +\r\n item.quantity +\r\n \" @ \" +\r\n item.rate.toFixed(2),\r\n leftMargin,\r\n y\r\n );\r\n });\r\n y += lineSpacing;\r\n doc.line(leftMargin, y - 2, 100, y - 2);\r\n }\r\n\r\n if (transactions) {\r\n const hiddenItems = transactions.filter((x) => x.hide);\r\n y += lineSpacing;\r\n hiddenItems.forEach((item) => {\r\n if (item.accountAmount < 0) {\r\n doc.text(\r\n \"Account Debited $\" + item.accountAmount.toFixed(2),\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n } else if (\r\n item.salesItemHeaderID ===\r\n terminalStore.terminalModel.salesItemSetup!.creditCardSalesItem\r\n ) {\r\n doc.text(\r\n \"Credit Card Paid $\" + item.amount.toFixed(2),\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n\r\n doc.text(\"Order ID: \" + item.refNumber, leftMargin, y);\r\n y += lineSpacing;\r\n doc.text(\"Authorization Code: \" + item.cardAuth, leftMargin, y);\r\n y += lineSpacing;\r\n\r\n if (!!item.cardType && item.cardType.toLowerCase() !== \"unknown\") {\r\n doc.text(\"Card Type: \" + item.cardType, leftMargin, y);\r\n y += lineSpacing;\r\n }\r\n\r\n doc.text(\r\n \"Expiration: \" +\r\n item.cardExpiry!.substring(0, 2) +\r\n \"/\" +\r\n item.cardExpiry!.substring(2),\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n } else if (\r\n item.salesItemHeaderID ===\r\n terminalStore.terminalModel.salesItemSetup!.checkSalesItem\r\n ) {\r\n doc.text(\"Check Paid $\" + item.amount.toFixed(2), leftMargin, y);\r\n y += lineSpacing;\r\n\r\n if (!!item.refNumber) {\r\n doc.text(\r\n \"Check #\" +\r\n item.refNumber +\r\n (!!item.transComment ? \" (\" + item.transComment + \")\" : \"\"),\r\n leftMargin,\r\n y\r\n );\r\n y += lineSpacing;\r\n }\r\n } else {\r\n doc.text(\"Cash Paid $\" + item.amount.toFixed(2), leftMargin, y);\r\n y += lineSpacing;\r\n }\r\n });\r\n }\r\n\r\n if (\r\n posPos.patronID &&\r\n previousStudentModel &&\r\n previousStudentModel.student\r\n ) {\r\n doc.text(\r\n \"Meal Account $\" +\r\n (\r\n previousStudentModel.student.account.amount +\r\n (previousStudentModel.previousAccountAdjustAmount || 0)\r\n ).toFixed(2),\r\n leftMargin,\r\n y\r\n );\r\n }\r\n return y;\r\n }\r\n\r\n public async printReceipt(posPos: PosPos) {\r\n const doc = new jsPDF.default();\r\n this.addReceiptBodyToDocument(posPos, doc, 30);\r\n printJS(doc.output(\"bloburl\"));\r\n }\r\n\r\n public determineReminderText() {\r\n const { terminalStore } = this.rootStore;\r\n const { studentStore } = this.rootStore;\r\n const previousStudentModel = studentStore.previousStudentModel;\r\n let reminderText = \"\";\r\n\r\n const paymentReminders = terminalStore.terminalModel.paymentReminders;\r\n const paymentReminder = paymentReminders.find(\r\n (p: { paymentReminderID: number }) => p.paymentReminderID === 3\r\n );\r\n const lowBalance = paymentReminders.find(\r\n (p: { paymentReminderID: number }) => p.paymentReminderID === 1\r\n );\r\n const negativeBalance = paymentReminders.find(\r\n (p: { paymentReminderID: number }) => p.paymentReminderID === 2\r\n );\r\n\r\n const limit = this.getPreviousStudentLowBalanceLimit;\r\n const balance =\r\n previousStudentModel!.student!.account.amount +\r\n (previousStudentModel!.previousAccountAdjustAmount || 0);\r\n\r\n if (balance < 0) {\r\n reminderText = negativeBalance.paymentReminderText;\r\n }\r\n if (limit && balance >= 0 && balance < limit) {\r\n reminderText = lowBalance.paymentReminderText;\r\n }\r\n if (limit && balance >= limit) {\r\n reminderText = paymentReminder.paymentReminderText;\r\n }\r\n if (!limit && balance >= 0) {\r\n reminderText = paymentReminder.paymentReminderText;\r\n }\r\n return reminderText;\r\n }\r\n\r\n public shouldAutoPrintReminder() {\r\n const { studentStore } = this.rootStore;\r\n const previousStudentModel = studentStore.previousStudentModel;\r\n\r\n const limit = this.getPreviousStudentLowBalanceLimit;\r\n const balance =\r\n previousStudentModel!.student!.account.amount +\r\n (previousStudentModel!.previousAccountAdjustAmount || 0);\r\n\r\n if (balance < 0) {\r\n return true;\r\n }\r\n if (limit && balance >= 0 && balance < limit) {\r\n return true;\r\n }\r\n if (limit && balance >= limit) {\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n public addReminderBodyToDocument(doc: jsPDF, y: number) {\r\n const { terminalStore } = this.rootStore;\r\n const { terminal } = terminalStore.terminalModel;\r\n const { studentStore } = this.rootStore;\r\n const previousStudentModel = studentStore.previousStudentModel;\r\n doc.setFontType(\"bold\");\r\n doc.setFontSize(20);\r\n doc.text(\"Payment Reminder\", 20, y);\r\n doc.setFontType(\"normal\");\r\n doc.setFontSize(14);\r\n if (terminal) {\r\n y += 10;\r\n doc.text(terminal.schoolName, 20, y);\r\n y += 10;\r\n doc.text(\"Line: \" + terminal.terminalName, 20, y);\r\n }\r\n y += 10;\r\n\r\n doc.text(\"Date: \" + this.getReceiptDate(), 20, y);\r\n y += 10;\r\n\r\n doc.text(\"Time: \" + this.getReceiptTime(), 20, y);\r\n y += 10;\r\n if (previousStudentModel && previousStudentModel.student) {\r\n if (previousStudentModel.student.homeRoom) {\r\n doc.text(\"Homeroom: \" + previousStudentModel.student.homeRoom, 20, y);\r\n y += 10;\r\n }\r\n if (previousStudentModel.student.pospin) {\r\n doc.text(\"Pin: \" + previousStudentModel.student.pospin, 20, y);\r\n y += 10;\r\n }\r\n\r\n doc.text(\r\n previousStudentModel.student.firstName +\r\n \" \" +\r\n previousStudentModel.student.lastName +\r\n \" - #\" +\r\n previousStudentModel.student.patronNumber,\r\n 20,\r\n y\r\n );\r\n y += 10;\r\n\r\n doc.line(20, y, 100, y);\r\n y += 10;\r\n doc.text(\r\n \"Meal Account $\" +\r\n (\r\n previousStudentModel.student.account.amount +\r\n (previousStudentModel.previousAccountAdjustAmount || 0)\r\n ).toFixed(2),\r\n 20,\r\n y\r\n );\r\n y += 10;\r\n doc.line(20, y, 100, y);\r\n y += 10;\r\n }\r\n\r\n const reminderTextSplit = this.determineReminderText()\r\n .replace(\"\\n\", \" \")\r\n .split(\" \");\r\n let sb = \"\";\r\n\r\n reminderTextSplit.forEach((text) => {\r\n {\r\n const temp = sb + \" \" + text;\r\n if (temp.length < 30) {\r\n sb = temp.trimLeft();\r\n } else {\r\n doc.text(sb, 20, y);\r\n y += 7;\r\n sb = text;\r\n }\r\n }\r\n });\r\n\r\n doc.text(sb, 20, y);\r\n return y;\r\n }\r\n\r\n public async printReminder(posPos: PosPos) {\r\n const doc = new jsPDF.default();\r\n\r\n const { studentStore } = this.rootStore;\r\n const previousStudentModel = studentStore.previousStudentModel;\r\n\r\n if (\r\n posPos.patronID &&\r\n previousStudentModel &&\r\n previousStudentModel.student\r\n ) {\r\n this.addReminderBodyToDocument(doc, 30);\r\n }\r\n printJS(doc.output(\"bloburl\"));\r\n }\r\n\r\n public async printReminderAndReceipt(posPos: PosPos) {\r\n const doc = new jsPDF.default();\r\n this.addReceiptBodyToDocument(posPos, doc, 30);\r\n doc.addPage();\r\n this.addReminderBodyToDocument(doc, 30);\r\n printJS(doc.output(\"bloburl\"));\r\n }\r\n\r\n public clearTrainingModeTransactions = async () => {\r\n const posPoss = await this.rootStore.db.getAll(\r\n ObjectStores.PosPos\r\n );\r\n\r\n for (const posPos of posPoss) {\r\n if (posPos.trainingMode) {\r\n const transactions: (PosTransaction & BaseClass)[] =\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions,\r\n \"posPosGuid\",\r\n posPos.posPosGuid\r\n );\r\n\r\n // delete pos transactions linked to training mode pos pos\r\n await this.rootStore.db.deleteAll(\r\n ObjectStores.PosTransactions,\r\n transactions.map((t) => t.id)\r\n );\r\n }\r\n // delete training mode pos pos\r\n await this.rootStore.db.deleteAll(\r\n ObjectStores.PosPos,\r\n posPoss.filter((t) => t.trainingMode).map((t) => t.id)\r\n );\r\n }\r\n\r\n // clean up other related data\r\n this.clearCashCount();\r\n this.cashCountCache = {};\r\n this.lastPosTransactionId = 0;\r\n\r\n await this.getSiteTransactions();\r\n };\r\n\r\n public syncTransactions = async (sessions: PosSession[]) => {\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n await this.clearStoredTransactions();\r\n\r\n if (sessions.length) {\r\n for (const session of sessions) {\r\n session.servingDay = formatServiceDate(new Date(session.servingDay));\r\n\r\n let dbSession = await this.rootStore.db.get(\r\n ObjectStores.PosSession,\r\n [\r\n session.sessionID,\r\n session.servingDay,\r\n session.terminalID,\r\n session.schoolID,\r\n session.userID\r\n ],\r\n \"getSession\"\r\n );\r\n\r\n if (!dbSession) {\r\n const sessionClone = { ...session };\r\n delete sessionClone.posPos;\r\n await this.rootStore.db.add(ObjectStores.PosSession, sessionClone);\r\n\r\n dbSession = await this.rootStore.db.get(\r\n ObjectStores.PosSession,\r\n [\r\n session.sessionID,\r\n session.servingDay,\r\n session.terminalID,\r\n session.schoolID,\r\n session.userID\r\n ],\r\n \"getSession\"\r\n );\r\n }\r\n\r\n if (session.posSessionGUID !== dbSession.posSessionGUID) {\r\n const {\r\n terminalStore,\r\n terminalStore: {\r\n terminalStateModel: { activePOSSession }\r\n }\r\n } = this.rootStore;\r\n\r\n if (\r\n activePOSSession &&\r\n activePOSSession.posSessionGUID === dbSession.posSessionGUID\r\n ) {\r\n activePOSSession.posSessionGUID = session.posSessionGUID;\r\n\r\n terminalStore.terminalStateModel = {\r\n ...terminalStore.terminalStateModel,\r\n activePOSSession\r\n };\r\n }\r\n\r\n const posPoss = await this.rootStore.db.getAll(\r\n ObjectStores.PosPos,\r\n \"posSessionGuid\",\r\n dbSession.posSessionGUID\r\n );\r\n\r\n for (const posPos of posPoss) {\r\n posPos.posSessionGuid = session.posSessionGUID;\r\n await this.rootStore.db.put(ObjectStores.PosPos, posPos);\r\n }\r\n\r\n if (\r\n posSessions &&\r\n dbSession.posSessionGUID !== session.posSessionGUID\r\n ) {\r\n const sessionToUpdate = posSessions.find(\r\n (x) => x.posSessionGUID === dbSession.posSessionGUID\r\n );\r\n if (sessionToUpdate) {\r\n sessionToUpdate.posSessionGUID = session.posSessionGUID;\r\n }\r\n }\r\n\r\n dbSession.posSessionGUID = session.posSessionGUID;\r\n\r\n await this.rootStore.db.put(ObjectStores.PosSession, dbSession);\r\n }\r\n\r\n if (session.posPos && session.posPos.length) {\r\n for (const posPos of session.posPos) {\r\n const dbPosPos = await this.rootStore.db.get(\r\n ObjectStores.PosPos,\r\n posPos.posPosGuid,\r\n \"posPosGuid\"\r\n );\r\n\r\n if (!dbPosPos) {\r\n const posPosClone = { ...posPos };\r\n delete posPosClone.posTransactions;\r\n await this.rootStore.db.add(ObjectStores.PosPos, posPosClone);\r\n } else {\r\n dbPosPos.amountTendered = posPos.amountTendered;\r\n await this.rootStore.db.put(ObjectStores.PosPos, dbPosPos);\r\n }\r\n\r\n if (posPos.posTransactions && posPos.posTransactions.length) {\r\n for (const transaction of posPos.posTransactions) {\r\n const dbTransaction = await this.rootStore.db.get<\r\n PosTransaction & BaseClass\r\n >(\r\n ObjectStores.PosTransactions,\r\n [posPos.posPosGuid, transaction.transNo],\r\n \"getTransaction\"\r\n );\r\n\r\n if (dbTransaction) {\r\n dbTransaction.posTransactionID = transaction.posTransactionID;\r\n dbTransaction.posPosGuid = posPos.posPosGuid;\r\n dbTransaction.isMeal = transaction.isMeal;\r\n\r\n await this.rootStore.db.put(\r\n ObjectStores.PosTransactions,\r\n dbTransaction\r\n );\r\n } else {\r\n await this.rootStore.db.add(\r\n ObjectStores.PosTransactions,\r\n transaction\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n public getReceiptDate(): string {\r\n const date = new Date(Date.now());\r\n return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`;\r\n }\r\n\r\n public getReceiptTime(): string {\r\n return new Date().toLocaleTimeString(\"en-US\", {\r\n hour: \"numeric\",\r\n hour12: true,\r\n minute: \"numeric\"\r\n });\r\n }\r\n\r\n public sendTransactions = async () => {\r\n this.logger.logMethodStart(\"sendTransactions\");\r\n\r\n const posTransactions = await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions,\r\n \"posTransactionID\",\r\n 0\r\n );\r\n\r\n const posPosGuids = [...new Set(posTransactions.map((t) => t.posPosGuid))];\r\n\r\n const posPoss = (\r\n await this.rootStore.db.getAll(ObjectStores.PosPos)\r\n )\r\n .filter((p) => posPosGuids.includes(p.posPosGuid))\r\n .filter((p) => !p.trainingMode);\r\n\r\n const posSessionGuids = [...new Set(posPoss.map((p) => p.posSessionGuid))];\r\n\r\n const posSessions = (\r\n await this.rootStore.db.getAll(ObjectStores.PosSession)\r\n ).filter((p) => posSessionGuids.includes(p.posSessionGUID));\r\n\r\n if (\r\n posSessions.length > 0 &&\r\n posPoss.length > 0 &&\r\n posTransactions.length > 0\r\n ) {\r\n try {\r\n // fakes a failed call to the api\r\n if (this.rootStore.terminalStore.trainingMode) {\r\n throw new Error(\"In training mode\");\r\n }\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/SyncTransaction`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n posSessions,\r\n posPoss,\r\n posTransactions\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n await this.syncTransactions(data);\r\n this.logger.logFetchData(\"sendTransactions\", data);\r\n }\r\n } catch {\r\n // Do nothing for now\r\n }\r\n }\r\n\r\n this.logger.logMethodEnd(\"sendTransactions\");\r\n };\r\n\r\n public clearStoredTransactions = async () => {\r\n const sessions = (\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosSession\r\n )\r\n ).filter((s) => Date.parse(s.servingDay) < Date.parse(getFormattedToday()));\r\n\r\n const sessionsToDelete: number[] = [];\r\n\r\n for (const session of sessions) {\r\n const posPosList = await this.rootStore.db.getAll(\r\n ObjectStores.PosPos,\r\n \"posSessionGuid\",\r\n session.posSessionGUID\r\n );\r\n\r\n const posPosToDelete: number[] = [];\r\n\r\n let removeSession = true;\r\n\r\n for (const posPos of posPosList) {\r\n const transactions = await this.rootStore.db.getAll<\r\n PosTransaction & BaseClass\r\n >(ObjectStores.PosTransactions, \"posPosGuid\", posPos.posPosGuid);\r\n\r\n if (transactions.some((t) => t.posTransactionID === 0)) {\r\n removeSession = false;\r\n } else {\r\n posPosToDelete.push(posPos.id);\r\n }\r\n\r\n await this.rootStore.db.deleteAll(\r\n ObjectStores.PosTransactions,\r\n transactions.filter((t) => t.posTransactionID !== 0).map((t) => t.id)\r\n );\r\n }\r\n\r\n if (removeSession) {\r\n sessionsToDelete.push(session.id);\r\n }\r\n\r\n await this.rootStore.db.deleteAll(ObjectStores.PosPos, [\r\n ...new Set(posPosToDelete)\r\n ]);\r\n }\r\n\r\n await this.rootStore.db.deleteAll(ObjectStores.PosSession, [\r\n ...new Set(sessionsToDelete)\r\n ]);\r\n };\r\n\r\n @action\r\n public redoTransaction = async () => {\r\n const {\r\n studentStore: { previousStudentModel }\r\n } = this.rootStore;\r\n\r\n if (\r\n previousStudentModel &&\r\n previousStudentModel.student &&\r\n previousStudentModel.previousTransactions\r\n ) {\r\n const studentModel = { ...previousStudentModel };\r\n\r\n const transactions = previousStudentModel\r\n .previousTransactions!.filter((t) => !t.hide)\r\n .map((t) =>\r\n Object.assign({}, t, { posTransactionID: 0, accountAmount: 0 })\r\n );\r\n\r\n await this.voidTransaction();\r\n await this.generatePosPos(true);\r\n\r\n transactions.forEach((t) => {\r\n t.posPosGuid = this.transactionModel.posPos!.posPosGuid;\r\n\r\n if (\r\n previousStudentModel.previousTransactionType ===\r\n TransactionType.Earned\r\n ) {\r\n const salesItemPrice = previousStudentModel.salesItemPrices!.find(\r\n (p) => p.salesItemHeaderID === t.salesItemHeaderID\r\n );\r\n\r\n t.rate = (salesItemPrice && salesItemPrice.itemPrice) || 0;\r\n t.amount = t.rate * t.quantity;\r\n }\r\n });\r\n\r\n studentModel.previousAmount = undefined;\r\n studentModel.previousTotal = undefined;\r\n studentModel.previousTransactionType = undefined;\r\n studentModel.voidedTransactionType = undefined;\r\n studentModel.previousTransactions = undefined;\r\n studentModel.previousAccountAdjustAmount = undefined;\r\n studentModel.isRedo = true;\r\n\r\n this.rootStore.studentStore.studentModel = studentModel;\r\n this.rootStore.studentStore.showMealService = true;\r\n this.rootStore.studentStore.clearPreviousStudent();\r\n this.transactionModel.posTransactions = observable.array(transactions);\r\n }\r\n };\r\n\r\n @action\r\n public voidTransaction = async () => {\r\n const {\r\n studentStore: { previousStudentModel }\r\n } = this.rootStore;\r\n\r\n if (\r\n previousStudentModel &&\r\n previousStudentModel.student &&\r\n previousStudentModel.previousTransactions\r\n ) {\r\n await this.generatePosPos(true);\r\n\r\n this.transactionModel.posTransactions = observable.array(\r\n this.inverseTransactions(\r\n previousStudentModel.previousTransactions,\r\n this.transactionModel.posPos!.posPosGuid\r\n )\r\n );\r\n\r\n previousStudentModel.voidedTransactionType =\r\n previousStudentModel.previousTransactionType;\r\n\r\n // SNS-5769 - Transactions getting voided under the wrong patron ID\r\n if (\r\n this.transactionModel.posPos &&\r\n this.transactionModel.posPos.patronID ===\r\n previousStudentModel!.student!.patronID\r\n ) {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Void\r\n });\r\n } else {\r\n console.error(\r\n \"Patron ID mismatch when trying to void transactions. The posPos patron ID was \",\r\n this.transactionModel.posPos!.patronID,\r\n \" and the previous student patron ID was \",\r\n previousStudentModel!.student!.patronID\r\n );\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public voidGrabNGoTransactions = async () => {\r\n const {\r\n terminalStore: { terminalStateModel },\r\n studentStore: { previousStudentModel }\r\n } = this.rootStore;\r\n\r\n const servedTransactions = Array.from(\r\n terminalStateModel.patronTransactionsServed\r\n );\r\n\r\n previousStudentModel!.student!.account.amount =\r\n previousStudentModel!.student!.account.amount +\r\n previousStudentModel!.previousAccountAdjustAmount!;\r\n\r\n previousStudentModel!.voidedTransactionType =\r\n previousStudentModel!.previousTransactionType;\r\n\r\n let p = Promise.resolve();\r\n servedTransactions.forEach((patronTransaction, i) => {\r\n p = p.then(async () => {\r\n if (servedTransactions) {\r\n this.transactionModel.isGrabNGoVoid = true;\r\n if (i === servedTransactions.length - 1) {\r\n this.rootStore.studentStore.studentModel.showAlert = true;\r\n }\r\n\r\n this.rootStore.terminalStore.terminalStateModel.activePOSSession =\r\n patronTransaction.transactionInfo.posSession;\r\n\r\n await this.generatePosPos(true);\r\n\r\n this.transactionModel.posTransactions = observable.array(\r\n this.inverseTransactions(\r\n patronTransaction.transactionInfo.posTransactions,\r\n this.transactionModel.posPos!.posPosGuid\r\n )\r\n );\r\n\r\n // SNS-5769 - Transactions getting voided under the wrong patron ID\r\n if (\r\n this.transactionModel.posPos &&\r\n this.transactionModel.posPos.patronID ===\r\n previousStudentModel!.student!.patronID\r\n ) {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Void\r\n });\r\n } else {\r\n console.error(\r\n \"Patron ID mismatch when trying to void transactions. The posPos patron ID was \",\r\n this.transactionModel.posPos!.patronID,\r\n \" and the previous student patron ID was \",\r\n previousStudentModel!.student!.patronID\r\n );\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n @action\r\n public voidTransactions = async (posPos: PosPos, reasonForDelete: string) => {\r\n const {\r\n transactionModel: { posTransactions }\r\n } = this.rootStore.transactionStore;\r\n\r\n this.transactionProcessing = true;\r\n\r\n if (posPos.posTransactions) {\r\n const copyPosPos = await this.copyPosPos(posPos);\r\n\r\n const inversedTransactions = this.inverseTransactions(\r\n posPos.posTransactions,\r\n copyPosPos.posPosGuid,\r\n reasonForDelete\r\n );\r\n\r\n posTransactions.clear();\r\n posTransactions.push(...inversedTransactions);\r\n\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Void,\r\n setProcessing: false\r\n });\r\n\r\n let updatedPosPos = await this.rootStore.db.get(\r\n ObjectStores.PosPos,\r\n copyPosPos.posPosGuid,\r\n \"posPosGuid\"\r\n );\r\n\r\n if (updatedPosPos) {\r\n updatedPosPos.posTransactions =\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions,\r\n \"posPosGuid\",\r\n copyPosPos.posPosGuid\r\n );\r\n } else {\r\n updatedPosPos = copyPosPos;\r\n updatedPosPos.posTransactions = inversedTransactions;\r\n }\r\n\r\n this.transactionHistory.push(updatedPosPos);\r\n }\r\n\r\n this.transactionProcessing = false;\r\n };\r\n\r\n @action\r\n public setAmount = (\r\n amount: number,\r\n layoutItemID: number,\r\n linkedLayoutItemID: number,\r\n salesItemHeaderID: number\r\n ) => {\r\n let posTransactions = [...this.transactionModel.posTransactions];\r\n\r\n const index = posTransactions.findIndex(\r\n (t) =>\r\n (t.layoutItemID === layoutItemID ||\r\n (layoutItemID === 0 && t.layoutItemID === linkedLayoutItemID)) &&\r\n t.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (index !== -1) {\r\n const transaction = posTransactions[index];\r\n transaction.amount = amount;\r\n transaction.rate = amount / transaction.quantity;\r\n }\r\n };\r\n\r\n @action\r\n public setQuantity = (\r\n quantity: number,\r\n layoutItemID: number,\r\n linkedLayoutItemID: number,\r\n salesItemHeaderID: number\r\n ) => {\r\n let posTransactions = [...this.transactionModel.posTransactions];\r\n\r\n const index = posTransactions.findIndex(\r\n (t) =>\r\n (t.layoutItemID === layoutItemID ||\r\n (layoutItemID === 0 && t.layoutItemID === linkedLayoutItemID)) &&\r\n t.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (index !== -1) {\r\n const transaction = posTransactions[index];\r\n // can/should be optimized, but for now this should function the same as pressing the button x number of times to get to the right quantity\r\n // if ( quantity > transaction.quantity )\r\n // {\r\n // while (quantity > transaction.quantity)\r\n // {\r\n // this.addQuantity(layoutItemID, linkedLayoutItemID, salesItemHeaderID);\r\n // }\r\n // } else if (quantity < transaction.quantity)\r\n // {\r\n // while (quantity < transaction.quantity)\r\n // {\r\n // this.removeQuantity(layoutItemID, linkedLayoutItemID, salesItemHeaderID);\r\n // }\r\n // }\r\n this.unCombineMeal(posTransactions);\r\n\r\n if (!transaction.quantity) {\r\n posTransactions.splice(index, 1);\r\n posTransactions.push(transaction);\r\n }\r\n\r\n if (quantity < transaction.quantity) {\r\n if (transaction.isCombinedMeal) {\r\n posTransactions\r\n .filter((t) => t.isMealComponent)\r\n .forEach((t) => {\r\n t.rate = t.keepRate;\r\n t.amount = 0;\r\n t.quantity = 0;\r\n t.partOfTransNo = undefined;\r\n t.isMealComponent = false;\r\n });\r\n }\r\n }\r\n\r\n transaction.quantity = quantity;\r\n transaction.amount = transaction.quantity * transaction.rate;\r\n\r\n const tempTransactions = this.processMealCombining(posTransactions);\r\n if (tempTransactions) {\r\n posTransactions = tempTransactions;\r\n }\r\n\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posTransactions: observable.array(posTransactions) }\r\n );\r\n }\r\n };\r\n\r\n @action\r\n public addQuantity = (\r\n layoutItemID: number,\r\n linkedLayoutItemID: number,\r\n salesItemHeaderID: number\r\n ) => {\r\n let posTransactions = [...this.transactionModel.posTransactions];\r\n\r\n const index = posTransactions.findIndex(\r\n (t) =>\r\n (t.layoutItemID === layoutItemID ||\r\n (layoutItemID === 0 && t.layoutItemID === linkedLayoutItemID)) &&\r\n t.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (index !== -1) {\r\n const transaction = posTransactions[index];\r\n this.unCombineMeal(posTransactions);\r\n\r\n if (!transaction.quantity) {\r\n posTransactions.splice(index, 1);\r\n posTransactions.push(transaction);\r\n }\r\n\r\n transaction.quantity++;\r\n transaction.amount = transaction.quantity * transaction.rate;\r\n\r\n const tempTransactions = this.processMealCombining(posTransactions);\r\n if (tempTransactions) {\r\n posTransactions = tempTransactions;\r\n }\r\n\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posTransactions: observable.array(posTransactions) }\r\n );\r\n }\r\n };\r\n\r\n @action\r\n public removeQuantity = (\r\n layoutItemID: number,\r\n linkedLayoutItemID: number,\r\n salesItemHeaderID: number\r\n ) => {\r\n let posTransactions = [...this.transactionModel.posTransactions];\r\n\r\n const index = posTransactions.findIndex(\r\n (t) =>\r\n (t.layoutItemID === layoutItemID ||\r\n (layoutItemID === 0 && t.layoutItemID === linkedLayoutItemID)) &&\r\n t.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (index !== -1) {\r\n const transaction = posTransactions[index];\r\n\r\n if (transaction.isCombinedMeal) {\r\n posTransactions\r\n .filter((t) => t.isMealComponent)\r\n .forEach((t) => {\r\n t.rate = t.keepRate;\r\n t.amount = 0;\r\n t.quantity = 0;\r\n t.partOfTransNo = undefined;\r\n t.isMealComponent = false;\r\n });\r\n }\r\n\r\n this.unCombineMeal(posTransactions);\r\n\r\n if (transaction.quantity > 0) {\r\n transaction.quantity--;\r\n transaction.amount = transaction.quantity * transaction.rate;\r\n }\r\n\r\n const tempTransactions = this.processMealCombining(posTransactions);\r\n if (tempTransactions) {\r\n posTransactions = tempTransactions;\r\n }\r\n\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posTransactions: observable.array(posTransactions) }\r\n );\r\n }\r\n };\r\n\r\n @action\r\n public clearPreviousTransactions = () => {\r\n this.transactionModel = {\r\n ...this.transactionModel,\r\n posPos: undefined,\r\n posTransactions: observable.array([])\r\n };\r\n };\r\n\r\n @computed\r\n public get getNoChargeTotal(): number {\r\n return Number(\r\n this.transactionModel.posTransactions\r\n .filter(\r\n (t) => !t.hide && t.quantity > 0 && t.rate > 0 && !!t.disableCharge\r\n )\r\n .map((t) => t.amount)\r\n .reduce((acc, curr) => acc + curr, 0)\r\n .toFixed(2)\r\n );\r\n }\r\n\r\n @computed\r\n public get getTotalSale(): number {\r\n return Number(\r\n this.transactionModel.posTransactions\r\n .filter((t) => !t.hide && t.quantity > 0)\r\n .map((t) => t.amount)\r\n .reduce((acc, curr) => acc + curr, 0)\r\n .toFixed(2)\r\n );\r\n }\r\n\r\n @computed\r\n public get getAccountAmount(): number {\r\n const {\r\n studentStore: {\r\n studentModel: { student }\r\n }\r\n } = this.rootStore;\r\n\r\n const totalSale = this.getTotalSale;\r\n let amount = 0;\r\n\r\n if (student && totalSale > 0) {\r\n const {\r\n account: { amount: balance }\r\n } = student;\r\n if (balance - totalSale < 0) {\r\n amount = balance < 0 ? -1 * totalSale : balance - totalSale;\r\n } else {\r\n amount = totalSale;\r\n }\r\n }\r\n\r\n return amount;\r\n }\r\n\r\n public getChargeLimitMet(): boolean {\r\n const chargeLimit = this.getChargeLimit;\r\n\r\n let accountAmount = this.getAccountAmount;\r\n\r\n if (accountAmount < 0) {\r\n const {\r\n studentStore: {\r\n studentModel: { student }\r\n }\r\n } = this.rootStore;\r\n\r\n if (student && student.account.amount < 0) {\r\n accountAmount += student.account.amount;\r\n }\r\n\r\n return chargeLimit !== null && accountAmount * -1 > chargeLimit;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n @computed\r\n public get getPreviousStudentLowBalanceLimit(): number | null {\r\n const {\r\n studentStore,\r\n studentStore: { previousStudentModel }\r\n } = this.rootStore;\r\n\r\n let lowBalanceLimit = null;\r\n\r\n if (previousStudentModel && previousStudentModel.student) {\r\n const chargeLimit = this.getChargeLimitObject(\r\n previousStudentModel.student\r\n );\r\n\r\n if (chargeLimit) {\r\n if (studentStore.isFreeStudent(previousStudentModel.student)) {\r\n lowBalanceLimit =\r\n chargeLimit.freeWarningLimit !== null\r\n ? chargeLimit.freeWarningLimit\r\n : null;\r\n } else if (\r\n studentStore.isReducedStudent(previousStudentModel.student)\r\n ) {\r\n lowBalanceLimit =\r\n chargeLimit.reducedWarningLimit !== null\r\n ? chargeLimit.reducedWarningLimit\r\n : null;\r\n } else {\r\n lowBalanceLimit =\r\n chargeLimit.paidWarningLimit !== null\r\n ? chargeLimit.paidWarningLimit\r\n : null;\r\n }\r\n }\r\n }\r\n\r\n return lowBalanceLimit;\r\n }\r\n\r\n @computed\r\n public get getChargeLimit(): number | null {\r\n const {\r\n studentStore,\r\n studentStore: {\r\n studentModel: { student }\r\n }\r\n } = this.rootStore;\r\n\r\n let maxChargeAmount = null;\r\n\r\n if (student) {\r\n maxChargeAmount = student.chargeLimit;\r\n\r\n if (maxChargeAmount === null) {\r\n const chargeLimit = this.getChargeLimitObject(student);\r\n if (chargeLimit) {\r\n if (studentStore.isFreeStudent(student)) {\r\n maxChargeAmount =\r\n chargeLimit.freeChargeLimit !== null\r\n ? chargeLimit.freeChargeLimit\r\n : null;\r\n } else if (studentStore.isReducedStudent(student)) {\r\n maxChargeAmount =\r\n chargeLimit.reducedChargeLimit !== null\r\n ? chargeLimit.reducedChargeLimit\r\n : null;\r\n } else {\r\n maxChargeAmount =\r\n chargeLimit.paidChargeLimit !== null\r\n ? chargeLimit.paidChargeLimit\r\n : null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return maxChargeAmount;\r\n }\r\n\r\n @computed\r\n public get getLowBalanceLimit(): number | null {\r\n let {\r\n studentStore: {\r\n studentModel: { student }\r\n }\r\n } = this.rootStore;\r\n\r\n const {\r\n studentStore,\r\n studentStore: { previousStudentModel }\r\n } = this.rootStore;\r\n\r\n if (!student && previousStudentModel) {\r\n student = previousStudentModel.student;\r\n }\r\n\r\n let lowBalanceLimit = null;\r\n\r\n if (student) {\r\n const chargeLimit = this.getChargeLimitObject(student);\r\n if (chargeLimit) {\r\n if (studentStore.isFreeStudent(student)) {\r\n lowBalanceLimit =\r\n chargeLimit.freeWarningLimit !== null\r\n ? chargeLimit.freeWarningLimit\r\n : null;\r\n } else if (studentStore.isReducedStudent(student)) {\r\n lowBalanceLimit =\r\n chargeLimit.reducedWarningLimit !== null\r\n ? chargeLimit.reducedWarningLimit\r\n : null;\r\n } else {\r\n lowBalanceLimit =\r\n chargeLimit.paidWarningLimit !== null\r\n ? chargeLimit.paidWarningLimit\r\n : null;\r\n }\r\n }\r\n }\r\n\r\n return lowBalanceLimit;\r\n }\r\n\r\n private getCurrentTransactionAmount(\r\n salesItem: SalesItemHeader,\r\n isAllTypeLimit: boolean\r\n ) {\r\n return this.transactionModel.posTransactions\r\n .filter(\r\n (t) =>\r\n t.saleItemGroupID === salesItem.itemGroupTypeID ||\r\n (isAllTypeLimit && t.saleItemGroupID !== null)\r\n )\r\n .map((t) => t.amount)\r\n .reduce((acc, curr) => acc + curr, 0);\r\n }\r\n\r\n private getPreviousTransactionAmount(\r\n salesItem: SalesItemHeader,\r\n isAllSessionLimit: boolean,\r\n isAllTypeLimit: boolean\r\n ): number {\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemSetup, sessionID }\r\n },\r\n studentStore: {\r\n studentModel: { student }\r\n },\r\n studentStore\r\n } = this.rootStore;\r\n\r\n // Retrieve transactions based on session limit or all transactions\r\n const transactions = isAllSessionLimit\r\n ? studentStore.getAllTransactions(student)\r\n : studentStore.getTransactionsForSession(student, sessionID);\r\n\r\n const relevantTransactions = transactions.filter(\r\n (t) =>\r\n t.saleItemGroupID === salesItem.itemGroupTypeID ||\r\n (isAllTypeLimit && t.saleItemGroupID !== null)\r\n );\r\n\r\n let cashPaymentAmount = 0;\r\n\r\n // Step 1: Calculate previousTransactionAmount (original charge amount)\r\n const previousTransactionAmount = relevantTransactions\r\n .map((t) => t.accountAmount * -1) // Convert accountAmount to a positive number\r\n .reduce((prev, curr) => prev + curr, 0);\r\n\r\n // Step 2: Collect all relevant posPosGuids from the filtered transactions\r\n const relevantPosPosGuids = relevantTransactions.map((t) => t.posPosGuid);\r\n\r\n // Step 3: Calculate the total cash payment amount on corresponsing transactions.\r\n if (this.allowCashLimitOffset) {\r\n const cashItems = [\r\n salesItemSetup!.prepaidSalesItem,\r\n salesItemSetup!.checkSalesItem,\r\n salesItemSetup!.creditCardSalesItem\r\n ];\r\n\r\n transactions\r\n .filter(\r\n (t) =>\r\n cashItems.includes(t.salesItemHeaderID) &&\r\n (relevantPosPosGuids.includes(t.posPosGuid) ||\r\n (t.deletedPosPosGuid &&\r\n relevantPosPosGuids.includes(t.deletedPosPosGuid)))\r\n )\r\n .forEach((t) => {\r\n // Find all original transactions that match posPosGuid and salesItemGroupID\r\n const originalTransactions = relevantTransactions.filter(\r\n (origT) =>\r\n (!t.deletedPosPosGuid && origT.posPosGuid === t.posPosGuid) ||\r\n origT.posPosGuid === t.deletedPosPosGuid\r\n );\r\n\r\n // Sum the accountAmount for all matching transactions to get the original amount\r\n const originalAmount = originalTransactions\r\n .map((origT) => Math.abs(origT.accountAmount * -1)) // Convert all to positive amounts\r\n .reduce((prev, curr) => prev + curr, 0); // Sum all matching amounts\r\n\r\n const cashAmount = Math.abs(t.amount);\r\n const cappedAmount = Math.min(cashAmount, originalAmount); // Cap cash payment by the total original transaction amount\r\n\r\n // Add or subtract the cash payment (handle voids properly)\r\n if (t.amount < 0) {\r\n cashPaymentAmount -= cappedAmount;\r\n } else {\r\n cashPaymentAmount += cappedAmount;\r\n }\r\n });\r\n }\r\n\r\n // Step 4: Calculate and return the net amount after applying the cash payment offset\r\n return previousTransactionAmount - cashPaymentAmount;\r\n }\r\n\r\n public getPrepaidLimitMet(cashPayment: number): boolean {\r\n const {\r\n terminalStore: {\r\n terminalModel: { posLayout, salesItemHeaders, serviceDate, sessionID }\r\n },\r\n studentStore: {\r\n studentModel: { student }\r\n },\r\n studentStore\r\n } = this.rootStore;\r\n\r\n if (posLayout) {\r\n for (const item of posLayout!.items) {\r\n const salesItem = salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === item.salesItemHeaderID\r\n );\r\n\r\n if (!salesItem) {\r\n continue;\r\n }\r\n\r\n const posLimit = this.rootStore.terminalStore.getTerminalPosLimit(\r\n salesItem.itemGroupTypeID,\r\n student!\r\n );\r\n\r\n let transactionAmount: number = 0;\r\n let previousChargeAmount: number = 0;\r\n let prepaidLimit: number | null = null;\r\n let isAllTypeLimit: boolean = false;\r\n let isAllSessionLimit: boolean = false;\r\n\r\n if (posLimit) {\r\n prepaidLimit = studentStore.isFreeStudent(student!)\r\n ? posLimit.freePrepaidLimit!\r\n : studentStore.isReducedStudent(student!)\r\n ? posLimit.reducedPrepaidLimit!\r\n : posLimit.paidPrepaidLimit!;\r\n }\r\n\r\n if (\r\n prepaidLimit === null &&\r\n Array.isArray(student!.posLimits) &&\r\n student!.posLimits.length\r\n ) {\r\n // Student-level limits are loaded here.\r\n const sortedPosLimits = student!.posLimits\r\n .filter((l) => l.prepaidLimit !== null)\r\n .sort((a, b) => a.prepaidLimit! - b.prepaidLimit!);\r\n\r\n let studentLimit = sortedPosLimits.find(\r\n (l) =>\r\n l.posItemGroupID === salesItem.itemGroupTypeID &&\r\n l.sessionID === sessionID &&\r\n l.prepaidLimit !== null &&\r\n isLimitForServiceDay(new Date(serviceDate).getDay(), l)\r\n );\r\n\r\n if (!studentLimit) {\r\n studentLimit = sortedPosLimits.find(\r\n (l) =>\r\n l.posItemGroupID === null &&\r\n l.sessionID === null &&\r\n l.prepaidLimit !== null &&\r\n isLimitForServiceDay(new Date(serviceDate).getDay(), l)\r\n );\r\n\r\n if (!studentLimit) {\r\n studentLimit = sortedPosLimits.find(\r\n (l) =>\r\n l.posItemGroupID === salesItem.itemGroupTypeID &&\r\n l.sessionID === null &&\r\n l.prepaidLimit !== null &&\r\n isLimitForServiceDay(new Date(serviceDate).getDay(), l)\r\n );\r\n\r\n if (!studentLimit) {\r\n studentLimit = sortedPosLimits.find(\r\n (l) =>\r\n l.posItemGroupID === null &&\r\n l.sessionID === sessionID &&\r\n l.prepaidLimit !== null &&\r\n isLimitForServiceDay(new Date(serviceDate).getDay(), l)\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (studentLimit) {\r\n isAllSessionLimit = studentLimit!.sessionID === null;\r\n isAllTypeLimit = studentLimit!.posItemGroupID === null;\r\n prepaidLimit = studentLimit.prepaidLimit;\r\n }\r\n }\r\n\r\n if (prepaidLimit !== null) {\r\n transactionAmount = this.getCurrentTransactionAmount(\r\n salesItem,\r\n isAllTypeLimit\r\n );\r\n if (transactionAmount > 0) {\r\n previousChargeAmount = this.getPreviousTransactionAmount(\r\n salesItem,\r\n isAllSessionLimit,\r\n isAllTypeLimit\r\n );\r\n if (\r\n prepaidLimit + cashPayment <\r\n transactionAmount + previousChargeAmount\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public generatePosPos = async (isVoid: boolean) => {\r\n const {\r\n studentStore: { previousStudentModel },\r\n terminalStore: {\r\n terminalStateModel: { activePOSSession }\r\n }\r\n } = this.rootStore;\r\n\r\n const posPosStudent = isVoid\r\n ? previousStudentModel!.student!\r\n : this.rootStore.studentStore.studentModel.student;\r\n\r\n const posPos = {\r\n posPosGuid: Guid.raw(),\r\n posSessionGuid: activePOSSession!.posSessionGUID,\r\n posTime: new Date(),\r\n schoolID: posPosStudent!.schoolID,\r\n patronID: posPosStudent!.patronID,\r\n patronNumber: posPosStudent!.patronNumber,\r\n pospin: posPosStudent!.pospin,\r\n accountID: posPosStudent!.account.accountID,\r\n patronGroupID: posPosStudent!.pricingGroupID,\r\n patronTypeID: posPosStudent!.patronTypeID,\r\n eligibilityID: posPosStudent!.eligibilityStatusID,\r\n eligSubStatusID: posPosStudent!.eligSubStatusID,\r\n posStatus: false,\r\n accountSchoolID: posPosStudent!.accountSchoolID,\r\n processTime: new Date(),\r\n isVoided: isVoid,\r\n trainingMode: this.rootStore.terminalStore.trainingMode\r\n };\r\n\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posPos }\r\n );\r\n\r\n await this.rootStore.db.add(ObjectStores.PosPos, posPos);\r\n };\r\n\r\n public copyPosPos = async (posPos: PosPos): Promise => {\r\n const copyPosPos = {\r\n posPosGuid: Guid.raw(),\r\n posSessionGuid: posPos.posSessionGuid,\r\n posTime: new Date(),\r\n schoolID: posPos.schoolID,\r\n patronID: posPos.patronID,\r\n patronNumber: posPos.patronNumber,\r\n pospin: posPos.pospin,\r\n accountID: posPos.accountID,\r\n patronGroupID: posPos.patronGroupID,\r\n patronTypeID: posPos.patronTypeID,\r\n eligibilityID: posPos.eligibilityID,\r\n eligSubStatusID: posPos.eligSubStatusID,\r\n posStatus: false,\r\n amountTendered: 0, // TODO: Change this when starting to accept cash/check\r\n accountSchoolID: posPos.accountSchoolID,\r\n processTime: new Date(),\r\n trainingMode: this.rootStore.terminalStore.trainingMode\r\n ? true\r\n : posPos.trainingMode\r\n };\r\n\r\n this.transactionModel = Object.assign(\r\n { ...this.transactionModel },\r\n { posPos: copyPosPos }\r\n );\r\n\r\n await this.rootStore.db.add(ObjectStores.PosPos, copyPosPos);\r\n return copyPosPos;\r\n };\r\n\r\n public isEligibleForCombining = (\r\n combiningForAll: boolean,\r\n student: Student\r\n ): boolean => {\r\n const isQualifyingStudent =\r\n student.isStudent && (student.isReimbursable || !student.patronID);\r\n return (isQualifyingStudent || combiningForAll) && !student.hasBeenServed;\r\n };\r\n\r\n @action\r\n private getLastPosTransactionId(posSessions: PosSession[]) {\r\n const transactions: PosTransaction[] = [];\r\n\r\n for (const posSession of posSessions) {\r\n if (posSession.posPos) {\r\n for (const posPos of posSession.posPos) {\r\n if (posPos.posTransactions) {\r\n transactions.push(...posPos.posTransactions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const lastPosTransactionId = Math.max(\r\n ...transactions.map((t) => t.posTransactionID)\r\n );\r\n\r\n if (lastPosTransactionId > this.lastPosTransactionId) {\r\n this.lastPosTransactionId = lastPosTransactionId;\r\n }\r\n }\r\n\r\n private createTransaction(\r\n salesItemHeaderID: number,\r\n layoutItemID: number,\r\n isQuickCash: boolean,\r\n disableCharge: boolean,\r\n isMealCombiner: boolean,\r\n amount?: number\r\n ): PosTransaction {\r\n const {\r\n studentStore: {\r\n studentModel: { student }\r\n },\r\n terminalStore: {\r\n terminalModel: { posLayout, salesItemHeaders }\r\n }\r\n } = this.rootStore;\r\n\r\n const { posPos } = this.transactionModel;\r\n const salesItem = salesItemHeaders!.find(\r\n (p) => p.salesItemHeaderID === salesItemHeaderID\r\n );\r\n const isCombinedMeal = isMealCombiner && salesItem!.itemGroupCountAsMeal;\r\n const posTransactions = [...this.transactionModel.posTransactions];\r\n\r\n const layoutItem =\r\n layoutItemID === 0\r\n ? undefined\r\n : posLayout!.items.find((i) => i.posLayoutItemID === layoutItemID);\r\n const isAlternateItem =\r\n layoutItem && layoutItem.salesItemHeaderID !== salesItemHeaderID;\r\n\r\n const description =\r\n (layoutItem && layoutItem.keyLabel && !isAlternateItem\r\n ? layoutItem.keyLabel\r\n : salesItem!.itemShortDescription || salesItem!.itemDescription) +\r\n (isAlternateItem && !isCombinedMeal ? \" (Alternate Sales Item)\" : \"\");\r\n\r\n return {\r\n posTransactionID: 0,\r\n isMealComponent: false,\r\n isCombinedMeal,\r\n linkedLayoutItemID: 0,\r\n posPosGuid: posPos!.posPosGuid,\r\n transNo: posTransactions.length + 1,\r\n salesItemHeaderID,\r\n saleItemGroupID: salesItem ? salesItem.itemGroupTypeID : undefined,\r\n itemDescription: description,\r\n quantity: 1,\r\n keepRate: 0,\r\n rate:\r\n amount !== undefined\r\n ? amount\r\n : salesItem\r\n ? salesItem.salesItemPrice || 0\r\n : 0,\r\n amount: amount ? amount : 0,\r\n balanceTypeID: !isQuickCash ? 2 : undefined, // Hard coded to 2 because we don't do balance types in etrition.\r\n partOfTransNo: undefined,\r\n accountAmount: 0,\r\n posAccountDiscountID: undefined,\r\n deletedPosPosGuid: undefined,\r\n deletedTransNo: undefined,\r\n startBalance: undefined, // TODO: set starting balance\r\n earned: false,\r\n reimbursable:\r\n amount === undefined\r\n ? student!.isReimbursable && salesItem!.itemGroupEligibilityPricing\r\n : false,\r\n layoutItemID,\r\n chargeAmount: 0,\r\n creditAmount: 0,\r\n disableCharge,\r\n hide: amount !== undefined,\r\n isMeal: salesItem!.itemGroupCountAsMeal,\r\n isCombinable:\r\n salesItem!.foodGroupList.length > 0 && salesItem!.itemGroupTypeID === 2\r\n };\r\n }\r\n\r\n private inverseTransactions(\r\n transactions: PosTransaction[],\r\n posPosGuid: string,\r\n reasonForDelete: string | undefined = undefined\r\n ) {\r\n let inverse = transactions.map(\r\n (t) =>\r\n Object.assign({}, t, {\r\n quantity: t.hide ? t.quantity : t.quantity * -1,\r\n rate: t.hide ? t.rate * -1 : t.rate,\r\n amount: t.amount * -1,\r\n accountAmount: t.accountAmount * -1,\r\n deletedPosPosGuid: t.posPosGuid,\r\n deletedTransNo: t.transNo,\r\n posPosGuid: posPosGuid,\r\n posTransactionID: 0,\r\n transComment: reasonForDelete || t.transComment\r\n }) as PosTransaction\r\n );\r\n\r\n inverse.forEach((t) => {\r\n // When loading transactions from local storage, there is an \"id\"\r\n // primary key. For that reason, it's necessary to remove it.\r\n if (t[\"id\"]) delete t[\"id\"];\r\n });\r\n\r\n return inverse;\r\n }\r\n\r\n public canAddItemForBulkEntry(layoutItem: PosLayoutItem): boolean {\r\n const {\r\n terminalStore: {\r\n terminalModel: { posLayout }\r\n }\r\n } = this.rootStore;\r\n\r\n const newEligibilityStatusId: number =\r\n layoutItem.defaultEligibilityStatusID !== null\r\n ? layoutItem.defaultEligibilityStatusID\r\n : EligibilityStatus.Paid;\r\n\r\n const layoutItems: PosLayoutItem[] = posLayout!.items.filter(\r\n (i) =>\r\n i.posLayoutItemID !== layoutItem.posLayoutItemID &&\r\n this.transactionModel.posTransactions.some(\r\n (t) => t.layoutItemID === i.posLayoutItemID && t.quantity > 0\r\n )\r\n );\r\n\r\n if (layoutItems.length > 0) {\r\n const firstEligibilityStatusID: number =\r\n layoutItems[0].defaultEligibilityStatusID !== null\r\n ? layoutItems[0].defaultEligibilityStatusID\r\n : EligibilityStatus.Paid;\r\n\r\n return (\r\n firstEligibilityStatusID === newEligibilityStatusId &&\r\n layoutItems.every(\r\n (i) =>\r\n (i.defaultEligibilityStatusID !== null\r\n ? i.defaultEligibilityStatusID\r\n : EligibilityStatus.Paid) === firstEligibilityStatusID\r\n )\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private getChargeLimitObject(\r\n student: Student\r\n ): TerminalChargeLimit | undefined {\r\n const {\r\n terminalStore: {\r\n terminalModel: { chargeLimits }\r\n }\r\n } = this.rootStore;\r\n let chargeLimit;\r\n\r\n if (student) {\r\n chargeLimit = chargeLimits.find(\r\n (cl) =>\r\n cl.patronTypeID === student.patronTypeID &&\r\n cl.schoolID === student.schoolID\r\n );\r\n\r\n if (!chargeLimit) {\r\n chargeLimit = chargeLimits.find(\r\n (cl) =>\r\n cl.patronTypeID === student.patronTypeID &&\r\n cl.schoolTypeID === student.schoolTypeID\r\n );\r\n }\r\n\r\n if (!chargeLimit) {\r\n chargeLimit = chargeLimits.find(\r\n (cl) =>\r\n cl.patronTypeID === student.patronTypeID &&\r\n !cl.schoolID &&\r\n !cl.schoolTypeID\r\n );\r\n }\r\n }\r\n\r\n return chargeLimit;\r\n }\r\n\r\n public salesItemLimitExceededBy(itemGroupTypeID: number): number {\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemHeaders }\r\n }\r\n } = this.rootStore;\r\n\r\n if (\r\n this.transactionModel.posTransactions.filter(\r\n (t) =>\r\n t.quantity > 0 &&\r\n !t.isMealComponent &&\r\n t.saleItemGroupID === itemGroupTypeID\r\n ).length > 0\r\n ) {\r\n const salesItem = salesItemHeaders!.find(\r\n (p) => p.itemGroupTypeID === itemGroupTypeID\r\n );\r\n if (!!salesItem) {\r\n return -salesItem.getSalesItemLimitRemaining(\r\n false,\r\n salesItem.itemDescription\r\n );\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n private processMealCombining = (\r\n transactions: PosTransaction[]\r\n ): PosTransaction[] | undefined => {\r\n if (!this.mealCombining) {\r\n // There is no meal combining configuration for this transaction.\r\n return;\r\n }\r\n\r\n if (\r\n transactions.find((t) => t.quantity > 0 && t.isMeal && !t.isCombinedMeal)\r\n ) {\r\n // There's a normal non-combined meal on this transaction already.\r\n return;\r\n }\r\n\r\n let combined: PosTransaction[] | undefined;\r\n for (let attempt = 0; attempt <= 15; attempt++) {\r\n combined = this.tryCombination(transactions, combined, attempt);\r\n }\r\n\r\n return combined;\r\n };\r\n\r\n private tryCombination = (\r\n transactions: PosTransaction[],\r\n bestCombination: PosTransaction[] | undefined,\r\n loopFlag: number\r\n ): PosTransaction[] | undefined => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemHeaders }\r\n }\r\n } = this.rootStore;\r\n\r\n // The way this works is we will make several attempts to combine\r\n // the transaction into a meal, by setting various flags on how\r\n // the transactions are sorted or processed:\r\n //\r\n // BIT(1) 0 = All Quantities / 1 = Single Quantities Loop\r\n // BIT(2) 0 = No Food Count Sort / 1 = Food Count Sort Ascending\r\n // BIT(4) 0 = No Food Type Sort / 1 = Food Type Sort Descending\r\n // BIT(8) 0 = No Food Type Sort / 1 = Food Type Sort Ascending\r\n //\r\n // We'll skip any where BIT4 and BIT8 are both set, since\r\n // those are mutually exclusive anyway.\r\n //\r\n // See Jira SNS-4723 for a more complete explanation on why\r\n // it's necessary to do multiple analysis in different way.\r\n\r\n // tslint:disable-next-line: no-bitwise\r\n const useSingleQuantityLoop = (loopFlag & 1) === 1;\r\n // tslint:disable-next-line: no-bitwise\r\n const sortByFoodCount = (loopFlag & 2) === 2;\r\n // tslint:disable-next-line: no-bitwise\r\n const sortByFoodTypeDescending = (loopFlag & 4) === 4;\r\n // tslint:disable-next-line: no-bitwise\r\n const sortByFoodTypeAscending = (loopFlag & 8) === 8;\r\n\r\n if (sortByFoodTypeAscending && sortByFoodTypeDescending) {\r\n return bestCombination;\r\n }\r\n\r\n const testCombination = this.getMealCombinedTransaction(\r\n this.sortTransactionsForMealCombining(\r\n transactions,\r\n salesItemHeaders,\r\n sortByFoodCount,\r\n sortByFoodTypeDescending,\r\n sortByFoodTypeAscending\r\n ),\r\n useSingleQuantityLoop\r\n );\r\n\r\n if (testCombination) {\r\n const bestPrice = !bestCombination\r\n ? 999999\r\n : bestCombination\r\n .filter((t) => t.quantity > 0)\r\n .map((t) => t.amount || 0)\r\n .reduce((a, b) => a + b, 0);\r\n\r\n const testPrice = testCombination\r\n .filter((t) => t.quantity > 0)\r\n .map((t) => t.amount || 0)\r\n .reduce((a, b) => a + b, 0);\r\n\r\n if (!bestCombination || testPrice < bestPrice) {\r\n bestCombination = testCombination;\r\n }\r\n }\r\n\r\n return bestCombination;\r\n };\r\n\r\n private getMealCombinedTransaction = (\r\n transactions: PosTransaction[],\r\n useSingleQuantityLoop: boolean\r\n ): PosTransaction[] | undefined => {\r\n const usedList: FoodType[] = [];\r\n\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemHeaders }\r\n }\r\n } = this.rootStore;\r\n\r\n const tempTransactions = this.cloneTransactions(transactions);\r\n let anyQuantity = true;\r\n\r\n while (anyQuantity) {\r\n const listTransactions = [...tempTransactions];\r\n anyQuantity = false;\r\n\r\n listTransactions\r\n .filter(\r\n (t) =>\r\n t.quantity > 0 && !t.isMeal && !t.isMealComponent && t.isCombinable\r\n )\r\n .forEach((t) => {\r\n const item = salesItemHeaders!.find(\r\n (s) => s.salesItemHeaderID === t.salesItemHeaderID\r\n );\r\n\r\n if (item !== undefined) {\r\n let maxQuantity = this.canCombineItem(t, usedList, item);\r\n if (maxQuantity > 0) {\r\n anyQuantity = true;\r\n\r\n if (useSingleQuantityLoop && maxQuantity > 1) {\r\n maxQuantity = 1;\r\n }\r\n\r\n this.markAsMealComponent(\r\n tempTransactions,\r\n t,\r\n maxQuantity,\r\n item.disableCharge()\r\n );\r\n\r\n // And then add the proper number of \"used\" foods to the list.\r\n item.foodGroupList.forEach((f) => {\r\n for (let ct = 0; ct < f.count * maxQuantity; ct++) {\r\n usedList.push(f.foodGroupID);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Now determine if what we did results in a meal.\r\n if (\r\n this.combinesIntoMeal(usedList) &&\r\n this.addCombinedMeal(tempTransactions)\r\n ) {\r\n return tempTransactions;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n private combinesIntoMeal = (usedList: FoodType[]) => {\r\n let isOk = true;\r\n\r\n const minimumFoods =\r\n this.mealCombining!.itemsOffered - this.mealCombining!.itemsCanBeDeclined;\r\n const distinct = (value: any, index: any, self: any) => {\r\n return self.indexOf(value) === index;\r\n };\r\n\r\n const distinctFoods = usedList.filter(distinct);\r\n\r\n // First determine if there are enough food groups represented.\r\n if (distinctFoods.length < minimumFoods) {\r\n isOk = false;\r\n } else {\r\n // And then determine if we are missing any required components.\r\n this.mealCombining!.components.filter((c) => c.isRequired).forEach(\r\n (c) => {\r\n if (c.foodGroupID === FoodType.VegOrFruit) {\r\n if (\r\n !distinctFoods.includes(FoodType.Fruit) &&\r\n !distinctFoods.includes(FoodType.Vegetable)\r\n ) {\r\n isOk = false;\r\n }\r\n } else if (!distinctFoods.includes(c.foodGroupID)) {\r\n isOk = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n return isOk;\r\n };\r\n\r\n private addCombinedMeal = (transactions: PosTransaction[]) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { salesItemHeaders }\r\n }\r\n } = this.rootStore;\r\n\r\n const tempTransactions = this.sortTransactionsForMealCombining(\r\n transactions.filter((t) => t.isMealComponent),\r\n undefined,\r\n false,\r\n false,\r\n false\r\n );\r\n\r\n const entree = tempTransactions[0];\r\n const price = this.mealCombining!.prices.filter(\r\n (p) => p.price <= entree.keepRate\r\n ).reverse()[0];\r\n\r\n if (price) {\r\n const item = salesItemHeaders!.find(\r\n (s) => s.salesItemHeaderID === price.salesItemHeaderID\r\n );\r\n\r\n if (item && item.hasItemPrice) {\r\n this.addTransaction(\r\n price.salesItemHeaderID,\r\n 0,\r\n item.disableCharge(),\r\n transactions\r\n );\r\n\r\n const mealTransaction = transactions.find(\r\n (t) =>\r\n t.salesItemHeaderID === price.salesItemHeaderID &&\r\n t.layoutItemID === 0\r\n );\r\n\r\n if (mealTransaction) {\r\n tempTransactions.forEach(\r\n (t) => (t.partOfTransNo = mealTransaction.transNo)\r\n );\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n private markAsMealComponent = (\r\n tempTransactions: PosTransaction[],\r\n transaction: PosTransaction,\r\n maxQuantity: number,\r\n disableCharge: boolean\r\n ) => {\r\n const priorTransaction =\r\n transaction.linkedLayoutItemID > 0\r\n ? tempTransactions.find(\r\n (st) =>\r\n st.salesItemHeaderID === transaction.salesItemHeaderID &&\r\n st.layoutItemID === transaction.linkedLayoutItemID &&\r\n st.isMealComponent\r\n )\r\n : undefined;\r\n\r\n if (priorTransaction) {\r\n priorTransaction.quantity += maxQuantity;\r\n transaction.quantity -= maxQuantity;\r\n transaction.amount = transaction.quantity * transaction.rate;\r\n } else {\r\n transaction.isMealComponent = true;\r\n transaction.keepRate = transaction.rate;\r\n transaction.amount = 0;\r\n transaction.rate = 0;\r\n }\r\n\r\n // If not all of the quantity can count, split it into two items.\r\n if (!priorTransaction && maxQuantity < transaction.quantity) {\r\n const splitQuantity = transaction.quantity - maxQuantity;\r\n transaction.quantity = maxQuantity;\r\n\r\n this.addTransaction(\r\n transaction.salesItemHeaderID,\r\n 0,\r\n disableCharge,\r\n tempTransactions\r\n );\r\n const splitTransaction = tempTransactions.find(\r\n (st) =>\r\n st.salesItemHeaderID === transaction.salesItemHeaderID &&\r\n st.layoutItemID === 0\r\n );\r\n\r\n if (splitTransaction) {\r\n splitTransaction.quantity = splitQuantity;\r\n splitTransaction.itemDescription = transaction.itemDescription;\r\n splitTransaction.amount = splitQuantity * splitTransaction.rate;\r\n splitTransaction.linkedLayoutItemID = transaction.layoutItemID;\r\n }\r\n }\r\n };\r\n\r\n private canCombineItem = (\r\n transaction: PosTransaction,\r\n usedList: FoodType[],\r\n item: SalesItemHeader\r\n ): number => {\r\n let maxQuantity = item.foodGroupList.length > 0 ? transaction.quantity : 0;\r\n\r\n const fruitVegComponent = this.mealCombining!.components.find(\r\n (m) => m.foodGroupID === FoodType.VegOrFruit\r\n );\r\n const maxFruitVeg =\r\n fruitVegComponent && fruitVegComponent.maxNumberAllowed\r\n ? fruitVegComponent.maxNumberAllowed\r\n : undefined;\r\n\r\n item.foodGroupList.forEach((i) => {\r\n const mealCombinationComponent = this.mealCombining!.components.find(\r\n (m) => m.foodGroupID === i.foodGroupID\r\n );\r\n let maxAllowed: number = mealCombinationComponent\r\n ? mealCombinationComponent.maxNumberAllowed || 1\r\n : 1;\r\n\r\n let currentUsed = 0;\r\n let qtyOfFruit = 0;\r\n let qtyOfVeg = 0;\r\n\r\n currentUsed = usedList.filter((u) => u === i.foodGroupID).length;\r\n\r\n if (\r\n !!maxFruitVeg &&\r\n (i.foodGroupID === FoodType.Fruit ||\r\n i.foodGroupID === FoodType.Vegetable)\r\n ) {\r\n if (\r\n !mealCombinationComponent ||\r\n !mealCombinationComponent.maxNumberAllowed\r\n ) {\r\n maxAllowed = maxFruitVeg;\r\n }\r\n\r\n if (i.foodGroupID === FoodType.Fruit) {\r\n qtyOfFruit = i.count;\r\n } else {\r\n qtyOfVeg = i.count;\r\n }\r\n }\r\n\r\n while (\r\n maxQuantity > 0 &&\r\n currentUsed + i.count * maxQuantity > maxAllowed\r\n ) {\r\n maxQuantity--;\r\n }\r\n\r\n if (!!maxFruitVeg) {\r\n // Special handling for \"Fruit or Vegetable\" combined limit\r\n currentUsed = usedList.filter(\r\n (u) => u === FoodType.Fruit || u === FoodType.Vegetable\r\n ).length;\r\n\r\n while (\r\n maxQuantity > 0 &&\r\n currentUsed + (qtyOfFruit + qtyOfVeg) * maxQuantity > maxFruitVeg!\r\n ) {\r\n maxQuantity--;\r\n }\r\n }\r\n });\r\n\r\n return maxQuantity;\r\n };\r\n\r\n private unCombineMeal = (transactions: PosTransaction[]): void => {\r\n transactions.forEach((t) => {\r\n if (t.isCombinedMeal) {\r\n t.isCombinedMeal = false;\r\n t.quantity = 0;\r\n t.amount = 0;\r\n } else if (t.isMealComponent) {\r\n t.rate = t.keepRate;\r\n t.amount = t.rate * t.quantity;\r\n t.partOfTransNo = undefined;\r\n t.isMealComponent = false;\r\n } else if (t.linkedLayoutItemID > 0 && t.quantity > 0) {\r\n const origTrans = transactions.find(\r\n (lt) =>\r\n lt.layoutItemID === t.linkedLayoutItemID &&\r\n lt.salesItemHeaderID === t.salesItemHeaderID\r\n );\r\n if (origTrans) {\r\n // Merge this item's quantity back into the main record.\r\n origTrans.quantity += t.quantity;\r\n origTrans.amount = origTrans.quantity * origTrans.rate;\r\n }\r\n t.linkedLayoutItemID = 0;\r\n t.quantity = 0;\r\n t.amount = 0;\r\n }\r\n });\r\n };\r\n\r\n private cloneTransactions = (\r\n transactions: PosTransaction[]\r\n ): PosTransaction[] => {\r\n const newTransactions: PosTransaction[] = transactions.map((t) => ({\r\n ...t\r\n }));\r\n return newTransactions;\r\n };\r\n\r\n private getComponentString(salesItemHeader: SalesItemHeader): string {\r\n return salesItemHeader.foodGroupList.map((fg) => fg.description).join(\"\");\r\n }\r\n\r\n private sortTransactionsForMealCombining(\r\n transactions: PosTransaction[],\r\n salesItemHeaders: SalesItemHeader[] | undefined,\r\n sortByFoodCount: boolean,\r\n sortByFoodTypeDescending: boolean,\r\n sortByFoodTypeAscending: boolean\r\n ): PosTransaction[] {\r\n return transactions.slice().sort((a, b) => {\r\n const header1 = !!salesItemHeaders\r\n ? salesItemHeaders.find(\r\n (s) => s.salesItemHeaderID === a.salesItemHeaderID\r\n )\r\n : undefined;\r\n const header2 = !!salesItemHeaders\r\n ? salesItemHeaders.find(\r\n (s) => s.salesItemHeaderID === b.salesItemHeaderID\r\n )\r\n : undefined;\r\n\r\n const foodCount1 =\r\n !!header1 && sortByFoodCount\r\n ? header1.foodGroupList.map((t) => t.count).reduce((a, b) => a + b, 0)\r\n : 0;\r\n const foodCount2 =\r\n !!header2 && sortByFoodCount\r\n ? header2.foodGroupList.map((t) => t.count).reduce((a, b) => a + b, 0)\r\n : 0;\r\n\r\n const components1 =\r\n !!header1 && (sortByFoodTypeDescending || sortByFoodTypeAscending)\r\n ? this.getComponentString(header1)\r\n : \"\";\r\n const components2 =\r\n !!header2 && (sortByFoodTypeDescending || sortByFoodTypeAscending)\r\n ? this.getComponentString(header2)\r\n : \"\";\r\n\r\n if (components1 === components2) {\r\n if (foodCount1 === foodCount2) {\r\n // Price Descending\r\n const rate1 = a.isMealComponent ? a.keepRate : a.rate;\r\n const rate2 = b.isMealComponent ? b.keepRate : b.rate;\r\n return rate1 < rate2 ? 1 : rate1 > rate2 ? -1 : 0;\r\n } else {\r\n // Food Component Count Ascending\r\n return foodCount1 < foodCount2 ? -1 : 1;\r\n }\r\n } else {\r\n if (sortByFoodTypeAscending) {\r\n // Component Descriptions Ascending\r\n return components1 < components2 ? -1 : 1;\r\n } else {\r\n // Component Descriptions Descending\r\n return components1 < components2 ? 1 : -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public sortTransactionsForDisplay(\r\n transactions: PosTransaction[]\r\n ): PosTransaction[] {\r\n return transactions.slice().sort((a, b) => {\r\n if (a.isMealComponent === b.isMealComponent) {\r\n if (a.isCombinedMeal === b.isCombinedMeal) {\r\n if (a.transNo === b.transNo) {\r\n return 0;\r\n } else {\r\n return a.transNo < b.transNo ? -1 : 1;\r\n }\r\n } else {\r\n return a.isCombinedMeal ? -1 : 1;\r\n }\r\n } else {\r\n return a.isMealComponent ? -1 : 1;\r\n }\r\n });\r\n }\r\n\r\n @action\r\n public clearSessionMealCount() {\r\n this.sessionMealCount = undefined;\r\n }\r\n\r\n @action\r\n public setSessionMealCount = async (): Promise => {\r\n const {\r\n terminalStore: { terminalModel }\r\n } = this.rootStore;\r\n\r\n const serviceDate = new Date(terminalModel.serviceDate);\r\n const isToday = serviceDate.toISOString() === getToday().toISOString();\r\n\r\n if (isToday) {\r\n this.setSessionMealCountFromCache();\r\n } else {\r\n this.setSessionMealCountFromService();\r\n }\r\n };\r\n\r\n @action\r\n public setSessionMealCountFromService = async (): Promise => {\r\n const {\r\n terminalStore: { terminalModel }\r\n } = this.rootStore;\r\n\r\n let meals: number = 0;\r\n this.clearTransactionStatistics();\r\n await this.getTransactionStatistics();\r\n\r\n if (!!this.transactionStatistics) {\r\n meals = this.transactionStatistics\r\n .filter((stats) => stats.sessionID == terminalModel.sessionID)\r\n .reduce((sum, stats) => sum + stats.mealCount, 0);\r\n }\r\n this.sessionMealCount = meals;\r\n };\r\n\r\n @action\r\n public setSessionMealCountFromCache = async (): Promise => {\r\n const {\r\n terminalStore: {\r\n terminalModel,\r\n terminalModel: { terminal },\r\n getServingDay\r\n },\r\n authStore: {\r\n auth: { sessionData }\r\n }\r\n } = this.rootStore;\r\n\r\n let meals: number = 0;\r\n let posPoss: (PosPos & BaseClass)[] = [];\r\n let getSessions: (PosSession & BaseClass)[] | undefined = undefined;\r\n let servingDay = getServingDay();\r\n\r\n // Based on this being a unique index, we should never have more than one of these.\r\n // But, there was some confusion about why we're changing SessionGuids and if this\r\n // changes in the future so we have multiples, this will make sure we future-proof.\r\n getSessions = await this.rootStore.db.getAll(\r\n ObjectStores.PosSession,\r\n \"getSession\",\r\n [\r\n terminalModel.sessionID,\r\n servingDay,\r\n terminal!.terminalID,\r\n terminal!.schoolID,\r\n sessionData!.userID\r\n ]\r\n );\r\n\r\n if (!!getSessions) {\r\n const transactions: (PosTransaction & BaseClass)[] =\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions\r\n );\r\n\r\n for (const getSession of getSessions) {\r\n const tempPosPoss = await this.rootStore.db.getAll(\r\n ObjectStores.PosPos,\r\n \"posSessionGuid\",\r\n getSession.posSessionGUID\r\n );\r\n\r\n if (!!tempPosPoss) {\r\n posPoss.push(...tempPosPoss);\r\n }\r\n }\r\n\r\n const posPosGuids = new Set(posPoss.map((posPos) => posPos.posPosGuid));\r\n\r\n meals = transactions\r\n .filter(\r\n (transaction) =>\r\n transaction.isMeal && posPosGuids.has(transaction.posPosGuid)\r\n )\r\n .reduce((sum, transaction) => sum + transaction.quantity, 0);\r\n }\r\n\r\n this.sessionMealCount = meals;\r\n };\r\n}\r\n","import * as React from \"react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport { Button, Grid, Header, Input, Modal, Popup } from \"semantic-ui-react\";\r\nimport { SalesItemPrice, Student } from \"../../models/StudentModel\";\r\nimport { SpeedKeysConfig } from \"../../models/TerminalModel\";\r\nimport {\r\n Credit,\r\n TransactionType,\r\n Transaction\r\n} from \"../../stores/TransactionStore\";\r\nimport { ignoreExponent } from \"../../utils\";\r\nimport StudentCard from \"../student/StudentCard\";\r\nimport ClosedMonth from \"./ClosedMonth\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport CreditCardAuth from \"./CreditCardAuth\";\r\nimport RootStore from \"../../stores/RootStore\";\r\n\r\ninterface Props {\r\n accountAmount: number;\r\n amountDue: number;\r\n anyTransactions: boolean;\r\n chargeLimit: number | null;\r\n completeTransaction: (transaction: Transaction) => void;\r\n creditChange: boolean;\r\n disableCharge: boolean;\r\n noChargeTotal: number;\r\n isClosed: boolean;\r\n hide: () => void;\r\n isCashTransaction: boolean;\r\n lastName: string;\r\n requireCheckNumber: boolean;\r\n isCreditPatrons: boolean;\r\n student: Student | null;\r\n customerID: string | undefined;\r\n speedKeys: SpeedKeysConfig | undefined;\r\n lunchSalesHeaderID: number | undefined;\r\n breakfastSalesHeaderID: number | undefined;\r\n salesItemPrices: SalesItemPrice[] | undefined;\r\n allowRefunds: boolean;\r\n isBufferedServing: boolean;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n amountTendered: number;\r\n amountTenderedDisplay: string;\r\n amountTenderedError: boolean;\r\n amountTenderedPosition: number;\r\n amountTenderedDecimalMode: boolean;\r\n amountTenderedReset: boolean;\r\n amountTouched: boolean;\r\n checkNumber: string;\r\n checkNumberError: boolean;\r\n creditChange: boolean;\r\n isRefund: boolean;\r\n isCash: boolean;\r\n lastName: string;\r\n comment: string;\r\n layoutName: string;\r\n inputName: string;\r\n layout: any;\r\n greeting: string;\r\n speedKeyLabels: string[];\r\n isCardPopupOpen: boolean;\r\n isCardAuthPopupOpen: boolean;\r\n creditCardAuth: CreditCardAuthType;\r\n}\r\n\r\nenum FocusedElement {\r\n AmountTendered = \"amountTenderedDisplay\",\r\n CheckNumber = \"checkNumber\",\r\n LastName = \"lastName\",\r\n Comment = \"comment\"\r\n}\r\n\r\nenum KeyboardType {\r\n AlphaNumeric = \"alphaNumeric\",\r\n Numeric = \"numeric\"\r\n}\r\n\r\nenum SpeedKeyType {\r\n Fixed = 1,\r\n BreakfastMultiple = 2,\r\n LunchMultiple = 3,\r\n BreakfastLunchMultiple = 4\r\n}\r\n\r\nenum CreditCardAuthType {\r\n None = 0,\r\n CardPresent = 1,\r\n ManualEntry = 2\r\n}\r\n\r\nclass CashCheck extends React.Component {\r\n public state: State = {\r\n amountTendered: 0,\r\n amountTenderedDisplay: \"\",\r\n amountTenderedError: false,\r\n amountTenderedPosition: -CashCheck.decimalPlaces,\r\n amountTenderedDecimalMode: false,\r\n amountTenderedReset: false,\r\n amountTouched: false,\r\n checkNumber: \"\",\r\n comment: \"\",\r\n checkNumberError: false,\r\n creditChange:\r\n !this.props.isCashTransaction &&\r\n (this.props.creditChange || !this.props.anyTransactions),\r\n isCash: true,\r\n isRefund: false,\r\n isCardPopupOpen: false,\r\n isCardAuthPopupOpen: false,\r\n lastName: this.props.isCashTransaction ? \"\" : this.props.lastName,\r\n layoutName: \"default\",\r\n inputName: FocusedElement.AmountTendered.toString(),\r\n creditCardAuth: CreditCardAuthType.None,\r\n speedKeyLabels: [\"$5.00\", \"$10.00\", \"$15.00\", \"$20.00\"],\r\n layout: {\r\n default: [\"7 8 9\", \"4 5 6\", \"1 2 3\", \"0 00 .\", \"{bksp} clear {enter} \"]\r\n },\r\n greeting: this.props.isCreditPatrons\r\n ? \"Credit Patrons\"\r\n : \"Cash or Check Tendered\"\r\n };\r\n\r\n private keyboardUtils: KeyboardUtils;\r\n private keyboardRef: React.RefObject;\r\n private checkNumberRef: React.RefObject;\r\n private amountTenderedRef: React.RefObject;\r\n private commentRef: React.RefObject;\r\n private lastNameRef: React.RefObject;\r\n private enterIndex: number;\r\n private maxAmountTendered: number = 9999.99;\r\n private timeoutLength = 2500;\r\n private cardPopupTimer: NodeJS.Timeout;\r\n\r\n private static decimalPlaces: number = 2;\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n this.enterDetected = this.enterDetected.bind(this);\r\n this.keyboardUtils = new KeyboardUtils();\r\n this.keyboardRef = React.createRef();\r\n this.checkNumberRef = React.createRef();\r\n this.amountTenderedRef = React.createRef();\r\n this.commentRef = React.createRef();\r\n this.lastNameRef = React.createRef();\r\n this.cardPopupTimer = setTimeout(() => {\r\n //\r\n }, 1);\r\n this.enterIndex = 0;\r\n\r\n const { speedKeys, salesItemPrices } = this.props;\r\n\r\n if (speedKeys) {\r\n let lunchPrice = 0;\r\n let breakfastPrice = 0;\r\n\r\n const lunch = salesItemPrices!.find(\r\n (x) => x.salesItemHeaderID === this.props.lunchSalesHeaderID\r\n );\r\n\r\n if (lunch) {\r\n lunchPrice = lunch.itemPrice;\r\n }\r\n\r\n const breakfast = salesItemPrices!.find(\r\n (x) => x.salesItemHeaderID === this.props.breakfastSalesHeaderID\r\n );\r\n\r\n if (breakfast) {\r\n breakfastPrice = breakfast.itemPrice;\r\n }\r\n\r\n this.state.speedKeyLabels[0] = this.getSpeedKeyValue(\r\n speedKeys.key1POS_SpeedKeyTypeID,\r\n speedKeys.key1Value,\r\n lunchPrice,\r\n breakfastPrice\r\n );\r\n this.state.speedKeyLabels[1] = this.getSpeedKeyValue(\r\n speedKeys.key2POS_SpeedKeyTypeID,\r\n speedKeys.key2Value,\r\n lunchPrice,\r\n breakfastPrice\r\n );\r\n this.state.speedKeyLabels[2] = this.getSpeedKeyValue(\r\n speedKeys.key3POS_SpeedKeyTypeID,\r\n speedKeys.key3Value,\r\n lunchPrice,\r\n breakfastPrice\r\n );\r\n this.state.speedKeyLabels[3] = this.getSpeedKeyValue(\r\n speedKeys.key4POS_SpeedKeyTypeID,\r\n speedKeys.key4Value,\r\n lunchPrice,\r\n breakfastPrice\r\n );\r\n }\r\n }\r\n\r\n public finishClicked = () => {\r\n const checkValid: boolean =\r\n this.state.isCash ||\r\n !this.props.requireCheckNumber ||\r\n !!this.state.checkNumber;\r\n\r\n const amountValid: boolean =\r\n this.state.amountTendered !== 0 &&\r\n this.isValidAmount(this.state.amountTendered, this.state.isRefund) &&\r\n (!this.state.isCash ||\r\n !this.props.isCashTransaction ||\r\n this.state.amountTendered >= this.props.amountDue) &&\r\n (this.props.isCashTransaction ||\r\n !this.props.chargeLimit ||\r\n !this.state.creditChange ||\r\n this.props.amountDue <= this.state.amountTendered ||\r\n this.props.accountAmount -\r\n this.props.amountDue +\r\n this.state.amountTendered >=\r\n this.props.chargeLimit * -1);\r\n\r\n if (!checkValid || !amountValid) {\r\n this.setState({\r\n checkNumberError: !checkValid,\r\n amountTenderedError: !amountValid\r\n });\r\n\r\n if (!amountValid) {\r\n this.focusAmountTendered();\r\n } else if (!checkValid) {\r\n this.focusCheckNumber();\r\n }\r\n\r\n return;\r\n }\r\n\r\n const credit: Credit = {\r\n amount: this.state.isRefund\r\n ? -this.state.amountTendered\r\n : this.state.amountTendered,\r\n checkNumber: this.state.checkNumber,\r\n isCash: this.state.isCash,\r\n isRefund: this.state.isRefund,\r\n lastName: this.state.lastName,\r\n comment: this.state.comment,\r\n boltResponse: undefined\r\n };\r\n\r\n this.props.completeTransaction({\r\n transactionType: this.state.creditChange\r\n ? this.state.isCash\r\n ? this.state.isRefund\r\n ? TransactionType.Refund\r\n : TransactionType.CreditCash\r\n : TransactionType.CreditCheck\r\n : this.state.isCash\r\n ? TransactionType.ChangeCash\r\n : TransactionType.ChangeCheck,\r\n credit\r\n });\r\n };\r\n\r\n public handleKeyUpAmountTendered = (\r\n e: React.KeyboardEvent\r\n ) => {\r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n } else if (this.props.isCreditPatrons) {\r\n const isBackSpace = e.keyCode === 8;\r\n let newAmountTendered = \"\";\r\n if (e.key === \".\") {\r\n newAmountTendered = Number(\r\n this.state.amountTenderedDisplay.replace(\".\", \"\")\r\n )\r\n .toFixed(2)\r\n .toString();\r\n } else if (/^[A-Za-z0-9]$| /.test(e.key) || isBackSpace) {\r\n const key = e.key;\r\n const prevAmountTenderedDisplay =\r\n this.state.amountTenderedDisplay.replace(\".\", \"\");\r\n\r\n newAmountTendered = !isBackSpace\r\n ? prevAmountTenderedDisplay + key\r\n : prevAmountTenderedDisplay.slice(0, -1);\r\n\r\n const isValid = !isNaN(parseFloat(newAmountTendered));\r\n\r\n newAmountTendered = (isValid ? parseFloat(newAmountTendered) : \"\")\r\n .toString()\r\n .padStart(3, \"0\");\r\n\r\n newAmountTendered =\r\n newAmountTendered.slice(0, -2) + \".\" + newAmountTendered.slice(-2);\r\n\r\n if (parseFloat(newAmountTendered) > this.maxAmountTendered) {\r\n newAmountTendered = this.maxAmountTendered.toString();\r\n }\r\n }\r\n this.setState(\r\n {\r\n amountTenderedDisplay: newAmountTendered,\r\n amountTendered: parseFloat(newAmountTendered),\r\n amountTenderedError: !this.isValidAmount(\r\n parseFloat(newAmountTendered),\r\n this.state.isRefund\r\n )\r\n },\r\n () => {\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n this.state.amountTenderedDisplay\r\n );\r\n }\r\n }\r\n );\r\n }\r\n };\r\n\r\n public handleKeyUpCheckNumber = (\r\n e: React.KeyboardEvent\r\n ) => {\r\n if (this.props.isCreditPatrons) {\r\n const isBackSpace = e.keyCode === 8;\r\n if (/^[0-9]$| /.test(e.key) || isBackSpace) {\r\n const key = e.key;\r\n\r\n this.setState(\r\n (prevState) => ({\r\n checkNumber: !isBackSpace\r\n ? prevState.checkNumber + key\r\n : prevState.checkNumber.slice(0, -1)\r\n }),\r\n () => {\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n this.state.checkNumber\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n };\r\n\r\n public handleKeyUpLastName = (e: React.KeyboardEvent) => {\r\n if (this.props.isCreditPatrons) {\r\n const isBackSpace = e.keyCode === 8;\r\n if (/^[A-Za-z0-9]$| /.test(e.key) || isBackSpace) {\r\n const key = e.key;\r\n\r\n this.setState(\r\n (prevState) => ({\r\n lastName: !isBackSpace\r\n ? prevState.lastName + key\r\n : prevState.lastName!.slice(0, -1)\r\n }),\r\n () => {\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current.keyboard.setInput(this.state.lastName);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n };\r\n\r\n public setAmountTendered = (tempState: State, amount: number) => {\r\n const displayAmount = parseFloat(\r\n (Math.round(amount * 100) / 100).toString()\r\n ).toFixed(2);\r\n tempState.amountTendered = this.props.amountDue;\r\n tempState.amountTenderedDisplay = displayAmount;\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n displayAmount,\r\n FocusedElement.AmountTendered.toString()\r\n );\r\n };\r\n\r\n public handleCheckNumberChange = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.handleCheckNumber(e.currentTarget.value);\r\n };\r\n\r\n public handleCheckNumber = (value: string) => {\r\n value = value.replace(/\\D/g, \"\");\r\n this.setState(\r\n {\r\n checkNumber: value,\r\n checkNumberError: this.props.requireCheckNumber && !value\r\n },\r\n () => {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n FocusedElement.CheckNumber.toString()\r\n );\r\n }\r\n );\r\n };\r\n\r\n public handleLastNameChange = (e: React.SyntheticEvent) => {\r\n this.handleLastName(e.currentTarget.value);\r\n };\r\n\r\n public handleLastName = (value: string) => {\r\n if (\r\n this.state.lastName === this.props.lastName &&\r\n value !== this.state.lastName.slice(0, -1) &&\r\n !value.includes(this.props.lastName)\r\n ) {\r\n value = this.state.lastName + value;\r\n }\r\n\r\n this.setState(\r\n {\r\n lastName: value\r\n },\r\n () => {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n FocusedElement.LastName.toString()\r\n );\r\n }\r\n );\r\n };\r\n\r\n public handleKeyUpComment = (e: React.KeyboardEvent) => {\r\n const isBackSpace = e.keyCode === 8;\r\n if (\r\n /^[A-Za-z0-9%$!@#*(),.?&^'\"{}\\[\\]\\/\\\\\\|+=-]$| /.test(e.key) ||\r\n isBackSpace ||\r\n e.key === \".\"\r\n ) {\r\n const key = e.key;\r\n this.setState(\r\n (prevState) => ({\r\n comment: !isBackSpace\r\n ? prevState.comment + key\r\n : prevState.comment!.slice(0, -1)\r\n }),\r\n () => {\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current.keyboard.setInput(this.state.comment);\r\n }\r\n }\r\n );\r\n }\r\n };\r\n\r\n public handleCommentChange = (e: React.SyntheticEvent) => {\r\n this.handleComment(e.currentTarget.value);\r\n };\r\n\r\n public handleComment = (value: string) => {\r\n this.setState(\r\n {\r\n comment: value\r\n },\r\n () => {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n value,\r\n FocusedElement.Comment.toString()\r\n );\r\n }\r\n );\r\n };\r\n\r\n public handleCash = () => {\r\n this.setState(\r\n {\r\n isCash: true,\r\n checkNumber: \"\",\r\n checkNumberError: false,\r\n creditCardAuth: CreditCardAuthType.None,\r\n inputName: FocusedElement.AmountTendered.toString(),\r\n amountTenderedError: !this.isValidAmount(\r\n this.state.amountTendered,\r\n this.state.isRefund\r\n )\r\n },\r\n () => {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n \"\",\r\n FocusedElement.CheckNumber.toString()\r\n );\r\n }\r\n );\r\n this.changeKeyboard(KeyboardType.Numeric);\r\n };\r\n\r\n public handleCheck = () => {\r\n const newState = {\r\n ...this.state,\r\n isCash: false,\r\n isRefund: false,\r\n creditCardAuth: CreditCardAuthType.None,\r\n creditChange: !this.props.isCashTransaction,\r\n inputName: FocusedElement.CheckNumber.toString(),\r\n amountTenderedError: !this.isValidAmount(this.state.amountTendered, false)\r\n };\r\n\r\n if (this.props.isCashTransaction) {\r\n this.setAmountTendered(newState, this.props.amountDue);\r\n }\r\n\r\n this.setState(newState, () => {\r\n this.checkNumberRef.current!.focus();\r\n });\r\n\r\n this.changeKeyboard(KeyboardType.AlphaNumeric);\r\n };\r\n\r\n public changeKeyboard = (keyboardType: KeyboardType) => {\r\n if (keyboardType === KeyboardType.AlphaNumeric) {\r\n this.setState({\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ],\r\n hidden: []\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n layout: {\r\n default: [\r\n \"7 8 9 \".concat(this.state.speedKeyLabels[0]),\r\n \"4 5 6 \".concat(this.state.speedKeyLabels[1]),\r\n \"1 2 3 \".concat(this.state.speedKeyLabels[2]),\r\n \"0 00 . \".concat(this.state.speedKeyLabels[3]),\r\n \"{bksp} clear {enter}\"\r\n ]\r\n }\r\n });\r\n }\r\n };\r\n\r\n public componentDidMount() {\r\n const { cardConnectStore } = this.props.rootStore;\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n this.state.lastName,\r\n FocusedElement.LastName.toString()\r\n );\r\n\r\n this.changeKeyboard(KeyboardType.Numeric);\r\n\r\n document.addEventListener(\"keydown\", this.enterDetected);\r\n\r\n if (cardConnectStore.priorAuthInFlight) {\r\n // If we were connected to the terminal previously, but then\r\n // refreshed the page, we need to cancel the InFlight auth\r\n // to that terminal to avoid somebody completing a transaction\r\n // that won't actually get recorded in eTrition. So we Init.\r\n cardConnectStore.priorAuthInFlight = false;\r\n cardConnectStore.initialize(false);\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"keydown\", this.enterDetected);\r\n }\r\n\r\n public enterDetected(event: any) {\r\n if (\r\n (event.keyCode === 13 && !this.props.isBufferedServing) ||\r\n event.keyCode === 9\r\n ) {\r\n event.preventDefault();\r\n this.handleEnter();\r\n }\r\n }\r\n\r\n public handleAmountTenderedFocus = () => {\r\n this.handleKeyboardFocus(FocusedElement.AmountTendered);\r\n };\r\n\r\n public handleCheckNumberFocus = () => {\r\n this.handleKeyboardFocus(FocusedElement.CheckNumber);\r\n };\r\n\r\n public handleLastNameFocus = () => {\r\n this.handleKeyboardFocus(FocusedElement.LastName);\r\n };\r\n\r\n public handleCommentFocus = () => {\r\n this.handleKeyboardFocus(FocusedElement.Comment);\r\n };\r\n\r\n public handleKeyboardFocus = (element: FocusedElement) => {\r\n this.setState({\r\n inputName: element.toString()\r\n });\r\n if (element === FocusedElement.AmountTendered) {\r\n this.changeKeyboard(KeyboardType.Numeric);\r\n } else {\r\n this.changeKeyboard(KeyboardType.AlphaNumeric);\r\n }\r\n };\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n if (this.state.inputName === FocusedElement.AmountTendered.toString()) {\r\n this.focusAmountTendered();\r\n } else if (this.state.inputName === FocusedElement.CheckNumber.toString()) {\r\n this.handleCheckNumber(inputObject[this.state.inputName]);\r\n this.focusCheckNumber();\r\n } else if (this.state.inputName === FocusedElement.LastName.toString()) {\r\n this.handleLastName(inputObject[this.state.inputName]);\r\n this.focusLastName();\r\n } else if (this.state.inputName === FocusedElement.Comment.toString()) {\r\n this.handleComment(inputObject[this.state.inputName]);\r\n this.focusComment();\r\n }\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public handleEnter = () => {\r\n if (this.enterIndex === 0 && !this.state.isCash) {\r\n this.focusCheckNumber();\r\n } else if (this.enterIndex === 1 && !this.state.isCash) {\r\n this.focusLastName();\r\n } else if (this.enterIndex === 2 || this.state.isCash) {\r\n this.focusAmountTendered();\r\n } else {\r\n this.focusComment();\r\n }\r\n };\r\n\r\n public clearAmountTendered = () => {\r\n const amount = 0;\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: \"\",\r\n amountTenderedDecimalMode: false,\r\n amountTenderedPosition: -CashCheck.decimalPlaces,\r\n amountTenderedReset: false,\r\n amountTenderedError: false,\r\n amountTouched: false\r\n });\r\n };\r\n\r\n // There are 2 modes for entering an amount.\r\n // The normal mode is to shift the current amount over 1 to the left (multiple by 10)\r\n // then add the entered digit in the far right position.\r\n //\r\n // The other is decimal mode, where the integer portion has already been entered and the user enters\r\n // decimal digits left to right starting in the 1/10th's place.\r\n //\r\n // Normal mode is the default.\r\n // Decimal mode is entered when the user presses the decimal button,\r\n // which shifts the current amount to the left side of the decimal place.\r\n // The user can return to normal entering mode by backspacing away all decimal digits\r\n // and backspacing the decimal place.\r\n // This will shift the amount back to the right side, undoing the left shift from entering decimal mode.\r\n public handleAmountTendered = (button: string) => {\r\n // a speed key was used before, anything entered now will first clear the amount\r\n if (this.state.amountTenderedReset) {\r\n this.clearAmountTendered();\r\n }\r\n\r\n // a speed key was clicked, use the value of the speed key\r\n if (button.includes(\"$\")) {\r\n let amount = parseFloat(button.replace(\"$\", \"\"));\r\n amount = Math.min(amount, this.maxAmountTendered);\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces),\r\n amountTenderedDecimalMode: false,\r\n amountTenderedPosition: -CashCheck.decimalPlaces,\r\n amountTenderedReset: true\r\n });\r\n // user pressed the decimal button while in normal entering mode\r\n // shift the amount to the left side of the decimal place and enable decimal mode\r\n // decimal mode enters digits left to right, starting in the 1/10th's place, I.E. position = -1\r\n } else if (button == \".\") {\r\n if (!this.state.amountTenderedDecimalMode) {\r\n let amount =\r\n this.state.amountTendered * Math.pow(10, CashCheck.decimalPlaces);\r\n amount = Math.min(amount, this.maxAmountTendered);\r\n // if the maximum amount is reached when applying the right shift,\r\n // we need to set the cursor position to the far right end\r\n // so that backspacing the .99 decimals works correctly\r\n const position =\r\n amount == this.maxAmountTendered ? -CashCheck.decimalPlaces - 1 : -1;\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces),\r\n amountTenderedDecimalMode: true,\r\n amountTenderedPosition: position\r\n });\r\n }\r\n // a number key was pressed\r\n } else if (/[0-9]/.test(button)) {\r\n // need to handle the 00 key, so iterate over each digit in the button text\r\n for (let i = 0; i < button.length; i++) {\r\n const digit = Number(button.charAt(i));\r\n\r\n // if entering in decimal mode, place the digit at the current cursor position\r\n // but only if we have not run out of decimal places\r\n if (this.state.amountTenderedDecimalMode) {\r\n if (this.state.amountTenderedPosition >= -CashCheck.decimalPlaces) {\r\n let amount =\r\n this.state.amountTendered +\r\n digit * Math.pow(10, this.state.amountTenderedPosition);\r\n amount = Math.min(amount, this.maxAmountTendered);\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces),\r\n // move the cursor position over 1 to the right\r\n amountTenderedPosition: this.state.amountTenderedPosition - 1\r\n });\r\n }\r\n // if not in decimal mode, the cursor position should be at the far right\r\n // so any number entered should shift the current amount over to the left 1 decimal place\r\n // and the entered digit is added at the far right\r\n } else {\r\n let amount =\r\n 10 * this.state.amountTendered +\r\n digit * Math.pow(10, this.state.amountTenderedPosition);\r\n amount = Math.min(amount, this.maxAmountTendered);\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces)\r\n });\r\n }\r\n }\r\n } else if (button == \"{bksp}\") {\r\n // when in decimal mode, back space will either \"undo\" the decimal place\r\n // by shifting the current amount down to the far right\r\n // or remove the digit at the cursor position, which would be the right most digit entered\r\n if (this.state.amountTenderedDecimalMode) {\r\n // the cursor is not at the decimal place, so there are digits on the right side to remove yet\r\n if (this.state.amountTenderedPosition < -1) {\r\n // keep the left side of the decimal place\r\n const intPart = Math.floor(this.state.amountTendered);\r\n const decimalPart = this.state.amountTendered - intPart;\r\n // cut off the digit at the cursor position (and anything to the right of it)\r\n let amount =\r\n intPart +\r\n Math.floor(\r\n decimalPart *\r\n Math.pow(\r\n 10,\r\n -this.state.amountTenderedPosition - CashCheck.decimalPlaces\r\n )\r\n ) /\r\n Math.pow(\r\n 10,\r\n -this.state.amountTenderedPosition - CashCheck.decimalPlaces\r\n );\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces),\r\n amountTenderedPosition: this.state.amountTenderedPosition + 1\r\n });\r\n // the cursor is at the decimal place\r\n // so \"undo\" the shift done by the decimal place and reset the decimal mode to normal entering mode\r\n } else {\r\n let amount =\r\n this.state.amountTendered / Math.pow(10, CashCheck.decimalPlaces);\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces),\r\n amountTenderedDecimalMode: false,\r\n amountTenderedPosition: -CashCheck.decimalPlaces\r\n });\r\n }\r\n // in normal entering mode, shift the whole amount to the right\r\n // and remove the right most digit\r\n } else {\r\n let amount =\r\n Math.floor(\r\n this.state.amountTendered *\r\n Math.pow(10, CashCheck.decimalPlaces - 1)\r\n ) / Math.pow(10, CashCheck.decimalPlaces);\r\n this.setState({\r\n amountTendered: amount,\r\n amountTenderedDisplay: amount.toFixed(CashCheck.decimalPlaces)\r\n });\r\n }\r\n } else if (button == \"clear\") {\r\n this.clearAmountTendered();\r\n }\r\n };\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\" || button === \"{tab}\") {\r\n this.handleEnter();\r\n } else if (\r\n this.state.inputName === FocusedElement.AmountTendered.toString()\r\n ) {\r\n this.handleAmountTendered(button);\r\n }\r\n };\r\n\r\n public handleChange = () => {\r\n this.setState({\r\n creditChange: false,\r\n isRefund: false,\r\n amountTenderedError: !this.isValidAmount(this.state.amountTendered, false)\r\n });\r\n };\r\n\r\n public handleCredit = () => {\r\n this.setState({\r\n creditChange: true,\r\n isRefund: false,\r\n amountTenderedError: !this.isValidAmount(this.state.amountTendered, false)\r\n });\r\n };\r\n\r\n public handleRefund = () => {\r\n this.setState({\r\n creditChange: true,\r\n isRefund: true,\r\n isCash: true,\r\n amountTenderedError: !this.isValidAmount(this.state.amountTendered, true)\r\n });\r\n };\r\n\r\n public handleCardPopupClose = () => {\r\n this.setState({ isCardPopupOpen: false });\r\n clearTimeout(this.cardPopupTimer);\r\n };\r\n\r\n public handleCardPopupOpen = () => {\r\n const isValidAmount = this.isValidAmount(this.state.amountTendered, false);\r\n const newState = {\r\n ...this.state,\r\n isCardPopupOpen: true,\r\n isCash: true,\r\n checkNumber: \"\",\r\n checkNumberError: false,\r\n inputName: FocusedElement.AmountTendered.toString(),\r\n isCardAuthPopupOpen: isValidAmount,\r\n amountTenderedError: !isValidAmount,\r\n creditChange: !this.props.isCashTransaction\r\n };\r\n\r\n if (\r\n this.state.amountTendered < this.props.amountDue ||\r\n this.props.isCashTransaction\r\n ) {\r\n this.setAmountTendered(newState, this.props.amountDue);\r\n }\r\n\r\n this.setState(newState, () => {\r\n this.keyboardRef.current!.keyboard.setInput!(\r\n \"\",\r\n FocusedElement.CheckNumber.toString()\r\n );\r\n });\r\n\r\n this.cardPopupTimer = setTimeout(() => {\r\n this.handleCardPopupClose();\r\n }, this.timeoutLength);\r\n };\r\n\r\n public handleCardPresent = () => {\r\n this.handleCardPopupClose();\r\n this.setState({\r\n creditCardAuth: CreditCardAuthType.CardPresent\r\n });\r\n };\r\n\r\n public handleCardManualEntry = () => {\r\n this.handleCardPopupClose();\r\n this.setState({\r\n creditCardAuth: CreditCardAuthType.ManualEntry\r\n });\r\n };\r\n\r\n public handleCardClose = () => {\r\n this.setState({\r\n creditCardAuth: CreditCardAuthType.None,\r\n isCardAuthPopupOpen: false\r\n });\r\n };\r\n\r\n public handleCardResponse = () => {\r\n const { boltResponse } = this.props.rootStore.cardConnectStore;\r\n\r\n if (boltResponse) {\r\n const response = boltResponse!;\r\n this.setState({\r\n isCardAuthPopupOpen: false\r\n });\r\n\r\n if (response.respstat === \"A\") {\r\n this.setState({\r\n lastName: response.name,\r\n isCash: false,\r\n checkNumber: response.orderid\r\n });\r\n\r\n const credit: Credit = {\r\n amount: this.state.amountTendered,\r\n checkNumber: response.orderid,\r\n lastName: response.name,\r\n boltResponse,\r\n isCash: false,\r\n isRefund: false,\r\n comment: \"\"\r\n };\r\n\r\n this.props.completeTransaction({\r\n transactionType: TransactionType.CreditCard,\r\n credit\r\n });\r\n }\r\n }\r\n };\r\n\r\n public componentDidUpdate(_: Props, state: State) {\r\n if (state.isCash && !this.state.isCash && this.checkNumberRef.current) {\r\n setTimeout(() => {\r\n this.focusCheckNumber();\r\n }, 200);\r\n }\r\n }\r\n\r\n public render() {\r\n const canRefund = this.props.allowRefunds && !this.props.anyTransactions;\r\n const {\r\n isClosed,\r\n hide,\r\n rootStore: { terminalStore, transactionStore }\r\n } = this.props;\r\n\r\n const prepayLimitMet = transactionStore.getPrepaidLimitMet(\r\n transactionStore.allowCashLimitOffset ? this.state.amountTendered : 0\r\n );\r\n const hasChargeLimit = this.props.disableCharge || !!this.props.chargeLimit;\r\n const chargeLimit = this.props.disableCharge\r\n ? 0\r\n : this.props.chargeLimit || 0;\r\n const chargeLimitMet =\r\n hasChargeLimit &&\r\n this.state.amountTendered < this.props.amountDue &&\r\n this.props.accountAmount -\r\n this.props.amountDue +\r\n this.state.amountTendered <\r\n chargeLimit * -1;\r\n const noChargeMet =\r\n !!this.props.noChargeTotal &&\r\n this.state.amountTendered < this.props.noChargeTotal &&\r\n this.props.accountAmount +\r\n this.state.amountTendered -\r\n this.props.noChargeTotal <\r\n 0;\r\n const notEnoughCash =\r\n !this.state.creditChange &&\r\n this.state.amountTendered < this.props.amountDue;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n {this.state.greeting}\r\n {(!this.props.isCreditPatrons || canRefund) && (\r\n \r\n \r\n {!this.props.isCreditPatrons && (\r\n \r\n Change\r\n \r\n )}\r\n \r\n Credit\r\n \r\n {canRefund && (\r\n \r\n Refund\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 Current balance: \r\n {`$${this.props.accountAmount.toFixed(2)}`}\r\n
\r\n \r\n {this.state.creditChange\r\n ? \"New balance: \"\r\n : \"Change due: \"}\r\n \r\n {`$${\r\n this.state.isRefund\r\n ? (\r\n this.props.accountAmount - this.state.amountTendered\r\n ).toFixed(2)\r\n : this.state.creditChange\r\n ? (\r\n this.props.accountAmount -\r\n this.props.amountDue +\r\n this.state.amountTendered\r\n ).toFixed(2)\r\n : Math.max(\r\n this.state.amountTendered - this.props.amountDue,\r\n 0\r\n ).toFixed(2)\r\n }`}\r\n
\r\n {!this.props.isCreditPatrons && this.props.anyTransactions && (\r\n \r\n Amount due: \r\n {`$${this.props.amountDue.toFixed(2)}`}\r\n \r\n )}\r\n \r\n\r\n
\r\n \r\n \r\n Cash\r\n \r\n \r\n Check\r\n \r\n {terminalStore.hasBoltIntegration() ? (\r\n 0 &&\r\n this.state.amountTendered <\r\n this.props.amountDue) ||\r\n !this.props.rootStore.isOnline\r\n }\r\n basic={\r\n !this.state.isCardPopupOpen &&\r\n this.state.creditCardAuth ===\r\n CreditCardAuthType.None\r\n }\r\n primary={true}>\r\n CC\r\n \r\n }\r\n open={this.state.isCardPopupOpen}\r\n onClose={this.handleCardPopupClose}\r\n onOpen={this.handleCardPopupOpen}\r\n flowing={true}\r\n on=\"click\">\r\n \r\n \r\n \r\n Card\r\n
\r\n Present\r\n \r\n
\r\n \r\n \r\n Manual\r\n
\r\n Entry\r\n \r\n
\r\n
\r\n \r\n ) : null}\r\n
\r\n
\r\n \r\n \r\n {!this.state.isRefund && (\r\n \r\n )}\r\n {this.state.isRefund && (\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 Finish\r\n \r\n \r\n
\r\n \r\n {this.state.creditCardAuth !== CreditCardAuthType.None &&\r\n this.state.isCardAuthPopupOpen ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n private focusAmountTendered = () => {\r\n if (this.amountTenderedRef.current) {\r\n this.amountTenderedRef.current.focus();\r\n this.enterIndex = 0;\r\n }\r\n\r\n this.handleAmountTenderedFocus();\r\n };\r\n\r\n private focusCheckNumber = () => {\r\n if (this.checkNumberRef.current) {\r\n this.checkNumberRef.current.focus();\r\n this.enterIndex = 1;\r\n }\r\n\r\n this.handleCheckNumberFocus();\r\n };\r\n\r\n private focusLastName = () => {\r\n if (this.lastNameRef.current) {\r\n this.lastNameRef.current.focus();\r\n this.enterIndex = 2;\r\n }\r\n\r\n this.handleLastNameFocus();\r\n };\r\n\r\n private focusComment = () => {\r\n if (this.commentRef.current) {\r\n this.commentRef.current.focus();\r\n this.enterIndex = 3;\r\n }\r\n\r\n this.handleCommentFocus();\r\n };\r\n\r\n private getSpeedKeyValue = (\r\n type: SpeedKeyType,\r\n value: number,\r\n lunchPrice: number,\r\n breakfastPrice: number\r\n ): string => {\r\n switch (type) {\r\n case SpeedKeyType.Fixed:\r\n return `$${value.toFixed(2)}`;\r\n case SpeedKeyType.LunchMultiple:\r\n return lunchPrice ? `$${(lunchPrice * value).toFixed(2)}` : \"\";\r\n case SpeedKeyType.BreakfastMultiple:\r\n return breakfastPrice ? `$${(breakfastPrice * value).toFixed(2)}` : \"\";\r\n case SpeedKeyType.BreakfastLunchMultiple:\r\n return breakfastPrice || lunchPrice\r\n ? `$${((breakfastPrice + lunchPrice) * value).toFixed(2)}`\r\n : \"\";\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n private isValidAmount = (value: number, isRefund: boolean): boolean => {\r\n return (\r\n !isNaN(value) &&\r\n value <= 922337203685477.58 &&\r\n (!isRefund || value <= this.props.accountAmount)\r\n );\r\n };\r\n}\r\n\r\nexport default CashCheck;\r\n","import * as React from \"react\";\r\nimport { Label, SemanticSIZES } from \"semantic-ui-react\";\r\nimport { Allergy } from \"../../models/StudentModel\";\r\n\r\ninterface Props {\r\n allergies: Allergy[];\r\n size?: SemanticSIZES;\r\n}\r\n\r\nclass Allergies extends React.Component {\r\n public render() {\r\n const { allergies } = this.props;\r\n const { size } = this.props;\r\n\r\n if (allergies.length === 0) {\r\n return null;\r\n }\r\n\r\n return allergies!.map((x) => (\r\n \r\n {x.name}\r\n \r\n ));\r\n }\r\n}\r\n\r\nexport default Allergies;\r\n","import * as React from \"react\";\r\nimport { Grid, Image, Item, Table } from \"semantic-ui-react\";\r\nimport { Student } from \"../../models/StudentModel\";\r\nimport Text from \"../util/Text\";\r\nimport Allergies from \"./Allergies\";\r\nimport { Guid } from \"guid-typescript\";\r\nimport { inject } from \"mobx-react\";\r\nimport RootStore from \"../../stores/RootStore\";\r\n\r\ninterface Props {\r\n rootStore?: RootStore;\r\n showAllergies: boolean;\r\n isSmallDisplay: boolean;\r\n isCashCheckModal: boolean;\r\n isCreditPatrons: boolean;\r\n student: Student;\r\n customerID: string;\r\n}\r\n\r\nexport default inject(\"rootStore\")(\r\n ({\r\n showAllergies,\r\n isSmallDisplay,\r\n isCashCheckModal,\r\n student,\r\n customerID,\r\n rootStore\r\n }: Props) => {\r\n const imageFallback = (event: React.SyntheticEvent) => {\r\n event.currentTarget.src = \"./images/noPicture.png\";\r\n };\r\n\r\n let hidePOSPins = false;\r\n let hideBirthdates = false;\r\n if (\r\n rootStore != null &&\r\n rootStore!.terminalStore.terminalModel.terminalConfig != null\r\n ) {\r\n hidePOSPins =\r\n rootStore!.terminalStore.terminalModel.terminalConfig!.hidePOSPins;\r\n hideBirthdates =\r\n rootStore!.terminalStore.terminalModel.terminalConfig!.hideBirthdates;\r\n } else {\r\n hidePOSPins =\r\n rootStore!.terminalStore.terminalModel.terminalConfigurations.some(\r\n (c) => c.hidePOSPins\r\n );\r\n hideBirthdates =\r\n rootStore!.terminalStore.terminalModel.terminalConfigurations.some(\r\n (c) => c.hideBirthdates\r\n );\r\n }\r\n\r\n return (\r\n \r\n {!isSmallDisplay\r\n ? renderStudentName(\r\n student,\r\n showAllergies,\r\n false,\r\n isCashCheckModal,\r\n true\r\n )\r\n : null}\r\n {student.patronID ? (\r\n \r\n {!isSmallDisplay ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n {!isSmallDisplay\r\n ? null\r\n : renderStudentName(\r\n student,\r\n false,\r\n true,\r\n isCashCheckModal,\r\n false\r\n )}\r\n \r\n {student.schoolName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ID\r\n \r\n {student.patronNumber}\r\n \r\n {student.pospin ? (\r\n \r\n \r\n Pin\r\n \r\n \r\n {hidePOSPins\r\n ? \"*\".repeat(student.pospin.toString().length)\r\n : student.pospin}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n Grade\r\n \r\n {student.gradeLevel}\r\n \r\n {student.homeRoom &&\r\n (!isSmallDisplay ||\r\n (!student.birthDate && !student.pospin)) ? (\r\n \r\n \r\n Class\r\n \r\n {student.homeRoom}\r\n \r\n ) : null}\r\n {student.birthDate ? (\r\n \r\n \r\n BDay\r\n \r\n \r\n {hideBirthdates\r\n ? \"*\".repeat(\r\n student.birthDate.toString().length\r\n )\r\n : new Date(\r\n student.birthDate\r\n ).toLocaleDateString(\"en-US\", {\r\n day: \"numeric\",\r\n month: \"short\",\r\n year: \"numeric\"\r\n })}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isSmallDisplay && !student.patronID\r\n ? renderStudentName(student, false, true, false, false)\r\n : null}\r\n {showAllergies ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nconst renderStudentName = (\r\n student: Student,\r\n withPadding: boolean,\r\n isSmallDisplay: boolean,\r\n isCashCheckModal: boolean,\r\n centered: boolean\r\n) => {\r\n return (\r\n \r\n {`${student.firstName} ${student.lastName}`}\r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { Button, Grid, Header, Modal } from \"semantic-ui-react\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport { reaction } from \"mobx\";\r\n\r\ninterface Props {\r\n rootStore: RootStore;\r\n isManualEntry: boolean;\r\n totalAmount: number;\r\n onHide: () => void;\r\n onComplete: () => void;\r\n}\r\n\r\ninterface State {\r\n errorMessage: string;\r\n statusMessage: string;\r\n authInFlight: boolean;\r\n cancelInFlight: boolean;\r\n}\r\n\r\nclass CreditCardAuth extends React.Component {\r\n public state = {\r\n isDeclined: false,\r\n errorMessage: \"\",\r\n statusMessage: \"\",\r\n authInFlight: false,\r\n cancelInFlight: false\r\n };\r\n\r\n private mountReady: boolean = false;\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n }\r\n\r\n public componentDidMount() {\r\n const { cardConnectStore } = this.props.rootStore;\r\n this.mountReady = true;\r\n\r\n reaction(\r\n () => cardConnectStore.errorMessage,\r\n () => {\r\n if (this.mountReady) {\r\n const lowerMessage = cardConnectStore.errorMessage.toLowerCase();\r\n this.setState({ errorMessage: cardConnectStore.errorMessage });\r\n if (\r\n lowerMessage.indexOf(\"operation cancelled\") === 0 ||\r\n lowerMessage.indexOf(\"command cancelled\") === 0 ||\r\n (lowerMessage.indexOf(\"received status\") > 0 &&\r\n lowerMessage.indexOf(\"decline\") > 0 &&\r\n lowerMessage.indexOf(\"confirmresponse\") > 0)\r\n ) {\r\n this.handleCardCancel();\r\n }\r\n }\r\n }\r\n );\r\n reaction(\r\n () => cardConnectStore.statusMessage,\r\n () => {\r\n if (this.mountReady) {\r\n this.setState({ statusMessage: cardConnectStore.statusMessage });\r\n }\r\n }\r\n );\r\n reaction(\r\n () => cardConnectStore.approved,\r\n () => {\r\n if (this.mountReady && cardConnectStore.approved) {\r\n this.props.onComplete();\r\n }\r\n }\r\n );\r\n reaction(\r\n () => cardConnectStore.authInFlight,\r\n () => {\r\n if (this.mountReady) {\r\n this.setState({ authInFlight: cardConnectStore.authInFlight });\r\n }\r\n }\r\n );\r\n reaction(\r\n () => cardConnectStore.cancelInFlight,\r\n () => {\r\n if (this.mountReady) {\r\n this.setState({ cancelInFlight: cardConnectStore.cancelInFlight });\r\n }\r\n }\r\n );\r\n\r\n cardConnectStore.start(this.props.totalAmount, this.props.isManualEntry);\r\n }\r\n\r\n public componentWillUnmount() {\r\n const { cardConnectStore } = this.props.rootStore;\r\n this.mountReady = false;\r\n\r\n if (cardConnectStore.authInFlight) {\r\n cardConnectStore.cancelCard(false, null);\r\n }\r\n }\r\n\r\n public componentDidUpdate(_: Props, state: State) {\r\n //\r\n }\r\n\r\n public handleCardRetry = () => {\r\n const { cardConnectStore } = this.props.rootStore;\r\n cardConnectStore.restart();\r\n };\r\n\r\n public handleCardCancel = () => {\r\n const { cardConnectStore } = this.props.rootStore;\r\n cardConnectStore.statusMessage = \"\";\r\n cardConnectStore.errorMessage = \"\";\r\n\r\n if (cardConnectStore.authInFlight) {\r\n cardConnectStore.cancelCard(false, this.props.onHide);\r\n } else {\r\n this.props.onHide();\r\n }\r\n };\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n {this.props.isManualEntry\r\n ? \"Credit Card Manual Entry\"\r\n : \"Credit Card Authorization\"}{\" \"}\r\n for {`$${this.props.totalAmount.toFixed(2)}`}\r\n
\r\n \r\n {!!this.state.errorMessage ? (\r\n {this.state.errorMessage}\r\n ) : (\r\n {this.state.statusMessage}\r\n )}\r\n \r\n
\r\n
\r\n \r\n \r\n Cancel\r\n \r\n {!!this.state.errorMessage ? (\r\n \r\n ) : null}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default CreditCardAuth;\r\n","import { IObservableArray, observable } from \"mobx\";\r\nimport { SemanticCOLORS } from \"semantic-ui-react\";\r\nimport SalesItemHeader from \"./SalesItemModel\";\r\nimport { PosPos, PosTransaction } from \"./TransactionModel\";\r\nimport { getToday } from \"../utils\";\r\n\r\nexport enum FoodType {\r\n FoodBased = 0,\r\n NutrientBased = 1\r\n}\r\n\r\nexport enum SessionType {\r\n Breakfast = 1,\r\n Lunch = 2,\r\n Administration = 3,\r\n Snack = 4\r\n}\r\n\r\nexport enum ItemGroupType {\r\n Meal = 1,\r\n AlaCarte = 2,\r\n SecondMeal = 3,\r\n NonReimbMeal = 4,\r\n ReimbSnack = 5,\r\n ReimbMilk = 6\r\n}\r\n\r\nexport interface Building {\r\n siteID: number;\r\n schoolName: string;\r\n}\r\n\r\nexport interface Holiday {\r\n calendarHolidayID: number;\r\n schoolYear: number;\r\n SchoolYearDescription: string;\r\n startDate: Date;\r\n endDate: Date;\r\n description: string;\r\n}\r\n\r\nexport interface CloseMonths {\r\n year: number;\r\n month: number;\r\n closed: boolean;\r\n}\r\n\r\nexport interface GradeLevel {\r\n id?: number;\r\n description: string;\r\n}\r\n\r\nexport interface Homeroom {\r\n id?: number;\r\n description: string;\r\n}\r\n\r\nexport interface SpeedKeysConfig {\r\n terminalSpeedKeyID: number;\r\n terminalConfigurationEntityTypeID: number;\r\n terminalConfigurationEntityID: number;\r\n key1POS_SpeedKeyTypeID: number;\r\n key1Value: number;\r\n key2POS_SpeedKeyTypeID: number;\r\n key2Value: number;\r\n key3POS_SpeedKeyTypeID: number;\r\n key3Value: number;\r\n key4POS_SpeedKeyTypeID: number;\r\n key4Value: number;\r\n createdBy: number;\r\n createdByDate: Date;\r\n lastUpdatedBy: number;\r\n lastUpdatedDate: Date;\r\n}\r\n\r\nexport interface PosLayout {\r\n posLayoutID: number;\r\n vendingTypeID?: number;\r\n vendingTypeName: string;\r\n description: string;\r\n alphaBlend: number;\r\n active: boolean;\r\n useCategoryColors: boolean;\r\n lastUpdatedBy: number;\r\n lastUpdatedDate: Date;\r\n pages: PosLayoutPage[];\r\n items: PosLayoutItem[];\r\n}\r\n\r\nexport interface PosLayoutPage {\r\n posLayoutPageID: number;\r\n posLayoutPageGUID: string;\r\n posLayoutID: number;\r\n number: number;\r\n name: string;\r\n lastUpdatedBy: number;\r\n lastUpdatedDate: Date;\r\n}\r\n\r\nexport interface PosLayoutItem {\r\n posLayoutItemID: number;\r\n posLayoutItemGUID: string;\r\n posLayoutID: number;\r\n keyNumber: number;\r\n salesItemHeaderID?: number;\r\n salesItemHeaderPOSDescription: string;\r\n salesItemHeaderDescription: string;\r\n pricingGroupID?: number;\r\n pricingGroupDescription: string;\r\n patronTypeID: number | null;\r\n patronTypeDescription: string;\r\n color?: number;\r\n fontColor?: number;\r\n semanticColor: SemanticCOLORS;\r\n keyLabel: string;\r\n goToPage?: number;\r\n goToPageName: string;\r\n isAlternateItem: boolean;\r\n salesItemCategoryID: number;\r\n allowBulkEntry: boolean;\r\n allowRateUpdate: boolean;\r\n defaultEligibilityStatusID: number | null;\r\n}\r\n\r\nexport interface PriceDate {\r\n effectiveDateID: number;\r\n effectiveDate: Date;\r\n}\r\n\r\nexport interface SalesItemPrice {\r\n salesItemPriceID: number;\r\n salesItemPriceGUID: string;\r\n salesItemHeaderID: number;\r\n patronTypeID?: number;\r\n patronType: string;\r\n pricingGroupID?: number;\r\n pricingGroup: string;\r\n effectiveDateID: number;\r\n effectiveDateDescription: string;\r\n effectiveDate: Date;\r\n paidPrice: number;\r\n reducedPrice: number;\r\n paidPrice2?: number;\r\n reducedPrice2?: number;\r\n freePrice2?: number;\r\n}\r\n\r\nexport interface SalesItemSetup {\r\n adjustSalesItem: number;\r\n allowMealCombiningComponent: boolean;\r\n allowMealCombiningForAllPatronTypes: boolean;\r\n balanceTransferSalesItem: number;\r\n beginningBalanceSalesItem: number;\r\n breakfastMultiplier: number;\r\n cashSalesItem: number;\r\n checkSalesItem: number;\r\n creditCardSalesItem: number;\r\n creditPatronCheckSalesItem: number;\r\n creditSalesItem: number;\r\n earnedBreakfastSalesItems: number;\r\n earnedLunchSalesItem: number;\r\n enterDailyAttendance: boolean;\r\n foodType: FoodType;\r\n glOversAcct: number;\r\n glPostingType: string;\r\n includeAdultsForDashboard: boolean;\r\n isBreakfastToMeal: boolean;\r\n isEligibilityCounts: boolean;\r\n isLaborHours: boolean;\r\n multipleMealResolverEngineEnabled: boolean;\r\n onlinePaymentSalesItem: number;\r\n overShortAccountNumber: string;\r\n prepaidSalesItem: number;\r\n pricingOfSecondMeal: number;\r\n refundSalesItem: number;\r\n salesItemSetupID: number;\r\n snackMultiplier: number;\r\n useProvisionCounts: boolean;\r\n boltIdleMessage: string;\r\n boltMID: string;\r\n}\r\n\r\nexport interface SalesItemFoodGroup {\r\n salesItemFoodGroupID: number;\r\n foodGroupID: number;\r\n description: string;\r\n salesItemHeaderID: number;\r\n count: number;\r\n}\r\n\r\nexport interface AutoItem {\r\n layoutItem: PosLayoutItem;\r\n salesItem: SalesItemHeader;\r\n}\r\n\r\nexport interface PosSession {\r\n servingDay: string;\r\n sessionID: number;\r\n userID: number;\r\n terminalID: number;\r\n schoolID: number;\r\n posSessionGUID: string;\r\n beginAmount?: number;\r\n endAmount?: number;\r\n loginTime: Date;\r\n logoutTime?: Date;\r\n clientName?: string;\r\n windowsUser?: string;\r\n operatingSystem: string;\r\n posPos?: PosPos[];\r\n}\r\n\r\nexport interface Terminal {\r\n terminalID: number;\r\n terminalNumber: number;\r\n terminalName: string;\r\n active: boolean;\r\n siteID: number;\r\n schoolTypeID: number;\r\n schoolID: number;\r\n schoolName: string;\r\n clientName: string;\r\n terminalTypeID: number;\r\n terminalTypeName: string;\r\n localStorageLimit: number;\r\n boltTerminalHSN: string;\r\n siteActive: boolean;\r\n}\r\n\r\nexport interface TerminalConfiguration {\r\n terminalConfigurationID: number;\r\n terminalConfigurationEntityTyped: number;\r\n terminalConfigurationEntityID: number;\r\n vendingTypeID: number | undefined;\r\n vendingTypeName: string;\r\n sessionID: number | undefined;\r\n sessionName: string;\r\n posLayoutID: number | undefined;\r\n posLayoutDescription: string;\r\n posLayoutKeyForAutoServeID: number | undefined;\r\n popuptAlertMesssage: boolean;\r\n popupPreviouslyServed: boolean;\r\n bufferedServing: boolean;\r\n endingCash: boolean;\r\n useCashCountPrompts: boolean;\r\n showMealPrice: boolean;\r\n beginingCash: boolean;\r\n useShortcutKeys: boolean;\r\n showBalance: number;\r\n quickSale: boolean;\r\n paymentReciepts: boolean;\r\n purchaseRecipts: boolean;\r\n paymentReminders: boolean;\r\n pinIsPrimary: boolean;\r\n hidePOSPins: boolean;\r\n hideBirthdates: boolean;\r\n enforceServingTime: boolean;\r\n allowCredits: boolean;\r\n allowRefunds: boolean;\r\n allowVisitingPatrons: boolean;\r\n allowAdultVisitingPatrons: boolean;\r\n autoCharge: boolean;\r\n chargeOverridePassword: string;\r\n deleteOverridePassword: string;\r\n reasonForDelete: boolean;\r\n cardPrefix: string;\r\n cardSuffix: string;\r\n cardLength: number;\r\n addItems: boolean;\r\n useAlternateSalesItem: boolean;\r\n requireBirthDate: boolean;\r\n lastUpdatedBy: number;\r\n lastUpdatedDate: Date;\r\n createdBy: number;\r\n createdDate: Date;\r\n terminalTimeout: number;\r\n creditChange: boolean;\r\n confirmCharge: boolean;\r\n showPhotosInBuffer: boolean;\r\n bufferRows: number;\r\n requireCheckNumber: boolean;\r\n enableMinimize: boolean;\r\n disableQuickCashOnFunds: boolean;\r\n disablePatronQuickCash: boolean;\r\n popupLowCreditWarning: boolean;\r\n popupOnAlternateItem: boolean;\r\n disableEarned: boolean;\r\n confirmAdditionalItem: boolean;\r\n returnToMenuTop: boolean;\r\n keyOpensSearch: boolean;\r\n hideReimbursableItemPrices: boolean;\r\n configurationType: string;\r\n configuration: string;\r\n disablePatronIdSearch: boolean;\r\n disableVisitingStudentPrompt: boolean;\r\n overrideSessionTime: boolean;\r\n startTime: Date | undefined;\r\n endTime: Date | undefined;\r\n sessionTimeOverridePassword: string;\r\n searchPatronByName: number;\r\n popupBonusMeal: boolean;\r\n hideTransactionDetailWhenQuickSale: boolean;\r\n hideEndBalanceAndTransTotals: boolean;\r\n allowAdultEarnedOnly: boolean;\r\n showBreakfastMessage: boolean;\r\n showLunchMessage: boolean;\r\n breakfastEnoughFunds: boolean;\r\n breakfastNotEnoughFunds: boolean;\r\n lunchEnoughFunds: boolean;\r\n lunchNotEnoughFunds: boolean;\r\n kioskTimeout: number;\r\n showKioskBalance: boolean;\r\n balanceKioskPosPinIsPrimary: boolean;\r\n displayPaymentReminder: boolean;\r\n isBalancekiosk: boolean;\r\n breakfastSalesItemHeaderID: number | undefined;\r\n lunchSalesItemHeaderID: number | undefined;\r\n mealCounter: boolean;\r\n mealCounterStudentItemID?: number;\r\n mealCounterNonStudentItemID?: number;\r\n parentAlertLowBalanceOnly: boolean;\r\n enableSoundsInWebPOS: boolean;\r\n useCategories: boolean;\r\n grabNGoPOSLayoutID: number;\r\n cashCounterCheck: boolean;\r\n grabNGoAutoItems: PosTerminalConfigGrabNGoAutoItemDTO[];\r\n isGrabNGo: boolean;\r\n showConfettiOnBirthday: boolean;\r\n hideKeyboard: boolean;\r\n birthdaySoundID: number;\r\n hideServedStudents: boolean;\r\n}\r\n\r\nexport interface PatronTransaction {\r\n displayText: string;\r\n transactionInfo: TransactionInfo;\r\n}\r\n\r\nexport interface TransactionInfo {\r\n posTransactions: PosTransaction[];\r\n posSession: PosSession;\r\n}\r\n\r\nexport interface PosTerminalConfigGrabNGoAutoItemDTO {\r\n posTerminalConfigGrabNGoAutoItemID: number;\r\n terminalConfigurationID: number;\r\n dsSessionID: number;\r\n sessionDescription: string;\r\n layoutItemKeyNumber: number;\r\n isSunday: boolean;\r\n isMonday: boolean;\r\n isTuesday: boolean;\r\n isWednesday: boolean;\r\n isThursday: boolean;\r\n isFriday: boolean;\r\n isSaturday: boolean;\r\n}\r\n\r\nexport interface TerminalChargeLimit {\r\n terminalChargeLimitID: number;\r\n schoolID?: number;\r\n schoolTypeID?: number;\r\n patronTypeID?: number;\r\n patronType?: string;\r\n balanceTypeID?: number;\r\n balanceType: string;\r\n sharedAccount: boolean;\r\n sharedAccountMultiplier: boolean;\r\n freeChargeLimit: number | null;\r\n freeWarningLimit: number | null;\r\n reducedChargeLimit: number | null;\r\n reducedWarningLimit: number | null;\r\n paidChargeLimit: number | null;\r\n paidWarningLimit: number | null;\r\n freeChargeWarning: number | null;\r\n reducedChargeWarning: number | null;\r\n paidChargeWarning: number | null;\r\n eligibilityDaysInFuture: number;\r\n}\r\n\r\nexport interface TerminalPosLimit {\r\n terminalPosLimitID: number;\r\n schoolID?: number;\r\n schoolTypeID?: number;\r\n patronTypeID?: number;\r\n itemGroupTypeID?: number;\r\n itemGroupTypeName: string;\r\n allowBonusItems: boolean;\r\n disableCharge: boolean;\r\n freePrepaidLimit: number | null;\r\n freePurchaseLimit: number | null;\r\n reducedPrepaidLimit: number | null;\r\n reducedPurchaseLimit: number | null;\r\n paidPrepaidLimit: number | null;\r\n paidPurchaseLimit: number | null;\r\n}\r\n\r\nexport interface PricingGroup {\r\n pricingGroupID: number;\r\n patronTypeID: number;\r\n schools: number[];\r\n grades: number[];\r\n}\r\n\r\nexport interface Session {\r\n sessionID: number;\r\n description: string;\r\n startTime: Date;\r\n endTime: Date;\r\n separateCashCount: boolean;\r\n separateCashDefault: boolean;\r\n sortOrder: number;\r\n terminalConfigurationID: number;\r\n posLayoutID: number;\r\n gngPosLayoutID: number;\r\n isSeparateCashCount: boolean;\r\n}\r\n\r\nexport interface MealCombination {\r\n mealCombinationID: number;\r\n sessionID: number;\r\n sessionDescription: string;\r\n configurationTypeID: number;\r\n configurationTypeText: string;\r\n foodTypeID: number;\r\n foodTypeText: string;\r\n schoolTypeID: number | null;\r\n schoolTypeDescription: string;\r\n gradeLevelID: number | null;\r\n gradeLevelDescription: string;\r\n includeEntreeCostForTotal: boolean | null;\r\n itemsOffered: number;\r\n itemsCanBeDeclined: number;\r\n prices: MealCombinationPrice[];\r\n components: MealCombinationComponent[];\r\n}\r\n\r\nexport interface MealCombinationPrice {\r\n mealCombinationPriceID: number;\r\n mealCombinationID: number;\r\n price: number;\r\n salesItemHeaderID: number;\r\n}\r\n\r\nexport interface MealCombinationComponent {\r\n mealCombinationComponentID: number;\r\n mealCombinationID: number;\r\n foodGroupID: number;\r\n isRequired: boolean;\r\n maxNumberAllowed: number | null;\r\n foodGroupDescription: string;\r\n}\r\n\r\nexport interface SessionOverrideSettings {\r\n AutoItemKeys: Record;\r\n QuickSale: Record;\r\n UseAutoItem: Record;\r\n}\r\n\r\nexport default class TerminalModel {\r\n @observable\r\n public isClosed: boolean = false;\r\n @observable\r\n public closedMonths: IObservableArray = observable.array([]);\r\n @observable\r\n public pricingGroups?: PricingGroup[];\r\n @observable\r\n public isBuildingSelect: boolean = true;\r\n @observable\r\n public isCreditPatrons: boolean = false;\r\n @observable\r\n public isTransactionHistory: boolean = false;\r\n @observable\r\n public isTransactionSearch: boolean = false;\r\n @observable\r\n public isTerminalSelect: boolean = true;\r\n @observable\r\n public isTerminalSwitch: boolean = false;\r\n @observable\r\n public buildings: IObservableArray = observable.array([]);\r\n @observable\r\n public serviceDate: Date = getToday();\r\n @observable\r\n public posLayout?: PosLayout;\r\n @observable\r\n public sessions: IObservableArray = observable.array([]);\r\n @observable\r\n public sessionID: number = 0;\r\n @observable\r\n public terminals: IObservableArray = observable.array([]);\r\n @observable\r\n public terminal?: Terminal;\r\n @observable\r\n public terminalConfig?: TerminalConfiguration;\r\n @observable\r\n public priceDates: PriceDate[] = observable.array([]);\r\n @observable\r\n public salesItemHeaders?: IObservableArray = observable.array(\r\n []\r\n );\r\n @observable\r\n public chargeLimits: IObservableArray = observable.array(\r\n []\r\n );\r\n @observable\r\n public posLimits: IObservableArray = observable.array([]);\r\n @observable\r\n public salesItemSetup?: SalesItemSetup;\r\n @observable\r\n public gradeLevels: GradeLevel[] = [];\r\n @observable\r\n public homerooms: Homeroom[] = [];\r\n @observable\r\n public speedKeys?: SpeedKeysConfig;\r\n @observable\r\n public lunchSalesHeaderID: number = 0;\r\n @observable\r\n public breakfastSalesHeaderID: number = 0;\r\n\r\n public mealCombining: MealCombination[] = [];\r\n public terminalConfigurations: TerminalConfiguration[] = [];\r\n public posLayouts: PosLayout[] = [];\r\n public holidays: Holiday[] = [];\r\n public paymentReminders: any = [];\r\n public salesItemCategories: any = [];\r\n}\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Button, Grid, Dimmer, Loader } from \"semantic-ui-react\";\r\nimport TransactionStore from \"../../stores/TransactionStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport FlexContent from \"../util/FlexContent\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport SalesItemHeader from \"../../models/SalesItemModel\";\r\n\r\ninterface Props {\r\n transactionStore: TransactionStore;\r\n terminalStore: TerminalStore;\r\n studentStore: StudentStore;\r\n}\r\n\r\n@observer\r\nclass MealCounter extends React.Component {\r\n public componentDidMount() {\r\n this.props.transactionStore.getSessionCounts();\r\n }\r\n\r\n public backClicked = async () => {\r\n this.props.studentStore.clearPreviousStudent();\r\n await this.props.terminalStore.changeSession();\r\n };\r\n\r\n public submitStudentTranaction(salesItem: SalesItemHeader) {\r\n this.props.transactionStore.submitCountTransaction(true, salesItem);\r\n }\r\n\r\n public submitNonStudentTranaction(salesItem: SalesItemHeader) {\r\n this.props.transactionStore.submitCountTransaction(false, salesItem);\r\n }\r\n\r\n public render() {\r\n const {\r\n transactionStore: { sessionCounts, transactionProcessing },\r\n terminalStore: { terminalModel }\r\n } = this.props;\r\n\r\n const studentSalesItem = terminalModel.salesItemHeaders!.find(\r\n (x) =>\r\n x.salesItemHeaderID ===\r\n terminalModel.terminalConfig!.mealCounterStudentItemID!\r\n );\r\n\r\n const nonStudentSalesItem = terminalModel.salesItemHeaders!.find(\r\n (x) =>\r\n x.salesItemHeaderID ===\r\n terminalModel.terminalConfig!.mealCounterNonStudentItemID!\r\n );\r\n\r\n if (!sessionCounts) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n Loading…\r\n \r\n \r\n \r\n \r\n {studentSalesItem ? (\r\n \r\n \r\n Student\r\n \r\n Served: {sessionCounts.studentTransactionCount}\r\n \r\n ) : null}\r\n {nonStudentSalesItem ? (\r\n \r\n \r\n Non-Student\r\n \r\n Served: {sessionCounts.nonStudentTransactionCount}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nexport default MealCounter;\r\n","import * as React from \"react\";\r\nimport { Button, Header, Icon, Modal } from \"semantic-ui-react\";\r\nimport { Student } from \"../../models/StudentModel\";\r\nimport Text from \"../util/Text\";\r\nimport Allergies from \"./Allergies\";\r\n\r\ninterface Props {\r\n open: boolean;\r\n student: Student;\r\n isLowCredit: boolean;\r\n isParentAlert: boolean;\r\n isVisitingAlert: boolean;\r\n popupAlertMessage: boolean;\r\n handleShowPopup: () => void;\r\n handleCancelPopup: () => void;\r\n}\r\n\r\nexport default ({\r\n open,\r\n student,\r\n isLowCredit,\r\n isParentAlert,\r\n isVisitingAlert,\r\n popupAlertMessage,\r\n handleShowPopup,\r\n handleCancelPopup\r\n}: Props) => {\r\n return (\r\n \r\n {!isLowCredit && !isVisitingAlert && student.allergies.length > 0 ? (\r\n \r\n \r\n
Allergies
\r\n \r\n
\r\n
\r\n ) : null}\r\n {!isLowCredit &&\r\n !isVisitingAlert &&\r\n popupAlertMessage &&\r\n student.alertMessage ? (\r\n \r\n \r\n
Alert Message
\r\n \r\n {student.alertMessage}\r\n \r\n
\r\n
\r\n ) : null}\r\n {isParentAlert ? (\r\n \r\n \r\n
Parent Alert Message
\r\n \r\n {student.parentAlertMessage}\r\n \r\n
\r\n
\r\n ) : null}\r\n {isLowCredit ? (\r\n \r\n \r\n
Low Credit Warning
\r\n Credit is low.\r\n
\r\n
\r\n ) : null}\r\n {isVisitingAlert && student ? (\r\n \r\n \r\n
Visiting Patron
\r\n \r\n Is {student.schoolName}\r\n
#{student.patronNumber} {student.firstName}{\" \"}\r\n {student.lastName} a visiting patron?\r\n
\r\n
\r\n
\r\n ) : null}\r\n {isVisitingAlert && student ? (\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 * as React from \"react\";\r\nimport { Icon, Table } from \"semantic-ui-react\";\r\nimport { ShowBalance } from \"../../stores/TransactionStore\";\r\nimport Text from \"../util/Text\";\r\n\r\ninterface Props {\r\n chargeLimit: number | null;\r\n lowBalanceLimit: number | null;\r\n startingBalance: number;\r\n totalSale: number;\r\n showBalance: number;\r\n hasChargeOverride: boolean;\r\n hideEndingBalance: boolean;\r\n}\r\n\r\ninterface State {\r\n showBalance: boolean;\r\n}\r\n\r\nclass StudentBalance extends React.Component {\r\n public state = {\r\n showBalance:\r\n this.props.showBalance === ShowBalance.Always ||\r\n (this.props.showBalance === ShowBalance.WhenLow &&\r\n this.props.lowBalanceLimit !== null &&\r\n this.props.startingBalance <= this.props.lowBalanceLimit)\r\n };\r\n\r\n public handleBalanceClick = () => {\r\n this.setState((prevState) => ({ showBalance: !prevState.showBalance }));\r\n };\r\n\r\n public render() {\r\n const { chargeLimit, startingBalance, totalSale, hasChargeOverride } =\r\n this.props;\r\n\r\n let endingBalance = startingBalance - totalSale;\r\n\r\n if (chargeLimit !== null && endingBalance < 0 && !hasChargeOverride) {\r\n endingBalance =\r\n Math.abs(endingBalance) > chargeLimit\r\n ? -1 * chargeLimit\r\n : endingBalance;\r\n\r\n if (endingBalance > startingBalance) {\r\n endingBalance = startingBalance;\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n
Student's balance
\r\n {!this.state.showBalance ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {this.state.showBalance ? (\r\n \r\n \r\n Starting balance\r\n \r\n {startingBalance < 0 ? (\r\n {`- $${Math.abs(startingBalance).toFixed(\r\n 2\r\n )}`}\r\n ) : (\r\n `$${startingBalance.toFixed(2)}`\r\n )}\r\n \r\n \r\n {!this.props.hideEndingBalance ? (\r\n \r\n Ending balance\r\n \r\n {endingBalance < 0 ? (\r\n {`- $${Math.abs(endingBalance).toFixed(\r\n 2\r\n )}`}\r\n ) : (\r\n `$${endingBalance.toFixed(2)}`\r\n )}\r\n \r\n \r\n ) : null}\r\n \r\n ) : null}\r\n {this.state.showBalance ? (\r\n \r\n \r\n
\r\n
 
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default StudentBalance;\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport { Button, Input, Modal } from \"semantic-ui-react\";\r\n\r\ninterface Props {\r\n startingText: string;\r\n label: string;\r\n description: string;\r\n placeholder: string;\r\n keyboardLayout: string[];\r\n show: boolean;\r\n dimmer?: any;\r\n updateValue: (input: string) => void;\r\n validate: (input: string, button: string) => boolean;\r\n close: () => void;\r\n}\r\n\r\ninterface State {\r\n input: string;\r\n layoutName: string;\r\n inputName: string;\r\n layout: any;\r\n}\r\n\r\nconst layoutName = \"layoutName\";\r\nconst inputName = \"inputName\";\r\nconst layout = \"layout\";\r\n\r\n@observer\r\nclass InputPopup extends React.Component {\r\n private keyboardRef: React.RefObject;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.keyboardRef = React.createRef();\r\n\r\n const state = {};\r\n state[layoutName] = \"default\";\r\n state[layout] = {\r\n default: this.props.keyboardLayout\r\n };\r\n state[inputName] = \"input\";\r\n state[\"input\"] = this.props.startingText;\r\n this.state = state as State;\r\n }\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{bksp}\") {\r\n this.setState({\r\n input: this.state.input.substring(0, this.state.input.length - 1)\r\n });\r\n } else if (button === \"clear\") {\r\n this.setState({ input: \"\" });\r\n } else if (this.props.validate(this.state.input, button)) {\r\n this.setState({ input: this.state.input + button });\r\n }\r\n };\r\n\r\n public clear = () => {\r\n this.setState({ input: \"\" });\r\n };\r\n\r\n public render() {\r\n const { show, close, updateValue, label, description, dimmer } = this.props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {description}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {\r\n updateValue(this.state.input);\r\n this.clear();\r\n }}\r\n />\r\n \r\n \r\n
\r\n {\r\n this.setState({ conflictingEligibilityAlertOpen: false });\r\n }}\r\n />\r\n \r\n );\r\n }\r\n}\r\nexport default SalesItemButton;\r\n","import * as React from \"react\";\r\nimport { Table } from \"semantic-ui-react\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\ninterface Props {\r\n amountTendered?: number;\r\n changeDue?: number | string;\r\n completedTotalSale?: number;\r\n creditAmount?: number;\r\n refundAmount?: number;\r\n totalSale?: number;\r\n newBalance?: number;\r\n isGrabNGo?: boolean;\r\n size?: \"small\" | \"large\" | undefined;\r\n}\r\n\r\nexport default observer(\r\n ({\r\n amountTendered,\r\n changeDue,\r\n completedTotalSale,\r\n creditAmount,\r\n refundAmount,\r\n totalSale,\r\n newBalance,\r\n isGrabNGo,\r\n size\r\n }: Props) => (\r\n \r\n {totalSale !== undefined ? (\r\n \r\n \r\n Total sale\r\n {`$${totalSale.toFixed(\r\n 2\r\n )}`}\r\n \r\n \r\n ) : null}\r\n \r\n {completedTotalSale !== undefined && !isGrabNGo ? (\r\n \r\n \r\n Total Sale\r\n \r\n {`$${completedTotalSale.toFixed(2)}`}\r\n \r\n ) : null}\r\n {amountTendered !== undefined && !isGrabNGo ? (\r\n \r\n \r\n Amount Tendered\r\n \r\n {`$${amountTendered.toFixed(2)}`}\r\n \r\n ) : null}\r\n {changeDue !== undefined ? (\r\n \r\n \r\n Change Due\r\n \r\n \r\n {typeof changeDue === \"string\"\r\n ? changeDue\r\n : `$${changeDue.toFixed(2)}`}\r\n \r\n \r\n ) : null}\r\n {creditAmount !== undefined ? (\r\n \r\n \r\n Credit Amount\r\n \r\n {`$${creditAmount.toFixed(2)}`}\r\n \r\n ) : null}\r\n {refundAmount !== undefined ? (\r\n \r\n \r\n Refund Amount\r\n \r\n {`$${refundAmount.toFixed(2)}`}\r\n \r\n ) : null}\r\n {newBalance !== undefined ? (\r\n \r\n \r\n New Balance\r\n \r\n {`$${newBalance.toFixed(2)}`}\r\n \r\n ) : null}\r\n \r\n \r\n )\r\n);\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Icon, Label, Tab } from \"semantic-ui-react\";\r\nimport TransactionStore from \"../../stores/TransactionStore\";\r\nimport Text from \"../util/Text\";\r\nimport { SemanticCOLORS } from \"semantic-ui-react/dist/commonjs/generic\";\r\n\r\ninterface Props {\r\n categoryDescription?: string;\r\n transactionStore: TransactionStore;\r\n categoryColor?: SemanticCOLORS;\r\n salesItemCategoryId?: number;\r\n selectCategory?: any;\r\n categoryActive: boolean;\r\n}\r\n\r\ninterface State {\r\n popupOpen: boolean;\r\n altItemAlertOpen: boolean;\r\n}\r\n\r\n@observer\r\nclass CategoryTab extends React.Component {\r\n public state = {\r\n popupOpen: false,\r\n altItemAlertOpen: false\r\n };\r\n public timeoutLength = 1000;\r\n public timeout?: NodeJS.Timeout;\r\n\r\n public handleOpen = () => {\r\n this.setState({ popupOpen: true });\r\n\r\n this.timeout = setTimeout(() => {\r\n this.setState({ popupOpen: false });\r\n }, this.timeoutLength);\r\n };\r\n\r\n public handleClose = () => {\r\n this.setState({ popupOpen: false });\r\n\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n this.timeout = undefined;\r\n }\r\n };\r\n\r\n public selectCategory = () => {\r\n this.props.selectCategory(\r\n !this.props.categoryActive,\r\n this.props.salesItemCategoryId\r\n );\r\n };\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n {this.props.categoryDescription}\r\n \r\n {this.props.categoryActive ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n}\r\nexport default CategoryTab;\r\n","import { toJS } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect } from \"react-router\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Divider,\r\n Grid,\r\n Header,\r\n Icon,\r\n Input,\r\n Label,\r\n Loader,\r\n Modal,\r\n Segment\r\n} from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport TransactionStore, {\r\n Transaction,\r\n TransactionType\r\n} from \"../../stores/TransactionStore\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport StudentAlert from \"../student/StudentAlert\";\r\nimport StudentBalance from \"../student/StudentBalance\";\r\nimport StudentCard from \"../student/StudentCard\";\r\nimport StudentTransactions from \"../student/StudentTransactions\";\r\nimport BottomMenu from \"../util/BottomMenu\";\r\nimport FlexContent from \"../util/FlexContent\";\r\nimport FlexSpacer from \"../util/FlexSpacer\";\r\nimport CashCheck from \"./CashCheck\";\r\nimport SalesItemButton from \"./SalesItemButton\";\r\nimport TotalSale from \"./TotalSale\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport { PosLayoutItem } from \"../../models/TerminalModel\";\r\nimport CategoryTab from \"./CategoryTab\";\r\nimport Confetti from \"react-confetti\";\r\n\r\ninterface Props {\r\n authStore: AuthStore;\r\n terminalStore: TerminalStore;\r\n studentStore: StudentStore;\r\n transactionStore: TransactionStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n showAlert: boolean;\r\n showPopup: boolean;\r\n showParentPopup: boolean;\r\n showCashCheck: boolean;\r\n showCancel: boolean;\r\n showLowCreditWarning: boolean;\r\n showChargeOverride: boolean;\r\n showChargeConfirm: boolean;\r\n showAlaCarteLimitCount: number;\r\n invalidChargePassword: boolean;\r\n chargeOverridePassword: string;\r\n layoutName: string;\r\n layout: any;\r\n bufferValue: string;\r\n filteredCategoryID?: number;\r\n isEndTransaction: boolean;\r\n}\r\n\r\n@observer\r\nclass MealService extends React.Component {\r\n private keyboardRef: React.RefObject;\r\n public chargeOverrideBox: React.RefObject;\r\n private keyboardUtils: KeyboardUtils;\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n this.chargeOverrideBox = React.createRef();\r\n const showParentPopup = this.props.studentStore.isShowParentAlertPopup;\r\n const showPopup =\r\n showParentPopup || this.props.studentStore.isShowAlertPopup;\r\n const showLowCreditWarning = this.props.studentStore.isLowCreditPopup;\r\n this.state = {\r\n showAlert: true,\r\n showPopup,\r\n showParentPopup,\r\n showCashCheck: false,\r\n showCancel: false,\r\n showChargeOverride: false,\r\n showChargeConfirm: false,\r\n showAlaCarteLimitCount: 0,\r\n invalidChargePassword: false,\r\n chargeOverridePassword: \"\",\r\n isEndTransaction: false,\r\n showLowCreditWarning:\r\n !showPopup && !showParentPopup && showLowCreditWarning,\r\n layoutName: \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ]\r\n },\r\n bufferValue: \"\"\r\n };\r\n this.keyboardRef = React.createRef();\r\n this.keyboardUtils = new KeyboardUtils();\r\n this.handleCategoryClick = this.handleCategoryClick.bind(this);\r\n }\r\n\r\n public componentDidMount() {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n rootStore,\r\n rootStore: { cardConnectStore }\r\n } = this.props;\r\n\r\n rootStore.changeDayWhenOffline = false;\r\n\r\n if (terminalConfig && terminalConfig.bufferedServing) {\r\n window.addEventListener(\"beforeunload\", this.handleUnload);\r\n }\r\n\r\n if (cardConnectStore.priorAuthInFlight) {\r\n // If we were connected to the terminal previously, but then\r\n // refreshed the page, we need to cancel the InFlight auth\r\n // to that terminal to avoid somebody completing a transaction\r\n // that won't actually get recorded in eTrition. So we Init.\r\n cardConnectStore.priorAuthInFlight = false;\r\n cardConnectStore.initialize(false);\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n rootStore\r\n } = this.props;\r\n\r\n if (terminalConfig && terminalConfig.bufferedServing) {\r\n window.removeEventListener(\"beforeunload\", this.handleUnload);\r\n }\r\n\r\n rootStore.changeDayWhenOffline = true;\r\n }\r\n\r\n public completeTransaction = async ({\r\n transactionType\r\n }: Transaction): Promise => {\r\n if (!this.state.isEndTransaction) {\r\n this.setState({ isEndTransaction: true });\r\n await this.props.transactionStore.completeTransaction({\r\n transactionType\r\n });\r\n }\r\n };\r\n\r\n public handleUnload = (e: Event) => {\r\n const { studentStore } = this.props;\r\n if (studentStore.bufferList.filter((s) => s.patronID !== null).length > 0) {\r\n e = e || window.event;\r\n\r\n if (e) {\r\n e.returnValue = \"confirm\" as any;\r\n }\r\n\r\n return \"confirm\";\r\n }\r\n\r\n return true;\r\n };\r\n\r\n public handleOverridePassword = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n chargeOverridePassword: e.currentTarget.value,\r\n invalidChargePassword: false\r\n });\r\n };\r\n\r\n public handleOverrideEnter = (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n this.handleSubmitOverride();\r\n }\r\n };\r\n\r\n public handleCancelOverride = () => {\r\n this.setState({\r\n showChargeOverride: false,\r\n chargeOverridePassword: \"\",\r\n invalidChargePassword: false\r\n });\r\n };\r\n\r\n public handleSubmitOverride = async () => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.props;\r\n const password = terminalConfig!.chargeOverridePassword;\r\n\r\n if (!password || password === this.state.chargeOverridePassword) {\r\n this.handleCancelOverride();\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Account\r\n });\r\n } else {\r\n this.setState({ invalidChargePassword: true });\r\n this.focusOverrideBox();\r\n }\r\n };\r\n\r\n public handleAlertClick = () => {\r\n this.setState((prevState) => ({ showAlert: !prevState.showAlert }));\r\n };\r\n\r\n public handleCategoryClick(selected: boolean, categoryId: number) {\r\n if (selected) {\r\n this.setState({ filteredCategoryID: categoryId }, () => {\r\n this.renderLayout();\r\n });\r\n } else {\r\n this.setState({ filteredCategoryID: undefined }, () => {\r\n this.renderLayout();\r\n });\r\n }\r\n }\r\n\r\n public handleLowCreditWarningClick = async () => {\r\n this.setState((prevState) => ({\r\n showLowCreditWarning: !prevState.showLowCreditWarning\r\n }));\r\n\r\n if (!this.props.studentStore.studentModel.isRedo) {\r\n await this.props.studentStore.handleQuickSale();\r\n }\r\n };\r\n\r\n public handleCashCheckClick = () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n this.setState((prevState) => ({\r\n showCashCheck: !prevState.showCashCheck\r\n }));\r\n }\r\n };\r\n\r\n public handlePopupClick = async () => {\r\n const showLowCreditWarning = this.props.studentStore.isLowCreditPopup;\r\n this.setState({\r\n showPopup: false,\r\n showParentPopup: false,\r\n showLowCreditWarning\r\n });\r\n\r\n if (!this.props.studentStore.studentModel.isRedo && !showLowCreditWarning) {\r\n await this.props.studentStore.handleQuickSale();\r\n }\r\n };\r\n\r\n public backClicked = () => {\r\n const {\r\n transactionStore: {\r\n transactionModel: { posTransactions }\r\n }\r\n } = this.props;\r\n\r\n if (\r\n posTransactions &&\r\n posTransactions.filter((t) => t.quantity > 0).length > 0\r\n ) {\r\n this.setState({ showCancel: true });\r\n } else {\r\n this.cancelTransation();\r\n }\r\n };\r\n\r\n public earnedClicked = async () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Earned\r\n });\r\n }\r\n };\r\n\r\n public quickCashClicked = async () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.QuickCash\r\n });\r\n }\r\n };\r\n\r\n public accountClicked = async () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Account\r\n });\r\n }\r\n };\r\n\r\n public accountClickedOverride = () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n this.setState({ showChargeOverride: true });\r\n }\r\n };\r\n\r\n public accountClickedChargeConfirm = () => {\r\n const exceeded = this.props.transactionStore.salesItemLimitExceededBy(2);\r\n if (exceeded > 0) {\r\n this.setState({ showAlaCarteLimitCount: exceeded });\r\n } else {\r\n this.setState({ showChargeConfirm: true });\r\n }\r\n };\r\n\r\n public confirmAlaCarteLimitMessage = () => {\r\n this.setState({ showAlaCarteLimitCount: 0 });\r\n };\r\n\r\n public confirmChargeCancel = () => {\r\n this.setState({ showChargeConfirm: false });\r\n };\r\n\r\n public confirmChargeContinue = async () => {\r\n this.confirmChargeCancel();\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Account\r\n });\r\n };\r\n\r\n public hideCancel = () => {\r\n this.setState({ showCancel: false });\r\n };\r\n\r\n public cancelTransation = async () => {\r\n await this.completeTransaction({\r\n transactionType: TransactionType.Cancelled\r\n });\r\n };\r\n\r\n public renderTabs = () => {\r\n const {\r\n terminalStore: { terminalModel },\r\n transactionStore\r\n } = this.props;\r\n\r\n const tabItems = [];\r\n\r\n // add category 'tabs'\r\n if (\r\n terminalModel.terminalConfig &&\r\n terminalModel.terminalConfig.useCategories &&\r\n terminalModel.posLayout!.useCategoryColors\r\n ) {\r\n for (const salesItemCategory of terminalModel.salesItemCategories) {\r\n if (\r\n salesItemCategory.color !== null &&\r\n this.categoryIsUsed(salesItemCategory, terminalModel.posLayout!.items)\r\n ) {\r\n tabItems.push(\r\n \r\n );\r\n }\r\n }\r\n\r\n tabItems.push();\r\n }\r\n return tabItems;\r\n };\r\n\r\n public renderLayout = () => {\r\n const {\r\n terminalStore: { terminalModel },\r\n studentStore,\r\n transactionStore\r\n } = this.props;\r\n const {\r\n studentModel: { student }\r\n } = studentStore;\r\n const { transactionModel } = transactionStore;\r\n const itemsPerRow = 5;\r\n\r\n let lastKey = Math.max(\r\n ...terminalModel.posLayout!.items.map((item) => item.keyNumber)\r\n );\r\n\r\n if (lastKey % itemsPerRow !== 0) {\r\n lastKey += itemsPerRow - (lastKey % itemsPerRow);\r\n }\r\n\r\n const layoutItems = [];\r\n\r\n if (!this.state.filteredCategoryID) {\r\n for (let index = 1; index <= lastKey; index++) {\r\n const layoutItem = terminalModel.posLayout!.items.find(\r\n (i) =>\r\n i.keyNumber === index &&\r\n ((i.allowBulkEntry && student!.patronID === null) ||\r\n !i.allowBulkEntry) &&\r\n (i.patronTypeID === student!.patronTypeID ||\r\n i.patronTypeID === null)\r\n );\r\n\r\n let isValidItem = false;\r\n let salesItemPrice = null;\r\n\r\n if (layoutItem) {\r\n layoutItem.isAlternateItem = false;\r\n let salesItem = terminalModel.salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === layoutItem!.salesItemHeaderID\r\n );\r\n\r\n const keyLabel =\r\n layoutItem.keyLabel ||\r\n (salesItem\r\n ? salesItem.itemShortDescription || salesItem.itemDescription\r\n : \"\");\r\n\r\n if (\r\n terminalModel.terminalConfig!.useAlternateSalesItem &&\r\n salesItem &&\r\n salesItem.alternateSalesItemHeaderID &&\r\n salesItem.salesItemLimitMet\r\n ) {\r\n const altSalesItem = terminalModel.salesItemHeaders!.find(\r\n (x) =>\r\n x.salesItemHeaderID === salesItem!.alternateSalesItemHeaderID\r\n );\r\n\r\n if (altSalesItem && altSalesItem.hasItemPrice) {\r\n salesItem = altSalesItem;\r\n layoutItem.isAlternateItem =\r\n terminalModel.terminalConfig!.popupOnAlternateItem;\r\n }\r\n }\r\n\r\n if (salesItem) {\r\n salesItemPrice = salesItem.salesItemPrice;\r\n\r\n if (salesItemPrice !== null) {\r\n isValidItem = true;\r\n layoutItems.push(\r\n \r\n \r\n t.layoutItemID === layoutItem!.posLayoutItemID &&\r\n t.quantity > 0\r\n )}\r\n />\r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n if (!isValidItem) {\r\n layoutItems.push(\r\n \r\n
\r\n \r\n );\r\n }\r\n }\r\n } else {\r\n const initialLayoutItemLength = layoutItems.length;\r\n for (let index = 1; index <= lastKey; index++) {\r\n const layoutItem = terminalModel.posLayout!.items.find(\r\n (i) =>\r\n i.keyNumber === index &&\r\n ((i.allowBulkEntry && student!.patronID === null) ||\r\n !i.allowBulkEntry) &&\r\n (i.patronTypeID === student!.patronTypeID ||\r\n i.patronTypeID === null)\r\n );\r\n\r\n let salesItemPrice = null;\r\n\r\n if (layoutItem) {\r\n layoutItem.isAlternateItem = false;\r\n let salesItem = terminalModel.salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === layoutItem!.salesItemHeaderID\r\n );\r\n\r\n const keyLabel =\r\n layoutItem.keyLabel ||\r\n (salesItem\r\n ? salesItem.itemShortDescription || salesItem.itemDescription\r\n : \"\");\r\n\r\n if (\r\n terminalModel.terminalConfig!.useAlternateSalesItem &&\r\n salesItem &&\r\n salesItem.alternateSalesItemHeaderID &&\r\n salesItem.salesItemLimitMet\r\n ) {\r\n const altSalesItem = terminalModel.salesItemHeaders!.find(\r\n (x) =>\r\n x.salesItemHeaderID === salesItem!.alternateSalesItemHeaderID\r\n );\r\n\r\n if (altSalesItem && altSalesItem.hasItemPrice) {\r\n salesItem = altSalesItem;\r\n layoutItem.isAlternateItem =\r\n terminalModel.terminalConfig!.popupOnAlternateItem;\r\n }\r\n }\r\n\r\n if (\r\n salesItem &&\r\n this.state.filteredCategoryID &&\r\n this.state.filteredCategoryID === layoutItem.salesItemCategoryID\r\n ) {\r\n salesItemPrice = salesItem.salesItemPrice;\r\n if (salesItemPrice !== null) {\r\n layoutItems.push(\r\n \r\n \r\n t.layoutItemID === layoutItem!.posLayoutItemID &&\r\n t.quantity > 0\r\n )}\r\n />\r\n \r\n );\r\n }\r\n }\r\n }\r\n }\r\n const newAdditions = initialLayoutItemLength - itemsPerRow;\r\n const blanksToAdd = itemsPerRow - (newAdditions % itemsPerRow);\r\n let i = 0;\r\n while (i < blanksToAdd) {\r\n layoutItems.push(\r\n \r\n
\r\n \r\n );\r\n i += 1;\r\n }\r\n }\r\n\r\n return layoutItems;\r\n };\r\n\r\n private categoryIsUsed(\r\n salesItemCategoryID: any,\r\n poslayoutItems: PosLayoutItem[]\r\n ): boolean {\r\n const {\r\n terminalStore: { terminalModel }\r\n } = this.props;\r\n for (const item of poslayoutItems) {\r\n if (\r\n item.salesItemCategoryID === salesItemCategoryID.salesItemCategoryID\r\n ) {\r\n let salesItemPrice = null;\r\n\r\n if (item) {\r\n item.isAlternateItem = false;\r\n let salesItem = terminalModel.salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === item!.salesItemHeaderID\r\n );\r\n\r\n if (\r\n terminalModel.terminalConfig!.useAlternateSalesItem &&\r\n salesItem &&\r\n salesItem.alternateSalesItemHeaderID &&\r\n salesItem.salesItemLimitMet\r\n ) {\r\n const altSalesItem = terminalModel.salesItemHeaders!.find(\r\n (x) =>\r\n x.salesItemHeaderID === salesItem!.alternateSalesItemHeaderID\r\n );\r\n\r\n if (altSalesItem && altSalesItem.hasItemPrice) {\r\n salesItem = altSalesItem;\r\n item.isAlternateItem =\r\n terminalModel.terminalConfig!.popupOnAlternateItem;\r\n }\r\n }\r\n\r\n if (salesItem) {\r\n salesItemPrice = salesItem.salesItemPrice;\r\n }\r\n return salesItemPrice !== undefined && salesItemPrice !== null;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n this.setState({\r\n chargeOverridePassword: inputObject[\"chargeOverridePassword\"]\r\n });\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n }\r\n };\r\n\r\n public handleOnKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n this.keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (this.keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue = this.state.chargeOverridePassword;\r\n const newValue = !isBackSpace\r\n ? stateValue + this.keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : stateValue.toString().slice(0, -1);\r\n\r\n this.setState({\r\n chargeOverridePassword: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.chargeOverridePassword =\r\n newValue;\r\n }\r\n }\r\n };\r\n\r\n public render() {\r\n const {\r\n authStore: {\r\n auth: { customerID }\r\n },\r\n studentStore: {\r\n studentModel: { student, salesItemPrices }\r\n },\r\n terminalStore,\r\n transactionStore\r\n } = this.props;\r\n const {\r\n terminalConfig,\r\n salesItemHeaders,\r\n breakfastSalesHeaderID,\r\n lunchSalesHeaderID,\r\n speedKeys,\r\n isClosed\r\n } = terminalStore.terminalModel;\r\n const {\r\n addQuantity,\r\n removeQuantity,\r\n setQuantity,\r\n setAmount,\r\n transactionModel: { posTransactions }\r\n } = transactionStore;\r\n\r\n if (!student) {\r\n return ;\r\n }\r\n\r\n if (terminalStore.isLoading || transactionStore.transactionProcessing) {\r\n return (\r\n \r\n Loading…\r\n \r\n );\r\n }\r\n\r\n const totalSale = transactionStore.getTotalSale;\r\n const accountAmount = transactionStore.getAccountAmount;\r\n const chargeLimitMet = transactionStore.getChargeLimitMet();\r\n const prepaidLimitMet = transactionStore.getPrepaidLimitMet(0);\r\n const noChargeTotal = transactionStore.getNoChargeTotal;\r\n const isCharge = student!.account.amount - totalSale < 0;\r\n const disableCharge =\r\n !student.patronID || (!!noChargeTotal && isCharge) || chargeLimitMet;\r\n const canOverrideCharge =\r\n terminalConfig!.chargeOverridePassword &&\r\n student.patronID &&\r\n noChargeTotal === 0 &&\r\n isCharge;\r\n const anyTransactions =\r\n posTransactions &&\r\n posTransactions.filter((t) => t.quantity > 0).length !== 0;\r\n\r\n const isWinner =\r\n this.state.showPopup &&\r\n !!student.alertMessage &&\r\n student.alertMessage.toLowerCase().includes(\"winner\");\r\n const isBirthday =\r\n terminalConfig &&\r\n terminalConfig.showConfettiOnBirthday &&\r\n this.props.rootStore.isToday(new Date(student.birthDate!));\r\n const hideTotal =\r\n terminalConfig && terminalConfig.hideEndBalanceAndTransTotals;\r\n\r\n return (\r\n \r\n {isWinner || isBirthday ? (\r\n
\r\n \r\n \r\n
\r\n ) : null}\r\n {isBirthday && !isWinner ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {student ? (\r\n \r\n ) : null}\r\n \r\n {(!!student.alertMessage || !!student.parentAlertMessage) &&\r\n this.state.showAlert ? (\r\n \r\n {student.alertMessage &&\r\n student.alertMessage.toLowerCase().includes(\"winner\") ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n {(!!student.alertMessage && !!student.parentAlertMessage\r\n ? \"[Alert]: \"\r\n : \"\") +\r\n (!!student.alertMessage\r\n ? student.alertMessage + \" \"\r\n : \"\") +\r\n (!!student.parentAlertMessage\r\n ? \"[Parent]: \" + student.parentAlertMessage\r\n : \"\")}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n {student.alertMessage && !this.state.showAlert ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n {!hideTotal ? (\r\n \r\n \r\n \r\n ) : null}\r\n {student!.patronID ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n \r\n {this.state.showCashCheck ? (\r\n \r\n ) : null}\r\n \r\n \r\n Earned\r\n
\r\n $0.00\r\n \r\n = 0 && !prepaidLimitMet\r\n }\r\n color={\r\n accountAmount >= 0 ||\r\n prepaidLimitMet ||\r\n (disableCharge && !canOverrideCharge)\r\n ? undefined\r\n : disableCharge\r\n ? \"red\"\r\n : \"orange\"\r\n }\r\n disabled={\r\n this.state.isEndTransaction ||\r\n (disableCharge && !canOverrideCharge) ||\r\n prepaidLimitMet ||\r\n !anyTransactions\r\n }\r\n onClick={\r\n disableCharge\r\n ? this.accountClickedOverride\r\n : terminalConfig!.confirmCharge && accountAmount < 0\r\n ? this.accountClickedChargeConfirm\r\n : this.accountClicked\r\n }>\r\n {accountAmount >= 0 ||\r\n prepaidLimitMet ||\r\n (disableCharge && !canOverrideCharge)\r\n ? \"Account\"\r\n : \"Charge\"}\r\n
\r\n {!terminalConfig!.hideEndBalanceAndTransTotals ? (\r\n (disableCharge && !canOverrideCharge) || prepaidLimitMet ? (\r\n \"$0.00\"\r\n ) : (\r\n `$${Math.abs(accountAmount).toFixed(2)}`\r\n )\r\n ) : (\r\n <> \r\n )}\r\n \r\n \r\n Cash or Check\r\n
\r\n Tendered\r\n \r\n = 0 || !chargeLimitMet)) ||\r\n (terminalConfig!.disablePatronQuickCash &&\r\n !!student.patronID) ||\r\n !anyTransactions\r\n }>\r\n Quick Cash\r\n
\r\n {!terminalConfig!.hideEndBalanceAndTransTotals ? (\r\n !terminalConfig!.allowCredits ||\r\n (!disableCharge &&\r\n terminalConfig!.disableQuickCashOnFunds &&\r\n (accountAmount >= 0 || !chargeLimitMet)) ? (\r\n \"$0.00\"\r\n ) : (\r\n `$${totalSale.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
Cancel Transaction?
\r\n

\r\n You are about to cancel the current transaction. Are you sure?\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 Allow Charge\r\n {!terminalConfig!.hideEndBalanceAndTransTotals\r\n ? \" $\" + (student!.account.amount - totalSale).toFixed(2)\r\n : \"\"}\r\n ?\r\n
\r\n {!terminalConfig!.hideEndBalanceAndTransTotals ? (\r\n

\r\n Allow {student.firstName} {student.lastName} to charge $\r\n {Math.abs(accountAmount).toFixed(2)}, for a new balance of $\r\n {(student!.account.amount - totalSale).toFixed(2)}?\r\n

\r\n ) : (\r\n

\r\n Allow {student.firstName} {student.lastName} to charge?\r\n

\r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n Charge Override Code Required\r\n \r\n \r\n {this.state.invalidChargePassword ? (\r\n \r\n ) : null}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n 0} size=\"tiny\">\r\n \r\n \r\n
A La Carte Limit
\r\n

\r\n Patron has exceeded a la carte limit. Please remove{\" \"}\r\n {this.state.showAlaCarteLimitCount}{\" \"}\r\n {this.state.showAlaCarteLimitCount === 1 ? \"item\" : \"items\"} and\r\n try again.\r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n private focusOverrideBox() {\r\n if (this.chargeOverrideBox.current) {\r\n this.chargeOverrideBox.current.focus();\r\n }\r\n }\r\n}\r\n\r\nexport default MealService;\r\n","import { IObservableArray, observable } from \"mobx\";\r\n\r\nexport default class ServeAllModel {\r\n @observable\r\n public serveAllStudentIDs: IObservableArray = observable.array(\r\n []\r\n );\r\n @observable\r\n public isServeAllMode: boolean = false;\r\n @observable\r\n public showAlertsInServeAll: boolean = false;\r\n @observable\r\n public serveAllIsFinished: boolean = false;\r\n @observable\r\n public totalToServeCount: number = 0;\r\n @observable\r\n public totalServedCount: number = 0;\r\n}\r\n","import { IObservableArray, observable } from \"mobx\";\r\nimport { Student } from \"./StudentModel\";\r\n\r\nexport default class StudentSearchModel {\r\n @observable\r\n public siteStudents: IObservableArray = observable.array([]);\r\n @observable\r\n public districtStudents: IObservableArray = observable.array([]);\r\n @observable\r\n public sortByFirstName: boolean = JSON.parse(\r\n localStorage.getItem(\"sortByFirstName\") || \"false\"\r\n );\r\n}\r\n","import { action, computed, observable, reaction, IObservableArray } from \"mobx\";\r\nimport { Observable, of, Subject } from \"rxjs\";\r\nimport { debounceTime, distinctUntilChanged, switchMap } from \"rxjs/operators\";\r\nimport SalesItemHeader from \"../models/SalesItemModel\";\r\nimport ServeAllModel from \"../models/ServeAllModel\";\r\nimport {\r\n SalesItemPrice,\r\n Student,\r\n StudentModel,\r\n BufferedSide,\r\n EligibilityStatus,\r\n EligSubStatus\r\n} from \"../models/StudentModel\";\r\nimport StudentSearchModel from \"../models/StudentSearchModel\";\r\nimport { checkAuthorization, getFormattedToday } from \"../utils\";\r\nimport { jsonContentType } from \"./AuthStore\";\r\nimport RootStore from \"./RootStore\";\r\nimport { TransactionType } from \"./TransactionStore\";\r\nimport { Logger } from \"../utils/logger\";\r\nimport { ObjectStores } from \"../database/databaseSchema\";\r\nimport { BaseClass } from \"../database/indexedDBService\";\r\nimport { SessionType, ItemGroupType } from \"../models/TerminalModel\";\r\nimport { PosTransaction } from \"../models/TransactionModel\";\r\n\r\nexport enum StudentType {\r\n Student = 1,\r\n NonStudent = 2\r\n}\r\n\r\nexport const SearchSize = 1;\r\n\r\nexport default class StudentStore {\r\n public rootStore: RootStore;\r\n @observable\r\n public studentSearchModel: StudentSearchModel;\r\n public tempStudentSearchModel?: StudentSearchModel;\r\n @observable\r\n public serveAllModel: ServeAllModel;\r\n @observable\r\n public isLoading: boolean = false;\r\n @observable\r\n public isSearching: boolean = false;\r\n @observable\r\n public previousStudentModel: StudentModel | null;\r\n @observable\r\n public studentModel: StudentModel;\r\n @observable\r\n public isQuickSalePaused: boolean = false;\r\n @observable\r\n public gngPauseAllSessions: boolean = false;\r\n @observable\r\n public isBufferedSideFlipped: boolean = false;\r\n @observable\r\n public bufferList: IObservableArray = observable.array([]);\r\n @observable\r\n public isBufferSearch: boolean = false;\r\n @observable\r\n public isRosterMode: boolean;\r\n @observable\r\n public isRosterSearch: boolean = false;\r\n @observable\r\n public fromHandleEnter: boolean = false;\r\n @observable\r\n public rosterSitePageNumber: number = 1;\r\n @observable\r\n public rosterDistrictPageNumber: number = 1;\r\n @observable\r\n public homeroomID?: number;\r\n @observable\r\n public gradeLevelID?: number;\r\n @observable\r\n public sortByFirstName: boolean = false;\r\n @observable\r\n public filterPageNumber: number = 1;\r\n @observable\r\n public filterByHomeroom?: boolean;\r\n @observable\r\n public filterRange: number = 0;\r\n @observable\r\n public lastSyncDate?: Date;\r\n @observable\r\n public showMealService = false;\r\n @observable\r\n public studentNotFound: boolean = false;\r\n @observable\r\n public hideServedStudents: boolean = false;\r\n\r\n public searchTerms = new Subject();\r\n private logger: Logger;\r\n public tempRosterSitePageNumber?: number;\r\n public isLoadingStudent: boolean = false;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.logger = rootStore.logger;\r\n this.previousStudentModel = null;\r\n const student = sessionStorage.getItem(\"student\");\r\n const salesItemPrices = sessionStorage.getItem(\"salesItemPrices\");\r\n\r\n this.studentModel = Object.assign(new StudentModel(), {\r\n student: student ? JSON.parse(student) : undefined,\r\n salesItemPrices: salesItemPrices ? JSON.parse(salesItemPrices) : undefined\r\n });\r\n\r\n const previousStudent = sessionStorage.getItem(\"previousStudent\");\r\n this.isRosterMode = sessionStorage.getItem(\"rosterMode\") !== null;\r\n this.isRosterSearch = sessionStorage.getItem(\"rosterSearch\") !== null;\r\n\r\n this.previousStudentModel = previousStudent\r\n ? JSON.parse(previousStudent)\r\n : null;\r\n\r\n this.serveAllModel = new ServeAllModel();\r\n\r\n const studentSearchModel = sessionStorage.getItem(\"studentSearchModel\");\r\n this.studentSearchModel = studentSearchModel\r\n ? JSON.parse(studentSearchModel)\r\n : new StudentSearchModel();\r\n\r\n const lastSyncDate = sessionStorage.getItem(\"lastSyncDate\");\r\n\r\n this.lastSyncDate = lastSyncDate\r\n ? new Date(JSON.parse(lastSyncDate))\r\n : undefined;\r\n\r\n const bufferList = sessionStorage.getItem(\"bufferList\");\r\n\r\n this.bufferList = bufferList\r\n ? observable.array(JSON.parse(bufferList))\r\n : observable.array([]);\r\n\r\n const showMealService = sessionStorage.getItem(\"showMealService\");\r\n\r\n this.showMealService = showMealService\r\n ? JSON.parse(showMealService)\r\n : false;\r\n\r\n const isQuickSalePaused = sessionStorage.getItem(\"isQuickSalePaused\");\r\n\r\n this.isQuickSalePaused = isQuickSalePaused\r\n ? JSON.parse(isQuickSalePaused)\r\n : false;\r\n\r\n const gngPauseAllSessions = sessionStorage.getItem(\"gngPauseAllSessions\");\r\n\r\n this.gngPauseAllSessions = gngPauseAllSessions\r\n ? JSON.parse(gngPauseAllSessions)\r\n : false;\r\n\r\n const isBufferedSideFlipped = localStorage.getItem(\"isBufferedSideFlipped\");\r\n\r\n this.isBufferedSideFlipped = isBufferedSideFlipped\r\n ? JSON.parse(isBufferedSideFlipped)\r\n : false;\r\n\r\n this.searchTerms\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap((term: string) => this.searchStudents(term))\r\n )\r\n .subscribe((allStudents) => {\r\n const { terminal } = this.rootStore.terminalStore!.terminalModel;\r\n const studentSearchModel = { ...this.studentSearchModel };\r\n\r\n studentSearchModel.siteStudents = observable.array(\r\n allStudents.filter((s) => s.siteID === terminal!.siteID)\r\n );\r\n\r\n studentSearchModel.districtStudents = observable.array(\r\n allStudents.filter((s) => s.siteID !== terminal!.siteID)\r\n );\r\n\r\n this.studentSearchModel = studentSearchModel;\r\n if (!(this.isRosterMode && this.rosterSitePageNumber > 1))\r\n this.rosterSitePageNumber = 1;\r\n this.rosterDistrictPageNumber = 1;\r\n });\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.previousStudentModel,\r\n () => {\r\n if (this.previousStudentModel) {\r\n sessionStorage.setItem(\r\n \"previousStudent\",\r\n JSON.stringify(this.previousStudentModel)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"previousStudent\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.studentModel.student,\r\n () => {\r\n if (this.studentModel.student) {\r\n sessionStorage.setItem(\r\n \"student\",\r\n JSON.stringify(this.studentModel.student)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"student\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () =>\r\n this.studentModel.salesItemPrices &&\r\n this.studentModel.salesItemPrices.map((s) => s.itemPrice),\r\n () => {\r\n if (this.studentModel.salesItemPrices) {\r\n sessionStorage.setItem(\r\n \"salesItemPrices\",\r\n JSON.stringify(this.studentModel.salesItemPrices)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"salesItemPrices\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.isRosterMode,\r\n () => {\r\n if (this.isRosterMode) {\r\n sessionStorage.setItem(\"rosterMode\", \"true\");\r\n } else {\r\n sessionStorage.removeItem(\"rosterMode\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => JSON.stringify(this.studentSearchModel),\r\n () => {\r\n sessionStorage.setItem(\r\n \"studentSearchModel\",\r\n JSON.stringify(this.studentSearchModel)\r\n );\r\n }\r\n );\r\n reaction(\r\n () => this.lastSyncDate,\r\n () => {\r\n if (this.lastSyncDate) {\r\n sessionStorage.setItem(\r\n \"lastSyncDate\",\r\n JSON.stringify(this.lastSyncDate.getTime())\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"lastSyncDate\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.bufferList.length,\r\n () => {\r\n if (this.bufferList.length) {\r\n sessionStorage.setItem(\"bufferList\", JSON.stringify(this.bufferList));\r\n } else {\r\n sessionStorage.removeItem(\"bufferList\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.showMealService,\r\n () => {\r\n if (this.showMealService) {\r\n sessionStorage.setItem(\r\n \"showMealService\",\r\n JSON.stringify(this.showMealService)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"showMealService\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.isQuickSalePaused,\r\n () => {\r\n if (this.isQuickSalePaused) {\r\n sessionStorage.setItem(\r\n \"isQuickSalePaused\",\r\n JSON.stringify(this.isQuickSalePaused)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"isQuickSalePaused\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.gngPauseAllSessions,\r\n () => {\r\n if (this.gngPauseAllSessions) {\r\n sessionStorage.setItem(\r\n \"gngPauseAllSessions\",\r\n JSON.stringify(this.gngPauseAllSessions)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"gngPauseAllSessions\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.isBufferedSideFlipped,\r\n () => {\r\n if (this.isBufferedSideFlipped) {\r\n localStorage.setItem(\r\n \"isBufferedSideFlipped\",\r\n JSON.stringify(this.isBufferedSideFlipped)\r\n );\r\n } else {\r\n localStorage.removeItem(\"isBufferedSideFlipped\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n private studentUnique(array: Student[]) {\r\n var a = array.concat();\r\n for (var i = 0; i < a.length; ++i) {\r\n for (var j = i + 1; j < a.length; ++j) {\r\n if (a[i].patronID === a[j].patronID) a.splice(j--, 1);\r\n }\r\n }\r\n\r\n return a;\r\n }\r\n\r\n private preFilterRosterStudents(\r\n students: Student[],\r\n sessionID: number,\r\n filterID: number | undefined,\r\n filterRange: number,\r\n isHomeroom: boolean,\r\n servingDay: string,\r\n doGradeFilter: boolean\r\n ) {\r\n if ((doGradeFilter && filterID) || filterRange > 0) {\r\n return students.filter(\r\n (s) =>\r\n (doGradeFilter && filterID\r\n ? isHomeroom\r\n ? s.homeRoomID === filterID\r\n : s.gradeID === filterID\r\n : true) &&\r\n (filterRange == 0\r\n ? true\r\n : !!s.lastPurchaseDates\r\n ? s.lastPurchaseDates.some(\r\n (d) =>\r\n d.sessionID === sessionID &&\r\n new Date(\r\n new Date(servingDay).setDate(\r\n new Date(servingDay).getDate() - filterRange\r\n )\r\n ) <= new Date(d.serveDate)\r\n )\r\n : false)\r\n );\r\n } else {\r\n return students;\r\n }\r\n }\r\n\r\n public getPatronsForTransactions = async (): Promise => {\r\n this.logger.logMethodStart(\"getPatronsForTransactions\");\r\n\r\n const {\r\n getServingDay,\r\n terminalModel: { terminal }\r\n } = this.rootStore.terminalStore!;\r\n\r\n this.isLoading = true;\r\n\r\n let students: Student[] | undefined;\r\n let studentsOnline: Student[] | undefined;\r\n let studentsOffline: Student[] | undefined;\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetPatronsForTransactions/${\r\n terminal!.siteID\r\n }/${getServingDay()}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n if (checkAuthorization(response, this.rootStore)) {\r\n studentsOnline = await response.json();\r\n\r\n this.logger.logFetchData(\"getPatronsForTransactions\", students);\r\n }\r\n } catch (error) {\r\n this.logger.error(error);\r\n }\r\n\r\n // Also load from local storage. This way, we will get patrons even if\r\n // we are offline, or patrons for offline transactions once we go back\r\n // online and the server doesn't yet have them to include in the list.\r\n studentsOffline = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n\r\n students = studentsOnline || studentsOffline;\r\n\r\n if (studentsOnline && studentsOffline) {\r\n students = this.studentUnique(studentsOnline!.concat(studentsOffline!));\r\n }\r\n\r\n this.isLoading = false;\r\n this.logger.logMethodEnd(\"getPatronsForTransactions\");\r\n return students || [];\r\n };\r\n\r\n public getSiteStudents = async () => {\r\n this.logger.logMethodStart(\"getSiteStudents\");\r\n const { terminal } = this.rootStore.terminalStore!.terminalModel;\r\n\r\n const hasStudents =\r\n (await this.rootStore.db.getCount(ObjectStores.Patron)) !== 0;\r\n\r\n try {\r\n const body = JSON.stringify({\r\n lastSyncDate:\r\n this.lastSyncDate && hasStudents\r\n ? this.lastSyncDate.toISOString()\r\n : \"\",\r\n siteID: terminal!.siteID,\r\n terminalID: terminal!.terminalID\r\n });\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetSiteStudents`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const students = await response.json();\r\n await this.syncStudents(students, true);\r\n this.logger.logFetchData(\"getSiteStudents\", students);\r\n }\r\n } catch (error) {\r\n this.logger.error(error);\r\n }\r\n this.logger.logMethodEnd(\"getSiteStudents\");\r\n };\r\n\r\n public setPrevBalance = async (resetToPrevBalance: boolean) => {\r\n const students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n const studentsToUpdate: Student[] = [];\r\n\r\n if (resetToPrevBalance) {\r\n for (const student of students) {\r\n if (\r\n student.account &&\r\n student.account.origAmount !== undefined &&\r\n student.account.amount !== student.account.origAmount\r\n ) {\r\n student.account.amount = student.account.origAmount;\r\n studentsToUpdate.push(student);\r\n }\r\n }\r\n } else {\r\n for (const student of students) {\r\n if (\r\n student.account &&\r\n student.account.origAmount !== student.account.amount\r\n ) {\r\n student.account.origAmount = student.account.amount;\r\n studentsToUpdate.push(student);\r\n }\r\n }\r\n }\r\n\r\n if (studentsToUpdate.length > 0) {\r\n await this.syncStudents(studentsToUpdate, false);\r\n }\r\n };\r\n\r\n @action\r\n public searchStudents = (searchTerm: string): Observable => {\r\n this.logger.logMethodStart(\"searchStudents\");\r\n const { terminalStore } = this.rootStore;\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n if (!searchTerm.trim()) {\r\n this.isSearching = false;\r\n if (this.isRosterMode) {\r\n return of([\r\n ...this.studentSearchModel.siteStudents,\r\n ...this.studentSearchModel.districtStudents\r\n ]);\r\n }\r\n return of([]);\r\n }\r\n\r\n const {\r\n getServingDay,\r\n terminalModel: { terminal, terminalConfig }\r\n } = this.rootStore.terminalStore!;\r\n\r\n const searchBody: { [k: string]: any } = {\r\n searchTerm,\r\n serviceDate: getServingDay()\r\n };\r\n\r\n if (\r\n terminalConfig &&\r\n !terminalConfig!.allowVisitingPatrons &&\r\n !terminalConfig!.allowAdultVisitingPatrons\r\n ) {\r\n searchBody.siteID = terminal!.siteID;\r\n }\r\n\r\n return Observable.create((observer: any) => {\r\n fetch(`${this.rootStore.config.apiPath}/BP/GetStudents`, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n searchTerm,\r\n serviceDate: getServingDay(),\r\n siteID: terminal!.siteID,\r\n posSessionID: posSessions![0].sessionID,\r\n allowVisitingPatrons:\r\n (terminalConfig && terminalConfig.allowVisitingPatrons) ||\r\n terminalStore.terminalModel.isTransactionSearch,\r\n allowAdultVisitingPatrons:\r\n (terminalConfig && terminalConfig.allowAdultVisitingPatrons) ||\r\n terminalStore.terminalModel.isTransactionSearch\r\n })\r\n })\r\n .then(async (response) => {\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n\r\n this.logger.logFetchData(\"searchStudents\", data);\r\n\r\n return data;\r\n }\r\n\r\n throw new Error(\"not authorized\");\r\n })\r\n .catch(async () => {\r\n const students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n const terms: string[] = searchTerm\r\n .replace(\",\", \" \")\r\n .replace(\" \", \" \")\r\n .split(\" \");\r\n const firstName = terms.length > 0 ? terms[0].toLowerCase() : null;\r\n const secondName = terms.length > 1 ? terms[1].toLowerCase() : null;\r\n return students.filter(\r\n (s) =>\r\n (s.pospin || \"\").toString().startsWith(searchTerm) ||\r\n s.patronNumber.toLowerCase().startsWith(searchTerm) ||\r\n (firstName &&\r\n secondName === null &&\r\n (s.firstName.toLowerCase().startsWith(firstName) ||\r\n s.lastName.toLowerCase().startsWith(firstName))) ||\r\n (firstName &&\r\n secondName &&\r\n ((s.firstName.toLowerCase().startsWith(firstName) &&\r\n s.lastName.toLowerCase().startsWith(secondName)) ||\r\n (s.lastName.toLowerCase().startsWith(firstName) &&\r\n s.firstName.toLowerCase().startsWith(secondName))))\r\n );\r\n })\r\n .then((data) => {\r\n observer.next(data);\r\n observer.complete();\r\n this.isSearching = false;\r\n })\r\n .catch((error) => {\r\n observer.complete();\r\n this.logger.error(error);\r\n this.isSearching = false;\r\n this.clearSearch();\r\n });\r\n });\r\n };\r\n\r\n @action\r\n public clearSearch = (force = false) => {\r\n if (!this.isBufferSearch) {\r\n this.searchTerms.next(\"\");\r\n }\r\n if (force) {\r\n this.studentNotFound = false;\r\n const studentSearchModel = { ...this.studentSearchModel };\r\n studentSearchModel.siteStudents = observable.array([]);\r\n studentSearchModel.districtStudents = observable.array([]);\r\n this.studentSearchModel = studentSearchModel;\r\n this.isRosterMode = false;\r\n\r\n if (!this.isRosterSearch) {\r\n this.rosterSitePageNumber = 1;\r\n this.rosterDistrictPageNumber = 1;\r\n this.filterPageNumber = 1;\r\n this.sortByFirstName = false;\r\n this.filterByHomeroom = undefined;\r\n this.gradeLevelID = undefined;\r\n this.homeroomID = undefined;\r\n this.filterRange = 0;\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public getRosterStudents = async (\r\n filterRange: number,\r\n isHomeroom: boolean,\r\n hideServedStudents: boolean,\r\n filterID?: number,\r\n keepPageNumber: boolean = false\r\n ) => {\r\n this.logger.logMethodStart(\"getRosterStudents\");\r\n\r\n const {\r\n terminalStore: {\r\n getServingDay,\r\n terminalModel: { terminal },\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n this.rootStore.terminalStore.terminalStateModel.activePOSSession =\r\n posSessions![0];\r\n\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { activePOSSession }\r\n }\r\n } = this.rootStore;\r\n\r\n var servingDay = \"\";\r\n\r\n try {\r\n this.isLoading = true;\r\n this.cancelServeAllMode(true);\r\n this.hideServedStudents = hideServedStudents;\r\n servingDay = getServingDay();\r\n\r\n if (servingDay === getFormattedToday()) {\r\n let students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n\r\n if (students && activePOSSession) {\r\n students = this.preFilterRosterStudents(\r\n students,\r\n activePOSSession!.sessionID,\r\n filterID,\r\n filterRange,\r\n isHomeroom,\r\n servingDay,\r\n true\r\n );\r\n\r\n await this.filterRosterStudents(\r\n students,\r\n terminal!.siteID,\r\n keepPageNumber,\r\n activePOSSession!.sessionID,\r\n true\r\n );\r\n }\r\n } else if (activePOSSession) {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetRosterStudents`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n serviceDate: getServingDay(),\r\n posSessionID: activePOSSession!.sessionID,\r\n siteID: terminal!.siteID,\r\n rosterServeID: filterID,\r\n filterByHomeroom: isHomeroom\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n var data: Student[] = await response.json();\r\n\r\n if (data) {\r\n // We don't do the grade/homeroom filter (send false) because the response from\r\n // eTrition is a WebPatronLiteDTO that doesn't have those fields and has already\r\n // been filtered by the server-side BP/GetRosterStudents query. We could add\r\n // those fields to that object, but there's no reason to do that since we\r\n // really don't need to apply the filter to already-filtered data.\r\n data = this.preFilterRosterStudents(\r\n data,\r\n activePOSSession!.sessionID,\r\n filterID,\r\n filterRange,\r\n isHomeroom,\r\n servingDay,\r\n false\r\n );\r\n await this.filterRosterStudents(\r\n data,\r\n terminal!.siteID,\r\n keepPageNumber,\r\n activePOSSession!.sessionID\r\n );\r\n }\r\n\r\n this.logger.logFetchData(\"getRosterStudents\", data);\r\n }\r\n }\r\n } catch (error) {\r\n let students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n\r\n if (students && activePOSSession) {\r\n students = this.preFilterRosterStudents(\r\n students,\r\n activePOSSession!.sessionID,\r\n filterID,\r\n filterRange,\r\n isHomeroom,\r\n servingDay,\r\n true\r\n );\r\n await this.filterRosterStudents(\r\n students,\r\n terminal!.siteID,\r\n keepPageNumber,\r\n activePOSSession!.sessionID,\r\n true\r\n );\r\n }\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n\r\n this.logger.logMethodEnd(\"getRosterStudents\");\r\n };\r\n\r\n @action\r\n public filterRosterStudents = async (\r\n students: Student[],\r\n siteID: number,\r\n keepPageNumber: boolean,\r\n sessionID: number,\r\n loadTransactions: boolean = false\r\n ) => {\r\n const studentSearchModel = { ...this.studentSearchModel };\r\n\r\n studentSearchModel.siteStudents = observable.array(\r\n students.filter((s) => s.siteID === siteID)\r\n );\r\n studentSearchModel.districtStudents = observable.array(\r\n students.filter((s) => s.siteID !== siteID)\r\n );\r\n\r\n if (loadTransactions) {\r\n const servingDay = this.rootStore.terminalStore.getServingDay();\r\n\r\n for (const student of studentSearchModel.siteStudents) {\r\n await this.setHasBeenServed(\r\n student,\r\n sessionID,\r\n servingDay,\r\n true,\r\n false\r\n );\r\n }\r\n\r\n for (const student of studentSearchModel.districtStudents) {\r\n await this.setHasBeenServed(\r\n student,\r\n sessionID,\r\n servingDay,\r\n true,\r\n false\r\n );\r\n }\r\n }\r\n\r\n this.studentSearchModel = studentSearchModel;\r\n\r\n if (!keepPageNumber) {\r\n this.rosterSitePageNumber = 1;\r\n this.rosterDistrictPageNumber = 1;\r\n } else if (this.tempRosterSitePageNumber) {\r\n this.rosterSitePageNumber = this.tempRosterSitePageNumber;\r\n this.tempRosterSitePageNumber = undefined;\r\n }\r\n };\r\n\r\n @action\r\n public clearPendingStudent = () => {\r\n this.studentModel.pendingStudent = undefined;\r\n };\r\n\r\n @action\r\n public clearStudent = async (\r\n fromTransaction?: boolean,\r\n totalSale?: number,\r\n type?: TransactionType\r\n ) => {\r\n const {\r\n transactionStore: {\r\n clearPreviousTransactions,\r\n transactionModel: { posPos, posTransactions }\r\n },\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n if (fromTransaction && this.studentModel.student) {\r\n this.previousStudentModel = {\r\n ...this.studentModel,\r\n previousTotal:\r\n type !== TransactionType.Cancelled ? totalSale : undefined,\r\n previousAmount: posPos!.amountTendered || totalSale,\r\n previousTransactions: [...posTransactions],\r\n previousTransactionType: type,\r\n previousAccountAdjustAmount: posTransactions\r\n .filter((t) => t.quantity > 0)\r\n .map((t) => t.accountAmount || 0)\r\n .reduce((a, b) => a + b, 0),\r\n isRedo: false,\r\n voidedTransactionType: undefined\r\n };\r\n\r\n if (this.isRosterSearch) {\r\n this.isRosterMode = true;\r\n this.isRosterSearch = false;\r\n\r\n if (this.filterByHomeroom !== undefined) {\r\n await this.getRosterStudents(\r\n this.filterRange,\r\n this.filterByHomeroom,\r\n this.hideServedStudents,\r\n this.filterByHomeroom ? this.homeroomID : this.gradeLevelID,\r\n true\r\n );\r\n }\r\n }\r\n\r\n if (this.isRosterMode) {\r\n let student = this.studentSearchModel.siteStudents.find(\r\n (s) => s.patronID === this.studentModel.student!.patronID\r\n );\r\n\r\n if (!student) {\r\n student = this.studentSearchModel.districtStudents.find(\r\n (s) => s.patronID === this.studentModel.student!.patronID\r\n );\r\n }\r\n\r\n if (student) {\r\n student.hasBeenServed =\r\n student.hasBeenServed ||\r\n posTransactions.some(\r\n (t) =>\r\n t.quantity > 0 &&\r\n ((posSessions![0].sessionID !== SessionType.Snack &&\r\n !!t.isMeal &&\r\n t.reimbursable) ||\r\n (posSessions![0].sessionID === SessionType.Snack &&\r\n t.saleItemGroupID! === ItemGroupType.ReimbSnack))\r\n );\r\n student.isSelected = false;\r\n\r\n if (\r\n this.serveAllModel.isServeAllMode &&\r\n posTransactions.some((t) => t.quantity > 0)\r\n ) {\r\n this.serveAllModel.totalServedCount++;\r\n }\r\n }\r\n }\r\n\r\n if (this.isBufferSearch) {\r\n this.isBufferSearch = false;\r\n }\r\n } else if (\r\n fromTransaction &&\r\n this.previousStudentModel &&\r\n type === TransactionType.Void\r\n ) {\r\n this.previousStudentModel = {\r\n ...this.previousStudentModel,\r\n previousTransactionType: type\r\n };\r\n\r\n if (this.isRosterMode && this.previousStudentModel.student) {\r\n this.studentSearchModel.siteStudents.forEach((s) =>\r\n this.calcHasBeenServed(s, posSessions![0].sessionID)\r\n );\r\n this.studentSearchModel.districtStudents.forEach((s) =>\r\n this.calcHasBeenServed(s, posSessions![0].sessionID)\r\n );\r\n }\r\n } else if (type !== TransactionType.Void) {\r\n this.previousStudentModel = null;\r\n }\r\n\r\n if (this.serveAllModel.isServeAllMode) {\r\n this.selectNextStudent();\r\n }\r\n\r\n this.isQuickSalePaused = false;\r\n this.showMealService = false;\r\n this.studentModel = new StudentModel();\r\n clearPreviousTransactions();\r\n };\r\n\r\n @action\r\n public clearBufferedStudents = async () => {\r\n this.bufferList = observable.array([]);\r\n };\r\n\r\n @action\r\n public clearSiteStudents = async () => {\r\n this.lastSyncDate = undefined;\r\n await this.rootStore.db.clear(ObjectStores.Patron);\r\n };\r\n\r\n @action\r\n public clearPreviousStudent = () => {\r\n this.previousStudentModel = null;\r\n };\r\n\r\n @action\r\n public toggleServeAll() {\r\n if (this.serveAllModel.isServeAllMode) {\r\n this.cancelServeAllMode(true);\r\n } else {\r\n this.initServeAllMode();\r\n }\r\n }\r\n\r\n @action\r\n public selectNextStudent = async () => {\r\n if (this.serveAllModel.serveAllStudentIDs.length) {\r\n const patronID = this.serveAllModel.serveAllStudentIDs.shift();\r\n await this.selectStudent(patronID!.toString(), false, false, true, true);\r\n } else {\r\n this.serveAllModel.serveAllIsFinished = true;\r\n }\r\n };\r\n\r\n @action\r\n public initServeAllMode() {\r\n const serveAllModel = { ...this.serveAllModel };\r\n serveAllModel.serveAllStudentIDs = observable.array([]);\r\n serveAllModel.isServeAllMode = true;\r\n serveAllModel.serveAllIsFinished = false;\r\n serveAllModel.totalToServeCount = 0;\r\n serveAllModel.totalServedCount = 0;\r\n this.serveAllModel = serveAllModel;\r\n\r\n this.studentSearchModel.siteStudents.forEach((s) => {\r\n s.isSelected = true;\r\n });\r\n }\r\n\r\n @action\r\n public cancelServeAllMode(clearCounts: boolean) {\r\n const serveAllModel = { ...this.serveAllModel };\r\n serveAllModel.serveAllStudentIDs = observable.array([]);\r\n serveAllModel.showAlertsInServeAll = false;\r\n serveAllModel.isServeAllMode = false;\r\n\r\n if (clearCounts) {\r\n serveAllModel.serveAllIsFinished = false;\r\n serveAllModel.totalToServeCount = 0;\r\n serveAllModel.totalServedCount = 0;\r\n }\r\n\r\n this.serveAllModel = serveAllModel;\r\n }\r\n\r\n @action\r\n public handleSelectStudent = async (studentID: number) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { isTransactionSearch }\r\n },\r\n transactionStore,\r\n studentStore\r\n } = this.rootStore;\r\n\r\n if (isTransactionSearch) {\r\n transactionStore.transactionHistoryPatronID = studentID;\r\n this.rootStore.terminalStore.terminalModel.isTransactionSearch = false;\r\n } else {\r\n if (\r\n this.gngPauseAllSessions &&\r\n this.studentModel.gngStudentIdToProcess === 0\r\n ) {\r\n this.studentModel.gngStudentIdToProcess = studentID;\r\n this.handlePauseAllSessions();\r\n return;\r\n }\r\n\r\n // reset ID\r\n this.studentModel.gngStudentIdToProcess = 0;\r\n await this.selectStudent(\r\n studentID.toString(),\r\n studentStore.fromHandleEnter,\r\n false,\r\n !studentStore.fromHandleEnter,\r\n true\r\n );\r\n\r\n this.isBufferSearch = false;\r\n }\r\n };\r\n\r\n private async LoadStudent(\r\n isPatronID: boolean,\r\n searchTerm: string,\r\n autoSelectStudent: boolean,\r\n skipAutoSale: boolean,\r\n skipBufferList: boolean,\r\n bufferedSide: BufferedSide,\r\n alreadyBuffered: boolean\r\n ) {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminal, terminalConfig },\r\n terminalStateModel: { activePOSSession }\r\n }\r\n } = this.rootStore;\r\n\r\n if (bufferedSide == BufferedSide.None) {\r\n await this.rootStore.playSilence(false);\r\n await this.rootStore.playSilence(true);\r\n }\r\n\r\n const { siteID } = terminal!;\r\n let student: Student | null = null;\r\n\r\n try {\r\n if (searchTerm === \"-1\") {\r\n student = this.createEmptyStudent(StudentType.Student);\r\n }\r\n if (!student && activePOSSession!.servingDay === getFormattedToday()) {\r\n student = await this.searchPatronLocally(\r\n isPatronID,\r\n student,\r\n searchTerm,\r\n autoSelectStudent,\r\n siteID\r\n );\r\n }\r\n if (!student) {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetStudent`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n serviceDate: activePOSSession!.servingDay,\r\n posSessionID: activePOSSession!.sessionID,\r\n searchTerm,\r\n autoSelectStudent,\r\n siteID,\r\n allowVisitingPatrons:\r\n !terminalConfig || terminalConfig.allowVisitingPatrons,\r\n allowAdultVisitingPatrons:\r\n !terminalConfig || terminalConfig.allowAdultVisitingPatrons,\r\n pinIsPrimary: terminalConfig && terminalConfig!.pinIsPrimary,\r\n disablePatronIdSearch:\r\n terminalConfig && terminalConfig!.disablePatronIdSearch\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n student = await response.json();\r\n this.logger.logFetchData(\"selectStudent\", student);\r\n }\r\n }\r\n } catch (error) {\r\n if (activePOSSession!.servingDay !== getFormattedToday()) {\r\n student = await this.searchPatronLocally(\r\n isPatronID,\r\n student,\r\n searchTerm,\r\n autoSelectStudent,\r\n siteID\r\n );\r\n }\r\n } finally {\r\n if (student) {\r\n await this.setStudentData(\r\n student,\r\n skipAutoSale,\r\n skipBufferList,\r\n bufferedSide,\r\n alreadyBuffered\r\n );\r\n this.studentNotFound = false;\r\n\r\n if (\r\n bufferedSide == BufferedSide.None &&\r\n this.rootStore.terminalStore.terminalModel.terminalConfig &&\r\n this.rootStore.terminalStore.terminalModel.terminalConfig\r\n .birthdaySoundID !== 0 &&\r\n this.rootStore!.isToday(new Date(student!.birthDate!))\r\n ) {\r\n await this.rootStore!.playBirthdaySound();\r\n }\r\n } else if (\r\n terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n this.bufferList\r\n ) {\r\n const noStudent = this.createEmptyStudent(StudentType.Student);\r\n noStudent.pospin = +searchTerm;\r\n this.addStudentToBuffer(noStudent, bufferedSide);\r\n this.studentNotFound = false;\r\n } else {\r\n this.studentNotFound = true;\r\n await this.rootStore.playBuzz();\r\n }\r\n\r\n if (!this.isRosterMode) {\r\n this.clearSearch();\r\n }\r\n }\r\n }\r\n\r\n public handlePauseAllSessions = async () => {\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n this.rootStore.studentStore.studentModel.showGrabNGoSessionSelect = true;\r\n this.rootStore.terminalStore.terminalStateModel.gngDaySessionsToServe = [];\r\n posSessions!.forEach((ps) =>\r\n this.rootStore.terminalStore.terminalStateModel.gngDaySessionsToServe.push(\r\n ps.posSessionGUID\r\n )\r\n );\r\n };\r\n\r\n @action\r\n public selectStudent = async (\r\n searchTerm: string,\r\n autoSelectStudent: boolean,\r\n skipAutoSale: boolean,\r\n isPatronID: boolean,\r\n skipBufferList: boolean = false,\r\n bufferedSide: BufferedSide = BufferedSide.None,\r\n alreadyBuffered: boolean = false\r\n ): Promise => {\r\n this.logger.logMethodStart(\"selectStudent\");\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig },\r\n terminalStateModel: { gngDaySessionsToServe }\r\n }\r\n } = this.rootStore;\r\n\r\n // This is needed so that when we get to the end, we ONLY\r\n // reset the isLoadingStudent flag if we actually set it to\r\n // begin with. We wouldn't want to unset it just because\r\n // a student is loaded into the srv buffer, for instance.\r\n let loadingStudent = false;\r\n\r\n let {\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n if (\r\n posSessions &&\r\n this.serveAllModel.serveAllStudentIDs.length == 0 &&\r\n (!terminalConfig ||\r\n !terminalConfig.bufferedServing ||\r\n this.isRosterMode ||\r\n skipBufferList)\r\n ) {\r\n if (this.isLoadingStudent) {\r\n return false;\r\n } else {\r\n loadingStudent = true;\r\n this.isLoadingStudent = true;\r\n }\r\n }\r\n\r\n this.rootStore.terminalStore.terminalStateModel.patronTransactionsServed =\r\n [];\r\n\r\n this.isLoading =\r\n !terminalConfig ||\r\n !terminalConfig.bufferedServing ||\r\n this.isRosterMode ||\r\n (terminalConfig && terminalConfig.isGrabNGo);\r\n\r\n let sessionServed = 0;\r\n\r\n if (posSessions) {\r\n let p = Promise.resolve();\r\n this.rootStore.transactionStore.transactionModel.isGrabNGoVoid = false;\r\n this.rootStore.studentStore.studentModel.showAlert = false;\r\n posSessions = posSessions\r\n .slice()\r\n .sort((x, y) => x.sessionID - y.sessionID);\r\n posSessions = posSessions.slice().sort((x, y) => {\r\n const xDateSplit = x.servingDay.split(\"-\");\r\n const yDateSplit = y.servingDay.split(\"-\");\r\n const a = new Date(\r\n Number(xDateSplit[2]),\r\n Number(xDateSplit[0]) - 1,\r\n Number(xDateSplit[1]),\r\n 0,\r\n 0,\r\n 0\r\n ).valueOf();\r\n const b = new Date(\r\n Number(yDateSplit[2]),\r\n Number(yDateSplit[0]) - 1,\r\n Number(yDateSplit[1]),\r\n 0,\r\n 0,\r\n 0\r\n ).valueOf();\r\n return a - b;\r\n });\r\n\r\n const filteredPosSessions = this.gngPauseAllSessions\r\n ? posSessions.filter((ps) =>\r\n gngDaySessionsToServe.includes(ps.posSessionGUID)\r\n )\r\n : posSessions;\r\n\r\n filteredPosSessions.forEach((session, i) => {\r\n p = p.then(async () => {\r\n this.rootStore.terminalStore.terminalStateModel.activePOSSession =\r\n session;\r\n this.rootStore.terminalStore.terminalStateModel.servingGrabNGoInProgress =\r\n true;\r\n if (filteredPosSessions && i === filteredPosSessions.length - 1) {\r\n this.rootStore.studentStore.studentModel.showAlert = true;\r\n }\r\n\r\n await this.LoadStudent(\r\n isPatronID,\r\n searchTerm,\r\n autoSelectStudent,\r\n skipAutoSale,\r\n skipBufferList,\r\n bufferedSide,\r\n alreadyBuffered\r\n );\r\n\r\n sessionServed++;\r\n\r\n if (sessionServed === filteredPosSessions.length) {\r\n this.rootStore.studentStore.gngPauseAllSessions = false;\r\n this.rootStore.terminalStore.terminalStateModel.servingGrabNGoInProgress =\r\n false;\r\n this.rootStore.terminalStore.terminalStateModel.noIDButtonDisabled =\r\n false;\r\n this.rootStore.studentStore.fromHandleEnter = false;\r\n }\r\n\r\n if (loadingStudent) {\r\n this.isLoadingStudent = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n this.isLoading = false;\r\n return true;\r\n };\r\n\r\n @action\r\n public addStudentToBuffer = async (\r\n student: Student,\r\n bufferedSide: BufferedSide\r\n ) => {\r\n student.bufferedSide = bufferedSide;\r\n this.bufferList.push(student);\r\n };\r\n\r\n @action\r\n public setStudentData = async (\r\n student: Student,\r\n skipAutoSale: boolean,\r\n skipBufferList: boolean,\r\n bufferedSide: BufferedSide = BufferedSide.None,\r\n alreadyBuffered: boolean = false\r\n ) => {\r\n const {\r\n terminalStore: {\r\n terminalModel,\r\n terminalModel: { terminal, terminalConfig },\r\n terminalStateModel: { activePOSSession }\r\n },\r\n transactionStore\r\n } = this.rootStore;\r\n\r\n if (terminalModel.isTransactionSearch) {\r\n transactionStore.transactionHistoryPatronID =\r\n student.patronID || undefined;\r\n terminalModel.isTransactionSearch = false;\r\n return;\r\n }\r\n\r\n student.pricingGroupID = this.getPricingGroupID(\r\n student.patronTypeID,\r\n student.schoolID,\r\n student.gradeID\r\n );\r\n\r\n if (!student.allergies) {\r\n student.allergies = [];\r\n }\r\n\r\n await this.setHasBeenServed(\r\n student,\r\n activePOSSession!.sessionID,\r\n activePOSSession!.servingDay,\r\n !!student.patronID\r\n );\r\n\r\n if (!student.posLimits) {\r\n student.posLimits = [];\r\n }\r\n\r\n this.studentModel.pendingStudent = student;\r\n\r\n if (\r\n terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n this.studentModel.pendingStudent &&\r\n !skipBufferList\r\n ) {\r\n this.addStudentToBuffer(this.studentModel.pendingStudent, bufferedSide);\r\n this.clearPendingStudent();\r\n } else if (\r\n (terminalConfig && terminalConfig!.disableVisitingStudentPrompt) ||\r\n student.siteID === terminal!.siteID ||\r\n alreadyBuffered\r\n ) {\r\n await this.approvePendingStudent(\r\n skipAutoSale,\r\n skipBufferList,\r\n bufferedSide\r\n );\r\n }\r\n };\r\n\r\n @action\r\n public approvePendingStudent = async (\r\n skipAutoSale: boolean,\r\n skipBufferList: boolean = false,\r\n bufferedSide: BufferedSide = BufferedSide.None\r\n ) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n transactionStore: { generatePosPos }\r\n } = this.rootStore;\r\n\r\n if (\r\n terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n this.studentModel.pendingStudent &&\r\n !skipBufferList\r\n ) {\r\n await this.addStudentToBuffer(\r\n this.studentModel.pendingStudent,\r\n bufferedSide\r\n );\r\n } else if (this.studentModel.pendingStudent) {\r\n this.getSalesItemPrices(this.studentModel.pendingStudent);\r\n this.studentModel.student = this.studentModel.pendingStudent;\r\n this.rootStore.studentStore.studentModel.student =\r\n this.studentModel.student;\r\n\r\n await generatePosPos(false);\r\n }\r\n\r\n this.clearPendingStudent();\r\n\r\n if (\r\n !skipAutoSale &&\r\n (this.serveAllModel.isServeAllMode ||\r\n !terminalConfig ||\r\n !terminalConfig.bufferedServing ||\r\n skipBufferList)\r\n ) {\r\n this.rootStore.terminalStore.terminalModel.terminalConfig =\r\n terminalConfig;\r\n\r\n await this.autoServeAndQuickSale();\r\n } else {\r\n this.showMealService = true;\r\n }\r\n };\r\n\r\n @action\r\n public setBufferedStudent = async (student: Student) => {\r\n if (student && student.patronID) {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminal, terminalConfig }\r\n }\r\n } = this.rootStore;\r\n\r\n if (terminal!.siteID !== student.siteID) {\r\n const disablePatronIdSearch =\r\n terminalConfig && terminalConfig!.disablePatronIdSearch;\r\n const pinIsPrimary =\r\n disablePatronIdSearch ||\r\n (terminalConfig && terminalConfig!.pinIsPrimary);\r\n\r\n await this.selectStudent(\r\n pinIsPrimary\r\n ? (student.pospin || 0).toString()\r\n : student.patronNumber,\r\n true,\r\n false,\r\n false,\r\n true,\r\n undefined,\r\n true\r\n );\r\n } else {\r\n await this.selectStudent(\r\n student.patronID.toString(),\r\n false,\r\n false,\r\n true,\r\n true,\r\n undefined,\r\n true\r\n );\r\n }\r\n }\r\n };\r\n\r\n @action public setBufferedSearch = async (isSearch: boolean) => {\r\n this.isBufferSearch = isSearch;\r\n };\r\n\r\n @action\r\n public createNoStudent = async (\r\n patronTypeID: StudentType,\r\n salesItemHeaderID?: number\r\n ) => {\r\n const student = this.createEmptyStudent(patronTypeID);\r\n\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { posSessions }\r\n }\r\n } = this.rootStore;\r\n\r\n this.rootStore.terminalStore.terminalStateModel.activePOSSession =\r\n posSessions![0];\r\n\r\n this.getSalesItemPrices(student, salesItemHeaderID);\r\n this.studentModel.student = student;\r\n await this.rootStore.transactionStore.generatePosPos(false);\r\n };\r\n\r\n @action\r\n public autoSelectStudent = (\r\n searchTerm: string,\r\n bufferedSide: BufferedSide = BufferedSide.None\r\n ) => {\r\n this.selectStudent(searchTerm, true, false, false, false, bufferedSide);\r\n };\r\n\r\n public handleQuickSale = async () => {\r\n const {\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n transactionStore: {\r\n completeTransaction,\r\n transactionModel: { posTransactions }\r\n },\r\n studentStore,\r\n transactionStore\r\n } = this.rootStore;\r\n\r\n let chargeLimitMet = transactionStore.getChargeLimitMet();\r\n let prepaidLimitMet = transactionStore.getPrepaidLimitMet(0);\r\n\r\n if (\r\n ((terminalStore.quickSale && !this.isQuickSalePaused) ||\r\n studentStore.serveAllModel.isServeAllMode) &&\r\n (!!studentStore.studentModel.student!.patronID ||\r\n terminalConfig!.isGrabNGo) &&\r\n terminalStore.getAutoItem(\r\n studentStore.studentModel.student!.patronTypeID\r\n ) &&\r\n posTransactions &&\r\n posTransactions.length > 0 &&\r\n (!chargeLimitMet || (chargeLimitMet && terminalConfig!.isGrabNGo)) &&\r\n !prepaidLimitMet &&\r\n (terminalConfig!.autoCharge || transactionStore.getAccountAmount >= 0)\r\n ) {\r\n await completeTransaction({\r\n transactionType: studentStore.studentModel.student!.patronID\r\n ? TransactionType.Account\r\n : TransactionType.QuickCash\r\n });\r\n } else {\r\n this.showMealService = true;\r\n }\r\n };\r\n\r\n private async searchPatronLocally(\r\n isPatronID: boolean,\r\n student: Student | null,\r\n searchTerm: string,\r\n autoSelectStudent: boolean,\r\n siteID: number\r\n ) {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.rootStore;\r\n const students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n\r\n if (isPatronID) {\r\n student =\r\n students.find((s) => (s.patronID || 0).toString() === searchTerm) ||\r\n null;\r\n }\r\n\r\n if (!student && autoSelectStudent) {\r\n const disablePatronIdSearch =\r\n terminalConfig && terminalConfig!.disablePatronIdSearch;\r\n const pinIsPrimary =\r\n disablePatronIdSearch ||\r\n (terminalConfig && terminalConfig!.pinIsPrimary);\r\n const allowVisitingPatrons =\r\n !terminalConfig || terminalConfig.allowVisitingPatrons;\r\n const allowAdultVisitingPatrons =\r\n !terminalConfig || terminalConfig.allowAdultVisitingPatrons;\r\n\r\n const firstSearch = students.filter(\r\n (s) =>\r\n ((allowVisitingPatrons && s.isStudent) ||\r\n (allowAdultVisitingPatrons && !s.isStudent) ||\r\n s.siteID === siteID) &&\r\n (pinIsPrimary\r\n ? (s.pospin || 0).toString() === searchTerm\r\n : s.patronNumber === searchTerm.toString())\r\n );\r\n\r\n if (firstSearch.length === 1) {\r\n student = firstSearch[0];\r\n } else if (\r\n firstSearch.length > 1 &&\r\n !allowVisitingPatrons &&\r\n !allowAdultVisitingPatrons &&\r\n firstSearch.filter((s) => s.siteID === siteID).length === 1\r\n ) {\r\n student = firstSearch.find((s) => s.siteID === siteID) || null;\r\n }\r\n\r\n if (student === null && !disablePatronIdSearch) {\r\n const secondSearch = students.filter(\r\n (s) =>\r\n ((allowVisitingPatrons && s.isStudent) ||\r\n (allowAdultVisitingPatrons && !s.isStudent) ||\r\n s.siteID === siteID) &&\r\n (!pinIsPrimary\r\n ? (s.pospin || 0).toString() === searchTerm\r\n : s.patronNumber === searchTerm.toString())\r\n );\r\n\r\n if (secondSearch.length === 1) {\r\n student = secondSearch[0];\r\n } else if (\r\n secondSearch.length > 1 &&\r\n !allowVisitingPatrons &&\r\n !allowAdultVisitingPatrons &&\r\n secondSearch.filter((s) => s.siteID === siteID).length === 1\r\n ) {\r\n student = secondSearch.find((s) => s.siteID === siteID) || null;\r\n }\r\n }\r\n }\r\n return student;\r\n }\r\n\r\n public sortStudents(\r\n students: Student[],\r\n sortByFirstName: boolean\r\n ): Student[] {\r\n return students.slice().sort((a, b) => {\r\n const nameA = sortByFirstName\r\n ? a.firstName.toUpperCase()\r\n : a.lastName.toUpperCase();\r\n const nameB = sortByFirstName\r\n ? b.firstName.toUpperCase()\r\n : b.lastName.toUpperCase();\r\n return nameA < nameB ? -1 : nameA > nameB ? 1 : 0;\r\n });\r\n }\r\n\r\n public serveAutoItem = async () => {\r\n await this.autoServeAndQuickSale();\r\n };\r\n\r\n private setHasBeenServed = async (\r\n student: Student,\r\n sessionID: number,\r\n servingDay: string,\r\n setTransactions: boolean,\r\n checkEtrition: boolean = true\r\n ) => {\r\n if (setTransactions) {\r\n student.transactions = await this.rootStore.db.getStudentTransactions(\r\n sessionID,\r\n servingDay,\r\n student.patronID || 0\r\n );\r\n }\r\n\r\n // Even if we find the student in index db,\r\n // we still need to check against etrition for ALL transactions, not just\r\n // the ones in index db, so load them from eTrition\r\n if (checkEtrition) {\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetStudentTransactions`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n patronID: student.patronID,\r\n patronNumber: student.patronNumber,\r\n serviceDate: servingDay,\r\n posTransactionIDs: this.getAllTransactions(student).map(\r\n (s) => s.posTransactionID\r\n )\r\n })\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const eTritionTransactions: Map = new Map(\r\n Object.entries(await response.json())\r\n );\r\n\r\n if (eTritionTransactions) {\r\n for (const [key, value] of eTritionTransactions.entries()) {\r\n this.addTransactionsForSession(student, Number(key), value);\r\n }\r\n }\r\n this.logger.logFetchData(\"selectStudent\", student);\r\n }\r\n } catch (error) {\r\n this.logger.error(error);\r\n }\r\n }\r\n\r\n // only look at the current session transactions for hasBeenServed\r\n const transactions = this.getTransactionsForSession(student, sessionID);\r\n\r\n const deletedPosPosGuids = transactions\r\n .filter((t) => !!t.deletedPosPosGuid)\r\n .map((t) => t.deletedPosPosGuid);\r\n\r\n student.hasBeenServed = transactions.some(\r\n (t) =>\r\n ((sessionID !== SessionType.Snack && !!t.isMeal && t.reimbursable) ||\r\n (sessionID === SessionType.Snack &&\r\n t.saleItemGroupID! === ItemGroupType.ReimbSnack)) &&\r\n t.quantity !== 0 &&\r\n !deletedPosPosGuids.includes(t.posPosGuid) &&\r\n !t.deletedPosPosGuid\r\n );\r\n };\r\n\r\n private createEmptyStudent = (patronTypeID: StudentType): Student => {\r\n const { schoolID, schoolTypeID, schoolName, siteID } =\r\n this.rootStore.terminalStore.terminalModel.terminal!;\r\n\r\n return {\r\n patronID: null,\r\n firstName:\r\n patronTypeID === StudentType.Student ? \"Student\" : \"Non-Student\",\r\n lastName: \"Cash\",\r\n patronNumber: \"\",\r\n schoolTypeID,\r\n schoolID,\r\n schoolName,\r\n gradeID: 0,\r\n gradeLevel: \"\",\r\n birthDate: undefined,\r\n eligibilityStatusID: EligibilityStatus.Paid,\r\n eligSubStatusID: EligSubStatus.None,\r\n patronTypeID,\r\n allergies: [],\r\n pricingGroupID: this.getPricingGroupID(patronTypeID, schoolID, 0),\r\n hasPicture: false,\r\n hasBeenServed: false,\r\n account: { accountID: null, amount: 0, origAmount: 0 },\r\n accountSchoolID: null,\r\n posLimits: [],\r\n isReimbursable: false,\r\n isStudent: patronTypeID === StudentType.Student,\r\n transactions: new Map(),\r\n chargeLimit: null,\r\n noChecksAccepted: false,\r\n siteID,\r\n isSelected: false,\r\n bufferedSide: BufferedSide.None,\r\n lastPurchaseDates: null\r\n };\r\n };\r\n\r\n @action\r\n private getSalesItemPrices = (\r\n student: Student,\r\n salesItemHeaderID?: number\r\n ) => {\r\n const {\r\n terminalStore,\r\n transactionStore,\r\n terminalStore: {\r\n terminalModel: {\r\n breakfastSalesHeaderID,\r\n lunchSalesHeaderID,\r\n posLayout,\r\n salesItemHeaders\r\n },\r\n terminalStateModel: { posSessions },\r\n getEffectivePriceDateID\r\n }\r\n } = this.rootStore;\r\n\r\n const salesItemPrices: SalesItemPrice[] = [];\r\n\r\n const salesItemHeaderIDs = [lunchSalesHeaderID, breakfastSalesHeaderID];\r\n\r\n if (salesItemHeaderID) {\r\n salesItemHeaderIDs.push(salesItemHeaderID);\r\n }\r\n\r\n if (posLayout) {\r\n posLayout.items.forEach((item) => {\r\n if (item.salesItemHeaderID) {\r\n salesItemHeaderIDs.push(item.salesItemHeaderID);\r\n }\r\n });\r\n\r\n terminalStore.setMealCombining(posSessions![0].sessionID, student);\r\n\r\n if (transactionStore.mealCombining) {\r\n transactionStore.mealCombining.prices.forEach((price) => {\r\n salesItemHeaderIDs.push(price.salesItemHeaderID);\r\n });\r\n }\r\n }\r\n\r\n const effectivePriceDateID = getEffectivePriceDateID();\r\n\r\n new Set(salesItemHeaderIDs).forEach((salesItemHeaderID) => {\r\n const salesItem = salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === salesItemHeaderID\r\n );\r\n\r\n if (salesItem && effectivePriceDateID) {\r\n const salesItemPrice = this.getPriceForSalesItem(\r\n student,\r\n salesItem,\r\n effectivePriceDateID\r\n );\r\n\r\n if (salesItemPrice) {\r\n salesItemPrices.push(salesItemPrice);\r\n }\r\n\r\n if (salesItem.alternateSalesItemHeaderID) {\r\n const altSalesItem = salesItemHeaders!.find(\r\n (x) => x.salesItemHeaderID === salesItem.alternateSalesItemHeaderID\r\n );\r\n\r\n if (altSalesItem) {\r\n const altSalesItemPrice = this.getPriceForSalesItem(\r\n student,\r\n altSalesItem,\r\n effectivePriceDateID\r\n );\r\n\r\n if (altSalesItemPrice) {\r\n salesItemPrices.push(altSalesItemPrice);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.studentModel.salesItemPrices = observable.array(salesItemPrices);\r\n };\r\n\r\n private getPriceForSalesItem = (\r\n student: Student,\r\n salesItem: SalesItemHeader,\r\n effectivePriceDateID: number\r\n ) => {\r\n let salesItemPrice: SalesItemPrice | undefined;\r\n\r\n const priceList = [...salesItem.priceList].filter(\r\n (p) => p.effectiveDateID === effectivePriceDateID\r\n );\r\n\r\n // look for price by patron group\r\n let price = priceList.find(\r\n (x) => x.pricingGroupID === student.pricingGroupID\r\n );\r\n\r\n if (!price) {\r\n // if there is no price for the patron group, search by patron type\r\n price = priceList.find(\r\n (x) => !x.pricingGroupID && x.patronTypeID === student.patronTypeID\r\n );\r\n }\r\n\r\n if (!price) {\r\n // if there is no price for patron type, search for a price that doesnt have PricingGroupID and PatronTypeID\r\n price = priceList.find((x) => !x.pricingGroupID && !x.patronTypeID);\r\n }\r\n\r\n if (price) {\r\n salesItemPrice = {\r\n salesItemHeaderID: salesItem.salesItemHeaderID,\r\n itemPrice: 0\r\n };\r\n\r\n if (salesItem.itemGroupEligibilityPricing) {\r\n if (this.isFreeStudent(student)) {\r\n salesItemPrice.itemPrice = 0;\r\n } else if (this.isReducedStudent(student)) {\r\n salesItemPrice.itemPrice = price.reducedPrice;\r\n } else {\r\n salesItemPrice.itemPrice = price.paidPrice;\r\n }\r\n } else {\r\n salesItemPrice.itemPrice = price.paidPrice;\r\n }\r\n }\r\n\r\n return salesItemPrice;\r\n };\r\n\r\n public isFreeStudent(student: Student) {\r\n return (\r\n student.eligibilityStatusID === EligibilityStatus.Free ||\r\n student.eligSubStatusID === EligSubStatus.OregonPaid\r\n );\r\n }\r\n\r\n public isReducedStudent(student: Student) {\r\n return student.eligibilityStatusID === EligibilityStatus.Reduced;\r\n }\r\n\r\n public isPaidStudent(student: Student) {\r\n return !this.isFreeStudent(student) && !this.isReducedStudent(student);\r\n }\r\n\r\n public isLowCredit(student: Student | undefined): boolean {\r\n const { transactionStore } = this.rootStore;\r\n const lowBalanceLimit = transactionStore.getLowBalanceLimit;\r\n\r\n return (\r\n lowBalanceLimit !== null &&\r\n !!student &&\r\n student.patronID! > 0 &&\r\n student.account.amount <= lowBalanceLimit\r\n );\r\n }\r\n\r\n public getAllTransactions(student: Student | undefined): PosTransaction[] {\r\n let allStudentTransactions: PosTransaction[] = [];\r\n if (student && student!.transactions) {\r\n // for some reason using the 'instanceof' operator doesn't work for the transactions map\r\n // having to cast it here and check if a function of the map exists\r\n // still not sure why the transactions are ever something other than a map in the first place\r\n const transactions = student!.transactions as Map<\r\n number,\r\n PosTransaction[]\r\n >;\r\n if (transactions.has !== undefined) {\r\n allStudentTransactions = [...student!.transactions.values()].reduce(\r\n (prev, curr) => prev.concat(curr),\r\n []\r\n );\r\n }\r\n }\r\n return allStudentTransactions;\r\n }\r\n\r\n public getTransactionsForSession(\r\n student: Student | undefined,\r\n sessionID: number\r\n ): PosTransaction[] {\r\n let studentTransactions: PosTransaction[] = [];\r\n if (student && student!.transactions) {\r\n // for some reason using the 'instanceof' operator doesn't work for the transactions map\r\n // having to cast it here and check if a function of the map exists\r\n // still not sure why the transactions are ever something other than a map in the first place\r\n const transactions = student!.transactions as Map<\r\n number,\r\n PosTransaction[]\r\n >;\r\n if (\r\n transactions.has !== undefined &&\r\n student!.transactions.has(sessionID)\r\n ) {\r\n studentTransactions = student!.transactions.get(sessionID)!;\r\n }\r\n }\r\n return studentTransactions;\r\n }\r\n\r\n public addTransactionsForSession(\r\n student: Student | undefined,\r\n sessionID: number,\r\n transactions: PosTransaction[]\r\n ): void {\r\n if (student && student!.transactions) {\r\n // for some reason using the 'instanceof' operator doesn't work for the transactions map\r\n // having to cast it here and check if a function of the map exists\r\n // still not sure why the transactions are ever something other than a map in the first place\r\n const transactionsMap = student!.transactions as Map<\r\n number,\r\n PosTransaction[]\r\n >;\r\n if (transactionsMap.has === undefined) {\r\n student!.transactions = new Map();\r\n }\r\n if (!student!.transactions.has(sessionID)) {\r\n student!.transactions.set(sessionID, []);\r\n }\r\n const t = student!.transactions.get(sessionID)!.concat(transactions);\r\n student!.transactions.set(sessionID, t);\r\n }\r\n }\r\n\r\n @computed\r\n public get isLowCreditPopup(): boolean {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.rootStore;\r\n\r\n const { student } = this.studentModel;\r\n\r\n return (\r\n !!terminalConfig &&\r\n terminalConfig.popupLowCreditWarning &&\r\n !this.serveAllModel.isServeAllMode &&\r\n this.isLowCredit(student)\r\n );\r\n }\r\n\r\n @computed\r\n public get isNewLowCreditPopup(): boolean {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n transactionStore\r\n } = this.rootStore;\r\n\r\n if (\r\n this.previousStudentModel &&\r\n this.previousStudentModel.previousTransactionType ===\r\n TransactionType.Account\r\n ) {\r\n const { student, previousTransactions } = this.previousStudentModel!;\r\n const lowBalanceLimit = transactionStore.getLowBalanceLimit;\r\n\r\n const newBalance = Number(\r\n (\r\n student!.account.amount +\r\n previousTransactions!\r\n .filter((t) => !t.hide && t.quantity > 0)\r\n .map((t) => t.accountAmount)\r\n .reduce((acc, curr) => acc + curr, 0)\r\n ).toFixed(2)\r\n );\r\n\r\n return (\r\n !!terminalConfig &&\r\n terminalConfig.popupLowCreditWarning &&\r\n lowBalanceLimit !== null &&\r\n student!.patronID! > 0 &&\r\n student!.account.amount > lowBalanceLimit &&\r\n newBalance <= lowBalanceLimit\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @computed\r\n public get isShowAlertPopup(): boolean {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.rootStore;\r\n const { student } = this.studentModel;\r\n\r\n return (\r\n ((student!.allergies && student!.allergies.length > 0) ||\r\n (terminalConfig!.popuptAlertMesssage && !!student!.alertMessage)) &&\r\n (!this.serveAllModel.isServeAllMode ||\r\n this.serveAllModel.showAlertsInServeAll)\r\n );\r\n }\r\n\r\n @computed\r\n public get isShowParentAlertPopup(): boolean {\r\n const {\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.rootStore;\r\n const { student } = this.studentModel;\r\n\r\n return (\r\n terminalConfig!.popuptAlertMesssage &&\r\n !!student!.parentAlertMessage &&\r\n (!terminalConfig!.parentAlertLowBalanceOnly ||\r\n studentStore.isLowCredit(student)) &&\r\n (!this.serveAllModel.isServeAllMode ||\r\n this.serveAllModel.showAlertsInServeAll)\r\n );\r\n }\r\n\r\n private getPricingGroupID = (\r\n patronTypeID: number,\r\n schoolID: number,\r\n gradeID: number\r\n ): number | undefined => {\r\n const { pricingGroups } = this.rootStore.terminalStore.terminalModel;\r\n let pricingGroupID;\r\n\r\n if (!pricingGroups) {\r\n return pricingGroupID;\r\n }\r\n\r\n const patronTypePricingGroups = pricingGroups.filter(\r\n (pg) => pg.patronTypeID === patronTypeID\r\n );\r\n\r\n let grade: boolean = false;\r\n let school: boolean = false;\r\n\r\n if (patronTypePricingGroups) {\r\n patronTypePricingGroups.forEach((pg) => {\r\n grade = !pg.grades.length || pg.grades.some((g) => g === gradeID);\r\n school = !pg.schools.length || pg.schools.some((s) => s === schoolID);\r\n\r\n if (grade && school) {\r\n pricingGroupID = pg.pricingGroupID;\r\n }\r\n });\r\n }\r\n\r\n return pricingGroupID;\r\n };\r\n\r\n private calcHasBeenServed = (s: Student, sessionID: number) => {\r\n if (s.patronID === this.previousStudentModel!.student!.patronID) {\r\n // only look at the current session transactions for hasBeenServed\r\n const transactions = this.getTransactionsForSession(s, sessionID);\r\n\r\n const deletedPosPosGuids = transactions\r\n .filter((t) => !!t.deletedPosPosGuid)\r\n .map((t) => t.deletedPosPosGuid);\r\n\r\n s.hasBeenServed = transactions.some(\r\n (t) =>\r\n ((sessionID !== SessionType.Snack && !!t.isMeal && t.reimbursable) ||\r\n (sessionID === SessionType.Snack &&\r\n t.saleItemGroupID! === ItemGroupType.ReimbSnack)) &&\r\n t.quantity !== 0 &&\r\n !deletedPosPosGuids.includes(t.posPosGuid) &&\r\n !t.deletedPosPosGuid\r\n );\r\n }\r\n };\r\n\r\n @action\r\n private autoServeAndQuickSale = async () => {\r\n const { student } = this.studentModel;\r\n const {\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n transactionStore,\r\n transactionStore: { addTransaction },\r\n studentStore: { studentModel }\r\n } = this.rootStore;\r\n\r\n if (student) {\r\n const autoItem = terminalStore.getAutoItem(student.patronTypeID);\r\n if (\r\n autoItem &&\r\n autoItem.salesItem &&\r\n autoItem.layoutItem &&\r\n !autoItem.salesItem.salesItemLimitMet\r\n ) {\r\n transactionStore.clearIfAdding = !terminalConfig!.addItems;\r\n addTransaction(\r\n autoItem.layoutItem.salesItemHeaderID!,\r\n autoItem.layoutItem.posLayoutItemID,\r\n autoItem.salesItem.disableCharge(),\r\n undefined\r\n );\r\n\r\n if (\r\n !this.isShowParentAlertPopup &&\r\n !this.isShowAlertPopup &&\r\n !this.isLowCreditPopup\r\n ) {\r\n await this.handleQuickSale();\r\n } else if (\r\n terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n !studentModel.showAlert\r\n ) {\r\n await this.handleQuickSale();\r\n } else {\r\n this.rootStore.transactionStore.transactionProcessing = false;\r\n this.showMealService = true;\r\n }\r\n } else if (\r\n terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n autoItem &&\r\n autoItem.salesItem &&\r\n autoItem.salesItem.salesItemLimitMet\r\n ) {\r\n if (studentModel.showAlert) {\r\n this.rootStore.transactionStore.transactionProcessing = false;\r\n if (\r\n (terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n terminalStore.terminalStateModel.patronTransactionsServed.length >\r\n 0) ||\r\n (terminalConfig && !terminalConfig.isGrabNGo)\r\n ) {\r\n await this.rootStore.playRegister();\r\n }\r\n }\r\n } else {\r\n this.rootStore.transactionStore.transactionProcessing = false;\r\n this.showMealService = true;\r\n }\r\n } else {\r\n this.rootStore.transactionStore.transactionProcessing = false;\r\n this.showMealService = true;\r\n }\r\n };\r\n\r\n private syncStudents = async (\r\n students: Student[],\r\n updateLastSync: boolean\r\n ) => {\r\n if (students && students.length) {\r\n if (updateLastSync) {\r\n const lastSyncDate = Math.max.apply(\r\n undefined,\r\n students.map((s) => new Date(s.lastUpdatedDate || 0).getTime())\r\n );\r\n\r\n if (lastSyncDate) {\r\n this.lastSyncDate = new Date(lastSyncDate);\r\n }\r\n }\r\n\r\n for (const student of students) {\r\n if (student.patronID) {\r\n const dbStudent = await this.rootStore.db.get(\r\n ObjectStores.Patron,\r\n student.patronID,\r\n \"patronID\"\r\n );\r\n\r\n if (!dbStudent) {\r\n this.rootStore.db.add(ObjectStores.Patron, student);\r\n } else {\r\n const updatedStudent = { ...dbStudent, ...student };\r\n this.rootStore.db.put(ObjectStores.Patron, updatedStudent);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import * as React from \"react\";\r\nimport {\r\n Grid,\r\n Modal,\r\n Button,\r\n Segment,\r\n Item,\r\n Input,\r\n Label,\r\n Popup\r\n} from \"semantic-ui-react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport StudentAlert from \"./StudentAlert\";\r\nimport TotalSale from \"../meal/TotalSale\";\r\nimport TransactionStore, {\r\n TransactionType,\r\n ShowBalance\r\n} from \"../../stores/TransactionStore\";\r\nimport StudentCard from \"./StudentCard\";\r\nimport TransactionHeader from \"../meal/TransactionHeader\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport { observer } from \"mobx-react\";\r\n\r\ninterface Props {\r\n canVoid: boolean;\r\n customerID: string;\r\n overridePassword: string;\r\n studentStore: StudentStore;\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n invalidPassword: boolean;\r\n override: boolean;\r\n overridePassword: string;\r\n isRedo: boolean;\r\n isVoided: boolean;\r\n showLowCreditWarning: boolean;\r\n layoutName: string;\r\n layout: any;\r\n isOpen: boolean;\r\n reasonForDelete: string;\r\n reasonForDeleteRequired: boolean;\r\n inputName: string;\r\n lastPatronID: number | null;\r\n}\r\n\r\nenum FocusedElement {\r\n OverridePassword = \"overridePassword\",\r\n ReasonForDelete = \"reasonForDelete\"\r\n}\r\n\r\n@observer\r\nexport default class PreviousStudent extends React.Component {\r\n private overrideBox: React.RefObject;\r\n private reasonForDeleteBox: React.RefObject;\r\n private modalKeyboardRef: React.RefObject;\r\n private keyboardUtils: KeyboardUtils = new KeyboardUtils();\r\n private timeoutLength = 2500;\r\n private printPopupTimer: NodeJS.Timeout;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.overrideBox = React.createRef();\r\n this.reasonForDeleteBox = React.createRef();\r\n this.modalKeyboardRef = React.createRef();\r\n this.printPopupTimer = setTimeout(() => {\r\n //\r\n }, 1);\r\n\r\n this.state = {\r\n invalidPassword: false,\r\n showLowCreditWarning: this.props.studentStore.isNewLowCreditPopup,\r\n override: false,\r\n overridePassword: \"\",\r\n isRedo: false,\r\n isVoided: this.props.studentStore.previousStudentModel\r\n ? this.props.studentStore.previousStudentModel\r\n .previousTransactionType === TransactionType.Void\r\n : false,\r\n layoutName: \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ]\r\n },\r\n isOpen: false,\r\n reasonForDelete: \"\",\r\n reasonForDeleteRequired: false,\r\n inputName: \"\",\r\n lastPatronID: null\r\n };\r\n }\r\n\r\n public componentDidUpdate(_: Props, prevState: State) {\r\n const {\r\n studentStore: { previousStudentModel }\r\n } = this.props;\r\n\r\n if (\r\n previousStudentModel &&\r\n previousStudentModel.student &&\r\n (this.state.lastPatronID !== previousStudentModel.student.patronID ||\r\n (this.state.isVoided &&\r\n prevState.isVoided &&\r\n this.state.lastPatronID === previousStudentModel.student.patronID &&\r\n previousStudentModel.voidedTransactionType === undefined))\r\n ) {\r\n this.setState({\r\n isVoided: false,\r\n lastPatronID: previousStudentModel.student.patronID\r\n });\r\n }\r\n }\r\n\r\n public handleLowCreditWarningClick = () => {\r\n this.setState((prevState) => ({\r\n showLowCreditWarning: !prevState.showLowCreditWarning\r\n }));\r\n };\r\n\r\n public cancelOverride = () => {\r\n this.setState({\r\n override: false,\r\n isRedo: false,\r\n overridePassword: \"\",\r\n invalidPassword: false,\r\n reasonForDelete: \"\",\r\n reasonForDeleteRequired: false\r\n });\r\n };\r\n\r\n public handleOverrideEnter = (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n this.overrideVoidTransactionModal();\r\n }\r\n };\r\n\r\n public handleReasonForDelete = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n reasonForDelete: e.currentTarget.value\r\n });\r\n };\r\n\r\n public handleOverridePassword = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n overridePassword: e.currentTarget.value,\r\n invalidPassword: false\r\n });\r\n };\r\n\r\n public overrideVoidTransactionModal = async () => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n transactionStore\r\n } = this.props;\r\n\r\n const reasonForDeleteRequired =\r\n !!terminalConfig &&\r\n terminalConfig.reasonForDelete &&\r\n !this.state.reasonForDelete;\r\n\r\n const invalidPassword =\r\n !!this.props.overridePassword &&\r\n this.props.overridePassword !== this.state.overridePassword;\r\n\r\n if (!invalidPassword && !reasonForDeleteRequired) {\r\n const { previousStudentModel } = this.props.studentStore;\r\n\r\n if (\r\n previousStudentModel &&\r\n previousStudentModel.previousTransactions &&\r\n this.state.reasonForDelete !== \"\"\r\n ) {\r\n previousStudentModel.previousTransactions.forEach((t) => {\r\n t.transComment = this.state.reasonForDelete;\r\n });\r\n }\r\n\r\n if (this.state.isRedo) {\r\n this.props.transactionStore.redoTransaction();\r\n } else if (terminalConfig && terminalConfig.isGrabNGo) {\r\n await transactionStore.voidGrabNGoTransactions();\r\n this.setState({\r\n reasonForDelete: \"\",\r\n overridePassword: \"\"\r\n });\r\n } else {\r\n this.props.transactionStore.voidTransaction();\r\n }\r\n\r\n this.setState({\r\n isRedo: false,\r\n isVoided: true,\r\n override: false,\r\n invalidPassword: false,\r\n reasonForDeleteRequired: false\r\n });\r\n } else {\r\n this.setState({ invalidPassword, reasonForDeleteRequired });\r\n\r\n if (this.overrideBox.current) {\r\n this.overrideBox.current.focus();\r\n }\r\n }\r\n };\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n if (this.state.inputName === FocusedElement.OverridePassword.toString()) {\r\n this.setState({\r\n overridePassword: inputObject[\"overridePassword\"]\r\n });\r\n } else if (\r\n this.state.inputName === FocusedElement.ReasonForDelete.toString()\r\n ) {\r\n this.setState({\r\n reasonForDelete: inputObject[\"reasonForDelete\"]\r\n });\r\n }\r\n };\r\n\r\n public handleEnter = () => {\r\n this.overrideVoidTransactionModal();\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\") {\r\n this.handleEnter();\r\n }\r\n };\r\n\r\n public handleOnKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n this.keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (this.keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue =\r\n this.state.inputName === FocusedElement.OverridePassword\r\n ? this.state.overridePassword\r\n : this.state.reasonForDelete;\r\n const newValue = !isBackSpace\r\n ? stateValue + this.keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : stateValue.toString().slice(0, -1);\r\n\r\n if (this.state.inputName === FocusedElement.OverridePassword) {\r\n this.setState({\r\n overridePassword: newValue\r\n });\r\n this.modalKeyboardRef.current!.keyboard.input.overridePassword =\r\n newValue;\r\n } else if (this.state.inputName === FocusedElement.ReasonForDelete) {\r\n this.setState({\r\n reasonForDelete: newValue\r\n });\r\n this.modalKeyboardRef.current!.keyboard.input.reasonForDelete =\r\n newValue;\r\n }\r\n }\r\n }\r\n };\r\n\r\n public handleClose = () => {\r\n this.setState({ isOpen: false });\r\n clearTimeout(this.printPopupTimer);\r\n };\r\n\r\n public handleOpen = () => {\r\n this.setState({ isOpen: true });\r\n\r\n this.printPopupTimer = setTimeout(() => {\r\n this.setState({ isOpen: false });\r\n }, this.timeoutLength);\r\n };\r\n\r\n public handleRedoTransaction = async () => {\r\n this.setState({ override: true, isRedo: true });\r\n };\r\n\r\n public handleReServeStudent = async () => {\r\n const {\r\n studentStore: { previousStudentModel }\r\n } = this.props;\r\n\r\n if (previousStudentModel && previousStudentModel.student) {\r\n this.props.studentStore.selectStudent(\r\n previousStudentModel.student!.patronID!.toString(),\r\n false,\r\n true,\r\n true\r\n );\r\n }\r\n };\r\n\r\n public handleVoidTransaction = async () => {\r\n this.setState({ override: true }, () => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.props;\r\n if (\r\n terminalConfig &&\r\n terminalConfig.reasonForDelete &&\r\n this.reasonForDeleteBox.current\r\n ) {\r\n this.reasonForDeleteBox.current.focus();\r\n } else if (this.overrideBox.current) {\r\n this.overrideBox.current.focus();\r\n }\r\n });\r\n };\r\n\r\n public printReminder = () => {\r\n this.props.transactionStore.printReminder(\r\n this.props.transactionStore.lastPosPos!\r\n );\r\n };\r\n\r\n public printReceipt = () => {\r\n this.props.transactionStore.printReceipt(\r\n this.props.transactionStore.lastPosPos!\r\n );\r\n };\r\n\r\n public handleKeyboardFocus(element: FocusedElement) {\r\n this.setState({\r\n inputName: element.toString()\r\n });\r\n }\r\n\r\n public render() {\r\n const {\r\n canVoid,\r\n customerID,\r\n studentStore: { previousStudentModel, isRosterMode }\r\n } = this.props;\r\n\r\n if (previousStudentModel && previousStudentModel.student) {\r\n const {\r\n previousAmount,\r\n previousTotal,\r\n previousTransactionType,\r\n voidedTransactionType,\r\n previousTransactions,\r\n student\r\n } = previousStudentModel;\r\n\r\n const {\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig, isCreditPatrons },\r\n terminalStateModel: { patronTransactionsServed }\r\n },\r\n transactionStore: {\r\n transactionModel: { isGrabNGoVoid }\r\n }\r\n } = this.props;\r\n\r\n let amountTendered: number | undefined;\r\n let change: number | undefined;\r\n let creditAmount: number | undefined;\r\n let refundAmount: number | undefined;\r\n let newBalance: number | undefined;\r\n let transactionType: string = \"\";\r\n const smallDisplay =\r\n isRosterMode || (!!terminalConfig && terminalConfig.bufferedServing);\r\n\r\n const showBalance = terminalConfig\r\n ? terminalConfig.showBalance\r\n : ShowBalance.Never;\r\n const lowBalanceLimit = this.props.transactionStore.getLowBalanceLimit;\r\n const isCancelled = previousTransactionType === TransactionType.Cancelled;\r\n const canPrintReminder = student.patronID && !isCreditPatrons;\r\n\r\n const canVoidRedo =\r\n canVoid && !this.state.isVoided && !isCancelled && !isCreditPatrons;\r\n const canServeAgain =\r\n student.patronID && !smallDisplay && !isCreditPatrons;\r\n const canPrintReceipt = !this.state.isVoided && !isCancelled;\r\n const showButtonsColumn = canVoidRedo || canPrintReceipt || canServeAgain;\r\n\r\n const hideDetail = terminalConfig\r\n ? terminalStore.quickSale &&\r\n terminalConfig.hideTransactionDetailWhenQuickSale\r\n : false;\r\n\r\n const hideTotal =\r\n terminalConfig && terminalConfig.hideEndBalanceAndTransTotals;\r\n\r\n const priorTransactionType = this.state.isVoided\r\n ? voidedTransactionType\r\n : previousTransactionType;\r\n\r\n newBalance =\r\n student!.account.amount +\r\n (!this.state.isVoided\r\n ? previousStudentModel.previousAccountAdjustAmount || 0\r\n : 0);\r\n\r\n if (isGrabNGoVoid) {\r\n let totalVoidAmount = 0;\r\n patronTransactionsServed.forEach((patronTransaction) => {\r\n patronTransaction.transactionInfo.posTransactions.forEach(\r\n (posTransaction) => {\r\n totalVoidAmount += posTransaction.amount;\r\n }\r\n );\r\n });\r\n newBalance = student!.account.amount + totalVoidAmount;\r\n }\r\n\r\n if (\r\n isCancelled ||\r\n student!.patronID === null ||\r\n showBalance === ShowBalance.Never ||\r\n (showBalance === ShowBalance.WhenLow &&\r\n (lowBalanceLimit === null || newBalance > lowBalanceLimit))\r\n ) {\r\n newBalance = undefined;\r\n }\r\n\r\n switch (+priorTransactionType!) {\r\n case TransactionType.Account:\r\n transactionType = \"Account\";\r\n amountTendered = 0;\r\n creditAmount = 0;\r\n break;\r\n case TransactionType.ChangeCash:\r\n transactionType = \"Cash\";\r\n amountTendered = previousAmount!;\r\n change = amountTendered - previousTotal!;\r\n break;\r\n case TransactionType.QuickCash:\r\n transactionType = \"Cash\";\r\n amountTendered = previousAmount!;\r\n change = undefined;\r\n break;\r\n case TransactionType.ChangeCheck:\r\n transactionType = \"Check\";\r\n amountTendered = previousAmount!;\r\n change = 0;\r\n break;\r\n case TransactionType.CreditCash:\r\n case TransactionType.CreditCheck:\r\n case TransactionType.CreditCard:\r\n transactionType =\r\n +priorTransactionType! === TransactionType.CreditCard\r\n ? \"Credit Card\"\r\n : +priorTransactionType! === TransactionType.CreditCheck\r\n ? \"Check\"\r\n : \"Cash\";\r\n amountTendered =\r\n (previousTransactions &&\r\n previousTransactions.some((t) => t.hide) &&\r\n Number(\r\n previousTransactions\r\n .filter((t) => t.hide)\r\n .map((t) => t.amount)\r\n .reduce((acc, curr) => acc + curr, 0)\r\n .toFixed(2)\r\n )) ||\r\n previousAmount!;\r\n creditAmount = amountTendered - previousTotal!;\r\n break;\r\n case TransactionType.Earned:\r\n transactionType = \"Earned\";\r\n amountTendered = 0;\r\n break;\r\n case TransactionType.Refund:\r\n transactionType = \"Refund\";\r\n refundAmount = -previousStudentModel.previousAccountAdjustAmount!;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {smallDisplay ? null : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {smallDisplay ? (\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 ) : null}\r\n
\r\n {hideTotal || isCancelled || hideDetail ? null : (\r\n \r\n )}\r\n
\r\n {showButtonsColumn ? (\r\n \r\n {canVoidRedo && !isGrabNGoVoid ? (\r\n \r\n \r\n Void\r\n \r\n
\r\n  \r\n
\r\n {terminalConfig && !terminalConfig.isGrabNGo ? (\r\n \r\n Redo\r\n \r\n ) : null}\r\n
\r\n  \r\n
\r\n
\r\n ) : null}\r\n {canPrintReceipt &&\r\n terminalConfig &&\r\n !terminalConfig.isGrabNGo ? (\r\n \r\n {!canVoidRedo ?
: null}\r\n \r\n Print\r\n \r\n }\r\n open={this.state.isOpen}\r\n onClose={this.handleClose}\r\n onOpen={this.handleOpen}\r\n flowing={true}\r\n on=\"click\">\r\n \r\n {canPrintReminder ? (\r\n \r\n \r\n Reminder\r\n \r\n \r\n ) : null}\r\n \r\n \r\n Receipt\r\n \r\n \r\n
\r\n \r\n \r\n ) : null}\r\n {canServeAgain &&\r\n terminalConfig &&\r\n !terminalConfig.isGrabNGo ? (\r\n \r\n
\r\n  \r\n
\r\n \r\n Serve Again\r\n \r\n
\r\n ) : null}\r\n
\r\n ) : null}\r\n \r\n {terminalConfig && terminalConfig.isGrabNGo ? (\r\n \r\n \r\n \r\n Transactions Served:\r\n {patronTransactionsServed.map((s, i) => (\r\n \r\n {\r\n \r\n {s.displayText.split(\" -- \")[0]}\r\n {\" - \"}\r\n \r\n {s.displayText.split(\" -- \")[1]}\r\n \r\n

\r\n }\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${this.state.isRedo ? \"Redo\" : \"Void\"} ${student.firstName} ${\r\n student.lastName\r\n } ${transactionType} Sale ${\r\n terminalConfig && (terminalConfig.isGrabNGo || hideTotal)\r\n ? \"\"\r\n : \"$\" + previousAmount!.toFixed(2)\r\n }`}\r\n \r\n {terminalConfig && terminalConfig.reasonForDelete ? (\r\n \r\n \r\n {this.state.reasonForDeleteRequired ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n\r\n {this.props.overridePassword ? (\r\n \r\n \r\n {this.state.invalidPassword ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n\r\n {this.props.overridePassword ||\r\n (terminalConfig && terminalConfig.reasonForDelete) ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : null}\r\n\r\n {!this.props.overridePassword &&\r\n !(terminalConfig && terminalConfig.reasonForDelete) ? (\r\n \r\n You are about to\r\n {this.state.isRedo ? \" void and redo\" : \" void\"}\r\n {terminalConfig && !terminalConfig.isGrabNGo\r\n ? \" the current transaction. \"\r\n : \" the previous transactions. \"}\r\n Are you sure?\r\n \r\n ) : null}\r\n\r\n {this.props.overridePassword ||\r\n (terminalConfig && terminalConfig.reasonForDelete) ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n Yes\r\n \r\n \r\n )}\r\n
\r\n \r\n \r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Button, Checkbox, Grid, Modal, Pagination } from \"semantic-ui-react\";\r\nimport { GradeLevel, Homeroom } from \"../../models/TerminalModel\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\n\r\ninterface Props {\r\n open: boolean;\r\n homerooms: Homeroom[];\r\n gradeLevels: GradeLevel[];\r\n studentStore: StudentStore;\r\n terminalStore: TerminalStore;\r\n handleFilter: (\r\n sortByFirstName: boolean,\r\n filterRange: number,\r\n isHomeroom: boolean,\r\n hideServedStudents: boolean,\r\n filterID?: number\r\n ) => Promise;\r\n onCancel: () => void;\r\n onServeAll: () => void;\r\n}\r\n\r\ninterface State {\r\n filterByHomeroom: boolean;\r\n sortByFirstName: boolean;\r\n gradeLevelID?: number;\r\n homeroomID?: number;\r\n filterPageNumber: number;\r\n filterRange: number;\r\n hideServedStudents: boolean;\r\n}\r\n\r\nconst maxPerPage = 20;\r\n\r\n@observer\r\nclass RosterServe extends React.Component {\r\n public state = {\r\n filterByHomeroom: !localStorage.getItem(\"rosterFilter\"),\r\n sortByFirstName: this.props.studentStore.sortByFirstName,\r\n gradeLevelID: this.props.studentStore.gradeLevelID,\r\n homeroomID: this.props.studentStore.homeroomID,\r\n filterPageNumber: this.props.studentStore.filterPageNumber,\r\n filterRange: this.props.studentStore.filterRange,\r\n hideServedStudents: true\r\n };\r\n\r\n public onCancel = () => {\r\n this.setState({\r\n filterPageNumber: this.getFilterPageNumber(this.state.filterByHomeroom),\r\n hideServedStudents: true\r\n });\r\n this.props.onCancel();\r\n };\r\n\r\n public onServeAll = async () => {\r\n await this.filter();\r\n this.props.onServeAll();\r\n };\r\n\r\n public clearSelections = () => {\r\n this.props.studentStore.filterByHomeroom = undefined;\r\n this.props.studentStore.sortByFirstName = false;\r\n this.props.studentStore.gradeLevelID = undefined;\r\n this.props.studentStore.homeroomID = undefined;\r\n this.props.studentStore.filterPageNumber = 1;\r\n this.props.studentStore.filterRange = 0;\r\n this.props.studentStore.hideServedStudents =\r\n this.props.terminalStore.terminalModel.terminalConfig!.hideServedStudents;\r\n };\r\n\r\n public setRangeFilter7 = () => {\r\n this.setRangeFilter(7);\r\n };\r\n\r\n public setRangeFilter30 = () => {\r\n this.setRangeFilter(30);\r\n };\r\n\r\n private setRangeFilter = (newFilterRange: number) => {\r\n if (this.state.filterRange === newFilterRange) {\r\n this.setState({ filterRange: 0 });\r\n } else {\r\n this.setState({ filterRange: newFilterRange });\r\n }\r\n };\r\n\r\n public switchFilter = () => {\r\n if (this.state.filterByHomeroom) {\r\n localStorage.setItem(\"rosterFilter\", \"false\");\r\n } else {\r\n localStorage.removeItem(\"rosterFilter\");\r\n }\r\n\r\n const filterPageNumber = this.getFilterPageNumber(\r\n !this.state.filterByHomeroom\r\n );\r\n\r\n this.setState((prevState) => ({\r\n filterByHomeroom: !prevState.filterByHomeroom,\r\n filterPageNumber\r\n }));\r\n };\r\n\r\n public toggleSort = () => {\r\n this.setState((prevState) => ({\r\n sortByFirstName: !prevState.sortByFirstName\r\n }));\r\n };\r\n\r\n private toggleHideServedStudents = () => {\r\n this.setState((prevState) => ({\r\n hideServedStudents: !prevState.hideServedStudents\r\n }));\r\n };\r\n\r\n public filter = async () => {\r\n this.props.studentStore.homeroomID = this.state.homeroomID;\r\n this.props.studentStore.gradeLevelID = this.state.gradeLevelID;\r\n this.props.studentStore.sortByFirstName = this.state.sortByFirstName;\r\n this.props.studentStore.filterByHomeroom = this.state.filterByHomeroom;\r\n this.props.studentStore.filterPageNumber = this.state.filterPageNumber;\r\n this.props.studentStore.filterRange = this.state.filterRange;\r\n this.props.studentStore.hideServedStudents = this.state.hideServedStudents;\r\n await this.props.handleFilter(\r\n this.state.sortByFirstName,\r\n this.state.filterRange,\r\n this.state.filterByHomeroom,\r\n this.props.terminalStore.terminalModel.terminalConfig!.hideServedStudents\r\n ? this.state.hideServedStudents\r\n : false,\r\n this.state.filterByHomeroom\r\n ? this.props.studentStore.homeroomID\r\n : this.props.studentStore.gradeLevelID\r\n );\r\n this.setState(() => ({\r\n hideServedStudents: true\r\n }));\r\n };\r\n\r\n public setFilterID(id?: number) {\r\n if (this.state.filterByHomeroom) {\r\n this.setState({ gradeLevelID: undefined, homeroomID: id });\r\n } else {\r\n this.setState({ gradeLevelID: id, homeroomID: undefined });\r\n }\r\n }\r\n\r\n public onPageChange = (event: React.SyntheticEvent, data: any) => {\r\n this.setState({ filterPageNumber: data.activePage });\r\n };\r\n\r\n public render() {\r\n const { open, homerooms, gradeLevels, terminalStore } = this.props;\r\n const startIndex = (this.state.filterPageNumber - 1) * maxPerPage;\r\n const endIndex = startIndex + maxPerPage;\r\n\r\n return (\r\n \r\n \r\n \r\n Roster Filter Selection\r\n {this.props.terminalStore.terminalModel.terminalConfig &&\r\n this.props.terminalStore.terminalModel.terminalConfig!\r\n .hideServedStudents ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n

Select a {this.state.filterByHomeroom ? \"Class\" : \"Grade\"}

\r\n \r\n {this.state.filterByHomeroom\r\n ? homerooms.slice(startIndex, endIndex).map((h, index) => (\r\n \r\n \r\n {h.description}\r\n \r\n \r\n ))\r\n : gradeLevels.slice(startIndex, endIndex).map((g, index) => (\r\n \r\n \r\n {index === 0 ? g.description : `Grade ${g.description}`}\r\n \r\n \r\n ))}\r\n {(this.state.filterByHomeroom && homerooms.length > maxPerPage) ||\r\n (!this.state.filterByHomeroom &&\r\n gradeLevels.length > maxPerPage) ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n
\r\n \r\n \r\n \r\n {terminalStore.autoServeKey ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n 7 Days\r\n \r\n \r\n 30 Days\r\n \r\n       \r\n \r\n First Name   \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private getFilterPageNumber = (filterByHomeroom: boolean): number => {\r\n let filterPageNumber = 1;\r\n\r\n if (filterByHomeroom && this.state.homeroomID) {\r\n const index = this.props.homerooms.findIndex(\r\n (h) => h.id === this.state.homeroomID\r\n );\r\n filterPageNumber = Math.ceil((index + 1) / maxPerPage);\r\n } else if (!filterByHomeroom && this.state.gradeLevelID) {\r\n const index = this.props.gradeLevels.findIndex(\r\n (gl) => gl.id === this.state.gradeLevelID\r\n );\r\n filterPageNumber = Math.ceil((index + 1) / maxPerPage);\r\n }\r\n\r\n return filterPageNumber;\r\n };\r\n}\r\nexport default RosterServe;\r\n","import { observable } from \"mobx\";\r\nimport { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Button, Checkbox, Header, Modal, Table } from \"semantic-ui-react\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport Allergies from \"./Allergies\";\r\nimport ServeAllCounter from \"../util/ServeAllCounter\";\r\n\r\ninterface Props {\r\n open: boolean;\r\n sortByFirstName: boolean;\r\n studentStore: StudentStore;\r\n onServeAll: () => void;\r\n onCancel: () => void;\r\n}\r\n\r\ninterface State {\r\n isConfirmation: boolean;\r\n}\r\n\r\n@observer\r\nclass ServeAll extends React.Component {\r\n public state = {\r\n isConfirmation: false\r\n };\r\n\r\n public onCancel = () => {\r\n this.props.onCancel();\r\n };\r\n\r\n public toggleHideAlerts = () => {\r\n const {\r\n studentStore: { serveAllModel }\r\n } = this.props;\r\n serveAllModel.showAlertsInServeAll = !serveAllModel.showAlertsInServeAll;\r\n };\r\n\r\n public selectionChanged = (patronID: number) => {\r\n const {\r\n studentStore: {\r\n studentSearchModel: { siteStudents }\r\n }\r\n } = this.props;\r\n const student = siteStudents.find((s) => s.patronID === patronID);\r\n if (student) {\r\n student.isSelected = !student.isSelected;\r\n }\r\n };\r\n\r\n public handleServeAllClick = () => {\r\n this.setState({\r\n isConfirmation: true\r\n });\r\n };\r\n\r\n public handleConfirmNoClick = () => {\r\n this.setState({\r\n isConfirmation: false\r\n });\r\n };\r\n\r\n public handleConfirmYesClick = () => {\r\n const {\r\n sortByFirstName,\r\n studentStore,\r\n studentStore: {\r\n studentSearchModel: { siteStudents }\r\n }\r\n } = this.props;\r\n\r\n this.setState({\r\n isConfirmation: false\r\n });\r\n\r\n const serveAllModel = { ...this.props.studentStore.serveAllModel };\r\n\r\n serveAllModel.serveAllStudentIDs = observable.array(\r\n studentStore\r\n .sortStudents(\r\n siteStudents.filter((s) => s.isSelected),\r\n sortByFirstName\r\n )\r\n .map((s) => s.patronID)\r\n );\r\n serveAllModel.totalToServeCount = serveAllModel.serveAllStudentIDs.length;\r\n serveAllModel.totalServedCount = 0;\r\n this.props.studentStore.serveAllModel = serveAllModel;\r\n\r\n this.props.onServeAll();\r\n };\r\n\r\n public render() {\r\n const {\r\n open,\r\n sortByFirstName,\r\n studentStore,\r\n studentStore: {\r\n studentSearchModel: { siteStudents },\r\n serveAllModel: { showAlertsInServeAll, totalToServeCount }\r\n }\r\n } = this.props;\r\n\r\n const studentList = studentStore.sortStudents(\r\n totalToServeCount\r\n ? siteStudents.filter((s) => s.isSelected)\r\n : siteStudents,\r\n sortByFirstName\r\n );\r\n const selectedCount = totalToServeCount\r\n ? 0\r\n : siteStudents.filter((s) => s.isSelected).length;\r\n\r\n return !open ? null : (\r\n \r\n \r\n Serve All\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Selected\r\n Patron\r\n ID\r\n Pin\r\n Balance\r\n \r\n Message / Allergies\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {studentList.map((s) =>\r\n s.patronID ? (\r\n \r\n \r\n {totalToServeCount === 0 ? (\r\n \r\n ) : null}\r\n \r\n \r\n {s.firstName} {s.lastName}\r\n \r\n {s.patronNumber}\r\n {s.pospin || \"\"}\r\n \r\n $\r\n {s.account &&\r\n s.account.amount &&\r\n s.account.amount.toFixed(2)}\r\n \r\n \r\n {(s.alertMessage || \"\") +\r\n (s.parentAlertMessage\r\n ? (s.alertMessage ? \" \" : \"\") +\r\n s.parentAlertMessage\r\n : \"\")}\r\n {(s.alertMessage || s.parentAlertMessage) &&\r\n s.allergies.length ? (\r\n

\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n \r\n \r\n ) : null\r\n )}\r\n \r\n

\r\n
\r\n
\r\n
\r\n \r\n {totalToServeCount === 0 ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n {totalToServeCount === 0 ? (\r\n \r\n ) : null}\r\n {selectedCount > 0 && totalToServeCount === 0 ? (\r\n \r\n ) : null}\r\n {totalToServeCount ? (\r\n \r\n \r\n
\r\n
\r\n ) : null}\r\n
\r\n
\r\n \r\n \r\n \r\n
Serve Patrons?
\r\n

\r\n You are about to serve {selectedCount} patron\r\n {selectedCount > 1 ? \"s\" : \"\"}. Are you sure?\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 ServeAll;\r\n","import { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Divider, Grid, Header, Pagination } from \"semantic-ui-react\";\r\nimport { Student } from \"../../models/StudentModel\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport TransactionStore from \"../../stores/TransactionStore\";\r\nimport { Guid } from \"guid-typescript\";\r\nimport RootStore from \"../../stores/RootStore\";\r\n\r\ninterface Props {\r\n site: boolean;\r\n students: Student[];\r\n sortByFirstName: Boolean;\r\n customerID: string;\r\n currentPage: number;\r\n studentStore: StudentStore;\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n rootStore: RootStore;\r\n}\r\n\r\n@observer\r\nclass StudentGrid extends React.Component {\r\n public onPageChange = (event: React.SyntheticEvent, data: any) => {\r\n const { site, studentStore } = this.props;\r\n if (site) {\r\n studentStore.rosterSitePageNumber = data.activePage;\r\n } else {\r\n studentStore.rosterDistrictPageNumber = data.activePage;\r\n }\r\n };\r\n\r\n public imageFallback = (event: React.SyntheticEvent) => {\r\n event.currentTarget.src = \"./images/noPicture.png\";\r\n };\r\n\r\n public render() {\r\n const {\r\n customerID,\r\n site,\r\n students,\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { homerooms, gradeLevels }\r\n }\r\n } = this.props;\r\n const maxPerPage = studentStore.isRosterMode ? 24 : 8;\r\n const hideServedSetting =\r\n studentStore.isRosterMode &&\r\n this.props.terminalStore.terminalModel.terminalConfig!.hideServedStudents;\r\n\r\n const filteredStudents = students.filter(\r\n (s) =>\r\n s.patronID !== null &&\r\n (hideServedSetting && this.props.studentStore.hideServedStudents\r\n ? !s.hasBeenServed\r\n : true)\r\n );\r\n const totalPageCount = Math.ceil(filteredStudents.length / maxPerPage);\r\n const currentPage =\r\n this.props.currentPage > totalPageCount\r\n ? totalPageCount\r\n : this.props.currentPage;\r\n\r\n const startIndex = (currentPage - 1) * maxPerPage;\r\n const endIndex = startIndex + maxPerPage;\r\n\r\n let filter = site ? \"Serving Site\" : \"District Wide\";\r\n\r\n if (studentStore.isRosterMode) {\r\n if (studentStore.gradeLevelID) {\r\n const grade = gradeLevels.find(\r\n (x) => x.id === studentStore.gradeLevelID\r\n );\r\n filter = `Grade: ${grade && grade.description}`;\r\n } else if (studentStore.homeroomID) {\r\n const homeroom = homerooms.find(\r\n (x) => x.id === studentStore.homeroomID\r\n );\r\n filter = `Class: ${homeroom && homeroom.description}`;\r\n } else {\r\n filter = `All ${studentStore.filterByHomeroom ? \"Classes\" : \"Grades\"}`;\r\n }\r\n }\r\n\r\n return students.length === 0 ? null : (\r\n \r\n \r\n \r\n
\r\n \r\n {filter}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {site && hideServedSetting && filteredStudents.length === 0 ? (\r\n \r\n Meal Service Complete for this Roster\r\n \r\n ) : (\r\n filteredStudents.slice(startIndex, endIndex).map((student) => (\r\n \r\n \r\n \r\n {this.props.sortByFirstName\r\n ? `${student.firstName} ${student.lastName}`\r\n : `${student.lastName}, ${student.firstName}`}\r\n
\r\n
\r\n ))\r\n )}\r\n {filteredStudents.length > maxPerPage ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default StudentGrid;\r\n","import * as React from \"react\";\r\nimport Text from \"../util/Text\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\ninterface Props {\r\n transactionType: string;\r\n isCancelled: boolean;\r\n isSmallDisplay: boolean;\r\n isVoided: boolean;\r\n}\r\n\r\nexport default observer(\r\n ({ transactionType, isCancelled, isSmallDisplay, isVoided }: Props) => {\r\n return !transactionType && !isCancelled ? null : (\r\n \r\n {`${transactionType}${transactionType ? \" \" : \"\"}Transaction ${\r\n isVoided\r\n ? \"Voided Successfully\"\r\n : isCancelled\r\n ? \"Cancelled\"\r\n : \"Complete\"\r\n }`}\r\n \r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { Student, BufferedSide } from \"../../models/StudentModel\";\r\nimport { Table, Grid, Button, Icon, Segment, Image } from \"semantic-ui-react\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport FlexContent from \"../util/FlexContent\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport { Guid } from \"guid-typescript\";\r\nimport Text from \"../util/Text\";\r\nimport StudentAlert from \"../student/StudentAlert\";\r\n\r\ninterface Props {\r\n customerID: string;\r\n className: string;\r\n studentStore: StudentStore;\r\n terminalStore: TerminalStore;\r\n rootStore: RootStore;\r\n}\r\n\r\nfunction removeStudent(\r\n e: React.MouseEvent,\r\n { studentStore }: Props,\r\n index: number\r\n) {\r\n e.stopPropagation();\r\n studentStore.bufferList.splice(index, 1);\r\n}\r\n\r\nfunction selectStudent(\r\n {\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig, terminal }\r\n }\r\n }: Props,\r\n index: number,\r\n setShowVisitingPrompt: React.Dispatch,\r\n setStudent: React.Dispatch\r\n) {\r\n if (studentStore.isLoadingStudent) return;\r\n const student = studentStore.bufferList.splice(index, 1)[0];\r\n if (student && student.patronID) {\r\n if (\r\n terminal!.siteID !== student.siteID &&\r\n (!terminalConfig || !terminalConfig!.disableVisitingStudentPrompt)\r\n ) {\r\n setStudent(student);\r\n setShowVisitingPrompt(true);\r\n } else {\r\n studentStore.setBufferedStudent(student);\r\n }\r\n }\r\n}\r\n\r\nfunction handleVisitingPatronClick(\r\n studentStore: StudentStore,\r\n student: Student | null,\r\n setShowVisitingPrompt: React.Dispatch\r\n) {\r\n if (student) {\r\n studentStore.setBufferedStudent(student);\r\n }\r\n setShowVisitingPrompt(false);\r\n}\r\n\r\nfunction handleVisitingPatronCancelClick(\r\n studentStore: StudentStore,\r\n student: Student | null,\r\n setShowVisitingPrompt: React.Dispatch\r\n) {\r\n if (student) {\r\n const index = studentStore.bufferList.indexOf(student);\r\n if (index !== -1) {\r\n studentStore.bufferList.splice(index, 1);\r\n }\r\n }\r\n setShowVisitingPrompt(false);\r\n}\r\n\r\nfunction imageFallback(event: React.SyntheticEvent) {\r\n event.currentTarget.src = \"./images/noPicture.png\";\r\n}\r\n\r\nfunction isRightSide(studentStore: StudentStore, student: Student) {\r\n return (\r\n (studentStore.isBufferedSideFlipped &&\r\n student.bufferedSide !== BufferedSide.Right) ||\r\n (!studentStore.isBufferedSideFlipped &&\r\n student.bufferedSide === BufferedSide.Right)\r\n );\r\n}\r\n\r\nexport default observer((props: Props) => {\r\n const {\r\n customerID,\r\n className,\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n rootStore\r\n } = props;\r\n\r\n const [showVisitingPrompt, setShowVisitingPrompt] = React.useState(false);\r\n const [student, setStudent] = React.useState(null);\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 Remove\r\n \r\n {terminalConfig &&\r\n terminalConfig.showPhotosInBuffer ? (\r\n \r\n Picture\r\n \r\n ) : null}\r\n Pin\r\n Name\r\n \r\n Side\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {studentStore.bufferList.map(\r\n (student: Student, index) => (\r\n \r\n \r\n \r\n ) => removeStudent(e, props, index)}>\r\n \r\n \r\n \r\n \r\n {terminalConfig &&\r\n terminalConfig.showPhotosInBuffer ? (\r\n \r\n {student.patronID ? (\r\n \r\n ) : (\r\n  \r\n )}\r\n \r\n ) : null}\r\n \r\n {student.pospin || \"\"}\r\n \r\n \r\n {student.patronID ? (\r\n `${student.firstName} ${student.lastName}`\r\n ) : (\r\n \r\n No PIN or ID matched\r\n \r\n )}\r\n \r\n \r\n {!isRightSide(studentStore, student) ? (\r\n \r\n ) : null}\r\n \r\n \r\n {isRightSide(studentStore, student)\r\n ? \"Right\"\r\n : \"Left\"}\r\n \r\n \r\n {isRightSide(studentStore, student) ? (\r\n \r\n ) : null}\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 { observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect } from \"react-router\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n Container,\r\n Dimmer,\r\n Divider,\r\n Form,\r\n Grid,\r\n Header,\r\n Input,\r\n Loader,\r\n Modal,\r\n Segment\r\n} from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport StudentStore, {\r\n SearchSize,\r\n StudentType\r\n} from \"../../stores/StudentStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport TransactionStore from \"../../stores/TransactionStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport BottomMenu from \"../util/BottomMenu\";\r\nimport FlexContent from \"../util/FlexContent\";\r\nimport FlexSpacer from \"../util/FlexSpacer\";\r\nimport Text from \"../util/Text\";\r\nimport RosterServe from \"./RosterServe\";\r\nimport ServeAll from \"./ServeAll\";\r\nimport StudentAlert from \"./StudentAlert\";\r\nimport StudentGrid from \"./StudentGrid\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport PreviousStudent from \"./PreviousStudent\";\r\nimport BufferList from \"../meal/BufferList\";\r\nimport ClosedMonth from \"../meal/ClosedMonth\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport { Homeroom, GradeLevel, PosSession } from \"../../models/TerminalModel\";\r\n\r\ninterface Props {\r\n canVoid: boolean;\r\n overridePassword: string;\r\n authStore: AuthStore;\r\n studentStore: StudentStore;\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n term: string;\r\n isEnter: boolean;\r\n sortByFirstName: boolean;\r\n isSearchMode: boolean;\r\n layoutName: string;\r\n layout: any;\r\n showRosterServe: boolean;\r\n isBufferSelect: boolean;\r\n confirmExitBuffer: boolean;\r\n homerooms: Homeroom[];\r\n gradeLevels: GradeLevel[];\r\n}\r\n\r\n@observer\r\nclass StudentSearch extends React.Component {\r\n public state = {\r\n term: \"\",\r\n isEnter: false,\r\n override: false,\r\n isSearchMode: false,\r\n sortByFirstName: this.props.studentStore.studentSearchModel.sortByFirstName,\r\n layoutName:\r\n ((this.props.terminalStore.terminalModel.isCreditPatrons ||\r\n this.props.terminalStore.terminalModel.isTransactionSearch) &&\r\n this.props.terminalStore.terminalModel.terminalConfigurations.some(\r\n (c) => c.hideKeyboard\r\n )) ||\r\n (!(\r\n this.props.terminalStore.terminalModel.isCreditPatrons ||\r\n this.props.terminalStore.terminalModel.isTransactionSearch\r\n ) &&\r\n !this.props.terminalStore.terminalModel.terminalConfig!\r\n .bufferedServing &&\r\n this.props.terminalStore.terminalModel.terminalConfig!.hideKeyboard)\r\n ? \"hidden\"\r\n : \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ],\r\n hidden: []\r\n },\r\n showRosterServe:\r\n this.props.studentStore.isRosterMode &&\r\n !this.props.studentStore.studentSearchModel.siteStudents.length &&\r\n this.props.studentStore.filterByHomeroom === undefined,\r\n isBufferSelect: false,\r\n confirmExitBuffer: false,\r\n homerooms: [],\r\n gradeLevels: []\r\n };\r\n\r\n private keyboardUtils: KeyboardUtils = new KeyboardUtils();\r\n private searchBox: React.RefObject;\r\n private rosterServe: React.RefObject;\r\n private keyboardRef: React.RefObject;\r\n private wrapperRef: React.RefObject;\r\n\r\n private lastFilterId?: number = undefined;\r\n private lastFilterRange?: number = undefined;\r\n private lastFilterByHomeroom?: boolean = undefined;\r\n private lastHideServedStudents?: boolean = undefined;\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n this.searchBox = React.createRef();\r\n this.rosterServe = React.createRef();\r\n this.keyboardRef = React.createRef();\r\n this.wrapperRef = React.createRef();\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n public componentDidMount() {\r\n document.addEventListener(\"click\", this.handleClickOutside, true);\r\n const {\r\n studentStore,\r\n terminalStore,\r\n rootStore: { cardConnectStore },\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.props;\r\n\r\n if (terminalStore.hasBoltIntegration()) {\r\n cardConnectStore.initialize(false);\r\n }\r\n\r\n this.props.rootStore!.validateStorageLimits();\r\n terminalStore.getRosterFilters().then(({ homerooms, gradeLevels }) => {\r\n this.setState({ homerooms, gradeLevels });\r\n });\r\n\r\n if (\r\n studentStore.filterByHomeroom !== undefined &&\r\n !studentStore.studentSearchModel.siteStudents.length\r\n ) {\r\n studentStore.getRosterStudents(\r\n studentStore.filterRange,\r\n studentStore.filterByHomeroom,\r\n studentStore.hideServedStudents,\r\n studentStore.filterByHomeroom\r\n ? studentStore.homeroomID\r\n : studentStore.gradeLevelID,\r\n true\r\n );\r\n }\r\n\r\n if (\r\n !studentStore.isRosterMode &&\r\n terminalConfig &&\r\n terminalConfig.bufferedServing\r\n ) {\r\n this.doSearchModeToggle(true);\r\n window.addEventListener(\"beforeunload\", this.handleUnload);\r\n }\r\n }\r\n\r\n public componentDidUpdate() {\r\n const {\r\n studentStore,\r\n rootStore: { transactionStore },\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n studentStore: {\r\n studentModel: { pendingStudent }\r\n }\r\n } = this.props;\r\n\r\n if (pendingStudent && this.state.term && !this.state.isBufferSelect) {\r\n this.setState({ term: \"\", isSearchMode: false, isEnter: false });\r\n studentStore.clearSearch();\r\n } else if (pendingStudent && this.state.isEnter) {\r\n this.setState({ isEnter: false });\r\n }\r\n\r\n if (!!terminalConfig && !terminalConfig.isGrabNGo) {\r\n transactionStore.setSessionMealCount();\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"click\", this.handleClickOutside, true);\r\n const {\r\n terminalStore,\r\n rootStore: { cardConnectStore },\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this.props;\r\n\r\n if (terminalConfig && terminalConfig.bufferedServing) {\r\n window.removeEventListener(\"beforeunload\", this.handleUnload);\r\n }\r\n if (terminalStore.hasBoltIntegration()) {\r\n cardConnectStore.initialize(true);\r\n }\r\n }\r\n\r\n public handleClickOutside(e: Event) {\r\n if (this.wrapperRef) {\r\n this.focusSearchBox();\r\n }\r\n }\r\n\r\n public handleUnload = (e: Event) => {\r\n const { studentStore } = this.props;\r\n\r\n if (studentStore.bufferList.filter((s) => s.patronID !== null).length) {\r\n e = e || window.event;\r\n\r\n if (e) {\r\n e.returnValue = \"confirm\" as any;\r\n }\r\n\r\n return \"confirm\";\r\n }\r\n\r\n return true;\r\n };\r\n\r\n public hideServeAllCompleted = () => {\r\n this.props.studentStore.cancelServeAllMode(true);\r\n };\r\n\r\n public handleCancelBufferBack = () => {\r\n this.setState({ confirmExitBuffer: false });\r\n };\r\n\r\n public handleConfirmBufferBack = () => {\r\n this.backClicked();\r\n };\r\n\r\n public handleVisitingPatronClick = async () => {\r\n await this.props.studentStore.approvePendingStudent(false, true);\r\n this.focusSearchBox();\r\n this.setState({ isBufferSelect: false });\r\n };\r\n\r\n public handleVisitingPatronCancelClick = () => {\r\n this.props.studentStore.clearPendingStudent();\r\n this.focusSearchBox();\r\n this.setState({ isBufferSelect: false });\r\n };\r\n\r\n public handleStudentCashClick = async () => {\r\n const { studentStore } = this.props;\r\n if (studentStore.isLoadingStudent) return;\r\n studentStore.clearPreviousStudent();\r\n await this.props.rootStore.playSilence(false);\r\n await studentStore.createNoStudent(StudentType.Student);\r\n await studentStore.serveAutoItem();\r\n return ;\r\n };\r\n\r\n public handleNonStudentCashClick = async () => {\r\n const { studentStore } = this.props;\r\n if (studentStore.isLoadingStudent) return;\r\n studentStore.clearPreviousStudent();\r\n await this.props.rootStore.playSilence(false);\r\n await studentStore.createNoStudent(StudentType.NonStudent);\r\n await studentStore.serveAutoItem();\r\n return ;\r\n };\r\n\r\n public handleGnGNoIDClick = async () => {\r\n if (\r\n this.props.rootStore.terminalStore.terminalStateModel.noIDButtonDisabled\r\n ) {\r\n return;\r\n }\r\n\r\n this.props.rootStore.terminalStore.terminalStateModel.noIDButtonDisabled =\r\n true;\r\n const { studentStore } = this.props;\r\n const { previousStudentModel } = studentStore;\r\n\r\n if (previousStudentModel) {\r\n studentStore.clearPreviousStudent();\r\n }\r\n\r\n studentStore.handleSelectStudent(-1);\r\n };\r\n\r\n public handlePauseAllSessionsToggle = async () => {\r\n const { studentStore } = this.props;\r\n studentStore.gngPauseAllSessions = !studentStore.gngPauseAllSessions;\r\n };\r\n\r\n public handleServeAllToggle = () => {\r\n const { studentStore } = this.props;\r\n studentStore.toggleServeAll();\r\n };\r\n\r\n public handleRosterServeToggle = () => {\r\n const { studentStore } = this.props;\r\n if (studentStore.isLoadingStudent) return;\r\n const { previousStudentModel } = studentStore;\r\n\r\n if (previousStudentModel) {\r\n studentStore.clearPreviousStudent();\r\n }\r\n\r\n if (!studentStore.isRosterMode) {\r\n studentStore!.clearSearch(true);\r\n }\r\n\r\n this.setState((prevState) => ({\r\n term: \"\",\r\n showRosterServe: !prevState.showRosterServe\r\n }));\r\n\r\n studentStore.isRosterMode = true;\r\n };\r\n\r\n public handleRosterSearchToggle = () => {\r\n const { studentStore } = this.props;\r\n\r\n this.setState({ isSearchMode: false });\r\n studentStore.isRosterMode = false;\r\n studentStore.isRosterSearch = true;\r\n studentStore.tempRosterSitePageNumber = studentStore.rosterSitePageNumber;\r\n studentStore.tempStudentSearchModel = studentStore.studentSearchModel;\r\n };\r\n\r\n public handleBufferSearch = () => {\r\n this.props.studentStore.isBufferSearch = true;\r\n this.handleSearchModeToggle();\r\n this.setState({ isBufferSelect: true, term: \"\" });\r\n };\r\n\r\n public beginServeAll = () => {\r\n const { studentStore } = this.props;\r\n studentStore.selectNextStudent();\r\n };\r\n\r\n public handleRosterServe = async (\r\n sortByFirstName: boolean,\r\n filterRange: number,\r\n filterByHomeroom: boolean,\r\n hideServedStudents: boolean,\r\n filterID?: number\r\n ) => {\r\n if (\r\n filterByHomeroom !== this.lastFilterByHomeroom ||\r\n filterRange !== this.lastFilterRange ||\r\n filterID !== this.lastFilterId ||\r\n hideServedStudents !== this.lastHideServedStudents\r\n ) {\r\n await this.props.studentStore.getRosterStudents(\r\n filterRange,\r\n filterByHomeroom,\r\n hideServedStudents,\r\n filterID\r\n );\r\n }\r\n\r\n this.lastFilterByHomeroom = filterByHomeroom;\r\n this.lastFilterRange = filterRange;\r\n this.lastFilterId = filterID;\r\n this.lastHideServedStudents = hideServedStudents;\r\n this.props.studentStore.studentSearchModel.sortByFirstName =\r\n sortByFirstName;\r\n this.setState({ showRosterServe: false, sortByFirstName });\r\n };\r\n\r\n public handleSearch = (e: React.FormEvent) => {\r\n this.setState({\r\n term: e.currentTarget.value\r\n });\r\n if (this.state.isSearchMode) {\r\n this.doSearch(e.currentTarget.value);\r\n }\r\n };\r\n\r\n public handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.ctrlKey && (e.key === \"C\" || e.key === \"c\")) {\r\n e.keyCode = 3;\r\n }\r\n if (e.keyCode === 10 || e.keyCode === 3) {\r\n this.handleKeyPress(e);\r\n }\r\n };\r\n\r\n public handleKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 8) {\r\n this.setState(\r\n (prevState) => ({\r\n term: prevState.term.slice(0, -1)\r\n }),\r\n () => this.updateSearchBox()\r\n );\r\n }\r\n };\r\n\r\n public handleKeyPress = (e: React.KeyboardEvent) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig },\r\n terminalStateModel: { servingGrabNGoInProgress }\r\n }\r\n } = this.props;\r\n\r\n if (\r\n e.key === \"Enter\" ||\r\n e.keyCode === 10 ||\r\n e.keyCode === 3 ||\r\n e.key === \"`\" ||\r\n (!this.state.isSearchMode && e.key === \"_\")\r\n ) {\r\n if (\r\n terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n servingGrabNGoInProgress\r\n ) {\r\n // skip\r\n } else {\r\n e.preventDefault();\r\n this.handleEnter();\r\n }\r\n } else if (\r\n /^[a-zA-Z0-9!@#\\$%\\^\\&*' /,<>;\";:\\)\\(+=._-]+$/g.test(e.key) &&\r\n !e.ctrlKey\r\n ) {\r\n if (\r\n terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n servingGrabNGoInProgress\r\n ) {\r\n // skip\r\n } else {\r\n let key = e.key;\r\n if (!this.state.isSearchMode && key.match(/[!@#$%^&*()]/g)) {\r\n key = this.keyboardUtils.downShift(key);\r\n }\r\n this.setState(\r\n (prevState) => ({\r\n term: prevState.term + key\r\n }),\r\n () => this.updateSearchBox()\r\n );\r\n }\r\n }\r\n };\r\n\r\n public handleSearchModeToggle = async () => {\r\n this.doSearchModeToggle(true);\r\n };\r\n\r\n public handlePINModeToggle = async () => {\r\n this.doSearchModeToggle(false);\r\n };\r\n\r\n public backClicked = async () => {\r\n const {\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n },\r\n studentStore,\r\n studentStore: { studentSearchModel }\r\n } = this.props;\r\n\r\n if (studentStore.isRosterMode) {\r\n this.lastFilterByHomeroom = undefined;\r\n this.lastFilterRange = undefined;\r\n this.lastFilterId = undefined;\r\n studentSearchModel.sortByFirstName = JSON.parse(\r\n localStorage.getItem(\"sortByFirstName\") || \"false\"\r\n );\r\n\r\n this.setState({\r\n showRosterServe: false,\r\n sortByFirstName: studentSearchModel.sortByFirstName\r\n });\r\n\r\n if (this.rosterServe.current) {\r\n this.rosterServe.current.clearSelections();\r\n }\r\n\r\n studentStore.isRosterSearch = false;\r\n studentStore.isRosterMode = false;\r\n studentStore.clearSearch(true);\r\n } else if (studentStore.isRosterSearch) {\r\n this.setState({\r\n term: \"\",\r\n isSearchMode: false\r\n });\r\n studentStore.isRosterMode = true;\r\n studentStore.isRosterSearch = false;\r\n if (studentStore.tempStudentSearchModel) {\r\n studentStore.studentSearchModel = studentStore.tempStudentSearchModel;\r\n }\r\n if (studentStore.tempRosterSitePageNumber) {\r\n studentStore.rosterSitePageNumber =\r\n studentStore.tempRosterSitePageNumber;\r\n }\r\n } else if (terminalStore.terminalModel.isTransactionSearch) {\r\n this.props.transactionStore.transactionHistoryPatronID = undefined;\r\n terminalStore.terminalModel.isTransactionSearch = false;\r\n } else if (studentStore.isBufferSearch) {\r\n this.setState({\r\n term: \"\",\r\n isBufferSelect: false\r\n });\r\n studentStore.clearSearch(true);\r\n studentStore.isBufferSearch = false;\r\n } else if (\r\n terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n !studentStore.isBufferSearch &&\r\n studentStore.bufferList.filter((s) => s.patronID !== null).length &&\r\n !this.state.confirmExitBuffer\r\n ) {\r\n this.setState({ confirmExitBuffer: true });\r\n } else {\r\n studentStore.clearPreviousStudent();\r\n await this.props.terminalStore.changeSession();\r\n }\r\n };\r\n\r\n public quickSaleChanged = () => {\r\n const { studentStore } = this.props;\r\n studentStore.isQuickSalePaused = !studentStore.isQuickSalePaused;\r\n this.focusSearchBox();\r\n };\r\n\r\n public bufferedSideChanged = () => {\r\n const { studentStore } = this.props;\r\n studentStore.isBufferedSideFlipped = !studentStore.isBufferedSideFlipped;\r\n this.focusSearchBox();\r\n };\r\n\r\n public sortByChanged = () => {\r\n this.setState((prevState) => {\r\n localStorage.setItem(\r\n \"sortByFirstName\",\r\n JSON.stringify(!prevState.sortByFirstName)\r\n );\r\n this.focusSearchBox();\r\n return { sortByFirstName: !prevState.sortByFirstName };\r\n });\r\n };\r\n\r\n public renderGrids = () => {\r\n const {\r\n studentSearchModel: { districtStudents, siteStudents },\r\n isRosterMode,\r\n rosterSitePageNumber,\r\n rosterDistrictPageNumber,\r\n sortStudents,\r\n studentNotFound\r\n } = this.props.studentStore;\r\n\r\n return !this.state.isSearchMode && !isRosterMode ? (\r\n studentNotFound ? (\r\n
\r\n No PIN or ID matched\r\n
\r\n ) : null\r\n ) : (\r\n \r\n {siteStudents.length || districtStudents.length ? (\r\n \r\n );\r\n };\r\n\r\n public onChange = (input: string) => {\r\n this.setState({\r\n term: input\r\n });\r\n if (this.state.isSearchMode) {\r\n this.doSearch(this.state.term);\r\n }\r\n\r\n this.focusSearchBox();\r\n };\r\n\r\n public onKeyPress = (button: string) => {\r\n this.focusSearchBox();\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\") {\r\n this.handleEnter();\r\n }\r\n };\r\n\r\n public handleEnter = () => {\r\n const { studentStore } = this.props;\r\n const { previousStudentModel } = studentStore;\r\n\r\n if (this.state.term && !isNaN(this.state.term as any)) {\r\n if (previousStudentModel) {\r\n studentStore.clearPreviousStudent();\r\n }\r\n\r\n if (studentStore.gngPauseAllSessions) {\r\n studentStore.fromHandleEnter = true;\r\n studentStore.handleSelectStudent(Number(this.state.term));\r\n return;\r\n }\r\n\r\n studentStore.autoSelectStudent(this.state.term);\r\n studentStore.isBufferSearch = false;\r\n this.setState({ term: \"\", isSearchMode: false, isEnter: true });\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current!.keyboard.setInput!(\"\");\r\n }\r\n } else if (this.state.term && /^[a-zA-Z-' ]*$/.test(this.state.term)) {\r\n this.setState({ isSearchMode: true });\r\n this.doSearch(this.state.term);\r\n } else {\r\n this.setState({ isEnter: false });\r\n }\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public handleClosedMonth = async () => {\r\n const { terminalStore } = this.props;\r\n await terminalStore.changeSession();\r\n };\r\n\r\n public groupBy(objectArray: any, property: any): [[]] {\r\n return objectArray.reduce((acc: any, obj: any) => {\r\n const key = obj[property];\r\n if (!acc[key]) {\r\n acc[key] = [];\r\n } // Add object to list for given key's value\r\n acc[key].push(obj);\r\n return acc;\r\n }, {});\r\n }\r\n\r\n public GetSessionsGroupedByDay() {\r\n const sessions = this.props.terminalStore.terminalStateModel.posSessions!;\r\n\r\n return sessions.reduce((r, a) => {\r\n r[a.servingDay] = [...(r[a.servingDay] || []), a];\r\n return r;\r\n });\r\n }\r\n\r\n private sortFn(aDate: any, bDate: any) {\r\n const x = new Date(\r\n Number(aDate[2]),\r\n Number(aDate[0]) - 1,\r\n Number(aDate[1]),\r\n 0,\r\n 0,\r\n 0\r\n ).valueOf();\r\n const y = new Date(\r\n Number(bDate[2]),\r\n Number(bDate[0]) - 1,\r\n Number(bDate[1]),\r\n 0,\r\n 0,\r\n 0\r\n ).valueOf();\r\n\r\n return x === y ? 0 : x < y ? -1 : 1;\r\n }\r\n\r\n public handleCancelGnGSessionSelect = async () => {\r\n this.props.studentStore.studentModel.showGrabNGoSessionSelect = false;\r\n this.props.studentStore.gngPauseAllSessions = false;\r\n this.props.studentStore.studentModel.gngStudentIdToProcess = 0;\r\n this.props.terminalStore.terminalStateModel.noIDButtonDisabled = false;\r\n\r\n this.setState({\r\n term: \"\"\r\n });\r\n\r\n this.props.studentStore.clearSearch(true);\r\n };\r\n\r\n public handleGnGSessionContinue = async () => {\r\n this.props.studentStore.studentModel.showGrabNGoSessionSelect = false;\r\n this.props.studentStore.handleSelectStudent(\r\n this.props.studentStore.studentModel.gngStudentIdToProcess\r\n );\r\n };\r\n\r\n public handleGnGDaySessionSelect = async (posSessionGuid: string) => {\r\n const {\r\n terminalStore: {\r\n terminalStateModel: { gngDaySessionsToServe }\r\n }\r\n } = this.props.rootStore;\r\n\r\n if (gngDaySessionsToServe.find((s) => s === posSessionGuid)) {\r\n const index = gngDaySessionsToServe.indexOf(posSessionGuid);\r\n gngDaySessionsToServe.splice(index, 1);\r\n } else {\r\n gngDaySessionsToServe.push(posSessionGuid);\r\n }\r\n };\r\n\r\n public render() {\r\n const {\r\n canVoid,\r\n overridePassword,\r\n authStore: {\r\n auth: { customerID }\r\n },\r\n studentStore,\r\n studentStore: {\r\n studentModel,\r\n serveAllModel,\r\n isRosterMode,\r\n isRosterSearch,\r\n studentSearchModel: { districtStudents, siteStudents },\r\n isSearching,\r\n isBufferSearch,\r\n previousStudentModel\r\n },\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: {\r\n terminal,\r\n terminalConfig,\r\n isClosed,\r\n isCreditPatrons,\r\n isTransactionSearch\r\n },\r\n terminalStateModel: { posSessions }\r\n },\r\n transactionStore,\r\n rootStore\r\n } = this.props;\r\n\r\n // Force focus to Search Box any time the\r\n // search re-renders, to fix issues such as\r\n // not having focus after a Void Transaction.\r\n this.focusSearchBox();\r\n\r\n const uniqueColumns: any = [\r\n ...new Set(posSessions!.map((item) => item.sessionID))\r\n ].length;\r\n\r\n const sortedPosSessions = posSessions!.slice().sort((a, b) => {\r\n const aDateSplit = a.servingDay.split(\"-\");\r\n const bDateSplit = b.servingDay.split(\"-\");\r\n return this.sortFn(aDateSplit, bDateSplit) || a.sessionID - b.sessionID;\r\n });\r\n\r\n const groupedPosSession = this.groupBy(sortedPosSessions, \"servingDay\");\r\n\r\n const groupedArray: [[]] = [[]];\r\n\r\n Object.keys(groupedPosSession).forEach((key) => {\r\n groupedArray.push(groupedPosSession[key]);\r\n });\r\n\r\n return (\r\n \r\n \r\n Loading…\r\n \r\n \r\n \r\n \r\n \r\n {(!isRosterMode &&\r\n (!terminalConfig || !terminalConfig.bufferedServing)) ||\r\n isRosterSearch ||\r\n isBufferSearch ? (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Enter a Pin or ID\r\n \r\n \r\n Search for a student\r\n \r\n \r\n \r\n {this.state.isSearchMode ? (\r\n
\r\n {siteStudents.length === 0 &&\r\n districtStudents.length === 0 &&\r\n this.state.term.length >= SearchSize &&\r\n !isSearching ? (\r\n
\r\n No students found\r\n
\r\n ) : null}\r\n
\r\n Last Name\r\n \r\n \r\n \r\n First Name\r\n
\r\n
\r\n ) : null}\r\n
\r\n ) : isRosterMode ? (\r\n \r\n {terminalConfig && terminalConfig.keyOpensSearch ? (\r\n
\r\n \r\n ) => {\r\n this.handleRosterSearchToggle();\r\n }}\r\n value={this.state.term}\r\n ref={this.searchBox}\r\n readOnly={true}\r\n focus={true}\r\n />\r\n \r\n ) : null}\r\n \r\n \r\n
Roster Mode
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Filter\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
Buffered Serving
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Search\r\n \r\n {terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n !studentStore.isRosterMode ? (\r\n \r\n
\r\n  \r\n
\r\n \r\n Flip Left / Right\r\n \r\n
\r\n ) : null}\r\n
\r\n \r\n )}\r\n \r\n {this.renderGrids()}\r\n \r\n
\r\n
\r\n {terminalConfig &&\r\n terminalConfig.bufferedServing &&\r\n !studentStore.isRosterMode ? (\r\n \r\n ) : null}\r\n {!isRosterMode &&\r\n (!terminalConfig || !terminalConfig.bufferedServing) ? (\r\n \r\n ) : null}\r\n {terminalConfig &&\r\n terminalConfig.isGrabNGo &&\r\n studentStore.studentModel.showAlert &&\r\n terminalStore.terminalStateModel.patronTransactionsServed.length ===\r\n 0 ? (\r\n \r\n \r\n Student not served.\r\n \r\n \r\n ) : null}\r\n \r\n
\r\n {(!isRosterMode &&\r\n !this.state.override &&\r\n terminalConfig &&\r\n !terminalConfig.bufferedServing) ||\r\n studentStore.isRosterSearch ||\r\n isBufferSearch ||\r\n isCreditPatrons ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n {isCreditPatrons || isTransactionSearch ? null : (\r\n \r\n \r\n {(terminalConfig && terminalConfig.isGrabNGo) ||\r\n isRosterMode ||\r\n isRosterSearch ? null : (\r\n \r\n Roster\r\n
\r\n Serve\r\n \r\n )}\r\n
\r\n {terminalConfig && terminalConfig.isGrabNGo ? (\r\n \r\n \r\n {studentStore.gngPauseAllSessions\r\n ? \"Pause All Sessions\"\r\n : \"All Sessions\"}\r\n \r\n \r\n {this.props.terminalStore.terminalStateModel\r\n .noIDButtonDisabled\r\n ? \"Serving\"\r\n : \"No ID\"}\r\n \r\n \r\n ) : (\r\n \r\n \r\n Student\r\n
\r\n Cash\r\n \r\n \r\n Non-Student\r\n
\r\n Cash\r\n \r\n
\r\n )}\r\n \r\n {terminalConfig &&\r\n terminalStore.quickSale &&\r\n terminalStore.autoServeKey &&\r\n terminalStore.useAutoItem ? (\r\n \r\n Quick Sale\r\n
\r\n is {studentStore.isQuickSalePaused ? \"Paused\" : \"On\"}\r\n \r\n ) : null}\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n
Serve All Completed
\r\n

\r\n Finished serving {serveAllModel.totalServedCount} of{\" \"}\r\n {serveAllModel.totalToServeCount} patron\r\n {serveAllModel.totalToServeCount ? \"s\" : \"\"}.\r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
Confirm Exit
\r\n

\r\n There are students still in the buffer. Are you sure you want to\r\n exit?\r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n Sessions\r\n \r\n

\r\n Please unselect any session you are not serving to this patron:\r\n

\r\n \r\n {groupedArray.map((gps, dateIndex) => (\r\n \r\n {gps.map((ps: PosSession, index) => (\r\n \r\n \r\n {this.props.terminalStore.terminalModel.sessions.find(\r\n (x) => x.sessionID === ps.sessionID\r\n )\r\n ? ps.servingDay +\r\n \" - \" +\r\n this.props.terminalStore.terminalModel.sessions.find(\r\n (x) => x.sessionID === ps.sessionID\r\n )!.description\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 {!terminalStore.terminalModel.isCreditPatrons ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n private doSearchModeToggle = (isSearch: boolean) => {\r\n if (this.state.isSearchMode !== isSearch) {\r\n const { studentStore } = this.props;\r\n\r\n studentStore.clearSearch(true);\r\n\r\n if (isSearch && this.state.term.length > 0) {\r\n studentStore.isSearching = true;\r\n this.doSearch(this.state.term);\r\n }\r\n\r\n const term = isSearch ? this.state.term : \"\";\r\n\r\n this.setState({\r\n isSearchMode: isSearch,\r\n term: term\r\n });\r\n\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current!.keyboard.setInput!(term);\r\n }\r\n }\r\n this.focusSearchBox();\r\n };\r\n\r\n private doSearch = (value: string) => {\r\n const { studentStore } = this.props;\r\n const { previousStudentModel } = studentStore;\r\n\r\n if (previousStudentModel) {\r\n studentStore.clearPreviousStudent();\r\n }\r\n if (\r\n this.props.rootStore.terminalStore.terminalModel.terminalConfig &&\r\n this.props.rootStore.terminalStore.terminalModel.terminalConfig\r\n ) {\r\n this.props.rootStore.studentStore.studentModel.showAlert = false;\r\n }\r\n\r\n studentStore.isSearching = true;\r\n studentStore.searchTerms.next(value);\r\n };\r\n\r\n private focusSearchBox = () => {\r\n if (this.searchBox.current) {\r\n this.searchBox.current.focus();\r\n }\r\n };\r\n\r\n private updateSearchBox = () => {\r\n if (this.keyboardRef.current) {\r\n this.keyboardRef.current!.keyboard.setInput!(this.state.term);\r\n }\r\n if (this.state.isSearchMode) {\r\n this.doSearch(this.state.term);\r\n }\r\n };\r\n}\r\n\r\nexport default StudentSearch;\r\n","import * as React from \"react\";\r\nimport { Modal, Input, Label, Button } from \"semantic-ui-react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport { TerminalConfiguration, Session } from \"../../models/TerminalModel\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\n\r\ninterface Props {\r\n session?: Session;\r\n terminalConfig?: TerminalConfiguration;\r\n terminalStore: TerminalStore;\r\n servingDay: Date;\r\n isClosed: boolean;\r\n changeSession: () => void;\r\n}\r\n\r\nconst keyboardUtils = new KeyboardUtils();\r\n\r\nfunction handleOnKeyUp(\r\n e: React.KeyboardEvent,\r\n overridePassword: string,\r\n setOverridePassword: React.Dispatch\r\n) {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const newValue = !isBackSpace\r\n ? overridePassword + keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : overridePassword.toString().slice(0, -1);\r\n\r\n setOverridePassword(newValue);\r\n }\r\n }\r\n}\r\n\r\nfunction onKeyPress(\r\n button: string,\r\n layoutName: string,\r\n setLayoutName: React.Dispatch\r\n) {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n if (layoutName === \"default\") {\r\n setLayoutName(\"shift\");\r\n } else {\r\n setLayoutName(\"default\");\r\n }\r\n }\r\n}\r\n\r\nfunction overridePeriodEndedModal(\r\n terminalConfig: TerminalConfiguration | undefined,\r\n terminalStore: TerminalStore | undefined,\r\n overridePassword: string,\r\n setInvalidPassword: React.Dispatch\r\n) {\r\n if (\r\n terminalConfig &&\r\n overridePassword === terminalConfig.sessionTimeOverridePassword\r\n ) {\r\n terminalStore!.sessionTimeOverridden = true;\r\n } else {\r\n setInvalidPassword(true);\r\n }\r\n}\r\n\r\nexport default observer(\r\n ({\r\n session,\r\n terminalConfig,\r\n terminalStore,\r\n servingDay,\r\n isClosed,\r\n changeSession\r\n }: Props) => {\r\n const overridden = terminalStore.sessionTimeOverridden;\r\n const [invalidPassword, setInvalidPassword] = React.useState(false);\r\n const [overridePassword, setOverridePassword] = React.useState(\"\");\r\n const [layoutName, setLayoutName] = React.useState(\"default\");\r\n const [layout] = React.useState({\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ],\r\n hidden: []\r\n });\r\n\r\n let showModal: boolean = false;\r\n const options = {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n hour12: true\r\n };\r\n let startTime = new Date();\r\n let endTime = new Date();\r\n\r\n const passwordSet =\r\n terminalConfig &&\r\n terminalConfig.sessionTimeOverridePassword &&\r\n terminalConfig.sessionTimeOverridePassword.length > 0;\r\n\r\n if (session && !isClosed && terminalConfig) {\r\n const now = new Date(servingDay);\r\n now.setTime(new Date().getTime());\r\n const sessionStartTime = new Date(\r\n (terminalConfig.overrideSessionTime && terminalConfig.startTime) ||\r\n session.startTime\r\n );\r\n const sessionEndTime = new Date(\r\n (terminalConfig.overrideSessionTime && terminalConfig.endTime) ||\r\n session.endTime\r\n );\r\n startTime = new Date(\r\n now.getFullYear(),\r\n now.getMonth(),\r\n now.getDate(),\r\n sessionStartTime.getHours(),\r\n sessionStartTime.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n endTime = new Date(\r\n now.getFullYear(),\r\n now.getMonth(),\r\n now.getDate(),\r\n sessionEndTime.getHours(),\r\n sessionEndTime.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n\r\n showModal =\r\n !overridden &&\r\n !!terminalConfig &&\r\n terminalConfig.enforceServingTime &&\r\n (now <= startTime || now >= endTime);\r\n }\r\n\r\n return (\r\n \r\n \r\n {session && session!.description} Period Ended\r\n \r\n \r\n

\r\n The {session && session!.description} serving period is only active\r\n from {startTime.toLocaleTimeString(\"en-US\", options)} through{\" \"}\r\n {endTime.toLocaleTimeString(\"en-US\", options)}.\r\n

\r\n

The serving period is now over.

\r\n {passwordSet ? (\r\n \r\n handleOnKeyUp(e, overridePassword, setOverridePassword)\r\n }\r\n onKeyDown={keyboardUtils.handleOnKeyDown}\r\n focus={true}\r\n />\r\n ) : null}\r\n {invalidPassword ? (\r\n \r\n ) : null}\r\n {passwordSet ? (\r\n
\r\n \r\n onKeyPress(button, layoutName, setLayoutName)\r\n }\r\n onChangeAll={(inputObject: any) =>\r\n setOverridePassword(inputObject[\"overridePassword\"])\r\n }\r\n layout={layout}\r\n theme={\r\n \"hg-theme-default hg-layout-numeric numeric-theme keyboard-margins\"\r\n }\r\n />\r\n
\r\n ) : null}\r\n
\r\n \r\n changeSession()}\r\n negative={true}\r\n content=\"Close\"\r\n />\r\n {passwordSet ? (\r\n \r\n ) : null}\r\n \r\n
\r\n );\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport StudentStore from \"../../stores/StudentStore\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\nimport { BufferedSide } from \"../../models/StudentModel\";\r\n\r\ninterface Props {\r\n studentStore: StudentStore;\r\n}\r\n\r\nfunction handleKeyUp(\r\n e: React.KeyboardEvent,\r\n keyboardUtils: KeyboardUtils\r\n) {\r\n if (keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nfunction handleKeyPress(\r\n e: React.KeyboardEvent,\r\n studentStore: StudentStore,\r\n input1: string,\r\n input2: string,\r\n setInput1: React.Dispatch,\r\n setInput2: React.Dispatch,\r\n keyboardUtils: KeyboardUtils\r\n) {\r\n if (e.key.match(/[!@#$%^&*()]/g)) {\r\n setInput2(input2 + keyboardUtils.downShift(e.key));\r\n }\r\n if (e.key.match(/^\\d+$/)) {\r\n setInput1(input1 + e.key);\r\n } else if (\r\n e.keyCode === 10 ||\r\n e.keyCode === 3 ||\r\n // e.key === '`' || // Can't do this, because one keypad would force \"enter\" on the other.\r\n e.key === \"Enter\"\r\n ) {\r\n e.preventDefault();\r\n handleEnter(studentStore, BufferedSide.Left, input1, setInput1);\r\n } else if (e.key === \"_\") {\r\n e.preventDefault();\r\n handleEnter(studentStore, BufferedSide.Right, input2, setInput2);\r\n }\r\n}\r\n\r\nfunction handleEnter(\r\n studentStore: StudentStore,\r\n bufferedSide: BufferedSide,\r\n input: string,\r\n setInput: React.Dispatch\r\n) {\r\n if (input && !isNaN(input as any)) {\r\n studentStore.autoSelectStudent(input, bufferedSide);\r\n setInput(\"\");\r\n }\r\n}\r\n\r\nexport default ({ studentStore }: Props) => {\r\n const inputEl = React.useRef(null);\r\n const [input1, setInput1] = React.useState(\"\");\r\n const [input2, setInput2] = React.useState(\"\");\r\n\r\n const keyboardUtils = new KeyboardUtils();\r\n\r\n return (\r\n {\r\n if (inputEl && inputEl.current) {\r\n inputEl.current.focus();\r\n }\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.ctrlKey && (e.key === \"C\" || e.key === \"c\")) {\r\n e.keyCode = 3;\r\n }\r\n\r\n if (e.keyCode === 10 || e.keyCode === 3) {\r\n handleKeyPress(\r\n e,\r\n studentStore,\r\n input1,\r\n input2,\r\n setInput1,\r\n setInput2,\r\n keyboardUtils\r\n );\r\n }\r\n }}\r\n onKeyPress={(e) =>\r\n handleKeyPress(\r\n e,\r\n studentStore,\r\n input1,\r\n input2,\r\n setInput1,\r\n setInput2,\r\n keyboardUtils\r\n )\r\n }\r\n onKeyUp={(e) => handleKeyUp(e, keyboardUtils)}\r\n autoComplete=\"off\"\r\n style={{ position: \"absolute\", left: -2000 }}\r\n />\r\n );\r\n};\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport {\r\n Grid,\r\n Header,\r\n Segment,\r\n Button,\r\n Table,\r\n Checkbox,\r\n Modal,\r\n Dimmer,\r\n Loader,\r\n Input,\r\n Label\r\n} from \"semantic-ui-react\";\r\nimport AppMenu from \"./menu/AppMenu\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport RootStore, { AllStores } from \"../stores/RootStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore from \"../stores/TransactionStore\";\r\nimport FlexContent from \"./util/FlexContent\";\r\nimport StudentSearch from \"./student/StudentSearch\";\r\nimport AuthStore from \"../stores/AuthStore\";\r\nimport StudentStore from \"../stores/StudentStore\";\r\nimport { Student } from \"../models/StudentModel\";\r\nimport { PosPos } from \"../models/TransactionModel\";\r\nimport ClosedMonth from \"./meal/ClosedMonth\";\r\nimport {\r\n TerminalConfiguration,\r\n ItemGroupType,\r\n SalesItemSetup\r\n} from \"../models/TerminalModel\";\r\nimport KeyboardUtils from \"../utils/keyboard\";\r\nimport { SessionData } from \"../models/AuthModel\";\r\n\r\ninterface Props {\r\n rootStore: RootStore;\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n authStore: AuthStore;\r\n studentStore: StudentStore;\r\n}\r\n\r\ninterface State {\r\n students: Student[];\r\n transactionsChecked: string[];\r\n activeSession: number;\r\n showModal: boolean;\r\n terminalConfig: TerminalConfiguration | null;\r\n override: boolean;\r\n reasonForDelete: string;\r\n reasonForDeleteRequired: boolean;\r\n invalidPassword: boolean;\r\n overridePassword: string;\r\n layoutName: string;\r\n layout: any;\r\n inputName: string;\r\n}\r\n\r\nenum FocusedElement {\r\n OverridePassword = \"overridePassword\",\r\n ReasonForDelete = \"reasonForDelete\"\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n rootStore: allStores.rootStore,\r\n transactionStore: allStores.rootStore.transactionStore,\r\n terminalStore: allStores.rootStore.terminalStore,\r\n authStore: allStores.rootStore.authStore,\r\n studentStore: allStores.rootStore.studentStore\r\n}))\r\n@observer\r\nclass TransactionHistory extends React.Component<\r\n Props & RouteComponentProps,\r\n State\r\n> {\r\n private overrideBox: React.RefObject;\r\n private reasonForDeleteBox: React.RefObject;\r\n private modalKeyboardRef: React.RefObject;\r\n private keyboardUtils: KeyboardUtils = new KeyboardUtils();\r\n\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n\r\n this.overrideBox = React.createRef();\r\n this.reasonForDeleteBox = React.createRef();\r\n this.modalKeyboardRef = React.createRef();\r\n\r\n this.state = {\r\n students: [],\r\n transactionsChecked: [],\r\n activeSession: 0,\r\n showModal: false,\r\n terminalConfig: null,\r\n override: false,\r\n overridePassword: \"\",\r\n reasonForDelete: \"\",\r\n reasonForDeleteRequired: false,\r\n invalidPassword: false,\r\n layoutName: \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ]\r\n },\r\n inputName: \"\"\r\n };\r\n }\r\n\r\n public async componentDidMount() {\r\n const {\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { sessions }\r\n },\r\n transactionStore\r\n } = this.props;\r\n\r\n await transactionStore.getSiteTransactions(true);\r\n this.setSession(sessions[0].sessionID);\r\n\r\n const students = await studentStore.getPatronsForTransactions();\r\n\r\n this.setState({\r\n students\r\n });\r\n }\r\n\r\n public checkboxChanged(posPosGuid: string) {\r\n const transactionsChecked = [...this.state.transactionsChecked];\r\n\r\n if (transactionsChecked.includes(posPosGuid)) {\r\n transactionsChecked.splice(transactionsChecked.indexOf(posPosGuid), 1);\r\n } else {\r\n transactionsChecked.push(posPosGuid);\r\n }\r\n\r\n this.setState({ transactionsChecked });\r\n }\r\n\r\n public handleVoidTransaction = () => {\r\n this.setState({ override: true }, () => {\r\n if (\r\n this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete &&\r\n this.reasonForDeleteBox.current\r\n ) {\r\n this.reasonForDeleteBox.current.focus();\r\n } else if (this.overrideBox.current) {\r\n this.overrideBox.current.focus();\r\n }\r\n });\r\n };\r\n\r\n public cancelOverride = () => {\r\n this.setState({\r\n override: false,\r\n overridePassword: \"\",\r\n invalidPassword: false,\r\n reasonForDelete: \"\",\r\n reasonForDeleteRequired: false\r\n });\r\n };\r\n\r\n public handleOverrideEnter = (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n this.overrideVoidTransactionModal();\r\n }\r\n };\r\n\r\n public handleReasonForDelete = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n reasonForDelete: e.currentTarget.value\r\n });\r\n };\r\n\r\n public handleOverridePassword = (\r\n e: React.SyntheticEvent\r\n ) => {\r\n this.setState({\r\n overridePassword: e.currentTarget.value,\r\n invalidPassword: false\r\n });\r\n };\r\n\r\n public overrideVoidTransactionModal = async () => {\r\n const reasonForDeleteRequired =\r\n !!this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete &&\r\n !this.state.reasonForDelete;\r\n\r\n const overridePassword =\r\n (this.state.terminalConfig &&\r\n this.state.terminalConfig.deleteOverridePassword) ||\r\n \"\";\r\n\r\n const invalidPassword =\r\n !!overridePassword && overridePassword !== this.state.overridePassword;\r\n\r\n if (!invalidPassword && !reasonForDeleteRequired) {\r\n await this.voidSelected();\r\n this.setState({\r\n invalidPassword: false,\r\n override: false,\r\n overridePassword: \"\",\r\n reasonForDeleteRequired: false\r\n });\r\n } else {\r\n this.setState({ invalidPassword, reasonForDeleteRequired });\r\n\r\n if (this.overrideBox.current) {\r\n this.overrideBox.current.focus();\r\n }\r\n }\r\n };\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n if (this.state.inputName === FocusedElement.OverridePassword.toString()) {\r\n this.setState({\r\n overridePassword: inputObject[\"overridePassword\"]\r\n });\r\n } else if (\r\n this.state.inputName === FocusedElement.ReasonForDelete.toString()\r\n ) {\r\n this.setState({\r\n reasonForDelete: inputObject[\"reasonForDelete\"]\r\n });\r\n }\r\n };\r\n\r\n public handleEnter = () => {\r\n this.overrideVoidTransactionModal();\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public onKeyPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\") {\r\n this.handleEnter();\r\n }\r\n };\r\n\r\n public handleOnKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n this.keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (this.keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue =\r\n this.state.inputName === FocusedElement.OverridePassword\r\n ? this.state.overridePassword\r\n : this.state.reasonForDelete;\r\n const newValue = !isBackSpace\r\n ? stateValue + this.keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : stateValue.toString().slice(0, -1);\r\n\r\n if (this.state.inputName === FocusedElement.OverridePassword) {\r\n this.setState({\r\n overridePassword: newValue\r\n });\r\n this.modalKeyboardRef.current!.keyboard.input.overridePassword =\r\n newValue;\r\n } else if (this.state.inputName === FocusedElement.ReasonForDelete) {\r\n this.setState({\r\n reasonForDelete: newValue\r\n });\r\n this.modalKeyboardRef.current!.keyboard.input.reasonForDelete =\r\n newValue;\r\n }\r\n }\r\n }\r\n };\r\n\r\n public handleKeyboardFocus(element: FocusedElement) {\r\n this.setState({\r\n inputName: element.toString()\r\n });\r\n }\r\n\r\n public voidSelected = async () => {\r\n const { transactionStore } = this.props;\r\n const { transactionHistory } = this.props.transactionStore;\r\n const { transactionsChecked } = this.state;\r\n\r\n if (transactionsChecked && transactionsChecked.length > 0) {\r\n for (const posPosGuid of transactionsChecked) {\r\n const posPos = transactionHistory.find(\r\n (x) => x.posPosGuid === posPosGuid\r\n );\r\n\r\n if (posPos) {\r\n posPos.isVoided = true;\r\n await transactionStore.voidTransactions(\r\n posPos,\r\n this.state.reasonForDelete\r\n );\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n override: false,\r\n overridePassword: \"\",\r\n invalidPassword: false,\r\n showModal: true,\r\n transactionsChecked: [],\r\n reasonForDelete: \"\"\r\n });\r\n };\r\n\r\n public uncheckCheckboxes() {\r\n this.setState({\r\n transactionsChecked: []\r\n });\r\n }\r\n\r\n public async sessionButtonClicked(sessionID: number) {\r\n const { transactionStore } = this.props;\r\n\r\n await transactionStore.getSiteTransactions(true);\r\n\r\n this.setSession(sessionID);\r\n }\r\n\r\n public setSession = (sessionID: number) => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { sessions, terminalConfigurations }\r\n },\r\n transactionStore\r\n } = this.props;\r\n\r\n transactionStore.setTransactionHistory(sessionID);\r\n\r\n let terminalConfig = null;\r\n\r\n const session = sessions.find((s) => s.sessionID === sessionID);\r\n\r\n if (session) {\r\n terminalConfig =\r\n terminalConfigurations.find(\r\n (t) => t.terminalConfigurationID === session.terminalConfigurationID\r\n ) || null;\r\n }\r\n\r\n this.setState({\r\n activeSession: sessionID,\r\n terminalConfig,\r\n transactionsChecked: []\r\n });\r\n };\r\n\r\n public backClicked = async () => {\r\n const { studentStore, terminalStore, transactionStore } = this.props;\r\n await studentStore.clearStudent();\r\n terminalStore!.terminalModel.isTransactionHistory = false;\r\n transactionStore.clearPreviousTransactions();\r\n transactionStore.transactionHistory.clear();\r\n await this.handleClearSearch();\r\n await this.props.terminalStore!.changeSession();\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n public handleSearch = async () => {\r\n this.props.terminalStore.terminalModel.isTransactionSearch = true;\r\n this.uncheckCheckboxes();\r\n };\r\n\r\n public handleClearSearch = async () => {\r\n this.props.transactionStore.transactionHistoryPatronID = undefined;\r\n this.uncheckCheckboxes();\r\n };\r\n\r\n public formatAMPM(date: Date) {\r\n let hours = date.getHours();\r\n let minutes: any = date.getMinutes();\r\n const ampm = hours >= 12 ? \"PM\" : \"AM\";\r\n hours = hours % 12;\r\n hours = hours ? hours : 12;\r\n minutes = minutes < 10 ? \"0\" + minutes : minutes;\r\n const strTime = hours + \":\" + minutes + \" \" + ampm;\r\n return strTime;\r\n }\r\n\r\n private isAccountSale(posPos: PosPos) {\r\n return (\r\n posPos.patronID &&\r\n posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => !t.hide && t.accountAmount < 0)\r\n );\r\n }\r\n\r\n private isCashSale(\r\n posPos: PosPos,\r\n salesItemSetup: SalesItemSetup | undefined\r\n ) {\r\n return (\r\n !posPos.patronID ||\r\n (salesItemSetup &&\r\n posPos.posTransactions &&\r\n (posPos.posTransactions.some(\r\n (t) => t.salesItemHeaderID === salesItemSetup.cashSalesItem\r\n ) ||\r\n posPos.posTransactions.every(\r\n (t) => !t.hide && t.accountAmount === 0\r\n )))\r\n );\r\n }\r\n\r\n private isCredit(posPos: PosPos) {\r\n return (\r\n posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => t.hide && t.accountAmount > 0)\r\n );\r\n }\r\n\r\n public getDescription(posPos: PosPos) {\r\n const {\r\n transactionStore: { transactionHistory },\r\n terminalStore: {\r\n terminalModel: { salesItemSetup }\r\n }\r\n } = this.props;\r\n\r\n if (\r\n posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => !!t.deletedPosPosGuid)\r\n ) {\r\n const voidedPosPos = transactionHistory.find(\r\n (p) => p.posPosGuid === posPos.posTransactions![0].deletedPosPosGuid\r\n );\r\n\r\n if (voidedPosPos) {\r\n return `Void ${this.formatAMPM(new Date(voidedPosPos.posTime))} ${\r\n this.isAccountSale(voidedPosPos) ||\r\n this.isCashSale(voidedPosPos, salesItemSetup)\r\n ? \"Sale\"\r\n : \"Credit\"\r\n }`;\r\n }\r\n }\r\n\r\n if (this.isAccountSale(posPos)) {\r\n return `${posPos.patronTypeID === 2 ? \"Non-\" : \"\"}Student Acct Sale`;\r\n }\r\n\r\n if (this.isCashSale(posPos, salesItemSetup)) {\r\n return `${posPos.patronTypeID === 2 ? \"Non-\" : \"\"}Student Cash Sale`;\r\n }\r\n\r\n if (this.isCredit(posPos)) {\r\n return `${posPos.patronTypeID === 2 ? \"Non-\" : \"\"}Student ${\r\n posPos.posTransactions!.some(\r\n (t) => t.salesItemHeaderID === salesItemSetup!.creditCardSalesItem\r\n )\r\n ? \"CC\"\r\n : posPos.posTransactions!.some(\r\n (t) => t.salesItemHeaderID === salesItemSetup!.checkSalesItem\r\n )\r\n ? \"Check\"\r\n : \"Cash\"\r\n } Credit`;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n public closeModal = () => this.setState({ showModal: false });\r\n\r\n private renderTableBody(sessionData: SessionData | undefined) {\r\n const {\r\n transactionStore: { transactionHistory, transactionHistoryPatronID },\r\n terminalStore: {\r\n terminalModel: { salesItemSetup }\r\n }\r\n } = this.props;\r\n\r\n return (\r\n \r\n {transactionHistory\r\n .filter(\r\n (p) =>\r\n !transactionHistoryPatronID ||\r\n p.patronID === transactionHistoryPatronID\r\n )\r\n .sort((a, b) => (new Date(a.posTime) < new Date(b.posTime) ? -1 : 1))\r\n .map((posPos, index) => {\r\n let mealTotal = 0;\r\n let mealCount;\r\n let snackTotal;\r\n let alaCarteTotal;\r\n let amountTendered;\r\n let creditAmount;\r\n\r\n const isDeletedPosPos =\r\n !!posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => !!t.deletedPosPosGuid);\r\n\r\n const isNotSynced =\r\n !!posPos.posTransactions &&\r\n posPos.posTransactions.some((t) => t.posTransactionID === 0);\r\n\r\n const isCancelled =\r\n !posPos.posTransactions ||\r\n !posPos.posTransactions.some((t) => t.quantity !== 0);\r\n\r\n if (posPos.posTransactions) {\r\n const mealTransactions = posPos.posTransactions.filter(\r\n (t) => !t.hide && t.isMeal && t.quantity !== 0\r\n );\r\n\r\n const snackTransactions = posPos.posTransactions.filter(\r\n (t) =>\r\n !t.hide &&\r\n !t.isMeal &&\r\n t.quantity !== 0 &&\r\n t.saleItemGroupID === ItemGroupType.ReimbSnack\r\n );\r\n\r\n const alaCarteTransactions = posPos.posTransactions.filter(\r\n (t) =>\r\n !t.hide &&\r\n !mealTransactions.includes(t) &&\r\n !snackTransactions.includes(t) &&\r\n t.quantity !== 0\r\n );\r\n\r\n mealCount = mealTransactions.reduce(\r\n (acc, t) => acc + t.quantity,\r\n 0\r\n );\r\n\r\n mealTotal = mealTransactions.reduce(\r\n (acc, t) => acc + t.amount,\r\n 0\r\n );\r\n\r\n snackTotal = snackTransactions.reduce(\r\n (acc, t) => acc + t.amount,\r\n 0\r\n );\r\n\r\n alaCarteTotal = alaCarteTransactions.reduce(\r\n (acc, t) => acc + t.amount,\r\n 0\r\n );\r\n\r\n creditAmount =\r\n posPos.posTransactions\r\n .filter((t) => t.hide && t.quantity !== 0)\r\n .reduce((acc, t) => acc + t.accountAmount, 0) || undefined;\r\n\r\n const salesItems: number[] = [];\r\n\r\n if (salesItemSetup) {\r\n salesItems.push(\r\n ...[\r\n salesItemSetup.cashSalesItem,\r\n salesItemSetup.checkSalesItem,\r\n salesItemSetup.prepaidSalesItem,\r\n salesItemSetup.refundSalesItem,\r\n salesItemSetup.creditCardSalesItem\r\n ]\r\n );\r\n }\r\n\r\n amountTendered =\r\n posPos.amountTendered ||\r\n posPos.posTransactions\r\n .filter((t) => salesItems.includes(t.salesItemHeaderID))\r\n .reduce((acc, t) => acc + t.amount, 0);\r\n }\r\n\r\n const student = this.state.students.find(\r\n (x) => x.patronID === posPos.patronID\r\n );\r\n\r\n const description = this.getDescription(posPos);\r\n\r\n const total =\r\n (mealTotal || 0) + (snackTotal || 0) + (alaCarteTotal || 0);\r\n\r\n const posTime = new Date(posPos.posTime);\r\n const dateString = `${posTime.toLocaleDateString()}, ${posTime.toLocaleTimeString(\r\n \"en-US\",\r\n {\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n }\r\n )}`;\r\n\r\n return posPos.posTransactions ? (\r\n \r\n \r\n {posPos.isVoided ? (\r\n \"V\"\r\n ) : isCancelled ? (\r\n \"C\"\r\n ) : isDeletedPosPos ? (\r\n \"\"\r\n ) : sessionData && sessionData.canVoidTransactions ? (\r\n \r\n ) : null}\r\n \r\n \r\n {isNotSynced ? (\r\n \r\n {dateString}\r\n \r\n ) : (\r\n dateString\r\n )}\r\n \r\n \r\n {student ? `${student.firstName} ${student.lastName}` : \"\"}\r\n \r\n \r\n {student\r\n ? `${student.patronNumber}${\r\n student.pospin ? `/${student.pospin}` : \"\"\r\n }`\r\n : \"\"}\r\n \r\n {description}\r\n \r\n {mealCount ? (isDeletedPosPos ? -mealCount : mealCount) : \"\"}\r\n \r\n \r\n {mealCount && mealCount > 0\r\n ? `$${(isDeletedPosPos ? -mealTotal : mealTotal).toFixed(\r\n 2\r\n )}`\r\n : \"\"}\r\n \r\n \r\n {alaCarteTotal ? `$${alaCarteTotal.toFixed(2)}` : \"\"}\r\n \r\n \r\n {snackTotal ? `$${snackTotal.toFixed(2)}` : \"\"}\r\n \r\n \r\n {total !== 0 ? `$${total.toFixed(2)}` : \"\"}\r\n \r\n \r\n {creditAmount ? `$${creditAmount.toFixed(2)}` : \"\"}\r\n \r\n \r\n {amountTendered ? `$${amountTendered.toFixed(2)}` : \"\"}\r\n \r\n \r\n {posPos.amountTendered\r\n ? `$${(posPos.amountTendered - total).toFixed(2)}`\r\n : \"\"}\r\n \r\n \r\n ) : null;\r\n })}\r\n \r\n );\r\n }\r\n\r\n public render() {\r\n const {\r\n authStore,\r\n authStore: {\r\n auth: { sessionData }\r\n },\r\n rootStore,\r\n studentStore,\r\n terminalStore,\r\n terminalStore: {\r\n terminalModel: { isTransactionSearch }\r\n },\r\n transactionStore,\r\n transactionStore: { transactionProcessing }\r\n } = this.props;\r\n\r\n const overridePassword =\r\n (this.state.terminalConfig &&\r\n this.state.terminalConfig.deleteOverridePassword) ||\r\n \"\";\r\n\r\n return (\r\n \r\n \r\n Loading…\r\n \r\n {isTransactionSearch ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Transactions
\r\n
\r\n \r\n {terminalStore!.terminalModel.sessions.map((s) => (\r\n \r\n {s.description}\r\n \r\n ))}\r\n \r\n Credit Mode\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Del\r\n Time\r\n \r\n Name\r\n \r\n ID/Pin #\r\n \r\n Description\r\n \r\n Meal\r\n Price\r\n A'Carte\r\n Snack\r\n Total\r\n Credit\r\n Tendered\r\n \r\n Change\r\n \r\n \r\n \r\n\r\n {this.renderTableBody(sessionData)}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {sessionData && sessionData.canVoidTransactions ? (\r\n \r\n Void Selected\r\n \r\n ) : null}\r\n \r\n Clear Search\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Transactions Voided\r\n \r\n

The selected transactions were voided successfully.

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {`Void ${this.state.transactionsChecked.length} Transactions`}\r\n \r\n {this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete ? (\r\n \r\n \r\n {this.state.reasonForDeleteRequired ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n\r\n {overridePassword ? (\r\n \r\n \r\n {this.state.invalidPassword ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n\r\n {overridePassword ||\r\n (this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete) ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : null}\r\n\r\n {!overridePassword &&\r\n !(\r\n this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete\r\n ) ? (\r\n \r\n You are about to void{\" \"}\r\n {this.state.transactionsChecked.length} transaction\r\n {this.state.transactionsChecked.length === 1 ? \"\" : \"s\"}.\r\n Are you sure?\r\n \r\n ) : null}\r\n\r\n {overridePassword ||\r\n (this.state.terminalConfig &&\r\n this.state.terminalConfig.reasonForDelete) ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n Yes\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 withRouter(TransactionHistory);\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Session } from \"../models/TerminalModel\";\r\nimport AuthStore from \"../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../stores/RootStore\";\r\nimport StudentStore from \"../stores/StudentStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore from \"../stores/TransactionStore\";\r\nimport CashCheck from \"./meal/CashCheck\";\r\nimport MealCounter from \"./meal/MealCounter\";\r\nimport MealService from \"./meal/MealService\";\r\nimport StudentSearch from \"./student/StudentSearch\";\r\nimport SessionOverride from \"./meal/SessionOverride\";\r\nimport { Loader, Dimmer } from \"semantic-ui-react\";\r\nimport BufferInput from \"./meal/BufferInput\";\r\nimport Confetti from \"react-confetti\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n studentStore?: StudentStore;\r\n terminalStore?: TerminalStore;\r\n transactionStore?: TransactionStore;\r\n rootStore?: RootStore;\r\n}\r\n\r\ninterface State {\r\n invalidPassword: boolean;\r\n overridden: boolean;\r\n overridePassword: string;\r\n}\r\n\r\n@inject((allStore: AllStores) => ({\r\n authStore: allStore.rootStore.authStore,\r\n studentStore: allStore.rootStore.studentStore,\r\n terminalStore: allStore.rootStore.terminalStore,\r\n transactionStore: allStore.rootStore.transactionStore,\r\n rootStore: allStore.rootStore\r\n}))\r\n@observer\r\nclass ServingSession extends React.Component {\r\n public state = {\r\n invalidPassword: false,\r\n overridden: false,\r\n overridePassword: \"\"\r\n };\r\n\r\n public cancelPeriodEndedModal = async () => {\r\n await this.props.terminalStore!.changeSession();\r\n };\r\n\r\n public cancelCashCheckModal = async () => {\r\n await this.props.studentStore!.clearStudent();\r\n };\r\n\r\n public componentDidUpdate() {\r\n if (this.NeedToChangeSession()) {\r\n this.props.terminalStore!.changeSession();\r\n }\r\n }\r\n\r\n private NeedToChangeSession() {\r\n const { terminalStore } = this.props;\r\n const {\r\n terminalModel: { terminalConfig, sessions, sessionID, isCreditPatrons }\r\n } = terminalStore!;\r\n\r\n return (\r\n terminalConfig &&\r\n !terminalConfig.isGrabNGo &&\r\n !sessions.some((s) => s.sessionID === sessionID) &&\r\n !isCreditPatrons\r\n );\r\n }\r\n\r\n public render() {\r\n const {\r\n authStore,\r\n rootStore,\r\n studentStore,\r\n terminalStore,\r\n transactionStore\r\n } = this.props;\r\n const {\r\n auth: { sessionData }\r\n } = authStore!;\r\n const {\r\n studentModel: { student, salesItemPrices },\r\n previousStudentModel,\r\n showMealService\r\n } = studentStore!;\r\n const {\r\n terminalModel: {\r\n terminalConfig,\r\n isCreditPatrons,\r\n sessionID,\r\n sessions,\r\n terminalConfigurations,\r\n posLayout,\r\n speedKeys,\r\n lunchSalesHeaderID,\r\n breakfastSalesHeaderID,\r\n isClosed\r\n }\r\n } = terminalStore!;\r\n\r\n const isBirthday =\r\n previousStudentModel &&\r\n previousStudentModel.student &&\r\n terminalConfig &&\r\n terminalConfig.showConfettiOnBirthday &&\r\n rootStore!.isToday(new Date(previousStudentModel.student.birthDate!));\r\n\r\n if (!terminalConfig && !isCreditPatrons) {\r\n return ;\r\n }\r\n\r\n if (terminalConfig && terminalConfig.mealCounter) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (\r\n !showMealService ||\r\n (!student && (posLayout || isCreditPatrons)) ||\r\n (showMealService && student && posLayout && !isCreditPatrons)\r\n ) {\r\n const session: Session | undefined = sessions.find(\r\n (s) => s.sessionID === sessionID\r\n );\r\n\r\n return (\r\n \r\n {terminalConfig && terminalConfig.bufferedServing ? (\r\n \r\n ) : null}\r\n {!showMealService || (!student && (posLayout || isCreditPatrons)) ? (\r\n \r\n {isBirthday ? (\r\n
\r\n \r\n \r\n \r\n
\r\n ) : null}\r\n \r\n \r\n
\r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n if (student && isCreditPatrons) {\r\n return (\r\n \r\n \r\n Loading…\r\n \r\n tc.allowRefunds)}\r\n amountDue={0}\r\n anyTransactions={false}\r\n chargeLimit={null}\r\n completeTransaction={transactionStore!.completeTransaction}\r\n creditChange={true}\r\n disableCharge={true}\r\n noChargeTotal={0}\r\n hide={this.cancelCashCheckModal}\r\n isClosed={isClosed}\r\n isCashTransaction={false}\r\n lastName={student.lastName}\r\n requireCheckNumber={terminalConfigurations.some(\r\n (tc) => tc.requireCheckNumber\r\n )}\r\n isCreditPatrons={true}\r\n student={student}\r\n customerID={authStore!.auth.customerID!}\r\n speedKeys={speedKeys}\r\n lunchSalesHeaderID={lunchSalesHeaderID}\r\n breakfastSalesHeaderID={breakfastSalesHeaderID}\r\n salesItemPrices={salesItemPrices}\r\n isBufferedServing={false}\r\n rootStore={this.props.rootStore!}\r\n />\r\n \r\n );\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport default ServingSession;\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { Button, Dimmer, Grid, Loader, Table } from \"semantic-ui-react\";\r\nimport { AllStores } from \"../stores/RootStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore from \"../stores/TransactionStore\";\r\nimport AppMenu from \"./menu/AppMenu\";\r\nimport FlexContent from \"./util/FlexContent\";\r\nimport FlexSpacer from \"./util/FlexSpacer\";\r\n\r\ninterface Props {\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n}\r\n\r\ninterface State {\r\n sessionID: number;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n terminalStore: allStores.rootStore.terminalStore,\r\n transactionStore: allStores.rootStore.transactionStore\r\n}))\r\n@observer\r\nclass Statistics extends React.Component {\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n sessionID:\r\n this.props.terminalStore.terminalModel.sessionID ||\r\n this.props.terminalStore.terminalModel.sessions[0].sessionID\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this.props.transactionStore.getTransactionStatistics();\r\n }\r\n\r\n public render() {\r\n const {\r\n terminalStore: {\r\n terminalModel: { sessions }\r\n },\r\n transactionStore: { transactionStatistics }\r\n } = this.props;\r\n\r\n if (!transactionStatistics) {\r\n return (\r\n \r\n Loading…\r\n \r\n );\r\n }\r\n\r\n let sessionStatistics = transactionStatistics.find(\r\n (ts) => ts.sessionID === this.state.sessionID\r\n );\r\n\r\n if (!sessionStatistics) {\r\n sessionStatistics = {\r\n sessionID: this.state.sessionID,\r\n itemInformation: [],\r\n mealCount: 0,\r\n transactionCount: 0\r\n };\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n {sessions.map((s) => (\r\n \r\n {s.description}\r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n Quantity\r\n \r\n \r\n \r\n \r\n {sessionStatistics.itemInformation.map((s, i) => (\r\n \r\n {s.itemName}\r\n \r\n {s.itemCount || 0}\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 Meals this session\r\n \r\n {sessionStatistics.mealCount || 0}\r\n \r\n \r\n \r\n \r\n Transactions this session\r\n \r\n \r\n {sessionStatistics.transactionCount || 0}\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 private backClicked = () => {\r\n this.props.transactionStore.clearTransactionStatistics();\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n private setSessionID(sessionID: number) {\r\n this.setState({ sessionID });\r\n }\r\n}\r\n\r\nexport default withRouter(Statistics);\r\n","import * as React from \"react\";\r\nimport { List } from \"semantic-ui-react\";\r\nimport { Building } from \"../../models/TerminalModel\";\r\n\r\ninterface Props {\r\n building: Building;\r\n onBuildingSelect: (siteID: number) => void;\r\n}\r\n\r\nexport default ({ building, onBuildingSelect }: Props) => {\r\n const handleSelect = () => {\r\n onBuildingSelect(building.siteID);\r\n };\r\n\r\n return (\r\n \r\n {building.schoolName}\r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { List } from \"semantic-ui-react\";\r\nimport { Terminal } from \"../../models/TerminalModel\";\r\n\r\ninterface Props {\r\n terminal: Terminal;\r\n onTerminalSelect: (terminal: Terminal) => void;\r\n}\r\n\r\nexport default ({ terminal, onTerminalSelect }: Props) => {\r\n const handleSelect = () => {\r\n onTerminalSelect(terminal);\r\n };\r\n\r\n return (\r\n \r\n {terminal.terminalName}\r\n \r\n );\r\n};\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps, withRouter } from \"react-router\";\r\nimport { Dimmer, Grid, Header, List, Loader, Segment } from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport { AllStores } from \"../../stores/RootStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport Building from \"./Building\";\r\nimport Terminals from \"./Terminals\";\r\nimport SiteDataLoader from \"./SiteDataLoader\";\r\n\r\ninterface Props {\r\n terminalStore?: TerminalStore;\r\n authStore?: AuthStore;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n terminalStore: allStores.rootStore.terminalStore,\r\n authStore: allStores.rootStore.authStore\r\n}))\r\n@observer\r\nclass TerminalSelect extends React.Component {\r\n public componentDidMount() {\r\n if (this.props.terminalStore!.terminalModel.isBuildingSelect) {\r\n this.props.terminalStore!.getSchools();\r\n }\r\n }\r\n\r\n public handleBackClick = async () => {\r\n const { terminalStore, authStore, history } = this.props;\r\n\r\n if (terminalStore!.terminalModel.isBuildingSelect) {\r\n if (\r\n terminalStore!.terminalModel.isTerminalSwitch &&\r\n !authStore!.isCustomerSwitch\r\n ) {\r\n terminalStore!.cancelTerminalSwitch();\r\n } else if (authStore!.isHarrisUser || authStore!.isManagementUser) {\r\n await authStore!.switchCustomers(false);\r\n history.push(\"/customerselect\");\r\n } else {\r\n await authStore!.logout();\r\n }\r\n } else {\r\n terminalStore!.terminalModel.isBuildingSelect = true;\r\n }\r\n };\r\n\r\n public render() {\r\n const { terminalStore, authStore } = this.props;\r\n\r\n if (terminalStore!.isLoading) {\r\n return (\r\n \r\n {terminalStore!.isLoadingSiteData ? (\r\n \r\n ) : (\r\n Loading…\r\n )}\r\n \r\n );\r\n }\r\n\r\n if (\r\n terminalStore!.terminalModel.terminal &&\r\n !terminalStore!.terminalModel.isTerminalSwitch &&\r\n !authStore!.isCustomerSwitch\r\n ) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n {terminalStore!.terminalModel.isBuildingSelect\r\n ? \"Select a location\"\r\n : \"Select a serving line\"}\r\n
\r\n \r\n {this.renderList()}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n public renderList() {\r\n const { terminalStore } = this.props;\r\n\r\n if (terminalStore!.terminalModel.isBuildingSelect) {\r\n return terminalStore!.terminalModel.buildings.map((building) => (\r\n \r\n ));\r\n }\r\n\r\n if (\r\n !terminalStore!.terminalModel.isBuildingSelect &&\r\n terminalStore!.terminalModel.isTerminalSelect\r\n ) {\r\n return terminalStore!.terminalModel.terminals.map((terminal) => (\r\n \r\n ));\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default withRouter(TerminalSelect);\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { Button } from \"semantic-ui-react\";\r\nimport RootStore from \"../../stores/RootStore\";\r\nimport AppMenu from \"../menu/AppMenu\";\r\nimport Text from \"./Text\";\r\n\r\ninterface Props {\r\n rootStore: RootStore;\r\n}\r\n\r\n@inject(\"rootStore\")\r\n@observer\r\nclass ErrorPage extends React.Component {\r\n private knownUrls = [\r\n \"/session\",\r\n \"/customerselect\",\r\n \"/terminalselect\",\r\n \"/error\",\r\n \"login\"\r\n ];\r\n\r\n private is404 = this.knownUrls.indexOf(window.location.pathname) === -1;\r\n private isOffline =\r\n !this.props.rootStore.config.allowOffline && !this.props.rootStore.isOnline;\r\n\r\n public handleClick = () => {\r\n this.props.rootStore.hasError = false;\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n public render() {\r\n if (!this.props.rootStore.authStore.auth.isAuthenticated) {\r\n this.props.history.push(\"/\");\r\n } else {\r\n this.props.rootStore.terminalStore.changeSession();\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {this.isOffline\r\n ? \"eTrition is not available.\"\r\n : this.is404\r\n ? \"Page not found.\"\r\n : \"An error has occurred.\"}\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 withRouter(ErrorPage);\r\n","import * as React from \"react\";\r\nimport { Redirect } from \"react-router\";\r\nimport RootStore from \"../../stores/RootStore\";\r\n\r\ninterface Props {\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n}\r\n\r\nclass Shield extends React.Component {\r\n public static getDerivedStateFromError() {\r\n return { hasError: true };\r\n }\r\n\r\n public state = { hasError: false };\r\n\r\n public componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\r\n this.props.rootStore.logError(\r\n error.message,\r\n errorInfo.componentStack,\r\n error.stack\r\n );\r\n this.setState({ hasError: true });\r\n }\r\n\r\n public render() {\r\n if (this.state.hasError) {\r\n return ;\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default Shield;\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Redirect, Route, RouteProps } from \"react-router-dom\";\r\nimport { Dimmer, Loader } from \"semantic-ui-react\";\r\nimport RootStore, { AllStores } from \"../../stores/RootStore\";\r\nimport { withTimeout } from \"../hoc/Timeout\";\r\nimport Shield from \"./Shield\";\r\n\r\ninterface Props extends RouteProps {\r\n rootStore?: RootStore;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nexport default class ProtectedRoute extends Route {\r\n public render() {\r\n const { rootStore } = this.props;\r\n const { authStore } = rootStore!;\r\n\r\n if (rootStore!.hasError && authStore!.auth.isAuthenticated) {\r\n return ;\r\n }\r\n\r\n if (!authStore!.auth.isAuthenticated) {\r\n return ;\r\n } else if (\r\n !authStore!.auth.sessionData &&\r\n !authStore!.isHarrisUser &&\r\n !authStore!.isManagementUser\r\n ) {\r\n authStore!.getSessionData(false);\r\n return (\r\n \r\n Loading…\r\n \r\n );\r\n } else if (\r\n !!authStore!.auth.sessionData &&\r\n authStore!.auth.sessionData!.mustChangePassword &&\r\n rootStore!.isOnlineExcludingTrainingMode &&\r\n !this.props.location!.pathname.includes(\"changepassword\")\r\n ) {\r\n return ;\r\n } else {\r\n const { component, ...rest } = this.props;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n}\r\n","import { inject } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { Button, Modal } from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../../stores/RootStore\";\r\nimport TerminalStore from \"../../stores/TerminalStore\";\r\n\r\ninterface HocProps {\r\n authStore: AuthStore;\r\n rootStore: RootStore;\r\n terminalStore: TerminalStore;\r\n}\r\n\r\ninterface State {\r\n warn: boolean;\r\n timeoutSeconds: number;\r\n}\r\n\r\nexport const withTimeout =

(\r\n WrappedComponent: React.ComponentType

| undefined\r\n): React.ComponentType

=>\r\n inject((allStores: AllStores) => ({\r\n rootStore: allStores.rootStore,\r\n authStore: allStores.rootStore.authStore,\r\n terminalStore: allStores.rootStore.terminalStore\r\n }))(\r\n class WithTimeout extends React.Component

{\r\n private events: string[] = [\r\n \"load\",\r\n \"mousemove\",\r\n \"mousedown\",\r\n \"click\",\r\n \"scroll\",\r\n \"keypress\"\r\n ];\r\n\r\n private logoutCountdown?: NodeJS.Timeout;\r\n private logoutTimeout?: NodeJS.Timeout;\r\n private warnTimeout?: NodeJS.Timeout;\r\n private didMount: boolean = false;\r\n private logoutMinutes: number = 20;\r\n private warningMinutes: number = 1;\r\n private sessionExpire?: Date = undefined;\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n timeoutSeconds: this.warningMinutes * 60 - 1,\r\n warn: false\r\n };\r\n\r\n const {\r\n terminalModel: { terminalConfig }\r\n } = this.props.terminalStore;\r\n\r\n if (terminalConfig && !!terminalConfig.terminalTimeout) {\r\n this.logoutMinutes = terminalConfig.terminalTimeout;\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n this.didMount = true;\r\n\r\n for (const i in this.events) {\r\n if (this.events.hasOwnProperty(i)) {\r\n window.addEventListener(this.events[i], this.resetTimeouts);\r\n }\r\n }\r\n\r\n this.setTimeout();\r\n }\r\n\r\n public componentDidUpdate(_: P & HocProps, prevState: State) {\r\n if (this.state.warn && this.state.warn !== prevState.warn) {\r\n this.logoutTimeout = setTimeout(\r\n this.logout,\r\n 1000 * 60 * this.warningMinutes\r\n );\r\n this.logoutCountdown = setInterval(() => {\r\n if (this.didMount) {\r\n this.setState((state) => ({\r\n timeoutSeconds: state.timeoutSeconds - 1\r\n }));\r\n }\r\n }, 1000);\r\n } else if (this.state.warn !== prevState.warn) {\r\n if (this.logoutTimeout) {\r\n clearTimeout(this.logoutTimeout);\r\n this.logoutTimeout = undefined;\r\n }\r\n\r\n if (this.logoutCountdown) {\r\n clearInterval(this.logoutCountdown);\r\n this.logoutCountdown = undefined;\r\n\r\n if (this.didMount) {\r\n this.setState({ timeoutSeconds: this.warningMinutes * 60 - 1 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n this.didMount = false;\r\n this.clearWarnTimeout();\r\n }\r\n\r\n public render() {\r\n const minutes = Math.floor(this.state.timeoutSeconds / 60);\r\n const seconds = this.state.timeoutSeconds - minutes * 60;\r\n\r\n if (WrappedComponent !== undefined) {\r\n return (\r\n \r\n \r\n \r\n Inactivity Timer\r\n \r\n \r\n

\r\n {`You will be logged out in ${\r\n minutes !== 0\r\n ? `${minutes} minute${minutes !== 1 ? \"s\" : \"\"} and`\r\n : \"\"\r\n } ${String(\"0\" + seconds).slice(-2)} second${\r\n seconds !== 1 ? \"s\" : \"\"\r\n }.`}\r\n

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private clearWarnTimeout = () => {\r\n if (this.warnTimeout) {\r\n clearTimeout(this.warnTimeout);\r\n this.sessionExpire = undefined;\r\n this.warnTimeout = undefined;\r\n }\r\n };\r\n\r\n private setTimeout = () => {\r\n this.warnTimeout = setTimeout(\r\n this.toggleWarn,\r\n 1000 * 60 * (this.logoutMinutes - this.warningMinutes)\r\n );\r\n this.sessionExpire = new Date(\r\n new Date().getTime() + this.logoutMinutes * 60 * 1000\r\n );\r\n };\r\n\r\n private resetTimeouts = () => {\r\n this.clearWarnTimeout();\r\n this.setTimeout();\r\n };\r\n\r\n private toggleWarn = () => {\r\n if (this.didMount) {\r\n if (\r\n !this.state.warn &&\r\n this.sessionExpire &&\r\n this.sessionExpire <= new Date()\r\n ) {\r\n this.logout();\r\n } else {\r\n this.setState((state) => ({ warn: !state.warn }));\r\n }\r\n }\r\n };\r\n\r\n private logout = async () => {\r\n this.props.rootStore.logoutActivityTimeout = true;\r\n await this.props.authStore.logout();\r\n };\r\n }\r\n );\r\n","import { inject, observer } from \"mobx-react\";\r\nimport Keyboard from \"react-simple-keyboard\";\r\nimport \"react-simple-keyboard/build/css/index.css\";\r\nimport * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport {\r\n Button,\r\n Dimmer,\r\n Form,\r\n Grid,\r\n Header,\r\n Loader,\r\n Segment,\r\n Input,\r\n Message\r\n} from \"semantic-ui-react\";\r\nimport AuthStore from \"../../stores/AuthStore\";\r\nimport RootStore, { AllStores } from \"../../stores/RootStore\";\r\nimport KeyboardUtils from \"../../utils/keyboard\";\r\n\r\ninterface Props {\r\n authStore?: AuthStore;\r\n rootStore: RootStore;\r\n}\r\n\r\ninterface State {\r\n password: string;\r\n newPassword: string;\r\n confirmNewPassword: string;\r\n error: string;\r\n layoutName: string;\r\n layout: any;\r\n inputName: string;\r\n}\r\n\r\nenum FocusedElement {\r\n Password = \"password\",\r\n NewPassword = \"new-password\",\r\n ConfirmNewPassword = \"confirm-new-password\"\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n authStore: allStores.rootStore.authStore,\r\n rootStore: allStores.rootStore\r\n}))\r\n@observer\r\nclass ChangePassword extends React.Component<\r\n Props & RouteComponentProps,\r\n State\r\n> {\r\n public form: any;\r\n private keyboardRef: React.RefObject;\r\n private keyboardUtils: KeyboardUtils;\r\n private passwordInput: React.RefObject;\r\n private newPasswordInput: React.RefObject;\r\n private confirmNewPasswordInput: React.RefObject;\r\n\r\n constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n this.state = {\r\n password: \"\",\r\n newPassword: \"\",\r\n confirmNewPassword: \"\",\r\n error: \"\",\r\n layoutName: \"default\",\r\n layout: {\r\n default: [\r\n \"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\r\n \"{tab} q w e r t y u i o p [ ] \\\\\",\r\n \"{lock} a s d f g h j k l ; ' {enter}\",\r\n \"{shift} z x c v b n m , . / {shift}\",\r\n \"{space}\"\r\n ],\r\n shift: [\r\n \"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\r\n \"{tab} Q W E R T Y U I O P { } |\",\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n \"{shift} Z X C V B N M < > ? {shift}\",\r\n \"{space}\"\r\n ]\r\n },\r\n inputName: FocusedElement.Password\r\n };\r\n\r\n this.passwordInput = React.createRef();\r\n this.newPasswordInput = React.createRef();\r\n this.confirmNewPasswordInput = React.createRef();\r\n this.keyboardRef = React.createRef();\r\n this.keyboardUtils = new KeyboardUtils();\r\n }\r\n\r\n public componentDidMount() {\r\n this.handleKeyboardFocus(FocusedElement.ConfirmNewPassword, true);\r\n this.clearErrorMessage();\r\n }\r\n\r\n public componentWillUnmount() {}\r\n\r\n public handleKeyboardPress = (button: string) => {\r\n if (button === \"{shift}\" || button === \"{lock}\") {\r\n this.handleShift();\r\n } else if (button === \"{enter}\") {\r\n this.handleEnter();\r\n } else if (button === \"{tab}\") {\r\n if (this.state.inputName === FocusedElement.Password.toString()) {\r\n this.handleKeyboardFocus(FocusedElement.NewPassword, true);\r\n } else if (\r\n this.state.inputName === FocusedElement.NewPassword.toString()\r\n ) {\r\n this.handleKeyboardFocus(FocusedElement.ConfirmNewPassword, true);\r\n } else {\r\n this.handleKeyboardFocus(FocusedElement.Password, true);\r\n }\r\n }\r\n };\r\n\r\n public handleShift = () => {\r\n const layoutName = this.state.layoutName;\r\n if (layoutName === \"default\") {\r\n this.setState({\r\n layoutName: \"shift\"\r\n });\r\n } else {\r\n this.setState({\r\n layoutName: \"default\"\r\n });\r\n }\r\n };\r\n\r\n public handleChangeAll = (inputObject: any) => {\r\n if (this.state.inputName === FocusedElement.Password.toString()) {\r\n this.setState({ password: inputObject[this.state.inputName] });\r\n } else if (this.state.inputName === FocusedElement.NewPassword.toString()) {\r\n this.setState({ newPassword: inputObject[this.state.inputName] });\r\n } else if (\r\n this.state.inputName === FocusedElement.ConfirmNewPassword.toString()\r\n ) {\r\n this.setState({ confirmNewPassword: inputObject[this.state.inputName] });\r\n }\r\n };\r\n\r\n public handleKeyboardFocus(element: FocusedElement, forceFocus: boolean) {\r\n this.setState({\r\n inputName: element.toString()\r\n });\r\n\r\n if (forceFocus) {\r\n if (element == FocusedElement.Password) {\r\n setTimeout(() => {\r\n if (this.newPasswordInput.current)\r\n this.newPasswordInput.current.focus();\r\n }, 10);\r\n } else if (element == FocusedElement.NewPassword) {\r\n setTimeout(() => {\r\n if (this.confirmNewPasswordInput.current)\r\n this.confirmNewPasswordInput.current.focus();\r\n }, 10);\r\n } else {\r\n setTimeout(() => {\r\n if (this.passwordInput.current) this.passwordInput.current.focus();\r\n }, 10);\r\n }\r\n }\r\n }\r\n\r\n public handlePassword = (e: React.ChangeEvent) => {\r\n const password = e.currentTarget.value;\r\n\r\n this.setState({\r\n password\r\n });\r\n };\r\n\r\n public handleNewPassword = (e: React.ChangeEvent) => {\r\n const newPassword = e.currentTarget.value;\r\n\r\n this.setState({\r\n newPassword\r\n });\r\n };\r\n\r\n public handleConfirmNewPassword = (\r\n e: React.ChangeEvent\r\n ) => {\r\n const confirmNewPassword = e.currentTarget.value;\r\n\r\n this.setState({\r\n confirmNewPassword\r\n });\r\n };\r\n\r\n public handleEnter = async () => {\r\n if (this.state.newPassword !== this.state.confirmNewPassword) {\r\n this.setState({\r\n error: \"New Password and Confirm New Password do not match\"\r\n });\r\n }\r\n\r\n const data = await this.props.authStore!.changePassword(\r\n this.state.password,\r\n this.state.newPassword\r\n );\r\n\r\n if (data.successful) {\r\n this.props.authStore!.auth.sessionData!.mustChangePassword = false;\r\n await this.props.authStore!.getSessionData(false);\r\n this.props.history.push(\"/\");\r\n } else {\r\n this.setState({\r\n error: data.error\r\n });\r\n }\r\n };\r\n\r\n public handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n this.handleEnter();\r\n };\r\n\r\n public handleLogout = async (e: React.FormEvent) => {\r\n await this.props.authStore!.logout();\r\n this.props.history.push(\"/login\");\r\n };\r\n\r\n public clearErrorMessage = () => {\r\n this.setState({ error: \"\" });\r\n };\r\n\r\n public clearPassword = () => {\r\n this.setState({ password: \"\" });\r\n if (this.keyboardRef.current)\r\n this.keyboardRef.current!.keyboard.input.password = \"\";\r\n };\r\n\r\n public clearNewPassword = () => {\r\n this.setState({ newPassword: \"\" });\r\n if (this.keyboardRef.current)\r\n this.keyboardRef.current!.keyboard.input.newPassword = \"\";\r\n };\r\n\r\n public clearConfirmNewPassword = () => {\r\n this.setState({ confirmNewPassword: \"\" });\r\n if (this.keyboardRef.current)\r\n this.keyboardRef.current!.keyboard.input.confirmNewPassword = \"\";\r\n };\r\n\r\n public handleOnKeyUp = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 16) {\r\n setTimeout(() => {\r\n this.keyboardUtils.shiftPressed = false;\r\n }, 150);\r\n } else {\r\n if (this.keyboardUtils.keyCodesToIgnore.includes(e.keyCode)) {\r\n e.preventDefault();\r\n } else {\r\n const isBackSpace = e.keyCode === 8;\r\n const stateValue =\r\n this.state.inputName === FocusedElement.Password\r\n ? this.state.password\r\n : this.state.inputName === FocusedElement.NewPassword\r\n ? this.state.newPassword\r\n : this.state.confirmNewPassword;\r\n const newValue = !isBackSpace\r\n ? stateValue + this.keyboardUtils.mapKeyPressToActualCharacter(e)\r\n : stateValue.toString().slice(0, -1);\r\n\r\n if (this.state.inputName === FocusedElement.Password) {\r\n this.setState({\r\n password: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.password = newValue;\r\n } else if (this.state.inputName === FocusedElement.NewPassword) {\r\n this.setState({\r\n newPassword: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.newPassword = newValue;\r\n } else if (this.state.inputName === FocusedElement.ConfirmNewPassword) {\r\n this.setState({\r\n confirmNewPassword: newValue\r\n });\r\n this.keyboardRef.current!.keyboard.input.confirmNewPassword =\r\n newValue;\r\n }\r\n }\r\n }\r\n };\r\n\r\n public render() {\r\n const { authStore } = this.props;\r\n\r\n if (authStore!.auth.checkingAuth) {\r\n return (\r\n \r\n Loading…\r\n \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 Your password was temporarily assigned or has expired.\r\n Please set a new password for your account.\r\n

\r\n
Change Password
\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 Password\r\n \r\n \r\n Log Out\r\n \r\n
\r\n {this.state.error.length > 0 ? (\r\n \r\n ) : null}\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 withRouter(ChangePassword);\r\n","import { createBrowserHistory } from \"history\";\r\n\r\nexport default createBrowserHistory();\r\n","import { inject, observer } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n Dimmer,\r\n Dropdown,\r\n Grid,\r\n Loader,\r\n Segment\r\n} from \"semantic-ui-react\";\r\nimport { AllStores } from \"../stores/RootStore\";\r\nimport TerminalStore from \"../stores/TerminalStore\";\r\nimport TransactionStore from \"../stores/TransactionStore\";\r\nimport {\r\n PosLayout,\r\n PosLayoutItem,\r\n Session,\r\n SessionOverrideSettings,\r\n SessionType\r\n} from \"../models/TerminalModel\";\r\nimport AppMenu from \"./menu/AppMenu\";\r\nimport FlexContent from \"./util/FlexContent\";\r\nimport FlexSpacer from \"./util/FlexSpacer\";\r\nimport Text from \"./util/Text\";\r\nimport { Fragment } from \"react\";\r\n\r\ninterface Props {\r\n terminalStore: TerminalStore;\r\n transactionStore: TransactionStore;\r\n}\r\n\r\ninterface State {\r\n sessionID: number;\r\n quickSale: boolean;\r\n autoItems: boolean;\r\n mealCounter: boolean;\r\n loading: boolean;\r\n selectedItemKey: number | undefined;\r\n posLayout: PosLayout | undefined;\r\n sessions: Session[] | undefined;\r\n}\r\n\r\n@inject((allStores: AllStores) => ({\r\n terminalStore: allStores.rootStore.terminalStore,\r\n transactionStore: allStores.rootStore.transactionStore\r\n}))\r\n@observer\r\nclass Settings extends React.Component {\r\n private sessionOverrideSettings: SessionOverrideSettings = {\r\n ...this.props.terminalStore.sessionOverrideSettings\r\n };\r\n public constructor(props: Props & RouteComponentProps) {\r\n super(props);\r\n\r\n var sessionID = this.props.terminalStore.terminalModel.sessionID;\r\n if (!sessionID || sessionID === SessionType.Administration)\r\n sessionID = this.props.terminalStore.terminalModel.sessions[0].sessionID;\r\n\r\n this.state = {\r\n sessionID: sessionID,\r\n posLayout: undefined,\r\n sessions: undefined,\r\n selectedItemKey: 0,\r\n quickSale: false,\r\n autoItems: false,\r\n mealCounter: false,\r\n loading: true\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this.setSessionID(this.state.sessionID);\r\n }\r\n\r\n public render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n Loading…\r\n \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 {this.state.sessions!.map((s) => (\r\n \r\n {s.description}\r\n \r\n ))}\r\n \r\n \r\n \r\n
\r\n {!this.state.posLayout ||\r\n !this.state.posLayout!.items ||\r\n !this.state.sessions ||\r\n this.state.mealCounter ? (\r\n \r\n \r\n \r\n \r\n {this.state.mealCounter\r\n ? \"This session is configured as a Meal Counter only.\"\r\n : \"This session has no Meal Service Layout.\"}\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n Quick Sale\r\n \r\n \r\n \r\n Off\r\n \r\n \r\n \r\n \r\n \r\n On\r\n \r\n \r\n \r\n \r\n \r\n Auto Items\r\n \r\n \r\n \r\n Off\r\n \r\n \r\n \r\n \r\n \r\n On\r\n \r\n \r\n \r\n \r\n \r\n Select Auto Item\r\n \r\n ({\r\n key: i.posLayoutItemID,\r\n text: i.keyLabel,\r\n value: i.keyNumber\r\n }))\r\n ]}\r\n value={this.state.selectedItemKey || \"\"}\r\n onChange={(e, { value }) =>\r\n this.handleItemSelection(Number(value))\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n These settings override the defaults for your current\r\n login only. To permanently change these settings, use\r\n Terminal Configuration in eTrition.\r\n \r\n \r\n \r\n \r\n Save\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 private backClicked = () => {\r\n this.props.transactionStore.clearTransactionStatistics();\r\n this.props.history.push(\"/\");\r\n };\r\n\r\n private saveClicked = () => {\r\n this.props.terminalStore.sessionOverrideSettings =\r\n this.sessionOverrideSettings;\r\n this.backClicked();\r\n };\r\n\r\n private async setSessionID(sessionID: number) {\r\n await this.getTerminalSettings(sessionID);\r\n }\r\n\r\n private handleItemSelection(keyNumber: number) {\r\n const hasAutoItem = !!this.state.selectedItemKey;\r\n this.sessionOverrideSettings.AutoItemKeys[this.state.sessionID] = keyNumber;\r\n const autoItems =\r\n hasAutoItem && !keyNumber\r\n ? false\r\n : !hasAutoItem && keyNumber\r\n ? true\r\n : this.state.autoItems;\r\n this.setState({ selectedItemKey: keyNumber, autoItems });\r\n }\r\n\r\n private toggleQuickSale = () => {\r\n this.sessionOverrideSettings.QuickSale[this.state.sessionID] =\r\n !this.state.quickSale;\r\n this.setState({ quickSale: !this.state.quickSale });\r\n };\r\n\r\n private toggleAutoItems = () => {\r\n this.sessionOverrideSettings.UseAutoItem[this.state.sessionID] =\r\n !this.state.autoItems;\r\n this.setState({ autoItems: !this.state.autoItems });\r\n };\r\n\r\n private async getTerminalSettings(sessionID: number) {\r\n const oldModel = this.props.terminalStore.terminalModel;\r\n await this.props.terminalStore!.getTerminalAndSettings(sessionID);\r\n const newPosLayout = this.props.terminalStore.terminalModel.posLayout\r\n ? { ...this.props.terminalStore.terminalModel.posLayout }\r\n : undefined;\r\n var currentItemKey =\r\n this.sessionOverrideSettings.AutoItemKeys[sessionID] ||\r\n this.props.terminalStore.autoServeKey;\r\n\r\n if (newPosLayout && newPosLayout.items) {\r\n newPosLayout.items = this.getItemList(newPosLayout.items);\r\n if (!newPosLayout.items.some((i) => i.keyNumber === currentItemKey))\r\n currentItemKey = undefined;\r\n }\r\n\r\n this.setState({\r\n sessionID,\r\n posLayout: newPosLayout,\r\n loading: false,\r\n mealCounter:\r\n !!this.props.terminalStore.terminalModel.terminalConfig &&\r\n !!this.props.terminalStore.terminalModel.terminalConfig.mealCounter,\r\n sessions: this.props.terminalStore.terminalModel.sessions,\r\n quickSale:\r\n this.sessionOverrideSettings.QuickSale[sessionID] === undefined\r\n ? this.props.terminalStore.quickSale\r\n : this.sessionOverrideSettings.QuickSale[sessionID],\r\n autoItems:\r\n this.sessionOverrideSettings.UseAutoItem[sessionID] === undefined\r\n ? this.props.terminalStore.useAutoItem\r\n : this.sessionOverrideSettings.UseAutoItem[sessionID],\r\n selectedItemKey: currentItemKey\r\n });\r\n this.props.terminalStore.terminalModel = oldModel;\r\n }\r\n\r\n private getItemList = (items: PosLayoutItem[]): PosLayoutItem[] => {\r\n const {\r\n terminalStore: { terminalModel }\r\n } = this.props;\r\n\r\n items.forEach((item) => {\r\n let salesItem = terminalModel.salesItemHeaders!.find(\r\n (i) => i.salesItemHeaderID === item.salesItemHeaderID\r\n );\r\n\r\n if (!!salesItem) {\r\n item.keyLabel =\r\n item.keyLabel ||\r\n salesItem.itemShortDescription ||\r\n salesItem.itemDescription;\r\n } else {\r\n item.keyLabel = \"\";\r\n }\r\n });\r\n\r\n return items.filter((item) => !!item.keyLabel);\r\n };\r\n}\r\n\r\nexport default withRouter(Settings);\r\n","import * as React from \"react\";\r\nimport { Router, Route, Switch } from \"react-router-dom\";\r\nimport Login from \"./auth/Login\";\r\nimport CashInDrawer from \"./CashInDrawer\";\r\nimport CustomerSelect from \"./customer/CustomerSelect\";\r\nimport Home from \"./Home\";\r\nimport ServingSession from \"./Session\";\r\nimport Statistics from \"./Statistics\";\r\nimport TerminalSelect from \"./terminal/TerminalSelect\";\r\nimport ErrorPage from \"./util/ErrorPage\";\r\nimport PrivateRoute from \"./util/PrivateRoute\";\r\nimport TransactionHistory from \"./TransactionHistory\";\r\nimport history from \"../history\";\r\nimport ChangePassword from \"./auth/ChangePassword\";\r\nimport Settings from \"./Settings\";\r\n\r\nexport default () => (\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","// tslint:disable:no-console\r\n// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the 'N+1' visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL!,\r\n window.location.toString()\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/sw.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\r\n );\r\n });\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker) {\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a 'New content is\r\n // available; please refresh.' message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // 'Content is cached for offline use.' message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n }\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type')!.indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { deleteDB, IDBPDatabase, openDB } from \"idb\";\r\nimport { PosTransaction, PosPos } from \"../models/TransactionModel\";\r\nimport { ObjectStores } from \"./databaseSchema\";\r\nimport { PosSession } from \"../models/TerminalModel\";\r\nimport RootStore from \"../stores/RootStore\";\r\n\r\nexport interface BaseClass {\r\n id: number;\r\n}\r\n\r\nexport default class IndexedDBService {\r\n private dbName = \"webPOS\";\r\n private rootStore: RootStore;\r\n public quotaError: boolean;\r\n private defaultLimit: number = 75000;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.quotaError = false;\r\n }\r\n\r\n private async calculateLocalStorageUsage(db: IDBPDatabase | undefined) {\r\n if (!db) {\r\n db = await this.getDB();\r\n }\r\n let total = 0;\r\n total += await db!.count(ObjectStores.Patron);\r\n total += await db!.count(ObjectStores.PosPos);\r\n total += await db!.count(ObjectStores.PosSession);\r\n total += await db!.count(ObjectStores.PosTransactions);\r\n const localStorageLimit = this.rootStore.terminalStore.terminalModel\r\n .terminal\r\n ? this.rootStore.terminalStore.terminalModel.terminal.localStorageLimit\r\n : this.defaultLimit;\r\n this.rootStore.storageLimitValue = (total / localStorageLimit) * 100;\r\n }\r\n\r\n public async validateStoreCount(db: IDBPDatabase | undefined) {\r\n await this.calculateLocalStorageUsage(db);\r\n if (this.rootStore.storageLimitValue >= 100) {\r\n this.quotaError = true;\r\n this.rootStore.authStore.logout();\r\n } else {\r\n this.quotaError = false;\r\n }\r\n }\r\n\r\n public async add(source: ObjectStores, data: any) {\r\n const db = await this.getDB();\r\n\r\n try {\r\n await db.add(source, data);\r\n await this.validateStoreCount(db);\r\n db.close();\r\n } catch (exception) {\r\n if (\r\n exception &&\r\n [\"QuotaExceededError\", \"NS_ERROR_DOM_QUOTA_REACHED\"].includes(\r\n exception.name\r\n )\r\n ) {\r\n this.quotaError = true;\r\n this.rootStore.authStore.logout();\r\n }\r\n } finally {\r\n db.close();\r\n }\r\n }\r\n\r\n public async addAll(source: ObjectStores, data: any[]) {\r\n const db = await this.getDB();\r\n const tx = db.transaction(source, \"readwrite\");\r\n\r\n for (const item of data) {\r\n await tx.store.add(item);\r\n }\r\n\r\n await tx.done;\r\n await this.validateStoreCount(db);\r\n db.close();\r\n }\r\n\r\n public async put(source: ObjectStores, data: any) {\r\n const db = await this.getDB();\r\n\r\n try {\r\n await db.put(source, data);\r\n await this.validateStoreCount(db);\r\n } catch (exception) {\r\n if (\r\n exception &&\r\n [\"QuotaExceededError\", \"NS_ERROR_DOM_QUOTA_REACHED\"].includes(\r\n exception.name\r\n )\r\n ) {\r\n this.quotaError = true;\r\n this.rootStore.authStore.logout();\r\n }\r\n } finally {\r\n db.close();\r\n }\r\n }\r\n\r\n public async putAll(source: ObjectStores, data: any[]) {\r\n const db = await this.getDB();\r\n const tx = db.transaction(source, \"readwrite\");\r\n const store = tx.objectStore(source);\r\n\r\n for (const item of data) {\r\n store.put(item);\r\n }\r\n\r\n await tx.done;\r\n await this.validateStoreCount(db);\r\n db.close();\r\n }\r\n\r\n public async get(\r\n source: ObjectStores,\r\n query:\r\n | string\r\n | number\r\n | Date\r\n | ArrayBufferView\r\n | ArrayBuffer\r\n | IDBArrayKey\r\n | IDBKeyRange,\r\n indexName?: string\r\n ): Promise {\r\n const db = await this.getDB();\r\n const results = await db.getFromIndex(source, indexName || \"id_idx\", query);\r\n\r\n db.close();\r\n\r\n return results;\r\n }\r\n\r\n public async getAll(\r\n source: ObjectStores,\r\n indexName?: string,\r\n query?:\r\n | string\r\n | number\r\n | Date\r\n | ArrayBufferView\r\n | ArrayBuffer\r\n | IDBArrayKey\r\n | IDBKeyRange\r\n | undefined,\r\n count?: number | undefined\r\n ): Promise {\r\n const db = await this.getDB();\r\n\r\n let results;\r\n\r\n if (indexName) {\r\n results = await db.getAllFromIndex(\r\n source,\r\n indexName || \"id_idx\",\r\n query,\r\n count\r\n );\r\n } else {\r\n results = await db.getAll(source, query, count);\r\n }\r\n\r\n db.close();\r\n\r\n return results;\r\n }\r\n\r\n public async getCount(source: ObjectStores): Promise {\r\n const db = await this.getDB();\r\n const count = await db.count(source);\r\n db.close();\r\n return count;\r\n }\r\n\r\n public async delete(\r\n source: ObjectStores,\r\n query:\r\n | string\r\n | number\r\n | Date\r\n | ArrayBufferView\r\n | ArrayBuffer\r\n | IDBArrayKey\r\n | IDBKeyRange\r\n ) {\r\n const db = await this.getDB();\r\n await db.delete(source, query);\r\n await this.validateStoreCount(db);\r\n db.close();\r\n }\r\n\r\n public async deleteAll(source: ObjectStores, ids: number[]) {\r\n const db = await this.getDB();\r\n const tx = db.transaction(source, \"readwrite\");\r\n\r\n for (const id of ids) {\r\n if (id) {\r\n tx.store.delete(id);\r\n }\r\n }\r\n\r\n await tx.done;\r\n await this.validateStoreCount(db);\r\n db.close();\r\n }\r\n\r\n public async clear(source: ObjectStores) {\r\n const db = await this.getDB();\r\n await db.clear(source);\r\n await this.validateStoreCount(db);\r\n db.close();\r\n }\r\n\r\n public async getStudentTransactions(\r\n sessionID: number,\r\n servingDay: string,\r\n patronID: number\r\n ): Promise> {\r\n const results: Map = new Map<\r\n number,\r\n PosTransaction[]\r\n >();\r\n results.set(sessionID, []);\r\n\r\n const db = await this.getDB();\r\n\r\n const posSessions: PosSession[] = await db.getAllFromIndex(\r\n ObjectStores.PosSession,\r\n \"getSessionsByServingDay\",\r\n servingDay\r\n );\r\n\r\n for (const posSession of posSessions) {\r\n if (!results.has(posSession.sessionID)) {\r\n results.set(posSession.sessionID, []);\r\n }\r\n const posPosList: PosPos[] = await db.getAllFromIndex(\r\n ObjectStores.PosPos,\r\n \"patronSession\",\r\n [posSession.posSessionGUID, patronID]\r\n );\r\n\r\n for (const posPos of posPosList) {\r\n const transactions: PosTransaction[] = await db.getAllFromIndex(\r\n ObjectStores.PosTransactions,\r\n \"posPosGuid\",\r\n posPos.posPosGuid\r\n );\r\n\r\n if (transactions.length) {\r\n const t = results.get(posSession.sessionID)!.concat(transactions);\r\n results.set(posSession.sessionID, t);\r\n }\r\n }\r\n }\r\n\r\n db.close();\r\n\r\n const deletedGuids = [...results.values()]\r\n .reduce((prev, curr) => prev.concat(curr), [])\r\n .filter((t) => t.deletedPosPosGuid)\r\n .map((t) => t.deletedPosPosGuid);\r\n\r\n results.forEach(\r\n (value, key, map) =>\r\n (map[key] = value.filter(\r\n (t) =>\r\n !t.hide &&\r\n t.quantity > 0 &&\r\n !t.deletedPosPosGuid &&\r\n !deletedGuids.includes(t.posPosGuid)\r\n ))\r\n );\r\n\r\n return results;\r\n }\r\n\r\n public async getPosPosList(posSessionGUID: string): Promise {\r\n const db = await this.getDB();\r\n const posPosList: PosPos[] = await db.getAllFromIndex(\r\n ObjectStores.PosPos,\r\n \"posSessionGuid\",\r\n posSessionGUID\r\n );\r\n\r\n const transactions = await this.getAll(\r\n ObjectStores.PosTransactions\r\n );\r\n\r\n for (const posPos of posPosList) {\r\n const posTransactions = transactions.filter(\r\n (t) => t.posPosGuid === posPos.posPosGuid\r\n );\r\n\r\n posPos.isVoided = transactions.some(\r\n (t) => posPos.posPosGuid === t.deletedPosPosGuid\r\n );\r\n\r\n if (posTransactions.length) {\r\n posPos.posTransactions = posTransactions;\r\n }\r\n }\r\n db.close();\r\n\r\n return posPosList;\r\n }\r\n\r\n public async getUnverifiedTransactionCount(): Promise {\r\n const db = await this.getDB();\r\n let count = (\r\n await db.getAllFromIndex(\r\n ObjectStores.PosTransactions,\r\n \"posTransactionID\",\r\n 0\r\n )\r\n ).length;\r\n\r\n db.close();\r\n\r\n // don't include the count of training mode transactions\r\n // TODO: if this is too slow, figure out a faster way\r\n const posPoss = await this.rootStore.db.getAll(\r\n ObjectStores.PosPos\r\n );\r\n\r\n for (const posPos of posPoss) {\r\n if (posPos.trainingMode) {\r\n const transactions: (PosTransaction & BaseClass)[] =\r\n await this.rootStore.db.getAll(\r\n ObjectStores.PosTransactions,\r\n \"posPosGuid\",\r\n posPos.posPosGuid\r\n );\r\n count -= transactions.length;\r\n }\r\n }\r\n\r\n return count;\r\n }\r\n\r\n public async deleteDb(): Promise {\r\n await deleteDB(this.dbName);\r\n await this.validateStoreCount(undefined);\r\n }\r\n\r\n private async getDB(): Promise {\r\n // increment this when making a change to the indexdb structure\r\n // and add an if block to apply your changes for the version within the upgrade function\r\n const latestVersion = 4;\r\n\r\n const db = await openDB(this.dbName, latestVersion, {\r\n upgrade(db, oldVersion, newVersion, transaction) {\r\n if (oldVersion < 1) {\r\n const posSessionStore = db.createObjectStore(\r\n ObjectStores.PosSession,\r\n {\r\n keyPath: \"id\",\r\n autoIncrement: true\r\n }\r\n );\r\n\r\n posSessionStore.createIndex(\"id_idx\", \"id\", { unique: true });\r\n posSessionStore.createIndex(\"posSessionGUID\", \"posSessionGUID\", {\r\n unique: true\r\n });\r\n posSessionStore.createIndex(\r\n \"getSession\",\r\n [\"sessionID\", \"servingDay\", \"terminalID\", \"schoolID\", \"userID\"],\r\n {\r\n unique: true\r\n }\r\n );\r\n posSessionStore.createIndex(\"getSessions\", [\r\n \"sessionID\",\r\n \"servingDay\"\r\n ]);\r\n\r\n const posStore = db.createObjectStore(ObjectStores.PosPos, {\r\n keyPath: \"id\",\r\n autoIncrement: true\r\n });\r\n\r\n posStore.createIndex(\"id_idx\", \"id\", { unique: true });\r\n posStore.createIndex(\"posPosGuid\", \"posPosGuid\", { unique: true });\r\n posStore.createIndex(\"posSessionGuid\", \"posSessionGuid\");\r\n posStore.createIndex(\"patronSession\", [\"posSessionGuid\", \"patronID\"]);\r\n\r\n const transactionStore = db.createObjectStore(\r\n ObjectStores.PosTransactions,\r\n {\r\n keyPath: \"id\",\r\n autoIncrement: true\r\n }\r\n );\r\n\r\n transactionStore.createIndex(\"id_idx\", \"id\", { unique: true });\r\n\r\n transactionStore.createIndex(\"posTransactionID\", \"posTransactionID\");\r\n\r\n transactionStore.createIndex(\r\n \"getTransaction\",\r\n [\"posPosGuid\", \"transNo\"],\r\n { unique: true }\r\n );\r\n\r\n transactionStore.createIndex(\"posPosGuid\", \"posPosGuid\");\r\n }\r\n\r\n if (oldVersion < 2) {\r\n const patronStore = db.createObjectStore(ObjectStores.Patron, {\r\n keyPath: \"id\",\r\n autoIncrement: true\r\n });\r\n\r\n patronStore.createIndex(\"id_idx\", \"id\", { unique: true });\r\n patronStore.createIndex(\"patronID\", \"patronID\", { unique: true });\r\n }\r\n\r\n if (oldVersion < 4) {\r\n const posSessionStore = transaction.objectStore(\r\n ObjectStores.PosSession\r\n );\r\n // In version 3, somebody created it as a field array. I've cleaned that up,\r\n // which required deleting the index and adding it back in correctly. I've\r\n // deleted the code block for version 3 also, since it's not needed.\r\n try {\r\n posSessionStore.deleteIndex(\"getSessionsByServingDay\");\r\n } catch (error) {}\r\n posSessionStore.createIndex(\"getSessionsByServingDay\", \"servingDay\");\r\n }\r\n }\r\n });\r\n\r\n return db;\r\n }\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { PatronTransaction, PosSession } from \"./TerminalModel\";\r\n\r\nexport default class TerminalStateModel {\r\n @observable\r\n public servingGrabNGoInProgress: boolean = false;\r\n @observable\r\n public posSessions?: PosSession[];\r\n @observable\r\n public activePOSSession?: PosSession;\r\n @observable\r\n public gngDaySessionsToServe: string[] = [];\r\n @observable\r\n public noIDButtonDisabled: boolean = false;\r\n @observable\r\n public patronTransactionsServed: PatronTransaction[] = [];\r\n}\r\n","import { Guid } from \"guid-typescript\";\r\nimport { action, computed, observable, reaction } from \"mobx\";\r\nimport { osName } from \"react-device-detect\";\r\nimport { jsonContentType } from \"./AuthStore\";\r\nimport RootStore from \"./RootStore\";\r\nimport TerminalModel, {\r\n PosSession,\r\n Terminal,\r\n TerminalPosLimit,\r\n MealCombination,\r\n AutoItem,\r\n Homeroom,\r\n GradeLevel,\r\n PosTerminalConfigGrabNGoAutoItemDTO,\r\n SessionOverrideSettings\r\n} from \"../models/TerminalModel\";\r\nimport SalesItemHeader from \"../models/SalesItemModel\";\r\nimport { checkAuthorization, getToday, formatServiceDate } from \"../utils\";\r\nimport { ObjectStores } from \"../database/databaseSchema\";\r\nimport { Student } from \"../models/StudentModel\";\r\nimport { Logger } from \"../utils/logger\";\r\nimport TerminalStateModel from \"../models/TerminalStateModel\";\r\n\r\nexport default class TerminalStore {\r\n public rootStore: RootStore;\r\n @observable\r\n public isLoading: boolean = false;\r\n @observable\r\n public isLoadingSiteData: boolean = false;\r\n @observable\r\n public terminalModel: TerminalModel;\r\n @observable\r\n public changeServiceDate = false;\r\n @observable\r\n public sessionTimeOverridden = false;\r\n @observable\r\n public errorMessage: string = \"\";\r\n @observable\r\n public isError: boolean = false;\r\n @observable\r\n public trainingMode: boolean = false;\r\n @observable\r\n public terminalStateModel: TerminalStateModel;\r\n @observable\r\n public sessionOverrideSettings: SessionOverrideSettings;\r\n @observable\r\n public showServedStudents: boolean = false;\r\n @observable\r\n public endOfDayReportName: string = \"\";\r\n @observable\r\n public endOfDayJobQueueID: number = 0;\r\n\r\n private previousTerminal: TerminalModel | undefined;\r\n private logger: Logger;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.logger = rootStore.logger;\r\n let terminal: string | null = null;\r\n\r\n if (this.rootStore.authStore.auth.isAuthenticated) {\r\n const key =\r\n ((!this.rootStore.authStore.auth.harrisUser ||\r\n !this.rootStore.authStore.auth.authToken) &&\r\n this.rootStore.authStore.auth.customerID) ||\r\n \"harris\";\r\n\r\n terminal = localStorage.getItem(key);\r\n }\r\n\r\n const sessionOverrideJson = sessionStorage.getItem(\"sessionOverride\");\r\n if (sessionOverrideJson) {\r\n this.sessionOverrideSettings = JSON.parse(sessionOverrideJson);\r\n } else {\r\n this.sessionOverrideSettings = this.emptySessionOverrideSettings;\r\n }\r\n\r\n this.terminalModel = new TerminalModel();\r\n this.terminalStateModel = new TerminalStateModel();\r\n const terminalModelJson = sessionStorage.getItem(\"terminalModel\");\r\n if (terminalModelJson) {\r\n const terminalModel = Object.assign(\r\n { ...this.terminalModel },\r\n JSON.parse(terminalModelJson),\r\n {\r\n terminal: terminal ? JSON.parse(terminal) : undefined,\r\n // clearing terminal config so it takes the user back to the Home screen if the screen is refreshed.\r\n terminalConfig: undefined\r\n }\r\n );\r\n\r\n terminalModel.salesItemHeaders = terminalModel.salesItemHeaders!.map(\r\n (s: SalesItemHeader) => new SalesItemHeader(rootStore, s)\r\n );\r\n\r\n this.terminalModel = terminalModel;\r\n } else if (terminal) {\r\n this.terminalModel = {\r\n ...this.terminalModel,\r\n terminal: JSON.parse(terminal)\r\n };\r\n }\r\n\r\n this.trainingMode = JSON.parse(\r\n localStorage.getItem(\"trainingMode\") || \"false\"\r\n );\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.terminalModel,\r\n () => {\r\n if (this.terminalModel) {\r\n sessionStorage.setItem(\r\n \"terminalModel\",\r\n JSON.stringify(this.terminalModel, (key, value) => {\r\n if (key === \"rootStore\") {\r\n return undefined;\r\n }\r\n return value;\r\n })\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"terminalModel\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.sessionOverrideSettings,\r\n () => {\r\n if (this.sessionOverrideSettings) {\r\n sessionStorage.setItem(\r\n \"sessionOverride\",\r\n JSON.stringify(this.sessionOverrideSettings)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"sessionOverride\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.terminalModel.terminal,\r\n () => {\r\n const { auth } = this.rootStore.authStore;\r\n if (auth.isAuthenticated) {\r\n if (this.terminalModel.terminal) {\r\n localStorage.setItem(\r\n auth.harrisUser ? \"harris\" : auth.customerID!,\r\n JSON.stringify(this.terminalModel.terminal)\r\n );\r\n\r\n if (!localStorage.getItem(auth.customerID!)) {\r\n localStorage.setItem(\r\n auth.customerID!,\r\n JSON.stringify(this.terminalModel.terminal)\r\n );\r\n }\r\n } else {\r\n localStorage.removeItem(\r\n auth.harrisUser ? \"harris\" : auth.customerID!\r\n );\r\n }\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.trainingMode,\r\n () => {\r\n localStorage.setItem(\"trainingMode\", this.trainingMode.toString());\r\n }\r\n );\r\n }\r\n\r\n @action\r\n public cancelTerminalSwitch = () => {\r\n const terminalModel = this.previousTerminal\r\n ? { ...this.previousTerminal }\r\n : { ...this.terminalModel };\r\n terminalModel.isTerminalSwitch = false;\r\n terminalModel.isBuildingSelect = false;\r\n terminalModel.isTerminalSelect = false;\r\n this.terminalModel = terminalModel;\r\n };\r\n\r\n @action\r\n public clearTerminal = () => {\r\n this.terminalStateModel = new TerminalStateModel();\r\n this.terminalModel = new TerminalModel();\r\n this.showServedStudents = false;\r\n this.resetEndOfDayVars();\r\n };\r\n\r\n @action\r\n public getSchools = async (): Promise => {\r\n this.logger.logMethodStart(\"getSchools\");\r\n this.isLoading = true;\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetSchools`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.terminalModel.buildings = data;\r\n this.logger.logFetchData(\"getSchools\", data);\r\n }\r\n\r\n this.isLoading = false;\r\n this.logger.logMethodEnd(\"getSchools\");\r\n };\r\n\r\n @action\r\n public getTerminalAndSettings = async (sessionID: number): Promise => {\r\n this.isLoading = true;\r\n\r\n const terminalModel = { ...this.terminalModel };\r\n const terminalStateModel = { ...this.terminalStateModel };\r\n\r\n terminalModel.sessionID = sessionID;\r\n\r\n const session = this.terminalModel.sessions.find(\r\n (s) => s.sessionID === sessionID\r\n );\r\n\r\n if (session) {\r\n terminalModel.terminalConfig =\r\n this.terminalModel.terminalConfigurations.find(\r\n (t) => t.terminalConfigurationID === session.terminalConfigurationID\r\n );\r\n\r\n if (\r\n terminalModel.terminalConfig &&\r\n terminalModel.terminalConfig.overrideSessionTime\r\n ) {\r\n session!.startTime = terminalModel.terminalConfig!.startTime!;\r\n session!.endTime = terminalModel.terminalConfig!.endTime!;\r\n }\r\n\r\n terminalModel.posLayout = terminalModel.posLayouts.find(\r\n (p) => p.posLayoutID === session!.posLayoutID\r\n );\r\n }\r\n\r\n const { terminal } = terminalModel;\r\n const { userID } = this.rootStore.authStore.auth.sessionData!;\r\n\r\n let posSession = await this.rootStore.db.get(\r\n ObjectStores.PosSession,\r\n [\r\n sessionID,\r\n this.getServingDay(),\r\n terminal!.terminalID,\r\n terminal!.schoolID,\r\n userID\r\n ],\r\n \"getSession\"\r\n );\r\n\r\n if (!posSession) {\r\n posSession = this.generatePosSession(sessionID);\r\n await this.rootStore.db.add(ObjectStores.PosSession, posSession);\r\n }\r\n\r\n terminalStateModel.posSessions = [];\r\n terminalStateModel.posSessions.push(posSession);\r\n\r\n this.terminalStateModel = terminalStateModel;\r\n this.terminalModel = terminalModel;\r\n this.isLoading = false;\r\n };\r\n\r\n @action\r\n public getTerminalAndSettingsWithDates = async (\r\n servingDays: Date[],\r\n grabNGoTerminalConfigId: number\r\n ): Promise => {\r\n this.isLoading = true;\r\n\r\n const terminalModel = { ...this.terminalModel };\r\n const terminalStateModel = { ...this.terminalStateModel };\r\n const sessions: number[] = [];\r\n const { terminal } = terminalModel;\r\n\r\n terminalModel.terminalConfig = terminalModel.terminalConfigurations.find(\r\n (t) => t.terminalConfigurationID === grabNGoTerminalConfigId\r\n );\r\n\r\n terminalModel\r\n .terminalConfig!.grabNGoAutoItems.sort((i) => i.dsSessionID)\r\n .forEach((item) => {\r\n sessions.push(item.dsSessionID);\r\n });\r\n\r\n const { userID } = this.rootStore.authStore.auth.sessionData!;\r\n\r\n await Promise.all(\r\n sessions.map(async (sessionID) => {\r\n await Promise.all(\r\n servingDays.map(async (day) => {\r\n const formattedServiceDate = formatServiceDate(day);\r\n\r\n const grabNGoConfig =\r\n terminalModel.terminalConfig!.grabNGoAutoItems.find(\r\n (i) => i.dsSessionID === sessionID\r\n );\r\n\r\n const shouldServe =\r\n grabNGoConfig &&\r\n this.canServeOnDay(formattedServiceDate, grabNGoConfig);\r\n\r\n if (shouldServe) {\r\n let posSession = await this.rootStore.db.get(\r\n ObjectStores.PosSession,\r\n [\r\n sessionID,\r\n formattedServiceDate,\r\n terminal!.terminalID,\r\n terminal!.schoolID,\r\n userID\r\n ],\r\n \"getSession\"\r\n );\r\n\r\n if (!posSession) {\r\n posSession = this.generatePosSessionWithDay(sessionID, day);\r\n await this.rootStore.db.add(\r\n ObjectStores.PosSession,\r\n posSession\r\n );\r\n }\r\n\r\n if (!terminalStateModel.posSessions) {\r\n terminalStateModel.posSessions = [];\r\n }\r\n\r\n terminalStateModel.posSessions.push(posSession);\r\n }\r\n })\r\n );\r\n })\r\n );\r\n\r\n if (\r\n !(terminalStateModel.posSessions && terminalStateModel.posSessions.length)\r\n ) {\r\n return false;\r\n }\r\n\r\n terminalModel.posLayout = terminalModel.posLayouts.find(\r\n (p) => p.posLayoutID === terminalModel.terminalConfig!.grabNGoPOSLayoutID\r\n );\r\n\r\n this.terminalStateModel = terminalStateModel;\r\n this.terminalModel = terminalModel;\r\n\r\n this.isLoading = false;\r\n return true;\r\n };\r\n\r\n public canServeOnDay = (\r\n servingDay: string,\r\n grabNGoConfig: PosTerminalConfigGrabNGoAutoItemDTO\r\n ): boolean => {\r\n const servingDaySplit = servingDay.split(\"-\");\r\n const servingDate = new Date(\r\n Number(servingDaySplit[2]),\r\n Number(servingDaySplit[0]) - 1,\r\n Number(servingDaySplit[1]),\r\n 0,\r\n 0,\r\n 0\r\n );\r\n const dayOfWeek = servingDate.getDay();\r\n if (dayOfWeek === 0 && grabNGoConfig.isSunday) {\r\n return true;\r\n } else if (dayOfWeek === 1 && grabNGoConfig.isMonday) {\r\n return true;\r\n } else if (dayOfWeek === 2 && grabNGoConfig.isTuesday) {\r\n return true;\r\n } else if (dayOfWeek === 3 && grabNGoConfig.isWednesday) {\r\n return true;\r\n } else if (dayOfWeek === 4 && grabNGoConfig.isThursday) {\r\n return true;\r\n } else if (dayOfWeek === 5 && grabNGoConfig.isFriday) {\r\n return true;\r\n } else if (dayOfWeek === 6 && grabNGoConfig.isSaturday) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n @action\r\n public getTerminalsForSite = async (siteID: number) => {\r\n this.logger.logMethodStart(\"getTerminalsForSite\");\r\n\r\n this.isLoading = true;\r\n const terminalModel = { ...this.terminalModel };\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetTerminalsForSite/${siteID}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n\r\n terminalModel.terminals = data;\r\n terminalModel.isBuildingSelect = false;\r\n this.logger.logFetchData(\"getTerminalsForSite\", data);\r\n }\r\n\r\n this.terminalModel = terminalModel;\r\n this.isLoading = false;\r\n\r\n this.logger.logMethodEnd(\"getTerminalsForSite\");\r\n };\r\n\r\n @action\r\n public runEndOfDayReports = async (): Promise => {\r\n this.logger.logMethodStart(\"getEndOfDayReports\");\r\n let data: string | null = null;\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/QueueEndOfDayReports?schoolID=${\r\n this.terminalModel.terminal!.schoolID\r\n }&date=${this.getServingDay()}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n data = await response.json();\r\n this.logger.logFetchData(\"getEndOfDayReports\", data);\r\n }\r\n } catch {\r\n data =\r\n \"A connection error was encountered while attempting to run End of Day Reports.\";\r\n }\r\n\r\n this.logger.logMethodEnd(\"getEndOfDayReports\");\r\n return data;\r\n };\r\n\r\n @action\r\n public checkEndOfDayReportStatus = async (\r\n jobQueueID: number\r\n ): Promise => {\r\n this.logger.logMethodStart(\"checkEndOfDayReportStatus\");\r\n let data: string | null = null;\r\n\r\n try {\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/CheckJobReportStatus?jobQueueID=${jobQueueID}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n data = await response.json();\r\n this.logger.logFetchData(\"checkEndOfDayReportStatus\", data);\r\n }\r\n } catch {\r\n data =\r\n \"A connection error was encountered while attempting to check the report status.\";\r\n }\r\n\r\n this.logger.logMethodEnd(\"checkEndOfDayReportStatus\");\r\n return data;\r\n };\r\n\r\n @action\r\n public getSiteData = async () => {\r\n this.logger.logMethodStart(\"getSiteData\");\r\n\r\n const { terminal } = this.terminalModel;\r\n\r\n if (!terminal) {\r\n return;\r\n }\r\n\r\n const response = await fetch(\r\n `${this.rootStore.config.apiPath}/BP/GetSiteData/${terminal!.terminalID}`,\r\n {\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n }\r\n }\r\n );\r\n\r\n if (checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n\r\n const terminalModel = { ...this.terminalModel };\r\n\r\n terminalModel.paymentReminders = data.paymentReminders;\r\n terminalModel.closedMonths = data.closedMonths;\r\n terminalModel.chargeLimits = data.chargeLimits;\r\n terminalModel.posLimits = data.posLimits;\r\n terminalModel.sessions = data.sessions;\r\n terminalModel.salesItemSetup = data.salesItemSetup;\r\n terminalModel.gradeLevels = data.gradeLevels;\r\n terminalModel.homerooms = data.homerooms;\r\n terminalModel.priceDates = data.priceDates;\r\n terminalModel.salesItemHeaders = data.salesItemHeaders.map(\r\n (s: any) => new SalesItemHeader(this.rootStore, s)\r\n );\r\n terminalModel.pricingGroups = data.pricingGroups;\r\n terminalModel.speedKeys = data.speedKeys;\r\n terminalModel.mealCombining = data.mealCombining;\r\n terminalModel.breakfastSalesHeaderID = data.breakfastSalesHeaderID;\r\n terminalModel.lunchSalesHeaderID = data.lunchSalesHeaderID;\r\n terminalModel.terminalConfigurations = data.terminalConfigurations;\r\n terminalModel.posLayouts = data.posLayouts;\r\n terminalModel.holidays = data.holidays;\r\n terminalModel.salesItemCategories = data.salesItemCategories;\r\n terminalModel.terminal = data.terminal;\r\n\r\n if (terminalModel.closedMonths && terminalModel.closedMonths.length) {\r\n const serviceDate = new Date(terminalModel.serviceDate);\r\n terminalModel.isClosed =\r\n terminalModel.closedMonths.find(\r\n (c) =>\r\n c.year === serviceDate.getFullYear() &&\r\n c.month === serviceDate.getMonth() + 1 &&\r\n c.closed\r\n ) !== undefined;\r\n }\r\n this.terminalModel = terminalModel;\r\n this.logger.logFetchData(\"getSiteData\", data);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getSiteData\");\r\n };\r\n\r\n @action\r\n public setServiceDate = async (serviceDate?: Date) => {\r\n if (!serviceDate) {\r\n serviceDate = getToday();\r\n }\r\n this.changeServiceDate = false;\r\n await this.changeSession(serviceDate);\r\n };\r\n\r\n @action\r\n public setTerminal = async (terminal: Terminal) => {\r\n const terminalModel = { ...this.terminalModel };\r\n this.previousTerminal = undefined;\r\n\r\n if (this.rootStore.authStore.isCustomerSwitch) {\r\n const auth = sessionStorage.getItem(\"auth\");\r\n sessionStorage.clear();\r\n if (auth) {\r\n this.rootStore.authStore.auth = JSON.parse(auth);\r\n }\r\n }\r\n\r\n this.clearSessionSettings();\r\n this.rootStore.authStore.isCustomerSwitch = false;\r\n terminalModel.isTerminalSelect = false;\r\n terminalModel.isTerminalSwitch = false;\r\n terminalModel.terminalConfig = undefined;\r\n terminalModel.terminal = terminal;\r\n this.terminalModel = terminalModel;\r\n await this.rootStore.loadInitialCache();\r\n };\r\n\r\n @action\r\n public switchTerminal = async () => {\r\n await this.rootStore.studentStore.clearStudent();\r\n this.previousTerminal = { ...this.terminalModel };\r\n const terminalModel = { ...this.terminalModel };\r\n terminalModel.isTerminalSwitch = true;\r\n terminalModel.isBuildingSelect = true;\r\n terminalModel.isTerminalSelect = true;\r\n terminalModel.terminals = observable.array([]);\r\n this.terminalModel = terminalModel;\r\n await this.resetEndOfDayVars();\r\n await this.setServiceDate();\r\n };\r\n\r\n @action\r\n public changeSession = async (serviceDate?: Date) => {\r\n const { studentStore, transactionStore } = this.rootStore;\r\n const terminalModel = { ...this.terminalModel };\r\n const terminalStateModel = { ...this.terminalStateModel };\r\n\r\n terminalModel.isCreditPatrons = false;\r\n terminalModel.terminalConfig = undefined;\r\n terminalModel.posLayout = undefined;\r\n terminalStateModel.posSessions = undefined;\r\n\r\n if (serviceDate) {\r\n terminalModel.serviceDate = serviceDate;\r\n\r\n if (terminalModel.closedMonths && terminalModel.closedMonths.length) {\r\n terminalModel.isClosed =\r\n terminalModel.closedMonths.find(\r\n (c) =>\r\n c.year === serviceDate.getFullYear() &&\r\n c.month === serviceDate.getMonth() + 1 &&\r\n c.closed\r\n ) !== undefined;\r\n }\r\n }\r\n\r\n this.terminalStateModel = terminalStateModel;\r\n this.terminalModel = terminalModel;\r\n\r\n studentStore.clearPendingStudent();\r\n studentStore.clearPreviousStudent();\r\n await studentStore.clearStudent();\r\n await studentStore.clearBufferedStudents();\r\n studentStore.clearSearch(true);\r\n\r\n transactionStore.sessionCounts = undefined;\r\n };\r\n\r\n @action\r\n public resetEndOfDayVars = async () => {\r\n this.endOfDayJobQueueID = 0;\r\n this.endOfDayReportName = \"\";\r\n };\r\n\r\n @action\r\n public async updateTerminal(isOnline = true) {\r\n const { auth } = this.rootStore.authStore;\r\n\r\n if (auth.isAuthenticated) {\r\n const terminalString = localStorage.getItem(auth.customerID!);\r\n\r\n if (terminalString) {\r\n const terminal: Terminal = JSON.parse(terminalString);\r\n this.terminalModel = {\r\n ...this.terminalModel,\r\n isBuildingSelect: false,\r\n isTerminalSelect: false,\r\n terminal\r\n };\r\n\r\n await this.rootStore.loadInitialCache(isOnline);\r\n }\r\n }\r\n\r\n this.isLoading = false;\r\n }\r\n\r\n public getServingDay = (): string => {\r\n const date = new Date(this.terminalModel.serviceDate);\r\n return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`;\r\n };\r\n\r\n public hasBoltIntegration = (): boolean => {\r\n return (\r\n !!this.terminalModel &&\r\n !!this.terminalModel.terminal &&\r\n !!this.terminalModel.terminal.boltTerminalHSN &&\r\n !!this.terminalModel.salesItemSetup &&\r\n !!this.terminalModel.salesItemSetup.boltMID\r\n );\r\n };\r\n\r\n @computed\r\n public get sessionName(): string {\r\n if (this.terminalModel.isCreditPatrons) {\r\n return \"Credit Patrons\";\r\n }\r\n\r\n const session = this.terminalModel.sessions.find(\r\n (s) => s.sessionID === this.terminalModel.sessionID\r\n );\r\n\r\n return (session && session.description) || \"\";\r\n }\r\n\r\n public get emptySessionOverrideSettings(): SessionOverrideSettings {\r\n return {\r\n AutoItemKeys: {},\r\n QuickSale: {},\r\n UseAutoItem: {}\r\n };\r\n }\r\n\r\n @computed\r\n public get autoServeKey(): number | undefined {\r\n if (\r\n this.terminalModel.terminalConfig &&\r\n this.terminalModel.terminalConfig.isGrabNGo\r\n ) {\r\n return this.terminalModel.terminalConfig.posLayoutKeyForAutoServeID;\r\n } else if (\r\n this.terminalModel.terminalConfig &&\r\n this.terminalModel.terminalConfig.sessionID &&\r\n this.terminalModel.salesItemHeaders &&\r\n this.terminalModel.posLayout\r\n ) {\r\n const autoItem =\r\n this.sessionOverrideSettings.AutoItemKeys[\r\n this.terminalModel.terminalConfig.sessionID\r\n ] !== undefined\r\n ? this.sessionOverrideSettings.AutoItemKeys[\r\n this.terminalModel.terminalConfig.sessionID\r\n ]\r\n : this.terminalModel.terminalConfig.posLayoutKeyForAutoServeID;\r\n\r\n return this.terminalModel.posLayout.items.some(\r\n (p) =>\r\n p.keyNumber === autoItem &&\r\n this.terminalModel.salesItemHeaders!.some(\r\n (i) => i.salesItemHeaderID === p.salesItemHeaderID\r\n )\r\n )\r\n ? autoItem\r\n : undefined;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n @computed\r\n public get quickSale(): boolean {\r\n if (\r\n this.terminalModel.terminalConfig &&\r\n this.terminalModel.terminalConfig.isGrabNGo\r\n ) {\r\n return this.terminalModel.terminalConfig.quickSale;\r\n } else if (\r\n this.terminalModel.terminalConfig &&\r\n this.terminalModel.terminalConfig.sessionID\r\n ) {\r\n return this.sessionOverrideSettings.QuickSale[\r\n this.terminalModel.terminalConfig.sessionID\r\n ] !== undefined\r\n ? this.sessionOverrideSettings.QuickSale[\r\n this.terminalModel.terminalConfig.sessionID\r\n ]\r\n : this.terminalModel.terminalConfig.quickSale;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @computed\r\n public get useAutoItem(): boolean {\r\n if (\r\n this.terminalModel.terminalConfig &&\r\n this.terminalModel.terminalConfig.sessionID &&\r\n this.sessionOverrideSettings.UseAutoItem[\r\n this.terminalModel.terminalConfig.sessionID\r\n ] !== undefined\r\n ) {\r\n return this.sessionOverrideSettings.UseAutoItem[\r\n this.terminalModel.terminalConfig.sessionID\r\n ];\r\n } else {\r\n return !!this.autoServeKey;\r\n }\r\n }\r\n\r\n public clearSessionSettings() {\r\n this.sessionOverrideSettings = this.emptySessionOverrideSettings;\r\n }\r\n\r\n public async getRosterFilters(): Promise<{\r\n homerooms: Homeroom[];\r\n gradeLevels: GradeLevel[];\r\n }> {\r\n let homerooms: Homeroom[] = [];\r\n let gradeLevels: GradeLevel[] = [];\r\n\r\n const students = await this.rootStore.db.getAll(\r\n ObjectStores.Patron\r\n );\r\n\r\n if (this.terminalModel.homerooms.length) {\r\n homerooms = this.terminalModel.homerooms.filter((h) =>\r\n students.some((s) => s.homeRoomID === h.id)\r\n );\r\n }\r\n\r\n homerooms.unshift({ description: \"All Classes\" });\r\n\r\n if (this.terminalModel.gradeLevels.length) {\r\n gradeLevels = this.terminalModel.gradeLevels.filter((g) =>\r\n students.some((s) => s.gradeID === g.id)\r\n );\r\n }\r\n\r\n gradeLevels.unshift({ description: \"All Grades\" });\r\n\r\n return { homerooms, gradeLevels };\r\n }\r\n\r\n public getAutoItem(patronTypeID: number): AutoItem | undefined {\r\n const { terminalConfig, salesItemHeaders } = this.terminalModel;\r\n const { activePOSSession } = this.terminalStateModel;\r\n let autoItem: AutoItem | undefined;\r\n\r\n if (terminalConfig) {\r\n if (this.autoServeKey && this.useAutoItem) {\r\n const layoutItem = this.terminalModel.posLayout!.items.find(\r\n (i) =>\r\n i.keyNumber === this.autoServeKey &&\r\n (i.patronTypeID === patronTypeID || i.patronTypeID === null)\r\n );\r\n\r\n if (layoutItem) {\r\n const salesItem = salesItemHeaders!.find(\r\n (s) => s.salesItemHeaderID === layoutItem!.salesItemHeaderID\r\n );\r\n if (salesItem && salesItem!.hasItemPrice) {\r\n autoItem = { salesItem, layoutItem };\r\n }\r\n }\r\n } else if (terminalConfig.isGrabNGo && activePOSSession) {\r\n const grabNGoCOnfig = terminalConfig.grabNGoAutoItems.find(\r\n (i) => i.dsSessionID === activePOSSession!.sessionID\r\n );\r\n\r\n if (grabNGoCOnfig && this.terminalModel.posLayout) {\r\n const layoutItem = this.terminalModel.posLayout.items.find(\r\n (i) =>\r\n i.keyNumber === grabNGoCOnfig.layoutItemKeyNumber &&\r\n (i.patronTypeID === patronTypeID || i.patronTypeID === null)\r\n );\r\n\r\n if (layoutItem && salesItemHeaders) {\r\n const salesItem = salesItemHeaders.find(\r\n (s) => s.salesItemHeaderID === layoutItem.salesItemHeaderID\r\n );\r\n if (salesItem && salesItem.hasItemPrice) {\r\n autoItem = { salesItem, layoutItem };\r\n }\r\n }\r\n }\r\n return autoItem;\r\n }\r\n }\r\n\r\n return autoItem;\r\n }\r\n\r\n public getEffectivePriceDateID = (): number | undefined => {\r\n let effectivePriceDateID;\r\n const serviceDate = new Date(this.terminalModel.serviceDate);\r\n\r\n const priceDates = this.terminalModel.priceDates\r\n .filter((pd) => new Date(pd.effectiveDate) <= serviceDate)\r\n .sort((a, b) => {\r\n const aDate = new Date(a.effectiveDate);\r\n const bDate = new Date(b.effectiveDate);\r\n\r\n if (aDate < bDate) {\r\n return 1;\r\n }\r\n\r\n if (aDate > bDate) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (priceDates.length) {\r\n effectivePriceDateID = priceDates[0].effectiveDateID;\r\n }\r\n\r\n return effectivePriceDateID;\r\n };\r\n\r\n public getTerminalPosLimit(\r\n itemGroupTypeID: number | undefined,\r\n student: Student\r\n ): TerminalPosLimit | undefined {\r\n const { posLimits } = this.terminalModel;\r\n\r\n const systemPosLimit = posLimits.find(\r\n (x) =>\r\n !x.schoolTypeID &&\r\n !x.schoolID &&\r\n x.itemGroupTypeID === itemGroupTypeID &&\r\n x.patronTypeID === student.patronTypeID\r\n );\r\n\r\n const schoolTypePosLimit = posLimits.find(\r\n (x) =>\r\n x.schoolTypeID === student.schoolTypeID &&\r\n x.itemGroupTypeID === itemGroupTypeID &&\r\n x.patronTypeID === student.patronTypeID\r\n );\r\n\r\n const schoolPosLimit = posLimits.find(\r\n (x) =>\r\n x.schoolID === student.schoolID &&\r\n x.itemGroupTypeID === itemGroupTypeID &&\r\n x.patronTypeID === student.patronTypeID\r\n );\r\n\r\n let posLimit = schoolPosLimit || schoolTypePosLimit || systemPosLimit;\r\n\r\n if (posLimit) {\r\n if (schoolTypePosLimit) {\r\n posLimit = this.mergePosLimit(posLimit, schoolTypePosLimit);\r\n }\r\n\r\n if (systemPosLimit) {\r\n posLimit = this.mergePosLimit(posLimit, systemPosLimit);\r\n }\r\n }\r\n\r\n return posLimit;\r\n }\r\n\r\n public setMealCombining = (sessionID: number, student: Student) => {\r\n const { transactionStore } = this.rootStore;\r\n let combination: MealCombination | undefined;\r\n\r\n if (\r\n this.terminalModel!.mealCombining &&\r\n transactionStore.isEligibleForCombining(\r\n this.terminalModel!.salesItemSetup!.allowMealCombiningForAllPatronTypes,\r\n student\r\n )\r\n ) {\r\n combination = this.terminalModel!.mealCombining.find(\r\n (x) =>\r\n x.configurationTypeText === \"Grade\" &&\r\n x.sessionID === sessionID &&\r\n x.gradeLevelID === student.gradeID\r\n );\r\n\r\n if (!combination) {\r\n combination = this.terminalModel!.mealCombining.find(\r\n (x) =>\r\n x.configurationTypeText === \"SchoolType\" &&\r\n x.sessionID === sessionID &&\r\n x.schoolTypeID === this.terminalModel!.terminal!.schoolTypeID\r\n );\r\n }\r\n\r\n if (!combination) {\r\n combination = this.terminalModel!.mealCombining.find(\r\n (x) =>\r\n x.configurationTypeText === \"System\" && x.sessionID === sessionID\r\n );\r\n }\r\n }\r\n\r\n transactionStore.mealCombining = combination;\r\n };\r\n\r\n public enableTrainingMode = async () => {\r\n await this.rootStore.studentStore.setPrevBalance(false);\r\n this.trainingMode = true;\r\n };\r\n\r\n public disableTrainingMode = async () => {\r\n let start = async () => {};\r\n\r\n await start()\r\n .then(async () => {\r\n await this.rootStore.transactionStore.clearTrainingModeTransactions();\r\n })\r\n .then(async () => {\r\n await this.rootStore.studentStore.setPrevBalance(true);\r\n })\r\n .then(async () => {\r\n this.rootStore.studentStore.clearPendingStudent();\r\n this.rootStore.studentStore.clearPreviousStudent();\r\n await this.rootStore.studentStore.clearStudent();\r\n await this.rootStore.studentStore.clearBufferedStudents();\r\n this.rootStore.studentStore.clearSearch(true);\r\n this.rootStore.transactionStore.sessionCounts = undefined;\r\n })\r\n .then(async () => {\r\n this.trainingMode = false;\r\n })\r\n .then(async () => {\r\n window.location.reload();\r\n });\r\n };\r\n\r\n public toggleTrainingMode = async () => {\r\n if (this.trainingMode) {\r\n await this.disableTrainingMode();\r\n } else {\r\n await this.enableTrainingMode();\r\n }\r\n };\r\n\r\n private mergePosLimit(\r\n existing: TerminalPosLimit,\r\n merge: TerminalPosLimit\r\n ): TerminalPosLimit {\r\n const copy = { ...existing };\r\n copy.freePrepaidLimit = copy.freePrepaidLimit || merge.freePrepaidLimit;\r\n copy.freePurchaseLimit = copy.freePurchaseLimit || merge.freePurchaseLimit;\r\n copy.reducedPrepaidLimit =\r\n copy.reducedPrepaidLimit || merge.reducedPrepaidLimit;\r\n copy.reducedPurchaseLimit =\r\n copy.reducedPurchaseLimit || merge.reducedPurchaseLimit;\r\n copy.paidPrepaidLimit = copy.paidPrepaidLimit || merge.paidPrepaidLimit;\r\n copy.paidPurchaseLimit = copy.paidPurchaseLimit || merge.paidPurchaseLimit;\r\n\r\n return copy;\r\n }\r\n\r\n private generatePosSession(sessionID: number): PosSession {\r\n const {\r\n auth: { sessionData }\r\n } = this.rootStore.authStore;\r\n const { userID } = sessionData!;\r\n const { terminal } = this.terminalModel;\r\n const { schoolID, terminalID } = terminal!;\r\n\r\n return {\r\n posSessionGUID: Guid.raw(),\r\n servingDay: this.getServingDay(),\r\n sessionID,\r\n schoolID,\r\n terminalID,\r\n userID,\r\n loginTime: new Date(),\r\n operatingSystem: osName\r\n };\r\n }\r\n\r\n private generatePosSessionWithDay(sessionID: number, day: Date): PosSession {\r\n const {\r\n auth: { sessionData }\r\n } = this.rootStore.authStore;\r\n const { userID } = sessionData!;\r\n const { terminal } = this.terminalModel;\r\n const { schoolID, terminalID } = terminal!;\r\n const formattedServiceDate = formatServiceDate(day);\r\n\r\n return {\r\n posSessionGUID: Guid.raw(),\r\n servingDay: formattedServiceDate,\r\n sessionID,\r\n schoolID,\r\n terminalID,\r\n userID,\r\n loginTime: new Date(),\r\n operatingSystem: osName\r\n };\r\n }\r\n}\r\n","import { observable } from \"mobx\";\r\n\r\nexport interface BoltCardResponseModel {\r\n amount: string;\r\n authcode: string;\r\n avsresp: string;\r\n batchid: string;\r\n cvvresp: string;\r\n expiry: string;\r\n merchid: string;\r\n name: string;\r\n orderid: string;\r\n respcode: string;\r\n respproc: string;\r\n respstat: string;\r\n resptext: string;\r\n retref: string;\r\n token: string;\r\n cardType: string;\r\n emvTagData: string;\r\n}\r\n\r\nexport interface BoltEmvTagData {\r\n AIN: string;\r\n \"Application Label\": string;\r\n \"Entry method\": string;\r\n IAD: string;\r\n Mode: string;\r\n \"Network Label\": string;\r\n PIN: string;\r\n Signature: string;\r\n TSI: string;\r\n TVR: string;\r\n}\r\n\r\nexport default class BoltAuthModel {\r\n @observable\r\n public boltSessionKey: string = \"\";\r\n}\r\n","import { action, reaction, observable } from \"mobx\";\r\nimport { checkAuthorization } from \"../utils\";\r\nimport RootStore from \"./RootStore\";\r\nimport { Logger } from \"../utils/logger\";\r\nimport BoltAuthModel, { BoltCardResponseModel } from \"../models/BoltAuthModel\";\r\n\r\nexport const jsonContentType = \"application/json; charset=utf-8\";\r\n\r\nexport default class CardConnectStore {\r\n @observable\r\n public boltAuth: BoltAuthModel = new BoltAuthModel();\r\n @observable\r\n public authInFlight: boolean = false;\r\n @observable\r\n public cancelInFlight: boolean = false;\r\n @observable\r\n public priorAuthInFlight: boolean = false;\r\n @observable\r\n public approved: boolean = false;\r\n @observable\r\n public statusMessage: string = \"\";\r\n @observable\r\n public errorMessage: string = \"\";\r\n @observable\r\n public boltResponse: BoltCardResponseModel | null = null;\r\n @observable\r\n public authAmount: number = 0;\r\n @observable\r\n public isManualEntry: boolean = false;\r\n public rootStore: RootStore;\r\n private logger: Logger;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n this.logger = rootStore.logger;\r\n\r\n const boltAuth = sessionStorage.getItem(\"boltAuth\");\r\n const priorAuthInFlight = sessionStorage.getItem(\"priorAuthInFlight\");\r\n\r\n if (boltAuth) {\r\n this.boltAuth = Object.assign({ ...this.boltAuth }, JSON.parse(boltAuth));\r\n }\r\n\r\n if (priorAuthInFlight) {\r\n this.priorAuthInFlight = this.priorAuthInFlight =\r\n JSON.parse(priorAuthInFlight);\r\n }\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.boltAuth,\r\n () => {\r\n if (this.boltAuth) {\r\n sessionStorage.setItem(\"boltAuth\", JSON.stringify(this.boltAuth));\r\n } else {\r\n sessionStorage.removeItem(\"boltAuth\");\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.authInFlight,\r\n () => {\r\n if (this.authInFlight) {\r\n sessionStorage.setItem(\r\n \"priorAuthInFlight\",\r\n JSON.stringify(this.authInFlight)\r\n );\r\n } else {\r\n sessionStorage.removeItem(\"priorAuthInFlight\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n private setError(errorMessage: string) {\r\n const lowerMessage = errorMessage.toLowerCase();\r\n if (lowerMessage.indexOf(\"*error* \") === 0) {\r\n errorMessage = errorMessage.substring(8);\r\n\r\n // Additional information based on specific messages.\r\n if (lowerMessage.indexOf(\"no request queue\") >= 0) {\r\n errorMessage +=\r\n \". Please check your CardPointe Integrated Terminal to make sure it's powered on, \" +\r\n \"and that it's ready to handle requests.\";\r\n }\r\n }\r\n this.errorMessage = errorMessage;\r\n this.statusMessage = \"\";\r\n }\r\n\r\n private handleResponse(response: BoltCardResponseModel) {\r\n if (!this.isManualEntry && !!response.emvTagData) {\r\n const emvTagObject = JSON.parse(response.emvTagData);\r\n if (emvTagObject[\"Network Label\"]) {\r\n response.cardType = emvTagObject[\"Network Label\"]!.substring(0, 20);\r\n } else if (emvTagObject[\"Application Label\"]) {\r\n response.cardType = emvTagObject[\"Application Label\"]!.substring(0, 20);\r\n } else {\r\n response.cardType = \"Unknown\";\r\n }\r\n response.emvTagData = \"\";\r\n } else {\r\n response.cardType = \"Unknown\";\r\n }\r\n\r\n this.boltResponse = response;\r\n\r\n if (response.respstat === \"A\") {\r\n // Setting this triggers a subscription in CreditCardAuth.tsx that\r\n // will call the \"handleCardComplete\" in CashCheck.tsx.\r\n this.approved = true;\r\n } else {\r\n this.errorMessage = `Transaction was DECLINED. Gateway response was: ${response.resptext}`;\r\n }\r\n }\r\n\r\n private getNewOrderID = (): string => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminal }\r\n }\r\n } = this.rootStore;\r\n const date = new Date();\r\n const datePart =\r\n date.getFullYear().toString() +\r\n this.pad2(date.getMonth() + 1) +\r\n this.pad2(date.getDate()) +\r\n this.pad2(date.getHours()) +\r\n this.pad2(date.getMinutes()) +\r\n this.pad2(date.getSeconds());\r\n const terminalID = terminal!.terminalID.toString();\r\n return \"BOLT-\" + terminalID + \"-\" + datePart;\r\n };\r\n\r\n private pad2 = (n: number): string => {\r\n return n < 10 ? \"0\" + n.toString() : n.toString();\r\n };\r\n\r\n @action\r\n public restart() {\r\n this.statusMessage = \"Initializing... Please Wait...\";\r\n this.errorMessage = \"\";\r\n this.boltResponse = null;\r\n this.approved = false;\r\n\r\n if (!!this.boltAuth.boltSessionKey) {\r\n this.authCard();\r\n } else {\r\n this.getSessionKey().then(() => {\r\n if (!!this.boltAuth.boltSessionKey) {\r\n this.authCard();\r\n }\r\n });\r\n }\r\n }\r\n\r\n @action\r\n public start(authAmount: number, isManualEntry: boolean) {\r\n this.authAmount = authAmount;\r\n this.isManualEntry = isManualEntry;\r\n this.restart();\r\n }\r\n\r\n @action\r\n public initialize(clearMessage: boolean) {\r\n this.authAmount = 0;\r\n this.getSessionKey().then(() => {\r\n if (!this.authInFlight && sessionStorage.getItem(\"priorAuthInFlight\")) {\r\n sessionStorage.removeItem(\"priorAuthInFlight\");\r\n }\r\n if (!!this.boltAuth.boltSessionKey) {\r\n this.sendIdleMessage(clearMessage);\r\n }\r\n });\r\n }\r\n\r\n @action\r\n public getSessionKey = async () => {\r\n try {\r\n this.boltAuth.boltSessionKey = \"\";\r\n this.statusMessage = \"Obtaining Session Key... Please Wait...\";\r\n this.logger.logMethodStart(\"CardConnectStore.getSessionKey\");\r\n const response = await this.fetchFromBoltProxy(\"/v2/connect\", {\r\n force: true\r\n });\r\n\r\n if (response.ok && checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.logger.logFetchData(\"CardConnectStore.getSessionKey\", data);\r\n\r\n const isError = data.toLowerCase().indexOf(\"*error* \") === 0;\r\n if (isError) {\r\n this.setError(data);\r\n } else {\r\n if (data.length === 32) {\r\n const boltAuth = { ...this.boltAuth };\r\n boltAuth.boltSessionKey = data;\r\n this.boltAuth = boltAuth;\r\n } else {\r\n this.setError(\r\n \"The CardPointe SessionKey obtained was not valid. Please try again.\"\r\n );\r\n }\r\n }\r\n } else {\r\n this.setError(\r\n \"Unable to start a CardPointe Integrated Terminal session at this time. Please try again.\"\r\n );\r\n }\r\n } catch {\r\n this.setError(\r\n \"An error was encountered why attempting to start a CardPointe Integrated Terminal session.\"\r\n );\r\n }\r\n this.logger.logMethodEnd(\"CardConnectStore.getSessionKey\");\r\n };\r\n\r\n @action\r\n public authCard = async () => {\r\n const {\r\n terminalStore: { terminalModel },\r\n studentStore: { studentModel }\r\n } = this.rootStore;\r\n try {\r\n this.authInFlight = true;\r\n this.statusMessage = `$${this.authAmount.toFixed(\r\n 2\r\n )} will be paid by credit card. Please complete this transaction by ${\r\n this.isManualEntry\r\n ? \"following the prompts on your CardConnect CardPointe Integrated Terminal.\"\r\n : \"scanning or swiping the card using your CardConnect CardPointe Integrated Terminal.\"\r\n }`;\r\n\r\n // Note that the amount is rounded due to a weird glitch where\r\n // $9.96 * 100 = 996.000000000001 somehow. Possibly happens on\r\n // other numbers too, but I noticed it on that. So weird.\r\n\r\n this.logger.logMethodStart(\"CardConnectStore.authCard\");\r\n const response = await this.fetchFromBoltProxy(\r\n this.isManualEntry ? \"/v3/authManual\" : \"/v3/authCard\",\r\n {\r\n amount: Math.round(this.authAmount * 100),\r\n orderId: this.getNewOrderID(),\r\n includeSignature: false,\r\n includeAmountDisplay: true,\r\n clearDisplay: 100,\r\n confirmAmount: false,\r\n beep: false,\r\n aid: \"credit\",\r\n includeAVS: this.isManualEntry,\r\n includeCVV: true,\r\n capture: true,\r\n userFields: {\r\n source: \"eTrition Browser POS\",\r\n school: terminalModel.terminal!.schoolName,\r\n terminal: terminalModel.terminal!.terminalName,\r\n patron: studentModel.student!.patronID\r\n ? studentModel.student!.patronNumber\r\n : \"NO-ID \" +\r\n (studentModel.student!.isStudent ? \"Student\" : \"Non-Student\")\r\n }\r\n }\r\n );\r\n\r\n this.authInFlight = false;\r\n\r\n if (response.ok && checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.logger.logFetchData(\"CardConnectStore.authCard\", data);\r\n\r\n const isError = data.toLowerCase().indexOf(\"*error* \") === 0;\r\n if (isError) {\r\n const error = data.toLowerCase();\r\n if (error.indexOf(\"session key for hsn\") > 0) {\r\n this.getSessionKey();\r\n } else if (error.indexOf(\"is already in use\") > 0) {\r\n this.cancelCard(true, null);\r\n } else {\r\n this.setError(data);\r\n this.sendIdleMessage(false);\r\n }\r\n } else {\r\n const response: BoltCardResponseModel = JSON.parse(data);\r\n console.log(response);\r\n this.handleResponse(response);\r\n this.sendIdleMessage(false);\r\n }\r\n }\r\n } catch {\r\n // Was previously setting authInFlight to false on error. The problem is,\r\n // we don't know what caused the error. The Bolt Terminal (CardPointe Integrated Terminal) may actually be\r\n // waiting for a credit card due to the auth service call, and we need\r\n // this flag to know that we should cancel any pending InFlight calls.\r\n // this.authInFlight = false;\r\n\r\n this.setError(\r\n \"An error was encountered why attempting to initiate a credit card authorization.\"\r\n );\r\n }\r\n this.logger.logMethodEnd(\"CardConnectStore.authCard\");\r\n };\r\n\r\n @action\r\n public cancelCard = async (retry: boolean, onHide: (() => void) | null) => {\r\n try {\r\n this.cancelInFlight = true;\r\n this.logger.logMethodStart(\"CardConnectStore.cancelCard\");\r\n this.statusMessage = retry\r\n ? \"Initializing... Please Wait...\"\r\n : \"Cancelling... Please Wait...\";\r\n\r\n const response = await this.fetchFromBoltProxy(\"/v1/cancel\", {});\r\n this.cancelInFlight = false;\r\n\r\n if (response.ok && checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.logger.logFetchData(\"CardConnectStore.cancelCard\", data);\r\n\r\n if (retry) {\r\n this.authCard();\r\n } else {\r\n this.sendIdleMessage(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }\r\n }\r\n } catch {\r\n this.cancelInFlight = false;\r\n this.setError(\r\n \"An error was encountered why attempting to cancel a credit card session.\"\r\n );\r\n }\r\n\r\n this.logger.logMethodEnd(\"CardConnectStore.cancelCard\");\r\n };\r\n\r\n @action\r\n public sendIdleMessage = async (clearMessage: boolean) => {\r\n const idleMessage =\r\n this.rootStore.terminalStore.terminalModel.salesItemSetup!\r\n .boltIdleMessage;\r\n const messageToShow = clearMessage ? \"\" : idleMessage;\r\n const hasIdleMessage = !!idleMessage;\r\n\r\n if (hasIdleMessage) {\r\n try {\r\n this.logger.logMethodStart(\"CardConnectStore.sendIdleMessage\");\r\n\r\n const response = await this.fetchFromBoltProxy(\"/v2/display\", {\r\n text: messageToShow\r\n });\r\n\r\n // We don't really care about the response. This is just a side event\r\n // that happens when we initialize, and after each transaction.\r\n\r\n if (response.ok && checkAuthorization(response, this.rootStore)) {\r\n const data = await response.json();\r\n this.logger.logFetchData(\"CardConnectStore.sendIdleMessage\", data);\r\n }\r\n } catch {\r\n // Ignore errors. This isn't a mission-critical thing anyway.\r\n }\r\n }\r\n\r\n this.logger.logMethodEnd(\"CardConnectStore.sendIdleMessage\");\r\n };\r\n\r\n private fetchFromBoltProxy = (endpoint: string, requestBody: object) => {\r\n const {\r\n terminalStore: { terminalModel }\r\n } = this.rootStore;\r\n Object.assign(requestBody, {\r\n merchantId: terminalModel.salesItemSetup!.boltMID,\r\n hsn: terminalModel.terminal!.boltTerminalHSN\r\n });\r\n\r\n return fetch(`${this.rootStore.config.apiPath}/BP/ProxyCardConnectBolt`, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.rootStore.authStore.bearerToken,\r\n \"X-CardConnect-Endpoint\": endpoint,\r\n \"X-CardConnect-SessionKey\": this.boltAuth.boltSessionKey,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify(requestBody)\r\n });\r\n };\r\n}\r\n","import RootStore from \"../stores/RootStore\";\r\n\r\nexport class Logger {\r\n private rootStore: RootStore;\r\n\r\n constructor(rootStore: RootStore) {\r\n this.rootStore = rootStore;\r\n }\r\n\r\n public logMethodStart(method: string) {\r\n if (this.rootStore.logMessages) {\r\n console.log(`[Method Start]: ${method}`);\r\n }\r\n }\r\n\r\n public logMethodEnd(method: string) {\r\n if (this.rootStore.logMessages) {\r\n console.log(`[Method End]: ${method}`);\r\n }\r\n }\r\n\r\n public logFetchData(method: string, data: any) {\r\n if (this.rootStore.logMessages) {\r\n console.log(`[Fetch]: Response ${method}`, data);\r\n }\r\n }\r\n\r\n public logBadResponse(response: Response) {\r\n if (this.rootStore.logMessages) {\r\n console.error(`[Response Error]:`, response);\r\n }\r\n }\r\n\r\n public log(...messages: string[]) {\r\n if (this.rootStore.logMessages) {\r\n console.log(\"[Log]:\", ...messages);\r\n }\r\n }\r\n\r\n public error(...messages: string[]) {\r\n if (this.rootStore.logMessages) {\r\n console.error(\"[Error]:\", ...messages);\r\n }\r\n }\r\n}\r\n","export default class ConfigModel {\r\n public webPath: string = \"\";\r\n public apiPath: string = \"\";\r\n public allowOffline: boolean = false;\r\n public useIdentityServer: boolean = false;\r\n public identityServerBaseURL: string = \"\";\r\n}\r\n","import { action, computed, observable, reaction } from \"mobx\";\r\nimport IndexedDBService from \"../database/indexedDBService\";\r\nimport AuthStore from \"./AuthStore\";\r\nimport { jsonContentType } from \"./AuthStore\";\r\nimport StudentStore from \"./StudentStore\";\r\nimport TerminalStore from \"./TerminalStore\";\r\nimport TransactionStore from \"./TransactionStore\";\r\nimport CardConnectStore from \"./CardConnectStore\";\r\nimport { Logger } from \"../utils/logger\";\r\nimport { isNullOrUndefined } from \"util\";\r\nimport ConfigModel from \"../models/ConfigModel\";\r\nimport { Guid } from \"guid-typescript\";\r\nimport { getFormattedToday } from \"../utils\";\r\nimport history from \"../history\";\r\nimport { UserStatus } from \"../models/AuthModel\";\r\n\r\nexport interface AllStores {\r\n rootStore: RootStore;\r\n}\r\n\r\n// IMPORTANT! We should update the version number any time we make a\r\n// change that has the potential to break things or cause problems with\r\n// a mismatch of the API in use, or when a prior bug was introduced during\r\n// a sprint but has been fixed, or when a new version is released to the\r\n// public (the new version being released with an eTrition update). The\r\n// version set here MUST EXACTLY MATCH the version in \"version.json\" or\r\n// else the user will be prompted about an update every time they log in.\r\n// So basically, when updating this version, always update in both places.\r\n// Also, please use the format YEAR(xxxx).MONTH(xx).DAY(xx).REVISION(x).\r\n// Examples: '2019.05.22.0' or '2019.05.22.1' or '2021.01.01.0' etc.\r\nconst thisVersion = \"2025.02.17.0\";\r\n\r\nconst syncSiteDataSeconds = 300;\r\nconst syncStudentSeconds = 60;\r\nconst syncTransactionSeconds = 60;\r\nconst syncUserSeconds = 300;\r\nconst cacheList = [\"user-cache\", \"site-data-cache\"];\r\n\r\nconst birthdaySounds = [\r\n \"applause\",\r\n \"longhorn\",\r\n \"shorthorn\",\r\n \"harmony1\",\r\n \"harmony2\",\r\n \"bossa1\",\r\n \"bossa2\",\r\n \"kidbday\",\r\n \"loudbday\"\r\n];\r\n\r\nexport default class RootStore {\r\n @observable\r\n public config: ConfigModel = new ConfigModel();\r\n @observable\r\n public hasError: boolean = false;\r\n @observable\r\n public logMessages: boolean;\r\n @observable\r\n public online: boolean;\r\n @observable\r\n public eTritionOnline: boolean;\r\n @observable\r\n public logoutLostConnection: boolean = false;\r\n @observable\r\n public logoutActivityTimeout: boolean = false;\r\n @observable\r\n public showChangeDayMessage: boolean = false;\r\n @observable\r\n public storageLimitValue: number = 0;\r\n public changeDayWhenOffline: boolean = true;\r\n public authStore: AuthStore;\r\n public studentStore: StudentStore;\r\n public terminalStore: TerminalStore;\r\n public transactionStore: TransactionStore;\r\n public cardConnectStore: CardConnectStore;\r\n public logger: Logger;\r\n public db: IndexedDBService;\r\n private pingTimer: NodeJS.Timeout | undefined;\r\n private siteSyncTimer: NodeJS.Timeout | undefined;\r\n private studentSyncTimer: NodeJS.Timeout | undefined;\r\n private transactionSyncTimer: NodeJS.Timeout | undefined;\r\n private userSyncTimer: NodeJS.Timeout | undefined;\r\n private soundPlayer: HTMLAudioElement | undefined;\r\n private soundPlayer2: HTMLAudioElement | undefined;\r\n\r\n constructor() {\r\n this.logger = new Logger(this);\r\n this.authStore = new AuthStore(this);\r\n this.studentStore = new StudentStore(this);\r\n this.terminalStore = new TerminalStore(this);\r\n this.transactionStore = new TransactionStore(this);\r\n this.cardConnectStore = new CardConnectStore(this);\r\n this.db = new IndexedDBService(this);\r\n this.online = window.navigator.onLine;\r\n this.eTritionOnline = true;\r\n\r\n if (\"Audio\" in window) {\r\n this.soundPlayer = new Audio();\r\n this.soundPlayer2 = new Audio();\r\n }\r\n\r\n const logMessages = sessionStorage.getItem(\"logMessages\");\r\n\r\n this.logMessages = logMessages\r\n ? JSON.parse(logMessages)\r\n : this.authStore.auth.harrisUser;\r\n\r\n window.addEventListener(\"offline\", () => {\r\n this.stopTimer();\r\n this.online = false;\r\n });\r\n\r\n window.addEventListener(\"online\", () => {\r\n this.online = true;\r\n this.ping().then((_) => {\r\n if (this.authStore.auth.isAuthenticated) {\r\n this.startTimer(false);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public subscribeServerToStore() {\r\n reaction(\r\n () => this.logMessages,\r\n () => {\r\n sessionStorage.setItem(\"logMessages\", JSON.stringify(this.logMessages));\r\n }\r\n );\r\n reaction(\r\n () => this.isOnline,\r\n () => {\r\n const {\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this;\r\n if (this.isOnline) {\r\n this.syncSiteData();\r\n } else if (!this.config.allowOffline) {\r\n if (this.authStore.auth.isAuthenticated) {\r\n this.logoutLostConnection = true;\r\n }\r\n this.authStore.logout();\r\n } else if (\r\n this.changeDayWhenOffline &&\r\n !(terminalConfig && terminalConfig.isGrabNGo)\r\n ) {\r\n this.setServiceDayToToday();\r\n }\r\n }\r\n );\r\n }\r\n\r\n public logError = (\r\n error: string,\r\n componentStack: string,\r\n stackTrace?: string\r\n ) => {\r\n fetch(`${this.config.apiPath}/BP/LogError`, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: this.authStore.bearerToken,\r\n \"content-type\": jsonContentType\r\n },\r\n body: JSON.stringify({\r\n error,\r\n stackTrace,\r\n componentStack\r\n })\r\n });\r\n };\r\n\r\n @action\r\n public getUserStatus = async (userName: string) => {\r\n this.logger.logMethodStart(\"getUserStatus\");\r\n let statusObj: UserStatus | null = null;\r\n\r\n try {\r\n const body = JSON.stringify({\r\n userName\r\n });\r\n const response = await fetch(`${this.config.apiPath}/BP/GetUserStatus`, {\r\n method: \"POST\",\r\n headers: {\r\n \"content-type\": jsonContentType\r\n },\r\n body\r\n });\r\n\r\n const status = await response.json();\r\n statusObj = JSON.parse(JSON.stringify(status));\r\n this.logger.logFetchData(\"getUserStatus\", statusObj);\r\n\r\n localStorage.setItem(\"oidc_state\", statusObj!.state);\r\n localStorage.setItem(\"oidc_nonce\", statusObj!.nonce);\r\n } catch (error) {\r\n this.logger.error(error);\r\n }\r\n\r\n this.logger.logMethodEnd(\"getUserStatus\");\r\n return statusObj;\r\n };\r\n\r\n public startTimer = (pingOnly: boolean) => {\r\n this.stopTimer();\r\n this.pingTimer = setInterval(this.ping, 30 * 1000);\r\n\r\n if (!pingOnly) {\r\n this.siteSyncTimer = setInterval(\r\n this.syncSiteData,\r\n syncSiteDataSeconds * 1000\r\n );\r\n this.studentSyncTimer = setInterval(\r\n this.syncStudents,\r\n syncStudentSeconds * 1000\r\n );\r\n this.transactionSyncTimer = setInterval(\r\n this.syncTransactions,\r\n syncTransactionSeconds * 1000\r\n );\r\n this.userSyncTimer = setInterval(this.syncUsers, syncUserSeconds * 1000);\r\n }\r\n };\r\n\r\n public stopTimer = () => {\r\n if (this.pingTimer) {\r\n clearInterval(this.pingTimer);\r\n this.pingTimer = undefined;\r\n }\r\n\r\n if (this.siteSyncTimer) {\r\n clearInterval(this.siteSyncTimer);\r\n this.siteSyncTimer = undefined;\r\n }\r\n\r\n if (this.studentSyncTimer) {\r\n clearInterval(this.studentSyncTimer);\r\n this.studentSyncTimer = undefined;\r\n }\r\n\r\n if (this.transactionSyncTimer) {\r\n clearInterval(this.transactionSyncTimer);\r\n this.transactionSyncTimer = undefined;\r\n }\r\n\r\n if (this.userSyncTimer) {\r\n clearInterval(this.userSyncTimer);\r\n this.userSyncTimer = undefined;\r\n }\r\n };\r\n\r\n @action\r\n public clearCache = async () => {\r\n // Unsure why, but this method can take ages to complete\r\n // Guessing it is waiting on the service worker\r\n if (\"serviceWorker\" in navigator) {\r\n await Promise.all(cacheList.map((c) => caches.delete(c)));\r\n }\r\n await this.db.deleteDb();\r\n };\r\n\r\n @action\r\n public loadInitialCache = async (isOnline = true) => {\r\n this.logger.logMethodStart(\"loadInitialCache\");\r\n\r\n const { isAuthenticated, customerID } = this.authStore.auth;\r\n\r\n if (isAuthenticated && customerID) {\r\n this.terminalStore.isLoadingSiteData = true;\r\n this.terminalStore.isLoading = true;\r\n\r\n if (this.offlineCustomerID !== customerID) {\r\n await this.clearCache();\r\n }\r\n\r\n localStorage.setItem(\"customerID\", btoa(customerID));\r\n this.authStore.getUsers();\r\n\r\n let students = new Promise((res) => res());\r\n\r\n if (isOnline) {\r\n await this.studentStore.clearSiteStudents();\r\n students = this.studentStore.getSiteStudents();\r\n }\r\n\r\n await this.getSiteData();\r\n await students;\r\n\r\n this.terminalStore.isLoading = false;\r\n this.terminalStore.isLoadingSiteData = false;\r\n }\r\n\r\n this.logger.logMethodEnd(\"loadInitialCache\");\r\n };\r\n\r\n public get offlineCustomerID(): string {\r\n return atob(localStorage.getItem(\"customerID\") || \"\");\r\n }\r\n\r\n @action\r\n public ping = async () => {\r\n try {\r\n if (this.online) {\r\n const response = await fetch(`${this.config.apiPath}/BP/Ping`);\r\n this.eTritionOnline = response.ok;\r\n\r\n if (\r\n this.eTritionOnline &&\r\n !this.authStore.auth.authToken &&\r\n this.authStore.auth.customerID &&\r\n this.authStore.auth.sessionData\r\n ) {\r\n await this.authStore.goOnline();\r\n }\r\n }\r\n } catch {\r\n this.eTritionOnline = false;\r\n }\r\n };\r\n\r\n @computed\r\n public get isOnline(): boolean {\r\n return (\r\n this.online && this.eTritionOnline && !this.terminalStore.trainingMode\r\n );\r\n }\r\n\r\n @computed\r\n public get isOnlineExcludingTrainingMode(): boolean {\r\n return this.online && this.eTritionOnline;\r\n }\r\n\r\n public isToday(someDate?: Date): boolean {\r\n if (\r\n typeof someDate === \"object\" &&\r\n someDate !== null &&\r\n \"getDate\" in someDate\r\n ) {\r\n const today = new Date();\r\n return (\r\n someDate.getDate() == today.getDate() &&\r\n someDate.getMonth() == today.getMonth()\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n public async getLatestVersion() {\r\n return await this.getVersionFromFile();\r\n }\r\n\r\n public getCurrentVersion() {\r\n return thisVersion;\r\n }\r\n\r\n @action\r\n public playSound = async (\r\n sound: string,\r\n soundPlayer: HTMLAudioElement | undefined,\r\n override: boolean\r\n ): Promise => {\r\n const {\r\n studentStore,\r\n terminalStore: {\r\n terminalModel: { terminalConfig }\r\n }\r\n } = this;\r\n\r\n const playSound =\r\n soundPlayer &&\r\n (!terminalConfig || terminalConfig.enableSoundsInWebPOS || override) &&\r\n !studentStore.serveAllModel.isServeAllMode;\r\n\r\n if (playSound) {\r\n try {\r\n const soundFile = \"./audio/\" + sound + \".mp3\";\r\n soundPlayer!.src = soundFile;\r\n await soundPlayer!.play();\r\n } catch {\r\n //\r\n }\r\n }\r\n };\r\n\r\n @action\r\n public playSilence = async (isBirthday: boolean): Promise => {\r\n // An iOS/Safari work-around to \"warm up\" the sound control on a click event,\r\n // so that when we actually want to play the real sound afterwards, it works.\r\n // We do this initially on the button to enter credit mode or a serving session,\r\n // but we also do it in other places too (choosing a student or ending a sale)\r\n // in case the user refreshes the page, because it will need to warm up the\r\n // sound player again first, when that happens.\r\n await this.playSound(\r\n \"silent\",\r\n isBirthday ? this.soundPlayer2 : this.soundPlayer,\r\n !isBirthday\r\n );\r\n };\r\n\r\n @action\r\n public playRegister = async (): Promise => {\r\n await this.playSound(\"register\", this.soundPlayer, false);\r\n };\r\n\r\n @action\r\n public playBuzz = async (): Promise => {\r\n await this.playSound(\"buzz\", this.soundPlayer, false);\r\n };\r\n\r\n @action\r\n public playBirthdaySound = async (): Promise => {\r\n const soundID =\r\n this.terminalStore.terminalModel.terminalConfig!.birthdaySoundID;\r\n\r\n if (soundID >= 1 && soundID <= birthdaySounds.length) {\r\n const soundToPlay = birthdaySounds[soundID - 1];\r\n await this.playSound(soundToPlay, this.soundPlayer2, true);\r\n }\r\n };\r\n\r\n private syncUsers = async () => {\r\n try {\r\n if (\r\n this.isOnline &&\r\n this.authStore.auth.isAuthenticated &&\r\n this.authStore.auth.authToken &&\r\n this.authStore.auth.customerID\r\n ) {\r\n await this.authStore.getUsers();\r\n }\r\n } catch {\r\n // Do Nothing\r\n }\r\n };\r\n\r\n @action\r\n private syncSiteData = async () => {\r\n try {\r\n if (\r\n this.isOnline &&\r\n this.authStore.auth.isAuthenticated &&\r\n this.authStore.auth.customerID\r\n ) {\r\n await this.getSiteData();\r\n }\r\n } catch {\r\n // Do Nothing\r\n }\r\n };\r\n\r\n @action\r\n private syncStudents = async () => {\r\n try {\r\n if (\r\n this.isOnline &&\r\n this.authStore.auth.isAuthenticated &&\r\n this.authStore.auth.customerID\r\n ) {\r\n await this.studentStore.getSiteStudents();\r\n }\r\n } catch {\r\n // Do Nothing\r\n }\r\n };\r\n\r\n @action\r\n private syncTransactions = async () => {\r\n try {\r\n if (\r\n this.isOnline &&\r\n this.authStore.auth.isAuthenticated &&\r\n this.authStore.auth.customerID\r\n ) {\r\n this.transactionStore.sendTransactions();\r\n }\r\n } catch {\r\n // Do Nothing\r\n }\r\n };\r\n\r\n @action\r\n private getSiteData = async () => {\r\n await this.transactionStore.getSiteTransactions();\r\n await this.terminalStore.getSiteData();\r\n };\r\n\r\n public getConfig = async (): Promise => {\r\n const useConfig =\r\n !isNullOrUndefined(process.env.REACT_APP_USE_CONFIG) &&\r\n process.env.REACT_APP_USE_CONFIG.toLowerCase() === \"true\";\r\n\r\n let config: ConfigModel = new ConfigModel();\r\n\r\n if (useConfig) {\r\n try {\r\n const response = await fetch(`config.json?guid=${Guid.raw()}`);\r\n config = await response.json();\r\n localStorage.setItem(\"config.json\", JSON.stringify(config));\r\n } catch {\r\n // When we are offline, we won't be able to load config.json.\r\n // So we check to see if we have put settings into storage.\r\n const cachedConfig = localStorage.getItem(\"config.json\");\r\n config = cachedConfig ? JSON.parse(cachedConfig) : config;\r\n }\r\n }\r\n\r\n config.allowOffline =\r\n useConfig && \"allowOffline\" in config\r\n ? config.allowOffline\r\n : isNullOrUndefined(process.env.REACT_APP_DISABLE_OFFLINE_MODE) ||\r\n process.env.REACT_APP_DISABLE_OFFLINE_MODE.toLowerCase() !== \"true\";\r\n\r\n config.webPath =\r\n useConfig && \"webPath\" in config\r\n ? config.webPath\r\n : process.env.REACT_APP_BASE || \"\";\r\n\r\n config.apiPath =\r\n useConfig && \"apiPath\" in config\r\n ? config.apiPath\r\n : process.env.REACT_APP_BASE_API || \"\";\r\n\r\n config.useIdentityServer =\r\n useConfig && \"useIdentityServer\" in config\r\n ? config.useIdentityServer\r\n : !isNullOrUndefined(process.env.REACT_APP_USE_IDENTITY_SERVER) &&\r\n process.env.REACT_APP_USE_IDENTITY_SERVER.toLowerCase() === \"true\";\r\n\r\n config.identityServerBaseURL =\r\n useConfig && \"identityServerBaseURL\" in config\r\n ? config.identityServerBaseURL\r\n : process.env.REACT_APP_IDENTITY_BASE_URL || \"\";\r\n\r\n if (config.identityServerBaseURL.endsWith(\"/\"))\r\n config.identityServerBaseURL = config.identityServerBaseURL.slice(0, -1);\r\n\r\n // NOTE to developers: The default config.json is set up for SaaS, so your\r\n // .env.development.local probably has REACT_APP_USE_CONFIG set to false.\r\n // In order to enable the Identity Server for local testing, add these\r\n // two lines to your .env.development.local file:\r\n //\r\n // REACT_APP_USE_IDENTITY_SERVER=true\r\n // REACT_APP_IDENTITY_BASE_URL=https://dev-identity.etrition.com\r\n\r\n return config;\r\n };\r\n\r\n private getVersionFromFile = async (): Promise => {\r\n try {\r\n // version.json is used for determining if there is a newer version\r\n // than the code stored in the worker service. We don't need this\r\n // file cached or in the worker service itself, so when we are not\r\n // online, it'll simply return the current RootStore version.\r\n const response = await fetch(`version.json?guid=${Guid.raw()}`);\r\n const versionFile = await response.json();\r\n return versionFile.version;\r\n } catch {\r\n return thisVersion;\r\n }\r\n };\r\n\r\n public setServiceDayToToday = async () => {\r\n if (this.terminalStore.getServingDay() !== getFormattedToday()) {\r\n await this.terminalStore.setServiceDate();\r\n this.changeDayWhenOffline = true;\r\n this.showChangeDayMessage = true;\r\n history.push(\"/\");\r\n }\r\n };\r\n\r\n public validateStorageLimits = async () => {\r\n // This happens whenever we add or remove to IndexedDB.\r\n // However, we also have to call it if the user reloads\r\n // the page entirely, since it won't be set until the\r\n // next DB update otherwise.\r\n await this.db.validateStoreCount(undefined);\r\n };\r\n\r\n public getUriFragment(key: string) {\r\n try {\r\n if (window.location.hash) {\r\n const params = window.location.hash.substring(1).split(\"&\");\r\n for (var i = 0; i < params.length; i++) {\r\n var a = params[i].split(\"=\");\r\n if (a[0] == key) {\r\n return decodeURIComponent(a[1]);\r\n }\r\n }\r\n }\r\n } catch (err) {}\r\n return \"\";\r\n }\r\n}\r\n","import { Provider } from \"mobx-react\";\r\nimport * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport App from \"./components/App\";\r\nimport \"./index.css\";\r\nimport registerServiceWorker from \"./registerServiceWorker\";\r\nimport \"./semantic/dist/semantic.min.css\";\r\nimport RootStore from \"./stores/RootStore\";\r\n\r\nconst rootStore = new RootStore();\r\nrootStore.getConfig().then((config) => {\r\n rootStore.config = config;\r\n\r\n rootStore.ping().then((_) => {\r\n if (rootStore.authStore.auth.isAuthenticated) {\r\n rootStore.startTimer(!rootStore.isOnline);\r\n }\r\n });\r\n\r\n rootStore.subscribeServerToStore();\r\n rootStore.authStore.subscribeServerToStore();\r\n rootStore.studentStore.subscribeServerToStore();\r\n rootStore.terminalStore.subscribeServerToStore();\r\n rootStore.transactionStore.subscribeServerToStore();\r\n rootStore.cardConnectStore.subscribeServerToStore();\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n );\r\n\r\n registerServiceWorker();\r\n});\r\n"],"sourceRoot":""}